From 73f3ce9905d22d5cf321ac1cd954dedd15c1e8c7 Mon Sep 17 00:00:00 2001 From: Github Actions Date: Mon, 21 Oct 2024 04:08:51 +0000 Subject: [PATCH] deploy notes: e52f531cadf8130984180092269dc4511ff4c308 --- .nojekyll | 0 404.html | 50 + AI ML/Expectimax Search/index.html | 91 + .../Markov Decision Process (MDP)/index.html | 91 + AI ML/index.html | 73 + Cargo.lock | 4411 +++++++++++++++++ WSL/WSL2 custom kernel/index.html | 139 + WSL/index.html | 73 + __pub/514CqlmSOL_AC_SL1272.jpg | Bin 0 -> 39149 bytes ...478b2-Kintsugi-Plate.rhorizontal.w700.webp | Bin 0 -> 16160 bytes __pub/Pasted image 20220213095604.png | Bin 0 -> 429897 bytes __pub/Pasted image 20220213102656.png | Bin 0 -> 16636 bytes __pub/Pasted image 20220213112512.png | Bin 0 -> 59457 bytes __pub/Pasted image 20220213151419.png | Bin 0 -> 35759 bytes __pub/Pasted image 20220222190514.png | Bin 0 -> 12122 bytes __pub/Pasted image 20220222190807.png | Bin 0 -> 12114 bytes __pub/Pasted image 20220222190924.png | Bin 0 -> 14266 bytes __pub/Pasted image 20220222191023.png | Bin 0 -> 15308 bytes __pub/Pasted image 20220222191145.png | Bin 0 -> 12671 bytes __pub/Pasted image 20220222191240.png | Bin 0 -> 13143 bytes __pub/Pasted image 20220222191432.png | Bin 0 -> 9876 bytes __pub/Pasted image 20220222191747.png | Bin 0 -> 11733 bytes __pub/Pasted image 20220222192006.png | Bin 0 -> 3954 bytes __pub/Pasted image 20220222192042.png | Bin 0 -> 4003 bytes __pub/Pasted image 20220222192112.png | Bin 0 -> 21117 bytes __pub/Pasted image 20220222192216.png | Bin 0 -> 20946 bytes __pub/Pasted image 20220222192708.png | Bin 0 -> 35068 bytes __pub/Pasted image 20220222192840.png | Bin 0 -> 32770 bytes __pub/Pasted image 20220222193025.png | Bin 0 -> 12132 bytes __pub/Pasted image 20220222193102.png | Bin 0 -> 12025 bytes __pub/Pasted image 20220222193243.png | Bin 0 -> 28198 bytes __pub/Pasted image 20220222193326.png | Bin 0 -> 23594 bytes __pub/Pasted image 20220222193443.png | Bin 0 -> 28203 bytes __pub/Pasted image 20220811124928.png | Bin 0 -> 68638 bytes __pub/Pasted image 20220811125039.png | Bin 0 -> 78583 bytes __pub/Pasted image 20220811125224.png | Bin 0 -> 78583 bytes __pub/Pasted image 20220811125244.png | Bin 0 -> 80407 bytes __pub/Pasted image 20220811125349.png | Bin 0 -> 66282 bytes __pub/Pasted image 20220811125514.png | Bin 0 -> 78336 bytes __pub/Pasted image 20220811125543.png | Bin 0 -> 78336 bytes __pub/Pasted image 20220811125808.png | Bin 0 -> 65258 bytes __pub/Pasted image 20220811125845.png | Bin 0 -> 80218 bytes __pub/Pasted image 20220811125922.png | Bin 0 -> 87805 bytes __pub/Pasted image 20221129095413.png | Bin 0 -> 157160 bytes __pub/Screen Shot 2022-08-11 at 12.13.40.png | Bin 0 -> 215757 bytes __pub/etape-6-kintsugi-sublimez.webp | Bin 0 -> 9210 bytes __pub/index.html | 73 + __pub/istockphoto-1280373274-612x612.jpg | Bin 0 -> 16898 bytes __pub/istockphoto-1280390209-612x612.jpg | Bin 0 -> 25735 bytes __pub/kintsugi-bowl-01.jpg | Bin 0 -> 29134 bytes __pub/kintsukuroi-orig.jpg | Bin 0 -> 41255 bytes __pub/sgx_remote_attestation.png | Bin 0 -> 323087 bytes __pub/standard error of the mean(1).png | Bin 0 -> 70788 bytes __pub/standard error of the mean.png | Bin 0 -> 65734 bytes __pub/water distillation setup.svg | 691 +++ _headers | 2 + android-chrome-192x192.png | Bin 0 -> 8808 bytes android-chrome-512x512.png | Bin 0 -> 25854 bytes android/ADB over TCP inside WSL2/index.html | 102 + .../index.html | 93 + android/android cli setup/index.html | 229 + .../index.html | 228 + android/index.html | 73 + android/linux ADB udev setup/index.html | 99 + android/root phone with magisk/index.html | 102 + apple-touch-icon.png | Bin 0 -> 8210 bytes .../financial instituion/index.html | 91 + .../index.html | 91 + .../index.html | 73 + .../monetary instruments/index.html | 91 + .../money services business (MSB)/index.html | 91 + b l o c k c h a i n/aptos/index.html | 91 + .../bip158 - compact block filters/index.html | 94 + .../btc utreexo - utxo accumulator/index.html | 94 + b l o c k c h a i n/fastpay/index.html | 91 + b l o c k c h a i n/index.html | 73 + b l o c k c h a i n/oasis/index.html | 456 ++ b l o c k c h a i n/sui/index.html | 91 + bootstrap/scss/bootstrap-grid.css | 6 + bootstrap/scss/bootstrap-reboot.css | 7 + bootstrap/scss/bootstrap-utilities.css | 6 + bootstrap/scss/bootstrap.css | 6 + browserconfig.xml | 9 + btc-ln/BOLT 11 - invoices/index.html | 136 + .../index.html | 319 ++ .../index.html | 97 + .../index.html | 146 + .../index.html | 100 + .../index.html | 109 + .../index.html | 94 + btc-ln/hosted channels/index.html | 94 + btc-ln/index.html | 76 + btc-ln/lightning libs/index.html | 94 + btc-ln/lightning network notes/index.html | 94 + btc-ln/lightning rod/index.html | 94 + .../index.html | 303 ++ btc-ln/submarine swaps/index.html | 94 + btc-ln/zero-conf channels/index.html | 97 + combinatorics/index.html | 73 + .../k-combinations of a multiset/index.html | 186 + .../enarx (WASM TEE)/index.html | 162 + .../fortanix rust tutorial/index.html | 370 ++ confidential computing/gramine/index.html | 235 + confidential computing/index.html | 73 + .../intel SGX/SGX lingo/index.html | 410 ++ confidential computing/intel SGX/index.html | 91 + .../intel SGX/overview/index.html | 109 + .../intel SGX/remote attestation/index.html | 203 + .../intel SGX/sealing/index.html | 477 ++ .../intel SGX/secure time/index.html | 109 + confidential computing/intel TDX/index.html | 91 + confidential computing/marblerun/index.html | 98 + confidential computing/mystikos/index.html | 91 + .../remote attestation protocols/index.html | 91 + .../index.html | 91 + .../index.html | 145 + crypto/acme protocol/index.html | 135 + crypto/biscuit authz/index.html | 91 + .../index.html | 97 + crypto/hkdf-sha256/index.html | 355 ++ crypto/index.html | 73 + .../index.html | 94 + .../tls exported keying material/index.html | 104 + crypto/zkdocs/index.html | 91 + design/form design/index.html | 91 + design/index.html | 73 + .../AKS - azure kubernetes service/index.html | 94 + devops/algo wireguard VPN server/index.html | 121 + devops/azure CLI/index.html | 201 + devops/consul/index.html | 91 + devops/deployment strategies/index.html | 91 + devops/docker compose/index.html | 91 + devops/index.html | 73 + devops/k3s/index.html | 91 + devops/kind (kubernetes in docker)/index.html | 91 + devops/kubernetes/index.html | 91 + devops/linkerd/index.html | 91 + devops/minikube/index.html | 91 + devops/nomad/index.html | 91 + devops/o11y/index.html | 91 + devops/o11y/jaeger oss e2e tracing/index.html | 109 + .../1password - secrets automation/index.html | 112 + devops/secrets/doppler/index.html | 109 + devops/secrets/ejson (Shopify)/index.html | 109 + devops/secrets/ejson-kms (AWS)/index.html | 112 + devops/secrets/envkey/index.html | 109 + devops/secrets/fortanix DSM/index.html | 109 + devops/secrets/index.html | 91 + devops/secrets/mozilla SOPS/index.html | 109 + devops/secrets/sops-nix/index.html | 112 + .../sy - share secrets safely/index.html | 112 + devops/service mesh/index.html | 91 + distributed systems/index.html | 73 + .../index.html | 156 + .../(2021) Leaderless Consensus/index.html | 116 + distributed systems/papers/index.html | 91 + .../the siren song of backpressure/index.html | 113 + elasticlunr.min.js | 10 + favicon-16x16.png | Bin 0 -> 980 bytes favicon-32x32.png | Bin 0 -> 1719 bytes favicon.ico | Bin 0 -> 15086 bytes fonts/fira-code-v17-latin-regular.woff2 | Bin 0 -> 21044 bytes fonts/inter-v8-latin-700.woff2 | Bin 0 -> 17592 bytes fonts/source-sans-pro-v19-latin-700.woff2 | Bin 0 -> 12924 bytes .../source-sans-pro-v19-latin-700italic.woff2 | Bin 0 -> 12612 bytes fonts/source-sans-pro-v19-latin-italic.woff2 | Bin 0 -> 12580 bytes fonts/source-sans-pro-v19-latin-regular.woff2 | Bin 0 -> 13036 bytes .../index.html | 94 + fuzzing/fuzzcheck-rs/index.html | 94 + fuzzing/fuzzing/index.html | 91 + fuzzing/index.html | 73 + index.html | 53 + ios/index.html | 73 + ios/ios setup/index.html | 114 + js/elasticlunr.min.js | 10 + js/search.js | 332 ++ keyboards/index.html | 73 + keyboards/moergo glove80/index.html | 97 + lang/ATS/ATS2 Notes/index.html | 411 ++ lang/ATS/Install ATS2/index.html | 134 + lang/ATS/index.html | 91 + lang/flutter/dart lang/index.html | 500 ++ lang/flutter/flutter setup/index.html | 165 + lang/flutter/index.html | 91 + lang/gdb ref/index.html | 124 + lang/index.html | 73 + lang/koka-lang/index.html | 94 + lang/lua/index.html | 367 ++ .../operator fixity and precedence/index.html | 143 + lang/rust/index.html | 91 + lang/rust/optimizing binary size/index.html | 307 ++ lang/rust/rr with rust/index.html | 154 + lang/rust/rust verification tools/index.html | 109 + lang/rust/rust x SGX/index.html | 109 + lang/rust/self-referencing structs/index.html | 112 + lang/rust/sycamore x futures/index.html | 116 + .../index.html | 129 + main.css | 6 + management/index.html | 73 + .../index.html | 94 + misc/arm target triples/index.html | 91 + misc/envsubst/index.html | 115 + misc/git multirepo to monorepo/index.html | 240 + misc/index.html | 73 + misc/kintsugi/index.html | 91 + misc/optimization solvers/index.html | 91 + misc/pop_OS! tweaks/index.html | 92 + misc/prepping RPI for embedded dev/index.html | 106 + misc/rgbxmas/index.html | 1067 ++++ misc/scanning QR codes on desktop/index.html | 93 + .../index.html | 121 + misc/uptime to downtime conversion/index.html | 91 + misc/water distillation setup/index.html | 91 + networking/CIDR/index.html | 100 + networking/index.html | 73 + networking/ipv6 address space/index.html | 101 + .../network interface card (NIC)/index.html | 91 + networking/network interfaces/index.html | 227 + nvim/index.html | 73 + nvim/universal-ctags Notes/index.html | 94 + performance/bit hacks/index.html | 579 +++ performance/dtrace on macOS/index.html | 293 ++ performance/index.html | 73 + performance/profiling/index.html | 91 + performance/simdjson talk/index.html | 164 + postgres/index.html | 73 + .../postgres performance tuning/index.html | 91 + postgres/snippets/index.html | 165 + postgres/types of scans/index.html | 112 + reproducible builds/earthly/index.html | 163 + reproducible builds/index.html | 73 + reproducible builds/nix/index.html | 91 + reproducible builds/nix/links/index.html | 109 + .../index.html | 146 + .../nix debug broken package build/index.html | 129 + .../nix debug spurrious rebuilds/index.html | 133 + reproducible builds/rebuilderd/index.html | 91 + .../reproducible-builds.org/index.html | 94 + robots.txt | 4 + router/index.html | 73 + .../index.html | 192 + .../arubanetworks captive portal/index.html | 127 + .../captive portal (wikipedia)/index.html | 127 + .../captive portal/captive portal/index.html | 192 + .../captive portal/index.html | 109 + router/lightning router/index.html | 91 + .../lightning router overview/index.html | 109 + search_index.en.js | 1 + site.webmanifest | 19 + sitemap.xml | 912 ++++ .../index.html | 94 + .../index.html | 168 + .../index.html | 94 + statistics probability/cheat sheet/index.html | 91 + .../herbie - float error fixer/index.html | 94 + statistics probability/index.html | 73 + .../kelly criterion + ELO/index.html | 95 + .../multinomial distribution/index.html | 123 + statistics probability/p-value/index.html | 94 + .../standard error/index.html | 91 + .../testing whether a coin is fair/index.html | 91 + statistics probability/winsorize/index.html | 182 + tags/algebraic-effects/index.html | 71 + tags/android/index.html | 68 + tags/aptos/index.html | 68 + tags/ats/index.html | 68 + tags/azure/index.html | 68 + tags/bash/index.html | 68 + tags/blockchain/index.html | 68 + tags/breez/index.html | 68 + tags/btc/index.html | 68 + tags/captive-portal/index.html | 71 + tags/circuitpython/index.html | 68 + tags/combinatorics/index.html | 68 + tags/confidential-computing/index.html | 71 + tags/containers/index.html | 68 + tags/crypto/index.html | 68 + tags/dart/index.html | 68 + tags/devops/index.html | 68 + tags/diem/index.html | 68 + tags/distributed-systems/index.html | 71 + tags/docker/index.html | 68 + tags/earthly/index.html | 68 + tags/fastpay/index.html | 68 + tags/flutter/index.html | 68 + tags/fortanix-edp/index.html | 71 + tags/fuzzing/index.html | 68 + tags/git/index.html | 68 + tags/glove80/index.html | 68 + tags/gramine/index.html | 68 + tags/hashicorp/index.html | 68 + tags/index.html | 50 + tags/ios/index.html | 68 + tags/ipv6/index.html | 68 + tags/k3s/index.html | 68 + tags/keyboards/index.html | 68 + tags/kubernetes/index.html | 68 + tags/ldk/index.html | 68 + tags/libos/index.html | 68 + tags/lightning/index.html | 68 + tags/linkerd/index.html | 68 + tags/lsp/index.html | 68 + tags/marble-run/index.html | 71 + tags/minikube/index.html | 68 + tags/mysten/index.html | 68 + tags/mystikos/index.html | 68 + tags/networking/index.html | 68 + tags/nix/index.html | 68 + tags/noise/index.html | 68 + tags/nomad/index.html | 68 + tags/orchestration/index.html | 68 + tags/perf/index.html | 68 + tags/pki/index.html | 68 + tags/postgres/index.html | 68 + tags/property-testing/index.html | 71 + tags/regulation/index.html | 68 + tags/reproducible-builds/index.html | 71 + tags/root/index.html | 68 + tags/rust/index.html | 68 + tags/service-mesh/index.html | 71 + tags/sgx/index.html | 68 + tags/simd/index.html | 68 + tags/sql/index.html | 68 + tags/ssh/index.html | 68 + tags/sycamore/index.html | 68 + tags/tax/index.html | 68 + tags/tls/index.html | 68 + tags/tracing/index.html | 68 + 328 files changed, 35710 insertions(+) create mode 100644 .nojekyll create mode 100644 404.html create mode 100644 AI ML/Expectimax Search/index.html create mode 100644 AI ML/Markov Decision Process (MDP)/index.html create mode 100644 AI ML/index.html create mode 100644 Cargo.lock create mode 100644 WSL/WSL2 custom kernel/index.html create mode 100644 WSL/index.html create mode 100644 __pub/514CqlmSOL_AC_SL1272.jpg create mode 100644 __pub/786dfe6f88a6128908d4efc0f08f6478b2-Kintsugi-Plate.rhorizontal.w700.webp create mode 100644 __pub/Pasted image 20220213095604.png create mode 100644 __pub/Pasted image 20220213102656.png create mode 100644 __pub/Pasted image 20220213112512.png create mode 100644 __pub/Pasted image 20220213151419.png create mode 100644 __pub/Pasted image 20220222190514.png create mode 100644 __pub/Pasted image 20220222190807.png create mode 100644 __pub/Pasted image 20220222190924.png create mode 100644 __pub/Pasted image 20220222191023.png create mode 100644 __pub/Pasted image 20220222191145.png create mode 100644 __pub/Pasted image 20220222191240.png create mode 100644 __pub/Pasted image 20220222191432.png create mode 100644 __pub/Pasted image 20220222191747.png create mode 100644 __pub/Pasted image 20220222192006.png create mode 100644 __pub/Pasted image 20220222192042.png create mode 100644 __pub/Pasted image 20220222192112.png create mode 100644 __pub/Pasted image 20220222192216.png create mode 100644 __pub/Pasted image 20220222192708.png create mode 100644 __pub/Pasted image 20220222192840.png create mode 100644 __pub/Pasted image 20220222193025.png create mode 100644 __pub/Pasted image 20220222193102.png create mode 100644 __pub/Pasted image 20220222193243.png create mode 100644 __pub/Pasted image 20220222193326.png create mode 100644 __pub/Pasted image 20220222193443.png create mode 100644 __pub/Pasted image 20220811124928.png create mode 100644 __pub/Pasted image 20220811125039.png create mode 100644 __pub/Pasted image 20220811125224.png create mode 100644 __pub/Pasted image 20220811125244.png create mode 100644 __pub/Pasted image 20220811125349.png create mode 100644 __pub/Pasted image 20220811125514.png create mode 100644 __pub/Pasted image 20220811125543.png create mode 100644 __pub/Pasted image 20220811125808.png create mode 100644 __pub/Pasted image 20220811125845.png create mode 100644 __pub/Pasted image 20220811125922.png create mode 100644 __pub/Pasted image 20221129095413.png create mode 100644 __pub/Screen Shot 2022-08-11 at 12.13.40.png create mode 100644 __pub/etape-6-kintsugi-sublimez.webp create mode 100644 __pub/index.html create mode 100644 __pub/istockphoto-1280373274-612x612.jpg create mode 100644 __pub/istockphoto-1280390209-612x612.jpg create mode 100644 __pub/kintsugi-bowl-01.jpg create mode 100644 __pub/kintsukuroi-orig.jpg create mode 100644 __pub/sgx_remote_attestation.png create mode 100644 __pub/standard error of the mean(1).png create mode 100644 __pub/standard error of the mean.png create mode 100644 __pub/water distillation setup.svg create mode 100644 _headers create mode 100644 android-chrome-192x192.png create mode 100644 android-chrome-512x512.png create mode 100644 android/ADB over TCP inside WSL2/index.html create mode 100644 android/OTA updates for rooted android phone/index.html create mode 100644 android/android cli setup/index.html create mode 100644 android/building signal-android in WSL2/index.html create mode 100644 android/index.html create mode 100644 android/linux ADB udev setup/index.html create mode 100644 android/root phone with magisk/index.html create mode 100644 apple-touch-icon.png create mode 100644 b i g m o n e y l a w r e g u l a t i o n/financial instituion/index.html create mode 100644 b i g m o n e y l a w r e g u l a t i o n/foreign bank account report (FBAR)/index.html create mode 100644 b i g m o n e y l a w r e g u l a t i o n/index.html create mode 100644 b i g m o n e y l a w r e g u l a t i o n/monetary instruments/index.html create mode 100644 b i g m o n e y l a w r e g u l a t i o n/money services business (MSB)/index.html create mode 100644 b l o c k c h a i n/aptos/index.html create mode 100644 b l o c k c h a i n/bip158 - compact block filters/index.html create mode 100644 b l o c k c h a i n/btc utreexo - utxo accumulator/index.html create mode 100644 b l o c k c h a i n/fastpay/index.html create mode 100644 b l o c k c h a i n/index.html create mode 100644 b l o c k c h a i n/oasis/index.html create mode 100644 b l o c k c h a i n/sui/index.html create mode 100644 bootstrap/scss/bootstrap-grid.css create mode 100644 bootstrap/scss/bootstrap-reboot.css create mode 100644 bootstrap/scss/bootstrap-utilities.css create mode 100644 bootstrap/scss/bootstrap.css create mode 100644 browserconfig.xml create mode 100644 btc-ln/BOLT 11 - invoices/index.html create mode 100644 btc-ln/BOLT 2 - channel management protocol/index.html create mode 100644 btc-ln/BOLT 4 - onion routing protocol/index.html create mode 100644 btc-ln/BOLT 7 - p2p node and channel discovery/index.html create mode 100644 btc-ln/BOLT 8 - secure noise transport/index.html create mode 100644 btc-ln/atomic multipath payments (AMP)/index.html create mode 100644 btc-ln/breez lightning service providers/index.html create mode 100644 btc-ln/hosted channels/index.html create mode 100644 btc-ln/index.html create mode 100644 btc-ln/lightning libs/index.html create mode 100644 btc-ln/lightning network notes/index.html create mode 100644 btc-ln/lightning rod/index.html create mode 100644 btc-ln/lightningdevkit - rust-lightning/index.html create mode 100644 btc-ln/submarine swaps/index.html create mode 100644 btc-ln/zero-conf channels/index.html create mode 100644 combinatorics/index.html create mode 100644 combinatorics/k-combinations of a multiset/index.html create mode 100644 confidential computing/enarx (WASM TEE)/index.html create mode 100644 confidential computing/fortanix rust tutorial/index.html create mode 100644 confidential computing/gramine/index.html create mode 100644 confidential computing/index.html create mode 100644 confidential computing/intel SGX/SGX lingo/index.html create mode 100644 confidential computing/intel SGX/index.html create mode 100644 confidential computing/intel SGX/overview/index.html create mode 100644 confidential computing/intel SGX/remote attestation/index.html create mode 100644 confidential computing/intel SGX/sealing/index.html create mode 100644 confidential computing/intel SGX/secure time/index.html create mode 100644 confidential computing/intel TDX/index.html create mode 100644 confidential computing/marblerun/index.html create mode 100644 confidential computing/mystikos/index.html create mode 100644 confidential computing/remote attestation protocols/index.html create mode 100644 crypto/(talk) authenticated data structures for stateless validation/index.html create mode 100644 crypto/TLS self-signed pubkey-only certs/index.html create mode 100644 crypto/acme protocol/index.html create mode 100644 crypto/biscuit authz/index.html create mode 100644 crypto/dex - open-source OIDC & OAuth 2.0 provider/index.html create mode 100644 crypto/hkdf-sha256/index.html create mode 100644 crypto/index.html create mode 100644 crypto/smallstep - private online CA & ACME server/index.html create mode 100644 crypto/tls exported keying material/index.html create mode 100644 crypto/zkdocs/index.html create mode 100644 design/form design/index.html create mode 100644 design/index.html create mode 100644 devops/AKS - azure kubernetes service/index.html create mode 100644 devops/algo wireguard VPN server/index.html create mode 100644 devops/azure CLI/index.html create mode 100644 devops/consul/index.html create mode 100644 devops/deployment strategies/index.html create mode 100644 devops/docker compose/index.html create mode 100644 devops/index.html create mode 100644 devops/k3s/index.html create mode 100644 devops/kind (kubernetes in docker)/index.html create mode 100644 devops/kubernetes/index.html create mode 100644 devops/linkerd/index.html create mode 100644 devops/minikube/index.html create mode 100644 devops/nomad/index.html create mode 100644 devops/o11y/index.html create mode 100644 devops/o11y/jaeger oss e2e tracing/index.html create mode 100644 devops/secrets/1password - secrets automation/index.html create mode 100644 devops/secrets/doppler/index.html create mode 100644 devops/secrets/ejson (Shopify)/index.html create mode 100644 devops/secrets/ejson-kms (AWS)/index.html create mode 100644 devops/secrets/envkey/index.html create mode 100644 devops/secrets/fortanix DSM/index.html create mode 100644 devops/secrets/index.html create mode 100644 devops/secrets/mozilla SOPS/index.html create mode 100644 devops/secrets/sops-nix/index.html create mode 100644 devops/secrets/sy - share secrets safely/index.html create mode 100644 devops/service mesh/index.html create mode 100644 distributed systems/index.html create mode 100644 distributed systems/papers/(2020) Semi-Fast Byzantine-tolerant Shared Register without Reliable Broadcast/index.html create mode 100644 distributed systems/papers/(2021) Leaderless Consensus/index.html create mode 100644 distributed systems/papers/index.html create mode 100644 distributed systems/the siren song of backpressure/index.html create mode 100644 elasticlunr.min.js create mode 100644 favicon-16x16.png create mode 100644 favicon-32x32.png create mode 100644 favicon.ico create mode 100644 fonts/fira-code-v17-latin-regular.woff2 create mode 100644 fonts/inter-v8-latin-700.woff2 create mode 100644 fonts/source-sans-pro-v19-latin-700.woff2 create mode 100644 fonts/source-sans-pro-v19-latin-700italic.woff2 create mode 100644 fonts/source-sans-pro-v19-latin-italic.woff2 create mode 100644 fonts/source-sans-pro-v19-latin-regular.woff2 create mode 100644 fuzzing/bolero - fuzzing + property testing/index.html create mode 100644 fuzzing/fuzzcheck-rs/index.html create mode 100644 fuzzing/fuzzing/index.html create mode 100644 fuzzing/index.html create mode 100644 index.html create mode 100644 ios/index.html create mode 100644 ios/ios setup/index.html create mode 100644 js/elasticlunr.min.js create mode 100644 js/search.js create mode 100644 keyboards/index.html create mode 100644 keyboards/moergo glove80/index.html create mode 100644 lang/ATS/ATS2 Notes/index.html create mode 100644 lang/ATS/Install ATS2/index.html create mode 100644 lang/ATS/index.html create mode 100644 lang/flutter/dart lang/index.html create mode 100644 lang/flutter/flutter setup/index.html create mode 100644 lang/flutter/index.html create mode 100644 lang/gdb ref/index.html create mode 100644 lang/index.html create mode 100644 lang/koka-lang/index.html create mode 100644 lang/lua/index.html create mode 100644 lang/operator fixity and precedence/index.html create mode 100644 lang/rust/index.html create mode 100644 lang/rust/optimizing binary size/index.html create mode 100644 lang/rust/rr with rust/index.html create mode 100644 lang/rust/rust verification tools/index.html create mode 100644 lang/rust/rust x SGX/index.html create mode 100644 lang/rust/self-referencing structs/index.html create mode 100644 lang/rust/sycamore x futures/index.html create mode 100644 lang/rust/understanding sycamore reactivity/index.html create mode 100644 main.css create mode 100644 management/index.html create mode 100644 management/relieve often - why generals were more successful in WWII/index.html create mode 100644 misc/arm target triples/index.html create mode 100644 misc/envsubst/index.html create mode 100644 misc/git multirepo to monorepo/index.html create mode 100644 misc/index.html create mode 100644 misc/kintsugi/index.html create mode 100644 misc/optimization solvers/index.html create mode 100644 misc/pop_OS! tweaks/index.html create mode 100644 misc/prepping RPI for embedded dev/index.html create mode 100644 misc/rgbxmas/index.html create mode 100644 misc/scanning QR codes on desktop/index.html create mode 100644 misc/setting up a headless raspbian boot image/index.html create mode 100644 misc/uptime to downtime conversion/index.html create mode 100644 misc/water distillation setup/index.html create mode 100644 networking/CIDR/index.html create mode 100644 networking/index.html create mode 100644 networking/ipv6 address space/index.html create mode 100644 networking/network interface card (NIC)/index.html create mode 100644 networking/network interfaces/index.html create mode 100644 nvim/index.html create mode 100644 nvim/universal-ctags Notes/index.html create mode 100644 performance/bit hacks/index.html create mode 100644 performance/dtrace on macOS/index.html create mode 100644 performance/index.html create mode 100644 performance/profiling/index.html create mode 100644 performance/simdjson talk/index.html create mode 100644 postgres/index.html create mode 100644 postgres/postgres performance tuning/index.html create mode 100644 postgres/snippets/index.html create mode 100644 postgres/types of scans/index.html create mode 100644 reproducible builds/earthly/index.html create mode 100644 reproducible builds/index.html create mode 100644 reproducible builds/nix/index.html create mode 100644 reproducible builds/nix/links/index.html create mode 100644 reproducible builds/nix/nix auto-allocate-uids -> nixbld users/index.html create mode 100644 reproducible builds/nix/nix debug broken package build/index.html create mode 100644 reproducible builds/nix/nix debug spurrious rebuilds/index.html create mode 100644 reproducible builds/rebuilderd/index.html create mode 100644 reproducible builds/reproducible-builds.org/index.html create mode 100644 robots.txt create mode 100644 router/index.html create mode 100644 router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/index.html create mode 100644 router/lightning router/captive portal/arubanetworks captive portal/index.html create mode 100644 router/lightning router/captive portal/captive portal (wikipedia)/index.html create mode 100644 router/lightning router/captive portal/captive portal/index.html create mode 100644 router/lightning router/captive portal/index.html create mode 100644 router/lightning router/index.html create mode 100644 router/lightning router/lightning router overview/index.html create mode 100644 search_index.en.js create mode 100644 site.webmanifest create mode 100644 sitemap.xml create mode 100644 statistics probability/CDF confidence bands - DKW inequality/index.html create mode 100644 statistics probability/G-test - multinomial goodness-of-fit/index.html create mode 100644 statistics probability/MAD - median absolute deviation/index.html create mode 100644 statistics probability/cheat sheet/index.html create mode 100644 statistics probability/herbie - float error fixer/index.html create mode 100644 statistics probability/index.html create mode 100644 statistics probability/kelly criterion + ELO/index.html create mode 100644 statistics probability/multinomial distribution/index.html create mode 100644 statistics probability/p-value/index.html create mode 100644 statistics probability/standard error/index.html create mode 100644 statistics probability/testing whether a coin is fair/index.html create mode 100644 statistics probability/winsorize/index.html create mode 100644 tags/algebraic-effects/index.html create mode 100644 tags/android/index.html create mode 100644 tags/aptos/index.html create mode 100644 tags/ats/index.html create mode 100644 tags/azure/index.html create mode 100644 tags/bash/index.html create mode 100644 tags/blockchain/index.html create mode 100644 tags/breez/index.html create mode 100644 tags/btc/index.html create mode 100644 tags/captive-portal/index.html create mode 100644 tags/circuitpython/index.html create mode 100644 tags/combinatorics/index.html create mode 100644 tags/confidential-computing/index.html create mode 100644 tags/containers/index.html create mode 100644 tags/crypto/index.html create mode 100644 tags/dart/index.html create mode 100644 tags/devops/index.html create mode 100644 tags/diem/index.html create mode 100644 tags/distributed-systems/index.html create mode 100644 tags/docker/index.html create mode 100644 tags/earthly/index.html create mode 100644 tags/fastpay/index.html create mode 100644 tags/flutter/index.html create mode 100644 tags/fortanix-edp/index.html create mode 100644 tags/fuzzing/index.html create mode 100644 tags/git/index.html create mode 100644 tags/glove80/index.html create mode 100644 tags/gramine/index.html create mode 100644 tags/hashicorp/index.html create mode 100644 tags/index.html create mode 100644 tags/ios/index.html create mode 100644 tags/ipv6/index.html create mode 100644 tags/k3s/index.html create mode 100644 tags/keyboards/index.html create mode 100644 tags/kubernetes/index.html create mode 100644 tags/ldk/index.html create mode 100644 tags/libos/index.html create mode 100644 tags/lightning/index.html create mode 100644 tags/linkerd/index.html create mode 100644 tags/lsp/index.html create mode 100644 tags/marble-run/index.html create mode 100644 tags/minikube/index.html create mode 100644 tags/mysten/index.html create mode 100644 tags/mystikos/index.html create mode 100644 tags/networking/index.html create mode 100644 tags/nix/index.html create mode 100644 tags/noise/index.html create mode 100644 tags/nomad/index.html create mode 100644 tags/orchestration/index.html create mode 100644 tags/perf/index.html create mode 100644 tags/pki/index.html create mode 100644 tags/postgres/index.html create mode 100644 tags/property-testing/index.html create mode 100644 tags/regulation/index.html create mode 100644 tags/reproducible-builds/index.html create mode 100644 tags/root/index.html create mode 100644 tags/rust/index.html create mode 100644 tags/service-mesh/index.html create mode 100644 tags/sgx/index.html create mode 100644 tags/simd/index.html create mode 100644 tags/sql/index.html create mode 100644 tags/ssh/index.html create mode 100644 tags/sycamore/index.html create mode 100644 tags/tax/index.html create mode 100644 tags/tls/index.html create mode 100644 tags/tracing/index.html diff --git a/.nojekyll b/.nojekyll new file mode 100644 index 0000000000..e69de29bb2 diff --git a/404.html b/404.html new file mode 100644 index 0000000000..a98956a548 --- /dev/null +++ b/404.html @@ -0,0 +1,50 @@ +404 Page not found | philip's notes

Page not found :(

The page you are looking for doesn't exist or has been moved.

\ No newline at end of file diff --git a/AI ML/Expectimax Search/index.html b/AI ML/Expectimax Search/index.html new file mode 100644 index 0000000000..6fdf2a4b43 --- /dev/null +++ b/AI ML/Expectimax Search/index.html @@ -0,0 +1,91 @@ +Expectimax Search | philip's notes

expectimax search

2022-03-27 · 4 min read

    • Adversarial search algorithm (two competitive agents)
    • Non-deterministic Environment (actions can have randomness)
    • Expectimax is like Minimax but for non-deterministic games.
    • Have Player1, Player2, and Chance node levels in our search tree.
    • Unlike minimax which only requires evaluation functions to preserve ordering, expectimax requires that our evaluation function $f(\text{leaf-state})$ must be a Positive Linear Operator on the win probability (so it must also preserves positive-ness) to be optimal.
      • Recall: the evaluation function scores terminal states (game end) and depth-pruned states (states exceeding a depth limit).

    Pruning + State & Q-State Cache #

    See also: 2007 - Effective Use of Transposition Tables in Stochastic Game Tree Search

    For a chance node, we're taking the mean of each possible outcome.

    As we explore branches from the chance node, our upper and lower bound estimates of the mean slowly tighten, until we explore all branches and the mean becomes an exact value.

    We can think of the lower bounds as taking the current exact value plus the sum of the rest of the probabilities times the worst possible outcome. Likewise the upper bound is the current exact value plus the sum of the rest of the probabilities times the best possible value.

    With a naive alpha-beta pruning and q-state caching strategy, we might prune a branch but still cache the current estimate. However, this would only be a valid estimate for another path if the alpha-beta bounds are tighter.

    Instead of just recording a single value, we record an enum with two cases

    Case 1: the exact value, meaning we've fully explored all branches of this chance node.

    Case 2: an upper and lower bound and a thunk(?) to resume exploration of this node, meaning there are still more branches to explore.

    In this way, we don't lose any information when we place a q-state into the cache. If another path has looser alpha-beta bounds (maybe we hit the q-state again on a higher level in the next branch) then it can explore the q-state some more before it decides to possibly prune or not.

    What about min- and max-state caching? #

    We presumably do the same thing with only upper xor lower bounds resp. vs exact value plus resumable exploration thunk.

    How do we prune? #

    At a given chance node we have the bound $[\alpha, \beta]$ from our parent node, showing the best case known for the max (alpha) and best case known for the min (beta).

    As we explore this chance node, we continually refine down our current best estimate bounds $[a, b]$ as we explore more branches. As soon as we see the bound intervals $[a, b]$ and $[\alpha, \beta]$ no longer intersect, we can prune.

    Appendix #

    Positive Linear Operator #

    source: https://www.wikiwand.com/en/Positive_linear_operator

    For scalar spaces, positive linear operators are functions of the form:

    \[ f(x) = a_1 \cdot x + a_2 \qquad \text{where } a_1 > 0 \]

    More generally, let $(X, \le_X)$ and $(Y, \le_Y)$ be vector spaces with preorder operators $\le_X$ and $\le_Y$ resp.

    Let $f \;:\; X \mapsto Y$ be a function from $X$ to $Y$. The function $f$ is a positve linear operator if:

    1. It preserves positive-ness, i.e., positive elements in $X$ are all mapped to positive elements in $Y$.
    2. It preserves the preordering (homomorphic?), i.e., if $x_1 \le_X x_2$, then $f(x_1) \le_Y f(x_2)$.

    Formally, $f$ is a positive linear operator if

    \[ \begin{align*} \forall \; x_1,\, x_2 \in X, &\text{ where } 0 \le_X x_1, x_2 \; : & \\ \\ &0 \le_Y f(x_1) \text{ and } 0 \le_Y f(x_2) &\text{(1.) preserves positive-ness} \\ &f(x_1) \le_Y f(x_2) &\text{(2.) preserves the preordering} \end{align*} \]

    For example, consider a simple zero-sum game where agents $A$ and $B$ have utility functions

    \[ \begin{align*} U_A &= p_w \cdot r + (1 - p_w) \cdot -r \\ &= r \cdot (2 \cdot p_w - 1) \\ &= 2 r \cdot p_w - r \\ U_B &= (1 - p_w) \cdot r + p_w \cdot -r \\ &= p_l \cdot r + (1 - p_l) \cdot -r \\ &= 2r \cdot p_l - r \end{align*} \]

    where $p_w$ is the probability agent $A$ wins and $p_l$ is just the probability agent $A$ loses and agent $B$ wins.

    Notice that these simple utility functions are both positive linear transformations of each agent's win probability $p_w$ and $p_l$ resp. This property makes them both equivalent to using the normalized score (i.e., win probability) in an expectimax search.

    \ No newline at end of file diff --git a/AI ML/Markov Decision Process (MDP)/index.html b/AI ML/Markov Decision Process (MDP)/index.html new file mode 100644 index 0000000000..2f9c1b7396 --- /dev/null +++ b/AI ML/Markov Decision Process (MDP)/index.html @@ -0,0 +1,91 @@ +Markov Decision Process (MDP) | philip's notes

    markov decision process (MDP)

    2022-03-15 · 7 min read

      \[ \renewcommand{\Pr}[1]{\text{Pr}\left[ #1 \right]} \renewcommand{\E}[1]{\mathbb{E}\left[ #1 \right]} \renewcommand{\argmax}{\text{argmax}} \]

      Overview #

      A Markov Decision Process (MDP) is a 4-tuple, $(S, A, P_a, R_a)$, where:

      • $S$ is the State space
      • $A$ is the Action space (or $A = \set{ A_s \;|\; s \in S}$, where $A_s$ are the actions available at state $s$)
      • $P(s', s, a) = \Pr{s' \;|\; s, a}$ is the transition probability from states $s$ to $s'$ given the agent took action $a$.
        • The transition probabilities must be Markovian (i.e., "memoryless"); they must not depend on prior states (other than the most recent).
        • Recall that we can always engineer "memorylessness" into a process by just redefining each new process state as the complete history of states to the given state, though this is often prohibitively expensive.
      • $R(s, s', a)$ is the immediate (or expected immediate) reward when going from states $s$ to $s'$ using action $a$.

      We also have policy functions $\pi : S \mapsto A$ which take a state and output which action to take at that state.

      If we fix a policy function $\pi$ for a given MDP, we actually get a standard markov chain (since there's no more pesky non-linear max in there). This markov chain has state transition probabilities

      \[ \Pr{s_{t+1} = s' \;|\; s_t = s} = P(s', s, \pi(s)) \]

      Our objective for an MDP is to find an optimal policy $\pi^*$ that maximizes the expected (discounted) sum of rewards

      \[ \E{\sum_{t=0}^\infty \gamma^t \cdot R(s_t,\, s_{t+1},\, \pi^*(s_t))} \]

      where $0 \le \gamma \le 1$ is a discounting factor.

      The hyperparameter $\gamma$ is a quantity we control. It reflects how much we value short-term rewards over long-term rewards. $\gamma$ values closer to zero are miopic (prioritize short-term rewards). $\gamma$ values closer to one produce more optimal policies, but may prevent our learning algorithm from converging within a reasonable time.

      Simulator models #

      Learning the optimal policy $\pi^*$ means first choosing an algorithm appropriate for our process. Different algorithms require different assumptions about the process and require varying levels of simulator model fidelity.

      Here are three popular algorithms in decreasing order of required simulator model fidelity:

      1. Dynamic Programming (e.g. Value Iteration): requires an explicit model of the MDP. This explicit model contains the complete transition probability function and reward function. For certain games, the transition and reward functions could be discrete and infinitely large, ruling out this approach.
      2. MCTS (Monte Carlo Tree Search): requires a generative model, which means you can generate samples of the next state and reward given a prior state and action. If you can efficiently simulate a single turn of your game without knowing the complete dynamics, MCTS may be an option.
      3. Reinforcement Learning (RL): only requires an episodic simulator. In this case, all we need are samples of full episodes (e.g. full game rollouts like $[(s_0, a_0, r_0),\; (s_1, a_1, r_1,\; \ldots,\; (s_k, a_k, r_k))]$). For instance, AlphaStar (which uses RL) trains on full Starcraft replays as opposed to extracting the core game logic to simulate single game ticks in isolation.

      Algorithms #

      Preliminaries #

      Before we dive into the algorithms, let's first take a look at some different ways we can express the value of states and q-states under the optimal policy $\pi^*$:

      \[ \begin{align*} Q^*(s, a) &= \sum_{s'} P(s', s, a) \cdot (R(s', s, a) + \gamma \cdot V^*(s')) & \text{(1.)} \\ &= \sum_{s'} P(s', s, a) \cdot (R(s', s, a) + \gamma \cdot \max_{a' \in A_{s'}} Q^*(s', a')) & \text{(2.)} \\ \\ V^*(s) &= \max_{a \in A_s} Q^*(s, a) \\ &= \max_a \sum_{s'} P(s', s, a) \cdot (R(s', s, a) + \gamma \cdot V^*(s')) & \text{(3.)} \\ \\ V^\pi(s) &= Q^\pi(s, \pi(s)) \\ &= \sum_{s'} P(s', s, \pi(s)) \cdot (R(s', s, \pi(s)) + \gamma \cdot V^*(s')) & \text{(4.)} \\ \\ \pi(s) &= \underset{a \in A_s}{\argmax} \; Q^\pi(s, a) & \text{(5.)} \\ \end{align*} \]
      1. This is the standard Q-state value formulation under the optimal policy (also called a Q-value).
      2. The Q-values expressed only in terms of other Q-values. Used in Q-value iteration.
      3. The state value under the optimal policy expressed in terms of other state values. Used in value iteration.
      4. The state value given an explicit policy. Used in policy iteration.
      5. The policy update equation. For each state, look at all the actions, evaluate them based on the previous policy, then set the new policy action to the best action. Used in policy iteration.

      Dynamic Programming #

      Value Iteration #

      Value iteration (as the name implies) iteratively improves our estimate of the optimal state values $V^*$ until convergence.

      We start with an initial estimate $V_0$ of all the state values. We then iterate from $k = 0, 1, 2, \ldots$, updating our next estimate of the state values $V_{k+1}$ from the current estimate $V_k$. For each iteration, we loop through all the possible states $s \in S$ and update $V_{k+1}(s)$ like so

      \[ V_{k+1}(s) \gets \max_a \sum_{s'} P(s', s, a) \cdot (R(s', s, a) + \gamma \cdot V_k(s')) \]

      Notice that we're not learning an explicit policy function $\pi$ here. Instead, the policy is implicit in the $\max$. If we want to recover an explicit policy function for our current estimate, $\pi_{k+1}(s)$, we simply look at all actions $a$ from state $s$ and choose the one with the greatest expected reward

      \[ \pi_{k+1}(s) = \underset{a}{\argmax} \sum_{s'} P(s', s, a) \cdot (R(s', s, a) + \gamma \cdot V_k(s')) \]

      There are some proofs that this converges, so long as certain properties are true. For our purposes, we just care about the required properties:

      1. If the game is finite, then value iteration always converges regardless of $\gamma$.
      2. If the game is infinite but has absorbing states that are reached w.p. 1 as $k \rightarrow \infty$ then value iteration converges regardless of $\gamma$.
      3. Otherwise, for an infinite game, without absorbing states, we need a discounting value $0 \le \gamma < 1$ and a bounded maximum state transition reward $R_\text{max}$. You can see that with $\gamma < 1$ and a bounded reward, the maximum possible reward sum is bounded by
      \[ R(s_1, s_0, a) + \gamma \cdot R(s_2, s_1, a) + \gamma^2 \cdot R(s_3, s_2, a) + \cdots \le \sum_{t = 0}^\infty \gamma^t \cdot R_\text{max} = \frac{1}{1 - \gamma} \cdot R_\text{max} \]

      Q-value Iteration #

      We can also do value iteration, but store Q-values instead of state-values. For some games, the space of Q-states $(s, a)$ (action $a$ applied to state $s$) might be significantly smaller than the original state space.

      In these cases, we use Q-value Iteration over Value Iteration. The Q-value Iteration update equation looks nearly identical, except we just swap the order of the mean and max

      \[ Q_{k+1}(s, a) = \sum_{s'} P(s', s, a) \cdot (R(s', s, a) + \gamma \cdot \max_{a'} Q_{k}(s', a') \]

      Finally, our recovered policy

      \[ \pi_{k+1}(s) = \underset{a}{\argmax} \; Q_{k}(s, a) \]
      \ No newline at end of file diff --git a/AI ML/index.html b/AI ML/index.html new file mode 100644 index 0000000000..f8f28296f9 --- /dev/null +++ b/AI ML/index.html @@ -0,0 +1,73 @@ +AI ML | philip's notes

      AI ML

      Expectimax Search →

      2022-03-27 · 4 min read

      Markov Decision Process (MDP) →

      2022-03-15 · 7 min read

      \ No newline at end of file diff --git a/Cargo.lock b/Cargo.lock new file mode 100644 index 0000000000..18735cb0f7 --- /dev/null +++ b/Cargo.lock @@ -0,0 +1,4411 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "adler" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" + +[[package]] +name = "ahash" +version = "0.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fcb51a0695d8f838b1ee009b3fbf66bda078cd64590202a864a8f3e8c4315c47" +dependencies = [ + "getrandom 0.2.8", + "once_cell", + "version_check", +] + +[[package]] +name = "ahash" +version = "0.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2c99f64d1e06488f620f932677e24bc6e2897582980441ae90a671415bd7ec2f" +dependencies = [ + "cfg-if 1.0.0", + "getrandom 0.2.8", + "once_cell", + "version_check", +] + +[[package]] +name = "aho-corasick" +version = "0.7.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cc936419f96fa211c1b9166887b38e5e40b19958e5b895be7c1f93adec7071ac" +dependencies = [ + "memchr", +] + +[[package]] +name = "ammonia" +version = "3.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "64e6d1c7838db705c9b756557ee27c384ce695a1c51a6fe528784cb1c6840170" +dependencies = [ + "html5ever", + "maplit", + "once_cell", + "tendril", + "url", +] + +[[package]] +name = "android_system_properties" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311" +dependencies = [ + "libc", +] + +[[package]] +name = "any_ascii" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "70033777eb8b5124a81a1889416543dddef2de240019b674c81285a2635a7e1e" + +[[package]] +name = "anyhow" +version = "1.0.69" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "224afbd727c3d6e4b90103ece64b8d1b67fbb1973b1046c2281eed3f3803f800" + +[[package]] +name = "arrayvec" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "23b62fc65de8e4e7f52534fb52b0f3ed04746ae267519eef2a83941e8085068b" + +[[package]] +name = "arrayvec" +version = "0.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8da52d66c7071e2e3fa2a1e5c6d088fec47b593032b254f5e980de8ea54454d6" + +[[package]] +name = "assert-json-diff" +version = "2.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "47e4f2b81832e72834d7518d8487a0396a28cc408186a2e8854c0f98011faf12" +dependencies = [ + "serde", + "serde_json", +] + +[[package]] +name = "atty" +version = "0.2.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8" +dependencies = [ + "hermit-abi 0.1.19", + "libc", + "winapi 0.3.9", +] + +[[package]] +name = "autocfg" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" + +[[package]] +name = "base64" +version = "0.21.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a4a4ddaa51a5bc52a6948f74c06d20aaaddb71924eab79b8c97a8c556e942d6a" + +[[package]] +name = "bincode" +version = "1.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b1f45e9417d87227c7a56d22e471c6206462cba514c7590c09aff4cf6d1ddcad" +dependencies = [ + "serde", +] + +[[package]] +name = "bit_field" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc827186963e592360843fb5ba4b973e145841266c1357f7180c43526f2e5b61" + +[[package]] +name = "bitflags" +version = "1.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" + +[[package]] +name = "bitflags" +version = "2.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "327762f6e5a765692301e5bb513e0d9fef63be86bbc14528052b1cd3e6f03e07" + +[[package]] +name = "block-buffer" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c0940dc441f31689269e10ac70eb1002a3a1d3ad1390e030043662eb7fe4688b" +dependencies = [ + "block-padding", + "byte-tools", + "byteorder", + "generic-array 0.12.4", +] + +[[package]] +name = "block-buffer" +version = "0.10.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" +dependencies = [ + "generic-array 0.14.6", +] + +[[package]] +name = "block-padding" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fa79dedbb091f449f1f39e53edf88d5dbe95f895dae6135a8d7b881fb5af73f5" +dependencies = [ + "byte-tools", +] + +[[package]] +name = "bstr" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5ffdb39cb703212f3c11973452c2861b972f757b021158f3516ba10f2fa8b2c1" +dependencies = [ + "memchr", + "serde", +] + +[[package]] +name = "build_const" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b4ae4235e6dac0694637c763029ecea1a2ec9e4e06ec2729bd21ba4d9c863eb7" + +[[package]] +name = "bumpalo" +version = "3.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0d261e256854913907f67ed06efbc3338dfe6179796deefc1ff763fc1aee5535" + +[[package]] +name = "byte-tools" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3b5ca7a04898ad4bcd41c90c5285445ff5b791899bb1b0abdd2a2aa791211d7" + +[[package]] +name = "bytecount" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f861d9ce359f56dbcb6e0c2a1cb84e52ad732cadb57b806adeb3c7668caccbd8" + +[[package]] +name = "bytecount" +version = "0.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2c676a478f63e9fa2dd5368a42f28bba0d6c560b775f38583c8bbaa7fcd67c9c" + +[[package]] +name = "bytemuck" +version = "1.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "17febce684fd15d89027105661fec94afb475cb995fbc59d2865198446ba2eea" + +[[package]] +name = "byteorder" +version = "1.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610" + +[[package]] +name = "bytes" +version = "0.4.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "206fdffcfa2df7cbe15601ef46c813fce0965eb3286db6b56c583b814b51c81c" +dependencies = [ + "byteorder", + "iovec", +] + +[[package]] +name = "bytes" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "89b2fd2a0dcf38d7971e2194b6b6eebab45ae01067456a7fd93d5547a61b70be" + +[[package]] +name = "camino" +version = "1.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c530edf18f37068ac2d977409ed5cd50d53d73bc653c7647b48eb78976ac9ae2" +dependencies = [ + "serde", +] + +[[package]] +name = "cargo-platform" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cbdb825da8a5df079a43676dbe042702f1707b1109f713a01420fbb4cc71fa27" +dependencies = [ + "serde", +] + +[[package]] +name = "cargo_metadata" +version = "0.14.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4acbb09d9ee8e23699b9634375c72795d095bf268439da88562cf9b501f181fa" +dependencies = [ + "camino", + "cargo-platform", + "semver", + "serde", + "serde_json", +] + +[[package]] +name = "cc" +version = "1.0.79" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "50d30906286121d95be3d479533b458f87493b30a4b5f79a607db8f5d11aa91f" +dependencies = [ + "jobserver", +] + +[[package]] +name = "cedarwood" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6d910bedd62c24733263d0bed247460853c9d22e8956bd4cd964302095e04e90" +dependencies = [ + "smallvec", +] + +[[package]] +name = "cfg-if" +version = "0.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4785bdd1c96b2a846b2bd7cc02e86b6b3dbf14e7e53446c4f54c92a361040822" + +[[package]] +name = "cfg-if" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" + +[[package]] +name = "chrono" +version = "0.4.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4e3c5919066adf22df73762e50cffcde3a758f2a848b113b586d1f86728b673b" +dependencies = [ + "iana-time-zone", + "num-integer", + "num-traits", + "pure-rust-locales", + "winapi 0.3.9", +] + +[[package]] +name = "chrono-tz" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "58549f1842da3080ce63002102d5bc954c7bc843d4f47818e642abdc36253552" +dependencies = [ + "chrono", + "chrono-tz-build", + "phf 0.10.1", +] + +[[package]] +name = "chrono-tz-build" +version = "0.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "db058d493fb2f65f41861bfed7e3fe6335264a9f0f92710cab5bdf01fef09069" +dependencies = [ + "parse-zoneinfo", + "phf 0.10.1", + "phf_codegen 0.10.0", +] + +[[package]] +name = "clap" +version = "3.2.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "71655c45cb9845d3270c9d6df84ebe72b4dad3c2ba3f7023ad47c144e4e473a5" +dependencies = [ + "atty", + "bitflags 1.3.2", + "clap_derive 3.2.18", + "clap_lex 0.2.4", + "indexmap", + "once_cell", + "strsim", + "termcolor", + "textwrap", +] + +[[package]] +name = "clap" +version = "4.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3d7ae14b20b94cb02149ed21a86c423859cbe18dc7ed69845cace50e52b40a5" +dependencies = [ + "bitflags 1.3.2", + "clap_derive 4.1.8", + "clap_lex 0.3.2", + "is-terminal", + "once_cell", + "strsim", + "termcolor", +] + +[[package]] +name = "clap_complete" +version = "4.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "501ff0a401473ea1d4c3b125ff95506b62c5bc5768d818634195fbb7c4ad5ff4" +dependencies = [ + "clap 4.1.8", +] + +[[package]] +name = "clap_derive" +version = "3.2.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ea0c8bce528c4be4da13ea6fead8965e95b6073585a2f05204bd8f4119f82a65" +dependencies = [ + "heck", + "proc-macro-error", + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "clap_derive" +version = "4.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "44bec8e5c9d09e439c4335b1af0abaab56dcf3b94999a936e1bb47b9134288f0" +dependencies = [ + "heck", + "proc-macro-error", + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "clap_lex" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2850f2f5a82cbf437dd5af4d49848fbdfc27c157c3d010345776f952765261c5" +dependencies = [ + "os_str_bytes", +] + +[[package]] +name = "clap_lex" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "350b9cf31731f9957399229e9b2adc51eeabdfbe9d71d9a0552275fd12710d09" +dependencies = [ + "os_str_bytes", +] + +[[package]] +name = "codemap" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9e769b5c8c8283982a987c6e948e540254f1058d5a74b8794914d4ef5fc2a24" + +[[package]] +name = "codespan-reporting" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3538270d33cc669650c4b093848450d380def10c331d38c768e34cac80576e6e" +dependencies = [ + "termcolor", + "unicode-width", +] + +[[package]] +name = "color_quant" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d7b894f5411737b7867f4827955924d7c254fc9f4d91a6aad6b097804b1018b" + +[[package]] +name = "colored" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b3616f750b84d8f0de8a58bda93e08e2a81ad3f523089b05f1dffecab48c6cbd" +dependencies = [ + "atty", + "lazy_static", + "winapi 0.3.9", +] + +[[package]] +name = "config" +version = "0.1.0" +dependencies = [ + "errors", + "libs", + "serde", + "utils", +] + +[[package]] +name = "console" +version = "0.1.0" +dependencies = [ + "errors", + "libs", +] + +[[package]] +name = "console" +version = "0.15.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3d79fbe8970a77e3e34151cc13d3b3e248aa0faaecb9f6091fa07ebefe5ad60" +dependencies = [ + "encode_unicode", + "lazy_static", + "libc", + "windows-sys 0.42.0", +] + +[[package]] +name = "content" +version = "0.1.0" +dependencies = [ + "config", + "errors", + "libs", + "markdown", + "serde", + "tempfile", + "test-case", + "time", + "utils", +] + +[[package]] +name = "convert_case" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6245d59a3e82a7fc217c5828a6692dbc6dfb63a0c8c90495621f7b9d79704a0e" + +[[package]] +name = "core-foundation" +version = "0.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "194a7a9e6de53fa55116934067c844d9d749312f75c6f6d0980e8c252f8c2146" +dependencies = [ + "core-foundation-sys", + "libc", +] + +[[package]] +name = "core-foundation-sys" +version = "0.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5827cebf4670468b8772dd191856768aedcb1b0278a04f989f7766351917b9dc" + +[[package]] +name = "cpufeatures" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "28d997bd5e24a5928dd43e46dc529867e207907fe0b239c3477d924f7f2ca320" +dependencies = [ + "libc", +] + +[[package]] +name = "crc" +version = "1.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d663548de7f5cca343f1e0a48d14dcfb0e9eb4e079ec58883b7251539fa10aeb" +dependencies = [ + "build_const", +] + +[[package]] +name = "crc32fast" +version = "1.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b540bd8bc810d3885c6ea91e2018302f68baba2129ab3e88f32389ee9370880d" +dependencies = [ + "cfg-if 1.0.0", +] + +[[package]] +name = "crossbeam-channel" +version = "0.5.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cf2b3e8478797446514c91ef04bafcb59faba183e621ad488df88983cc14128c" +dependencies = [ + "cfg-if 1.0.0", + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-deque" +version = "0.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ce6fd6f855243022dcecf8702fef0c297d4338e226845fe067f6341ad9fa0cef" +dependencies = [ + "cfg-if 1.0.0", + "crossbeam-epoch", + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-epoch" +version = "0.9.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "46bd5f3f85273295a9d14aedfb86f6aadbff6d8f5295c4a9edb08e819dcf5695" +dependencies = [ + "autocfg", + "cfg-if 1.0.0", + "crossbeam-utils", + "memoffset", + "scopeguard", +] + +[[package]] +name = "crossbeam-utils" +version = "0.8.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c063cd8cc95f5c377ed0d4b49a4b21f632396ff690e8470c29b3359b346984b" +dependencies = [ + "cfg-if 1.0.0", +] + +[[package]] +name = "crunchy" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a81dae078cea95a014a339291cec439d2f232ebe854a9d672b796c6afafa9b7" + +[[package]] +name = "crypto-common" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" +dependencies = [ + "generic-array 0.14.6", + "typenum", +] + +[[package]] +name = "css-minify" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "874c6e2d19f8d4a285083b11a3241bfbe01ac3ed85f26e1e6b34888d960552bd" +dependencies = [ + "derive_more", + "indexmap", + "nom 7.1.3", +] + +[[package]] +name = "csv" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b015497079b9a9d69c02ad25de6c0a6edef051ea6360a327d0bd05802ef64ad" +dependencies = [ + "csv-core", + "itoa", + "ryu", + "serde", +] + +[[package]] +name = "csv-core" +version = "0.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b2466559f260f48ad25fe6317b3c8dac77b5bdb5763ac7d9d6103530663bc90" +dependencies = [ + "memchr", +] + +[[package]] +name = "ctrlc" +version = "3.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bbcf33c2a618cbe41ee43ae6e9f2e48368cd9f9db2896f10167d8d762679f639" +dependencies = [ + "nix", + "windows-sys 0.45.0", +] + +[[package]] +name = "cxx" +version = "1.0.92" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a140f260e6f3f79013b8bfc65e7ce630c9ab4388c6a89c71e07226f49487b72" +dependencies = [ + "cc", + "cxxbridge-flags", + "cxxbridge-macro", + "link-cplusplus", +] + +[[package]] +name = "cxx-build" +version = "1.0.92" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da6383f459341ea689374bf0a42979739dc421874f112ff26f829b8040b8e613" +dependencies = [ + "cc", + "codespan-reporting", + "once_cell", + "proc-macro2", + "quote", + "scratch", + "syn", +] + +[[package]] +name = "cxxbridge-flags" +version = "1.0.92" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "90201c1a650e95ccff1c8c0bb5a343213bdd317c6e600a93075bca2eff54ec97" + +[[package]] +name = "cxxbridge-macro" +version = "1.0.92" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b75aed41bb2e6367cae39e6326ef817a851db13c13e4f3263714ca3cfb8de56" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "derive_more" +version = "0.99.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4fb810d30a7c1953f91334de7244731fc3f3c10d7fe163338a35b9f640960321" +dependencies = [ + "convert_case", + "proc-macro2", + "quote", + "rustc_version", + "syn", +] + +[[package]] +name = "deunicode" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "850878694b7933ca4c9569d30a34b55031b9b139ee1fc7b94a527c4ef960d690" + +[[package]] +name = "digest" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f3d0c8c8752312f9713efd397ff63acb9f85585afbf179282e720e7704954dd5" +dependencies = [ + "generic-array 0.12.4", +] + +[[package]] +name = "digest" +version = "0.10.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8168378f4e5023e7218c89c891c0fd8ecdb5e5e4f18cb78f38cf245dd021e76f" +dependencies = [ + "block-buffer 0.10.4", + "crypto-common", +] + +[[package]] +name = "displaydoc" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3bf95dc3f046b9da4f2d51833c0d3547d8564ef6910f5c1ed130306a75b92886" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "doc-comment" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fea41bba32d969b513997752735605054bc0dfa92b4c56bf1189f2e174be7a10" + +[[package]] +name = "either" +version = "1.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7fcaabb2fef8c910e7f4c7ce9f67a1283a1715879a7c230ca9d6d1ae31f16d91" + +[[package]] +name = "elasticlunr-rs" +version = "3.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b94d9c8df0fe6879ca12e7633fdfe467c503722cc981fc463703472d2b876448" +dependencies = [ + "jieba-rs", + "lindera", + "lindera-core", + "regex", + "rust-stemmers", + "serde", + "serde_derive", + "serde_json", +] + +[[package]] +name = "encode_unicode" +version = "0.3.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a357d28ed41a50f9c765dbfe56cbc04a64e53e5fc58ba79fbc34c10ef3df831f" + +[[package]] +name = "encoding" +version = "0.2.33" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6b0d943856b990d12d3b55b359144ff341533e516d94098b1d3fc1ac666d36ec" +dependencies = [ + "encoding-index-japanese", + "encoding-index-korean", + "encoding-index-simpchinese", + "encoding-index-singlebyte", + "encoding-index-tradchinese", +] + +[[package]] +name = "encoding-index-japanese" +version = "1.20141219.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "04e8b2ff42e9a05335dbf8b5c6f7567e5591d0d916ccef4e0b1710d32a0d0c91" +dependencies = [ + "encoding_index_tests", +] + +[[package]] +name = "encoding-index-korean" +version = "1.20141219.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4dc33fb8e6bcba213fe2f14275f0963fd16f0a02c878e3095ecfdf5bee529d81" +dependencies = [ + "encoding_index_tests", +] + +[[package]] +name = "encoding-index-simpchinese" +version = "1.20141219.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d87a7194909b9118fc707194baa434a4e3b0fb6a5a757c73c3adb07aa25031f7" +dependencies = [ + "encoding_index_tests", +] + +[[package]] +name = "encoding-index-singlebyte" +version = "1.20141219.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3351d5acffb224af9ca265f435b859c7c01537c0849754d3db3fdf2bfe2ae84a" +dependencies = [ + "encoding_index_tests", +] + +[[package]] +name = "encoding-index-tradchinese" +version = "1.20141219.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fd0e20d5688ce3cab59eb3ef3a2083a5c77bf496cb798dc6fcdb75f323890c18" +dependencies = [ + "encoding_index_tests", +] + +[[package]] +name = "encoding_index_tests" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a246d82be1c9d791c5dfde9a2bd045fc3cbba3fa2b11ad558f27d01712f00569" + +[[package]] +name = "encoding_rs" +version = "0.8.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "071a31f4ee85403370b58aca746f01041ede6f0da2730960ad001edc2b71b394" +dependencies = [ + "cfg-if 1.0.0", +] + +[[package]] +name = "env_logger" +version = "0.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a12e6657c4c97ebab115a42dcee77225f7f482cdd841cf7088c657a42e9e00e7" +dependencies = [ + "atty", + "humantime", + "log", + "regex", + "termcolor", +] + +[[package]] +name = "errno" +version = "0.2.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f639046355ee4f37944e44f60642c6f3a7efa3cf6b78c78a0d989a8ce6c396a1" +dependencies = [ + "errno-dragonfly", + "libc", + "winapi 0.3.9", +] + +[[package]] +name = "errno-dragonfly" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aa68f1b12764fab894d2755d2518754e71b4fd80ecfb822714a1206c2aab39bf" +dependencies = [ + "cc", + "libc", +] + +[[package]] +name = "error-chain" +version = "0.12.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2d2f06b9cac1506ece98fe3231e3cc9c4410ec3d5b1f24ae1c8946f0742cdefc" +dependencies = [ + "version_check", +] + +[[package]] +name = "errors" +version = "0.1.0" +dependencies = [ + "anyhow", +] + +[[package]] +name = "exr" +version = "1.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bdd2162b720141a91a054640662d3edce3d50a944a50ffca5313cd951abb35b4" +dependencies = [ + "bit_field", + "flume", + "half", + "lebe", + "miniz_oxide", + "rayon-core", + "smallvec", + "zune-inflate", +] + +[[package]] +name = "fake-simd" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e88a8acf291dafb59c2d96e8f59828f3838bb1a70398823ade51a84de6a6deed" + +[[package]] +name = "fastrand" +version = "1.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e51093e27b0797c359783294ca4f0a911c270184cb10f85783b118614a1501be" +dependencies = [ + "instant", +] + +[[package]] +name = "filetime" +version = "0.2.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a3de6e8d11b22ff9edc6d916f890800597d60f8b2da1caf2955c274638d6412" +dependencies = [ + "cfg-if 1.0.0", + "libc", + "redox_syscall", + "windows-sys 0.45.0", +] + +[[package]] +name = "flate2" +version = "1.0.25" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8a2db397cb1c8772f31494cb8917e48cd1e64f0fa7efac59fbd741a0a8ce841" +dependencies = [ + "crc32fast", + "miniz_oxide", +] + +[[package]] +name = "flume" +version = "0.10.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1657b4441c3403d9f7b3409e47575237dac27b1b5726df654a6ecbf92f0f7577" +dependencies = [ + "futures-core", + "futures-sink", + "nanorand", + "pin-project", + "spin 0.9.6", +] + +[[package]] +name = "fnv" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" + +[[package]] +name = "foreign-types" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1" +dependencies = [ + "foreign-types-shared", +] + +[[package]] +name = "foreign-types-shared" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" + +[[package]] +name = "form_urlencoded" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a9c384f161156f5260c24a097c56119f9be8c798586aecc13afbcbe7b7e26bf8" +dependencies = [ + "percent-encoding", +] + +[[package]] +name = "fsevent" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5ab7d1bd1bd33cc98b0889831b72da23c0aa4df9cec7e0702f46ecea04b35db6" +dependencies = [ + "bitflags 1.3.2", + "fsevent-sys", +] + +[[package]] +name = "fsevent-sys" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f41b048a94555da0f42f1d632e2e19510084fb8e303b0daa2816e733fb3644a0" +dependencies = [ + "libc", +] + +[[package]] +name = "fuchsia-zircon" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2e9763c69ebaae630ba35f74888db465e49e259ba1bc0eda7d06f4a067615d82" +dependencies = [ + "bitflags 1.3.2", + "fuchsia-zircon-sys", +] + +[[package]] +name = "fuchsia-zircon-sys" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3dcaa9ae7725d12cdb85b3ad99a434db70b468c09ded17e012d86b5c1010f7a7" + +[[package]] +name = "futf" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df420e2e84819663797d1ec6544b13c5be84629e7bb00dc960d6917db2987843" +dependencies = [ + "mac", + "new_debug_unreachable", +] + +[[package]] +name = "futures-channel" +version = "0.3.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "164713a5a0dcc3e7b4b1ed7d3b433cabc18025386f9339346e8daf15963cf7ac" +dependencies = [ + "futures-core", +] + +[[package]] +name = "futures-core" +version = "0.3.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "86d7a0c1aa76363dac491de0ee99faf6941128376f1cf96f07db7603b7de69dd" + +[[package]] +name = "futures-io" +version = "0.3.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "89d422fa3cbe3b40dca574ab087abb5bc98258ea57eea3fd6f1fa7162c778b91" + +[[package]] +name = "futures-sink" +version = "0.3.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec93083a4aecafb2a80a885c9de1f0ccae9dbd32c2bb54b0c3a65690e0b8d2f2" + +[[package]] +name = "futures-task" +version = "0.3.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fd65540d33b37b16542a0438c12e6aeead10d4ac5d05bd3f805b8f35ab592879" + +[[package]] +name = "futures-util" +version = "0.3.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3ef6b17e481503ec85211fed8f39d1970f128935ca1f814cd32ac4a6842e84ab" +dependencies = [ + "futures-core", + "futures-io", + "futures-task", + "memchr", + "pin-project-lite", + "pin-utils", + "slab", +] + +[[package]] +name = "fxhash" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c31b6d751ae2c7f11320402d34e41349dd1016f8d5d45e48c4312bc8625af50c" +dependencies = [ + "byteorder", +] + +[[package]] +name = "generic-array" +version = "0.12.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ffdf9f34f1447443d37393cc6c2b8313aebddcd96906caf34e54c68d8e57d7bd" +dependencies = [ + "typenum", +] + +[[package]] +name = "generic-array" +version = "0.14.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bff49e947297f3312447abdca79f45f4738097cc82b06e72054d2223f601f1b9" +dependencies = [ + "typenum", + "version_check", +] + +[[package]] +name = "getrandom" +version = "0.1.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8fc3cb4d91f53b50155bdcfd23f6a4c39ae1969c2ae85982b135750cccaf5fce" +dependencies = [ + "cfg-if 1.0.0", + "libc", + "wasi 0.9.0+wasi-snapshot-preview1", +] + +[[package]] +name = "getrandom" +version = "0.2.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c05aeb6a22b8f62540c194aac980f2115af067bfe15a0734d7277a768d396b31" +dependencies = [ + "cfg-if 1.0.0", + "js-sys", + "libc", + "wasi 0.11.0+wasi-snapshot-preview1", + "wasm-bindgen", +] + +[[package]] +name = "gh-emoji" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "30ad64b43d48c1745c0059e5ba223816eb599eec8956c668fc0a31f6b9cd799e" +dependencies = [ + "phf 0.11.1", + "regex", +] + +[[package]] +name = "gif" +version = "0.11.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3edd93c6756b4dfaf2709eafcc345ba2636565295c198a9cfbf75fa5e3e00b06" +dependencies = [ + "color_quant", + "weezl", +] + +[[package]] +name = "glob" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b" + +[[package]] +name = "globset" +version = "0.4.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "029d74589adefde59de1a0c4f4732695c32805624aec7b68d91503d4dba79afc" +dependencies = [ + "aho-corasick", + "bstr", + "fnv", + "log", + "regex", +] + +[[package]] +name = "globwalk" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93e3af942408868f6934a7b85134a3230832b9977cf66125df2f9edcfce4ddcc" +dependencies = [ + "bitflags 1.3.2", + "ignore", + "walkdir", +] + +[[package]] +name = "grass" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f4bfa010e6f9fe2f40727b4aedf67aa54e0439c57f855458efb1f43d730a028f" +dependencies = [ + "grass_compiler", +] + +[[package]] +name = "grass_compiler" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "abe05b48c9c96f5ec64ad9af20c9016a8d57ec8b979e0f6dbdd9747f32b16df3" +dependencies = [ + "codemap", + "indexmap", + "lasso", + "once_cell", + "phf 0.10.1", + "rand 0.8.5", +] + +[[package]] +name = "h2" +version = "0.3.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5be7b54589b581f624f566bf5d8eb2bab1db736c51528720b6bd36b96b55924d" +dependencies = [ + "bytes 1.4.0", + "fnv", + "futures-core", + "futures-sink", + "futures-util", + "http", + "indexmap", + "slab", + "tokio", + "tokio-util", + "tracing", +] + +[[package]] +name = "half" +version = "2.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "02b4af3693f1b705df946e9fe5631932443781d0aabb423b62fcd4d73f6d2fd0" +dependencies = [ + "crunchy", +] + +[[package]] +name = "hashbrown" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ab5ef0d4909ef3724cc8cce6ccc8572c5c817592e9285f5464f8e86f8bd3726e" +dependencies = [ + "ahash 0.7.6", +] + +[[package]] +name = "hashbrown" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" + +[[package]] +name = "heck" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" + +[[package]] +name = "hermit-abi" +version = "0.1.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33" +dependencies = [ + "libc", +] + +[[package]] +name = "hermit-abi" +version = "0.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee512640fe35acbfb4bb779db6f0d80704c2cacfa2e39b601ef3e3f47d1ae4c7" +dependencies = [ + "libc", +] + +[[package]] +name = "hermit-abi" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fed44880c466736ef9a5c5b5facefb5ed0785676d0c02d612db14e54f0d84286" + +[[package]] +name = "html5ever" +version = "0.26.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bea68cab48b8459f17cf1c944c67ddc572d272d9f2b274140f223ecb1da4a3b7" +dependencies = [ + "log", + "mac", + "markup5ever", + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "http" +version = "0.2.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bd6effc99afb63425aff9b05836f029929e345a6148a14b7ecd5ab67af944482" +dependencies = [ + "bytes 1.4.0", + "fnv", + "itoa", +] + +[[package]] +name = "http-body" +version = "0.4.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d5f38f16d184e36f2408a55281cd658ecbd3ca05cce6d6510a176eca393e26d1" +dependencies = [ + "bytes 1.4.0", + "http", + "pin-project-lite", +] + +[[package]] +name = "httparse" +version = "1.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d897f394bad6a705d5f4104762e116a75639e470d80901eed05a860a95cb1904" + +[[package]] +name = "httpdate" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c4a1e36c821dbe04574f602848a19f742f4fb3c98d40449f11bcad18d6b17421" + +[[package]] +name = "humansize" +version = "2.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6cb51c9a029ddc91b07a787f1d86b53ccfa49b0e86688c946ebe8d3555685dd7" +dependencies = [ + "libm", +] + +[[package]] +name = "humantime" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4" + +[[package]] +name = "hyper" +version = "0.14.25" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cc5e554ff619822309ffd57d8734d77cd5ce6238bc956f037ea06c58238c9899" +dependencies = [ + "bytes 1.4.0", + "futures-channel", + "futures-core", + "futures-util", + "h2", + "http", + "http-body", + "httparse", + "httpdate", + "itoa", + "pin-project-lite", + "socket2", + "tokio", + "tower-service", + "tracing", + "want", +] + +[[package]] +name = "hyper-rustls" +version = "0.23.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1788965e61b367cd03a62950836d5cd41560c3577d90e40e0819373194d1661c" +dependencies = [ + "http", + "hyper", + "rustls", + "tokio", + "tokio-rustls", +] + +[[package]] +name = "hyper-tls" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d6183ddfa99b85da61a140bea0efc93fdf56ceaa041b37d553518030827f9905" +dependencies = [ + "bytes 1.4.0", + "hyper", + "native-tls", + "tokio", + "tokio-native-tls", +] + +[[package]] +name = "iana-time-zone" +version = "0.1.53" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "64c122667b287044802d6ce17ee2ddf13207ed924c712de9a66a5814d5b64765" +dependencies = [ + "android_system_properties", + "core-foundation-sys", + "iana-time-zone-haiku", + "js-sys", + "wasm-bindgen", + "winapi 0.3.9", +] + +[[package]] +name = "iana-time-zone-haiku" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0703ae284fc167426161c2e3f1da3ea71d94b21bedbcc9494e92b28e334e3dca" +dependencies = [ + "cxx", + "cxx-build", +] + +[[package]] +name = "idna" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e14ddfc70884202db2244c223200c204c2bda1bc6e0998d11b5e024d657209e6" +dependencies = [ + "unicode-bidi", + "unicode-normalization", +] + +[[package]] +name = "ignore" +version = "0.4.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dbe7873dab538a9a44ad79ede1faf5f30d49f9a5c883ddbab48bce81b64b7492" +dependencies = [ + "globset", + "lazy_static", + "log", + "memchr", + "regex", + "same-file", + "thread_local", + "walkdir", + "winapi-util", +] + +[[package]] +name = "image" +version = "0.24.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "69b7ea949b537b0fd0af141fff8c77690f2ce96f4f41f042ccb6c69c6c965945" +dependencies = [ + "bytemuck", + "byteorder", + "color_quant", + "exr", + "gif", + "jpeg-decoder", + "num-rational", + "num-traits", + "png", + "scoped_threadpool", + "tiff", +] + +[[package]] +name = "imageproc" +version = "0.1.0" +dependencies = [ + "config", + "errors", + "kamadak-exif", + "libs", + "serde", + "tempfile", + "utils", +] + +[[package]] +name = "indexmap" +version = "1.9.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1885e79c1fc4b10f0e172c475f458b7f7b93061064d98c3293e98c5ba0c8b399" +dependencies = [ + "autocfg", + "hashbrown 0.12.3", +] + +[[package]] +name = "inotify" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4816c66d2c8ae673df83366c18341538f234a26d65a9ecea5c348b453ac1d02f" +dependencies = [ + "bitflags 1.3.2", + "inotify-sys", + "libc", +] + +[[package]] +name = "inotify-sys" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e05c02b5e89bff3b946cedeca278abc628fe811e604f027c45a8aa3cf793d0eb" +dependencies = [ + "libc", +] + +[[package]] +name = "insta" +version = "1.28.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fea5b3894afe466b4bcf0388630fc15e11938a6074af0cd637c825ba2ec8a099" +dependencies = [ + "console 0.15.5", + "lazy_static", + "linked-hash-map", + "similar", + "yaml-rust", +] + +[[package]] +name = "instant" +version = "0.1.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c" +dependencies = [ + "cfg-if 1.0.0", +] + +[[package]] +name = "io-lifetimes" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cfa919a82ea574332e2de6e74b4c36e74d41982b335080fa59d4ef31be20fdf3" +dependencies = [ + "libc", + "windows-sys 0.45.0", +] + +[[package]] +name = "iovec" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b2b3ea6ff95e175473f8ffe6a7eb7c00d054240321b84c57051175fe3c1e075e" +dependencies = [ + "libc", +] + +[[package]] +name = "ipnet" +version = "2.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "30e22bd8629359895450b59ea7a776c850561b96a3b1d31321c1949d9e6c9146" + +[[package]] +name = "is-terminal" +version = "0.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "21b6b32576413a8e69b90e952e4a026476040d81017b80445deda5f2d3921857" +dependencies = [ + "hermit-abi 0.3.1", + "io-lifetimes", + "rustix", + "windows-sys 0.45.0", +] + +[[package]] +name = "itoa" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "453ad9f582a441959e5f0d088b02ce04cfe8d51a8eaf077f12ac6d3e94164ca6" + +[[package]] +name = "jieba-rs" +version = "0.6.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "37228e06c75842d1097432d94d02f37fe3ebfca9791c2e8fef6e9db17ed128c1" +dependencies = [ + "cedarwood", + "fxhash", + "hashbrown 0.12.3", + "lazy_static", + "phf 0.11.1", + "phf_codegen 0.11.1", + "regex", +] + +[[package]] +name = "jobserver" +version = "0.1.26" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "936cfd212a0155903bcbc060e316fb6cc7cbf2e1907329391ebadc1fe0ce77c2" +dependencies = [ + "libc", +] + +[[package]] +name = "jpeg-decoder" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bc0000e42512c92e31c2252315bda326620a4e034105e900c98ec492fa077b3e" +dependencies = [ + "rayon", +] + +[[package]] +name = "js-sys" +version = "0.3.61" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "445dde2150c55e483f3d8416706b97ec8e8237c307e5b7b4b8dd15e6af2a0730" +dependencies = [ + "wasm-bindgen", +] + +[[package]] +name = "kamadak-exif" +version = "0.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ef4fc70d0ab7e5b6bafa30216a6b48705ea964cdfc29c050f2412295eba58077" +dependencies = [ + "mutate_once", +] + +[[package]] +name = "kernel32-sys" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7507624b29483431c0ba2d82aece8ca6cdba9382bff4ddd0f7490560c056098d" +dependencies = [ + "winapi 0.2.8", + "winapi-build", +] + +[[package]] +name = "lasso" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aeb7b21a526375c5ca55f1a6dfd4e1fad9fa4edd750f530252a718a44b2608f0" +dependencies = [ + "hashbrown 0.11.2", +] + +[[package]] +name = "lazy_static" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" + +[[package]] +name = "lazycell" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "830d08ce1d1d941e6b30645f1a0eb5643013d835ce3779a5fc208261dbe10f55" + +[[package]] +name = "lebe" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "03087c2bad5e1034e8cace5926dec053fb3790248370865f5117a7d0213354c8" + +[[package]] +name = "lexical-core" +version = "0.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6607c62aa161d23d17a9072cc5da0be67cdfc89d3afb1e8d9c842bebc2525ffe" +dependencies = [ + "arrayvec 0.5.2", + "bitflags 1.3.2", + "cfg-if 1.0.0", + "ryu", + "static_assertions", +] + +[[package]] +name = "lexical-sort" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c09e4591611e231daf4d4c685a66cb0410cc1e502027a20ae55f2bb9e997207a" +dependencies = [ + "any_ascii", +] + +[[package]] +name = "libc" +version = "0.2.140" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "99227334921fae1a979cf0bfdfcc6b3e5ce376ef57e16fb6fb3ea2ed6095f80c" + +[[package]] +name = "libm" +version = "0.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "348108ab3fba42ec82ff6e9564fc4ca0247bdccdc68dd8af9764bbc79c3c8ffb" + +[[package]] +name = "libs" +version = "0.1.0" +dependencies = [ + "ahash 0.8.3", + "ammonia", + "atty", + "base64", + "csv", + "elasticlunr-rs", + "filetime", + "gh-emoji", + "glob", + "globset", + "grass", + "image", + "lexical-sort", + "minify-html", + "nom-bibtex", + "num-format", + "once_cell", + "percent-encoding", + "pulldown-cmark 0.9.2 (git+https://github.com/litao91/pulldown-cmark?rev=93f35818b85bfacc770b0b23115d3d4be244944f)", + "quickxml_to_serde", + "rayon", + "regex", + "relative-path", + "reqwest", + "serde_json", + "serde_yaml", + "sha2", + "slug", + "svg_metadata", + "syntect", + "tera", + "termcolor", + "time", + "toml 0.7.3", + "unic-langid", + "unicode-segmentation", + "url", + "walkdir", + "webp", +] + +[[package]] +name = "libwebp-sys" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "439fd1885aa28937e7edcd68d2e793cb4a22f8733460d2519fbafd2b215672bf" +dependencies = [ + "cc", +] + +[[package]] +name = "lindera" +version = "0.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4dddd011921cac0ec59025a6b6e26c2cd9af3adce384b56c753c31df71a07965" +dependencies = [ + "anyhow", + "bincode", + "byteorder", + "encoding", + "lindera-cc-cedict-builder", + "lindera-core", + "lindera-dictionary", + "lindera-ipadic", + "lindera-ipadic-builder", + "lindera-ko-dic-builder", + "lindera-unidic-builder", + "serde", + "serde_json", + "thiserror", +] + +[[package]] +name = "lindera-cc-cedict-builder" +version = "0.13.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "584491a91b758f92ef3202aaf969d837522f2c11390c4de0049a356d63bc0b0f" +dependencies = [ + "anyhow", + "bincode", + "byteorder", + "clap 3.2.23", + "csv", + "encoding", + "env_logger", + "glob", + "lindera-core", + "lindera-decompress", + "log", + "yada", +] + +[[package]] +name = "lindera-core" +version = "0.13.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c726ee1bf3282621a802d50f5e03d3f88aae41456815e1d0cb2271a538ff83ec" +dependencies = [ + "anyhow", + "bincode", + "byteorder", + "encoding", + "log", + "serde", + "thiserror", + "yada", +] + +[[package]] +name = "lindera-decompress" +version = "0.13.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6f9df38ea9310a1256cdee64ff0ebe3f17c49314e3176e53d2213371729d6744" +dependencies = [ + "anyhow", + "lzma-rs", + "serde", +] + +[[package]] +name = "lindera-dictionary" +version = "0.13.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0a525b654642ff9f27927c5abba33f4c651e984b54a65e4f787c0b8c8e22e4a6" +dependencies = [ + "anyhow", + "bincode", + "byteorder", + "lindera-core", +] + +[[package]] +name = "lindera-ipadic" +version = "0.13.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4797e016fc7dc0709ddb8c31da3b9e923e33e14043a4ff58431dd9c447ffacd2" +dependencies = [ + "bincode", + "byteorder", + "encoding", + "flate2", + "lindera-core", + "lindera-ipadic-builder", + "once_cell", + "tar", +] + +[[package]] +name = "lindera-ipadic-builder" +version = "0.13.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9bd3ecfb07e8810f5ba313fa836804b66120f0ea76c2d93948c2ddcf4f81fd90" +dependencies = [ + "anyhow", + "bincode", + "byteorder", + "clap 3.2.23", + "encoding", + "env_logger", + "glob", + "lindera-core", + "lindera-decompress", + "log", + "serde", + "yada", +] + +[[package]] +name = "lindera-ko-dic-builder" +version = "0.13.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fc86f26560ea69e91413eecc078d8e13f39b3c1fdc5a242d79d7622f6fab3a83" +dependencies = [ + "anyhow", + "bincode", + "byteorder", + "clap 3.2.23", + "csv", + "encoding", + "env_logger", + "glob", + "lindera-core", + "lindera-decompress", + "log", + "yada", +] + +[[package]] +name = "lindera-unidic-builder" +version = "0.13.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05c1bb8b7d38ffec7d949ee2c603b6ef96dfa7cf4937e91bad295a2d2b267b82" +dependencies = [ + "anyhow", + "bincode", + "byteorder", + "clap 3.2.23", + "csv", + "encoding", + "env_logger", + "glob", + "lindera-core", + "lindera-decompress", + "log", + "yada", +] + +[[package]] +name = "line-wrap" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f30344350a2a51da54c1d53be93fade8a237e545dbcc4bdbe635413f2117cab9" +dependencies = [ + "safemem", +] + +[[package]] +name = "link-cplusplus" +version = "1.0.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ecd207c9c713c34f95a097a5b029ac2ce6010530c7b49d7fea24d977dede04f5" +dependencies = [ + "cc", +] + +[[package]] +name = "link_checker" +version = "0.1.0" +dependencies = [ + "config", + "errors", + "libs", + "mockito", + "utils", +] + +[[package]] +name = "linked-hash-map" +version = "0.5.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0717cef1bc8b636c6e1c1bbdefc09e6322da8a9321966e8928ef80d20f7f770f" + +[[package]] +name = "linux-raw-sys" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f051f77a7c8e6957c0696eac88f26b0117e54f52d3fc682ab19397a8812846a4" + +[[package]] +name = "lock_api" +version = "0.4.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "435011366fe56583b16cf956f9df0095b405b82d76425bc8981c0e22e60ec4df" +dependencies = [ + "autocfg", + "scopeguard", +] + +[[package]] +name = "log" +version = "0.4.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "abb12e687cfb44aa40f41fc3978ef76448f9b6038cad6aef4259d3c095a2382e" +dependencies = [ + "cfg-if 1.0.0", +] + +[[package]] +name = "lzma-rs" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aba8ecb0450dfabce4ad72085eed0a75dffe8f21f7ada05638564ea9db2d7fb1" +dependencies = [ + "byteorder", + "crc", +] + +[[package]] +name = "mac" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c41e0c4fef86961ac6d6f8a82609f55f31b05e4fce149ac5710e439df7619ba4" + +[[package]] +name = "maplit" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3e2e65a1a2e43cfcb47a895c4c8b10d1f4a61097f9f254f183aee60cad9c651d" + +[[package]] +name = "markdown" +version = "0.1.0" +dependencies = [ + "config", + "console 0.1.0", + "errors", + "insta", + "libs", + "pest", + "pest_derive", + "templates", + "utils", +] + +[[package]] +name = "markup5ever" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a2629bb1404f3d34c2e921f21fd34ba00b206124c81f65c50b43b6aaefeb016" +dependencies = [ + "log", + "phf 0.10.1", + "phf_codegen 0.10.0", + "string_cache", + "string_cache_codegen", + "tendril", +] + +[[package]] +name = "memchr" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d" + +[[package]] +name = "memoffset" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d61c719bcfbcf5d62b3a09efa6088de8c54bc0bfcd3ea7ae39fcc186108b8de1" +dependencies = [ + "autocfg", +] + +[[package]] +name = "mime" +version = "0.3.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2a60c7ce501c71e03a9c9c0d35b861413ae925bd979cc7a4e30d060069aaac8d" + +[[package]] +name = "mime_guess" +version = "2.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4192263c238a5f0d0c6bfd21f336a313a4ce1c450542449ca191bb657b4642ef" +dependencies = [ + "mime", + "unicase", +] + +[[package]] +name = "minidom" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fe549115a674f5ec64c754d85e37d6f42664bd0ef4ffb62b619489ad99c6cb1a" +dependencies = [ + "quick-xml 0.17.2", +] + +[[package]] +name = "minify-html" +version = "0.10.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7754d4669873379ea6a8a5b56e406eb83de713af8a791517ef35a0c832b1e7d5" +dependencies = [ + "aho-corasick", + "css-minify", + "lazy_static", + "memchr", + "minify-js", + "rustc-hash", +] + +[[package]] +name = "minify-js" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c300f90ba1138b5c5daf5d9441dc9bdc67b808aac22cf638362a2647bc213be4" +dependencies = [ + "lazy_static", + "parse-js", +] + +[[package]] +name = "minimal-lexical" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" + +[[package]] +name = "miniz_oxide" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b275950c28b37e794e8c55d88aeb5e139d0ce23fdbbeda68f8d7174abdf9e8fa" +dependencies = [ + "adler", +] + +[[package]] +name = "mio" +version = "0.6.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4afd66f5b91bf2a3bc13fad0e21caedac168ca4c707504e75585648ae80e4cc4" +dependencies = [ + "cfg-if 0.1.10", + "fuchsia-zircon", + "fuchsia-zircon-sys", + "iovec", + "kernel32-sys", + "libc", + "log", + "miow", + "net2", + "slab", + "winapi 0.2.8", +] + +[[package]] +name = "mio" +version = "0.8.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b9d9a46eff5b4ff64b45a9e316a6d1e0bc719ef429cbec4dc630684212bfdf9" +dependencies = [ + "libc", + "log", + "wasi 0.11.0+wasi-snapshot-preview1", + "windows-sys 0.45.0", +] + +[[package]] +name = "mio-extras" +version = "2.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "52403fe290012ce777c4626790c8951324a2b9e3316b3143779c72b029742f19" +dependencies = [ + "lazycell", + "log", + "mio 0.6.23", + "slab", +] + +[[package]] +name = "miow" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ebd808424166322d4a38da87083bfddd3ac4c131334ed55856112eb06d46944d" +dependencies = [ + "kernel32-sys", + "net2", + "winapi 0.2.8", + "ws2_32-sys", +] + +[[package]] +name = "mockito" +version = "0.31.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "80f9fece9bd97ab74339fe19f4bcaf52b76dcc18e5364c7977c1838f76b38de9" +dependencies = [ + "assert-json-diff", + "colored", + "httparse", + "lazy_static", + "log", + "rand 0.8.5", + "regex", + "serde_json", + "serde_urlencoded", + "similar", +] + +[[package]] +name = "mutate_once" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "16cf681a23b4d0a43fc35024c176437f9dcd818db34e0f42ab456a0ee5ad497b" + +[[package]] +name = "nanorand" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6a51313c5820b0b02bd422f4b44776fbf47961755c74ce64afc73bfad10226c3" +dependencies = [ + "getrandom 0.2.8", +] + +[[package]] +name = "native-tls" +version = "0.2.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "07226173c32f2926027b63cce4bcd8076c3552846cbe7925f3aaffeac0a3b92e" +dependencies = [ + "lazy_static", + "libc", + "log", + "openssl", + "openssl-probe", + "openssl-sys", + "schannel", + "security-framework", + "security-framework-sys", + "tempfile", +] + +[[package]] +name = "net2" +version = "0.2.38" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "74d0df99cfcd2530b2e694f6e17e7f37b8e26bb23983ac530c0c97408837c631" +dependencies = [ + "cfg-if 0.1.10", + "libc", + "winapi 0.3.9", +] + +[[package]] +name = "new_debug_unreachable" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e4a24736216ec316047a1fc4252e27dabb04218aa4a3f37c6e7ddbf1f9782b54" + +[[package]] +name = "nix" +version = "0.26.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bfdda3d196821d6af13126e40375cdf7da646a96114af134d5f417a9a1dc8e1a" +dependencies = [ + "bitflags 1.3.2", + "cfg-if 1.0.0", + "libc", + "static_assertions", +] + +[[package]] +name = "nom" +version = "5.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ffb4262d26ed83a1c0a33a38fe2bb15797329c85770da05e6b828ddb782627af" +dependencies = [ + "lexical-core", + "memchr", + "version_check", +] + +[[package]] +name = "nom" +version = "7.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a" +dependencies = [ + "memchr", + "minimal-lexical", +] + +[[package]] +name = "nom-bibtex" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c9db257f6c7b9c8b3ab67ee6a4b23a290c157d183fef2ac065bf9fce5f1c1299" +dependencies = [ + "nom 5.1.2", + "nom-tracable", + "nom_locate 2.1.0", + "quick-error", +] + +[[package]] +name = "nom-tracable" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e012c742e1269f801f6bfe0d1ebf99d7a3f7bc1d65c970bab0e7bee439e31610" +dependencies = [ + "nom 5.1.2", + "nom-tracable-macros", + "nom_locate 1.0.0", + "nom_locate 2.1.0", +] + +[[package]] +name = "nom-tracable-macros" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "65ad630ff46d4c61da89042f327e6fdf104a6ebb667565727ef0bb294a7c3197" +dependencies = [ + "quote", + "syn", +] + +[[package]] +name = "nom_locate" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f932834fd8e391fc7710e2ba17e8f9f8645d846b55aa63207e17e110a1e1ce35" +dependencies = [ + "bytecount 0.3.2", + "memchr", + "nom 5.1.2", +] + +[[package]] +name = "nom_locate" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a67484adf5711f94f2f28b653bf231bff8e438be33bf5b0f35935a0db4f618a2" +dependencies = [ + "bytecount 0.6.3", + "memchr", + "nom 5.1.2", +] + +[[package]] +name = "notify" +version = "4.0.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ae03c8c853dba7bfd23e571ff0cff7bc9dceb40a4cd684cd1681824183f45257" +dependencies = [ + "bitflags 1.3.2", + "filetime", + "fsevent", + "fsevent-sys", + "inotify", + "libc", + "mio 0.6.23", + "mio-extras", + "walkdir", + "winapi 0.3.9", +] + +[[package]] +name = "num-format" +version = "0.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a652d9771a63711fd3c3deb670acfbe5c30a4072e664d7a3bf5a9e1056ac72c3" +dependencies = [ + "arrayvec 0.7.2", + "itoa", +] + +[[package]] +name = "num-integer" +version = "0.1.45" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "225d3389fb3509a24c93f5c29eb6bde2586b98d9f016636dff58d7c6f7569cd9" +dependencies = [ + "autocfg", + "num-traits", +] + +[[package]] +name = "num-rational" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0638a1c9d0a3c0914158145bc76cff373a75a627e6ecbfb71cbe6f453a5a19b0" +dependencies = [ + "autocfg", + "num-integer", + "num-traits", +] + +[[package]] +name = "num-traits" +version = "0.2.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "578ede34cf02f8924ab9447f50c28075b4d3e5b269972345e7e0372b38c6cdcd" +dependencies = [ + "autocfg", +] + +[[package]] +name = "num_cpus" +version = "1.15.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fac9e2da13b5eb447a6ce3d392f23a29d8694bff781bf03a16cd9ac8697593b" +dependencies = [ + "hermit-abi 0.2.6", + "libc", +] + +[[package]] +name = "num_threads" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2819ce041d2ee131036f4fc9d6ae7ae125a3a40e97ba64d04fe799ad9dabbb44" +dependencies = [ + "libc", +] + +[[package]] +name = "once_cell" +version = "1.17.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b7e5500299e16ebb147ae15a00a942af264cf3688f47923b8fc2cd5858f23ad3" + +[[package]] +name = "onig" +version = "6.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8c4b31c8722ad9171c6d77d3557db078cab2bd50afcc9d09c8b315c59df8ca4f" +dependencies = [ + "bitflags 1.3.2", + "libc", + "once_cell", + "onig_sys", +] + +[[package]] +name = "onig_sys" +version = "69.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b829e3d7e9cc74c7e315ee8edb185bf4190da5acde74afd7fc59c35b1f086e7" +dependencies = [ + "cc", + "pkg-config", +] + +[[package]] +name = "opaque-debug" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2839e79665f131bdb5782e51f2c6c9599c133c6098982a54c794358bf432529c" + +[[package]] +name = "open" +version = "3.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "21ecf2487e799604735754d2c5896106785987b441b5aee58f242e4d4963179a" +dependencies = [ + "pathdiff", +] + +[[package]] +name = "openssl" +version = "0.10.46" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fd2523381e46256e40930512c7fd25562b9eae4812cb52078f155e87217c9d1e" +dependencies = [ + "bitflags 1.3.2", + "cfg-if 1.0.0", + "foreign-types", + "libc", + "once_cell", + "openssl-macros", + "openssl-sys", +] + +[[package]] +name = "openssl-macros" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b501e44f11665960c7e7fcf062c7d96a14ade4aa98116c004b2e37b5be7d736c" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "openssl-probe" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" + +[[package]] +name = "openssl-sys" +version = "0.9.81" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "176be2629957c157240f68f61f2d0053ad3a4ecfdd9ebf1e6521d18d9635cf67" +dependencies = [ + "autocfg", + "cc", + "libc", + "pkg-config", + "vcpkg", +] + +[[package]] +name = "os_str_bytes" +version = "6.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b7820b9daea5457c9f21c69448905d723fbd21136ccf521748f23fd49e723ee" + +[[package]] +name = "parking_lot" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f" +dependencies = [ + "lock_api", + "parking_lot_core", +] + +[[package]] +name = "parking_lot_core" +version = "0.9.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9069cbb9f99e3a5083476ccb29ceb1de18b9118cafa53e90c9551235de2b9521" +dependencies = [ + "cfg-if 1.0.0", + "libc", + "redox_syscall", + "smallvec", + "windows-sys 0.45.0", +] + +[[package]] +name = "parse-js" +version = "0.10.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "30534759e6ad87aa144c396544747e1c25b1020bd133356fd758c8facec764e5" +dependencies = [ + "aho-corasick", + "lazy_static", + "memchr", +] + +[[package]] +name = "parse-zoneinfo" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c705f256449c60da65e11ff6626e0c16a0a0b96aaa348de61376b249bc340f41" +dependencies = [ + "regex", +] + +[[package]] +name = "path-slash" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e91099d4268b0e11973f036e885d652fb0b21fedcf69738c627f94db6a44f42" + +[[package]] +name = "pathdiff" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8835116a5c179084a830efb3adc117ab007512b535bc1a21c991d3b32a6b44dd" + +[[package]] +name = "percent-encoding" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "478c572c3d73181ff3c2539045f6eb99e5491218eae919370993b890cdbdd98e" + +[[package]] +name = "pest" +version = "2.5.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8cbd939b234e95d72bc393d51788aec68aeeb5d51e748ca08ff3aad58cb722f7" +dependencies = [ + "thiserror", + "ucd-trie", +] + +[[package]] +name = "pest_derive" +version = "2.5.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a81186863f3d0a27340815be8f2078dd8050b14cd71913db9fbda795e5f707d7" +dependencies = [ + "pest", + "pest_generator", +] + +[[package]] +name = "pest_generator" +version = "2.5.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75a1ef20bf3193c15ac345acb32e26b3dc3223aff4d77ae4fc5359567683796b" +dependencies = [ + "pest", + "pest_meta", + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "pest_meta" +version = "2.5.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5e3b284b1f13a20dc5ebc90aff59a51b8d7137c221131b52a7260c08cbc1cc80" +dependencies = [ + "once_cell", + "pest", + "sha2", +] + +[[package]] +name = "phf" +version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fabbf1ead8a5bcbc20f5f8b939ee3f5b0f6f281b6ad3468b84656b658b455259" +dependencies = [ + "phf_macros", + "phf_shared 0.10.0", + "proc-macro-hack", +] + +[[package]] +name = "phf" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "928c6535de93548188ef63bb7c4036bd415cd8f36ad25af44b9789b2ee72a48c" +dependencies = [ + "phf_shared 0.11.1", +] + +[[package]] +name = "phf_codegen" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4fb1c3a8bc4dd4e5cfce29b44ffc14bedd2ee294559a294e2a4d4c9e9a6a13cd" +dependencies = [ + "phf_generator 0.10.0", + "phf_shared 0.10.0", +] + +[[package]] +name = "phf_codegen" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a56ac890c5e3ca598bbdeaa99964edb5b0258a583a9eb6ef4e89fc85d9224770" +dependencies = [ + "phf_generator 0.11.1", + "phf_shared 0.11.1", +] + +[[package]] +name = "phf_generator" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5d5285893bb5eb82e6aaf5d59ee909a06a16737a8970984dd7746ba9283498d6" +dependencies = [ + "phf_shared 0.10.0", + "rand 0.8.5", +] + +[[package]] +name = "phf_generator" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b1181c94580fa345f50f19d738aaa39c0ed30a600d95cb2d3e23f94266f14fbf" +dependencies = [ + "phf_shared 0.11.1", + "rand 0.8.5", +] + +[[package]] +name = "phf_macros" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "58fdf3184dd560f160dd73922bea2d5cd6e8f064bf4b13110abd81b03697b4e0" +dependencies = [ + "phf_generator 0.10.0", + "phf_shared 0.10.0", + "proc-macro-hack", + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "phf_shared" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6796ad771acdc0123d2a88dc428b5e38ef24456743ddb1744ed628f9815c096" +dependencies = [ + "siphasher", + "uncased", +] + +[[package]] +name = "phf_shared" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e1fb5f6f826b772a8d4c0394209441e7d37cbbb967ae9c7e0e8134365c9ee676" +dependencies = [ + "siphasher", +] + +[[package]] +name = "pin-project" +version = "1.0.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ad29a609b6bcd67fee905812e544992d216af9d755757c05ed2d0e15a74c6ecc" +dependencies = [ + "pin-project-internal", +] + +[[package]] +name = "pin-project-internal" +version = "1.0.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "069bdb1e05adc7a8990dce9cc75370895fbe4e3d58b9b73bf1aee56359344a55" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "pin-project-lite" +version = "0.2.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e0a7ae3ac2f1173085d398531c705756c94a4c56843785df85a60c1a0afac116" + +[[package]] +name = "pin-utils" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" + +[[package]] +name = "pkg-config" +version = "0.3.26" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6ac9a59f73473f1b8d852421e59e64809f025994837ef743615c6d0c5b305160" + +[[package]] +name = "plist" +version = "1.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ffac6a51110e97610dd3ac73e34a65b27e56a1e305df41bad1f616d8e1cb22f4" +dependencies = [ + "base64", + "indexmap", + "line-wrap", + "quick-xml 0.27.1", + "serde", + "time", +] + +[[package]] +name = "png" +version = "0.17.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5d708eaf860a19b19ce538740d2b4bdeeb8337fa53f7738455e706623ad5c638" +dependencies = [ + "bitflags 1.3.2", + "crc32fast", + "flate2", + "miniz_oxide", +] + +[[package]] +name = "ppv-lite86" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de" + +[[package]] +name = "precomputed-hash" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "925383efa346730478fb4838dbe9137d2a47675ad789c546d150a6e1dd4ab31c" + +[[package]] +name = "proc-macro-error" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c" +dependencies = [ + "proc-macro-error-attr", + "proc-macro2", + "quote", + "syn", + "version_check", +] + +[[package]] +name = "proc-macro-error-attr" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869" +dependencies = [ + "proc-macro2", + "quote", + "version_check", +] + +[[package]] +name = "proc-macro-hack" +version = "0.5.20+deprecated" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc375e1527247fe1a97d8b7156678dfe7c1af2fc075c9a4db3690ecd2a148068" + +[[package]] +name = "proc-macro2" +version = "1.0.52" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d0e1ae9e836cc3beddd63db0df682593d7e2d3d891ae8c9083d2113e1744224" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "pulldown-cmark" +version = "0.9.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2d9cc634bc78768157b5cbfe988ffcd1dcba95cd2b2f03a88316c08c6d00ed63" +dependencies = [ + "bitflags 1.3.2", + "memchr", + "unicase", +] + +[[package]] +name = "pulldown-cmark" +version = "0.9.2" +source = "git+https://github.com/litao91/pulldown-cmark?rev=93f35818b85bfacc770b0b23115d3d4be244944f#93f35818b85bfacc770b0b23115d3d4be244944f" +dependencies = [ + "bitflags 2.4.1", + "memchr", + "unicase", +] + +[[package]] +name = "pure-rust-locales" +version = "0.5.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b45c49fc4f91f35bae654f85ebb3a44d60ac64f11b3166ffa609def390c732d8" + +[[package]] +name = "quick-error" +version = "1.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1d01941d82fa2ab50be1e79e6714289dd7cde78eba4c074bc5a4374f650dfe0" + +[[package]] +name = "quick-xml" +version = "0.17.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fe1e430bdcf30c9fdc25053b9c459bb1a4672af4617b6c783d7d91dc17c6bbb0" +dependencies = [ + "memchr", +] + +[[package]] +name = "quick-xml" +version = "0.27.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ffc053f057dd768a56f62cd7e434c42c831d296968997e9ac1f76ea7c2d14c41" +dependencies = [ + "memchr", +] + +[[package]] +name = "quickxml_to_serde" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "26f35112b35480fd72f63444289083eeedbd61d13907c82c4309f0ccda35e244" +dependencies = [ + "minidom", + "serde", + "serde_derive", + "serde_json", +] + +[[package]] +name = "quote" +version = "1.0.26" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4424af4bf778aae2051a77b60283332f386554255d722233d09fbfc7e30da2fc" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "rand" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6a6b1679d49b24bbfe0c803429aa1874472f50d9b363131f0e89fc356b544d03" +dependencies = [ + "getrandom 0.1.16", + "libc", + "rand_chacha 0.2.2", + "rand_core 0.5.1", + "rand_hc", +] + +[[package]] +name = "rand" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" +dependencies = [ + "libc", + "rand_chacha 0.3.1", + "rand_core 0.6.4", +] + +[[package]] +name = "rand_chacha" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f4c8ed856279c9737206bf725bf36935d8666ead7aa69b52be55af369d193402" +dependencies = [ + "ppv-lite86", + "rand_core 0.5.1", +] + +[[package]] +name = "rand_chacha" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" +dependencies = [ + "ppv-lite86", + "rand_core 0.6.4", +] + +[[package]] +name = "rand_core" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "90bde5296fc891b0cef12a6d03ddccc162ce7b2aff54160af9338f8d40df6d19" +dependencies = [ + "getrandom 0.1.16", +] + +[[package]] +name = "rand_core" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" +dependencies = [ + "getrandom 0.2.8", +] + +[[package]] +name = "rand_hc" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ca3129af7b92a17112d59ad498c6f81eaf463253766b90396d39ea7a39d6613c" +dependencies = [ + "rand_core 0.5.1", +] + +[[package]] +name = "rayon" +version = "1.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d2df5196e37bcc87abebc0053e20787d73847bb33134a69841207dd0a47f03b" +dependencies = [ + "either", + "rayon-core", +] + +[[package]] +name = "rayon-core" +version = "1.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4b8f95bd6966f5c87776639160a66bd8ab9895d9d4ab01ddba9fc60661aebe8d" +dependencies = [ + "crossbeam-channel", + "crossbeam-deque", + "crossbeam-utils", + "num_cpus", +] + +[[package]] +name = "redox_syscall" +version = "0.2.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fb5a58c1855b4b6819d59012155603f0b22ad30cad752600aadfcb695265519a" +dependencies = [ + "bitflags 1.3.2", +] + +[[package]] +name = "regex" +version = "1.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "48aaa5748ba571fb95cd2c85c09f629215d3a6ece942baa100950af03a34f733" +dependencies = [ + "aho-corasick", + "memchr", + "regex-syntax", +] + +[[package]] +name = "regex-syntax" +version = "0.6.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "456c603be3e8d448b072f410900c09faf164fbce2d480456f50eea6e25f9c848" + +[[package]] +name = "relative-path" +version = "1.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4bf2521270932c3c7bed1a59151222bd7643c79310f2916f01925e1e16255698" + +[[package]] +name = "reqwest" +version = "0.11.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "21eed90ec8570952d53b772ecf8f206aa1ec9a3d76b2521c56c42973f2d91ee9" +dependencies = [ + "base64", + "bytes 1.4.0", + "encoding_rs", + "futures-core", + "futures-util", + "h2", + "http", + "http-body", + "hyper", + "hyper-rustls", + "hyper-tls", + "ipnet", + "js-sys", + "log", + "mime", + "native-tls", + "once_cell", + "percent-encoding", + "pin-project-lite", + "rustls", + "rustls-pemfile", + "serde", + "serde_json", + "serde_urlencoded", + "tokio", + "tokio-native-tls", + "tokio-rustls", + "tower-service", + "url", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", + "webpki-roots", + "winreg", +] + +[[package]] +name = "ring" +version = "0.16.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3053cf52e236a3ed746dfc745aa9cacf1b791d846bdaf412f60a8d7d6e17c8fc" +dependencies = [ + "cc", + "libc", + "once_cell", + "spin 0.5.2", + "untrusted", + "web-sys", + "winapi 0.3.9", +] + +[[package]] +name = "roxmltree" +version = "0.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d8f595a457b6b8c6cda66a48503e92ee8d19342f905948f29c383200ec9eb1d8" +dependencies = [ + "xmlparser", +] + +[[package]] +name = "rust-stemmers" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e46a2036019fdb888131db7a4c847a1063a7493f971ed94ea82c67eada63ca54" +dependencies = [ + "serde", + "serde_derive", +] + +[[package]] +name = "rustc-hash" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" + +[[package]] +name = "rustc_version" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366" +dependencies = [ + "semver", +] + +[[package]] +name = "rustix" +version = "0.36.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fd5c6ff11fecd55b40746d1995a02f2eb375bf8c00d192d521ee09f42bef37bc" +dependencies = [ + "bitflags 1.3.2", + "errno", + "io-lifetimes", + "libc", + "linux-raw-sys", + "windows-sys 0.45.0", +] + +[[package]] +name = "rustls" +version = "0.20.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fff78fc74d175294f4e83b28343315ffcfb114b156f0185e9741cb5570f50e2f" +dependencies = [ + "log", + "ring", + "sct", + "webpki", +] + +[[package]] +name = "rustls-pemfile" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d194b56d58803a43635bdc398cd17e383d6f71f9182b9a192c127ca42494a59b" +dependencies = [ + "base64", +] + +[[package]] +name = "ryu" +version = "1.0.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f91339c0467de62360649f8d3e185ca8de4224ff281f66000de5eb2a77a79041" + +[[package]] +name = "safemem" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ef703b7cb59335eae2eb93ceb664c0eb7ea6bf567079d843e09420219668e072" + +[[package]] +name = "same-file" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502" +dependencies = [ + "winapi-util", +] + +[[package]] +name = "schannel" +version = "0.1.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "713cfb06c7059f3588fb8044c0fad1d09e3c01d225e25b9220dbfdcf16dbb1b3" +dependencies = [ + "windows-sys 0.42.0", +] + +[[package]] +name = "scoped_threadpool" +version = "0.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d51f5df5af43ab3f1360b429fa5e0152ac5ce8c0bd6485cae490332e96846a8" + +[[package]] +name = "scopeguard" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd" + +[[package]] +name = "scratch" +version = "1.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1792db035ce95be60c3f8853017b3999209281c24e2ba5bc8e59bf97a0c590c1" + +[[package]] +name = "sct" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d53dcdb7c9f8158937a7981b48accfd39a43af418591a5d008c7b22b5e1b7ca4" +dependencies = [ + "ring", + "untrusted", +] + +[[package]] +name = "search" +version = "0.1.0" +dependencies = [ + "config", + "content", + "errors", + "libs", +] + +[[package]] +name = "security-framework" +version = "2.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a332be01508d814fed64bf28f798a146d73792121129962fdf335bb3c49a4254" +dependencies = [ + "bitflags 1.3.2", + "core-foundation", + "core-foundation-sys", + "libc", + "security-framework-sys", +] + +[[package]] +name = "security-framework-sys" +version = "2.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "31c9bb296072e961fcbd8853511dd39c2d8be2deb1e17c6860b1d30732b323b4" +dependencies = [ + "core-foundation-sys", + "libc", +] + +[[package]] +name = "semver" +version = "1.0.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bebd363326d05ec3e2f532ab7660680f3b02130d780c299bca73469d521bc0ed" +dependencies = [ + "serde", +] + +[[package]] +name = "serde" +version = "1.0.156" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "314b5b092c0ade17c00142951e50ced110ec27cea304b1037c6969246c2469a4" +dependencies = [ + "serde_derive", +] + +[[package]] +name = "serde_derive" +version = "1.0.156" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d7e29c4601e36bcec74a223228dce795f4cd3616341a4af93520ca1a837c087d" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "serde_json" +version = "1.0.94" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1c533a59c9d8a93a09c6ab31f0fd5e5f4dd1b8fc9434804029839884765d04ea" +dependencies = [ + "indexmap", + "itoa", + "ryu", + "serde", +] + +[[package]] +name = "serde_spanned" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0efd8caf556a6cebd3b285caf480045fcc1ac04f6bd786b09a6f11af30c4fcf4" +dependencies = [ + "serde", +] + +[[package]] +name = "serde_urlencoded" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd" +dependencies = [ + "form_urlencoded", + "itoa", + "ryu", + "serde", +] + +[[package]] +name = "serde_yaml" +version = "0.9.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f82e6c8c047aa50a7328632d067bcae6ef38772a79e28daf32f735e0e4f3dd10" +dependencies = [ + "indexmap", + "itoa", + "ryu", + "serde", + "unsafe-libyaml", +] + +[[package]] +name = "sha-1" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f7d94d0bede923b3cea61f3f1ff57ff8cdfd77b400fb8f9998949e0cf04163df" +dependencies = [ + "block-buffer 0.7.3", + "digest 0.8.1", + "fake-simd", + "opaque-debug", +] + +[[package]] +name = "sha2" +version = "0.10.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "82e6b795fe2e3b1e845bafcb27aa35405c4d47cdfc92af5fc8d3002f76cebdc0" +dependencies = [ + "cfg-if 1.0.0", + "cpufeatures", + "digest 0.10.6", +] + +[[package]] +name = "simd-adler32" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "238abfbb77c1915110ad968465608b68e869e0772622c9656714e73e5a1a522f" + +[[package]] +name = "similar" +version = "2.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "420acb44afdae038210c99e69aae24109f32f15500aa708e81d46c9f29d55fcf" + +[[package]] +name = "siphasher" +version = "0.3.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7bd3e3206899af3f8b12af284fafc038cc1dc2b41d1b89dd17297221c5d225de" + +[[package]] +name = "site" +version = "0.1.0" +dependencies = [ + "config", + "console 0.1.0", + "content", + "errors", + "imageproc", + "libs", + "link_checker", + "path-slash", + "search", + "serde", + "tempfile", + "templates", + "utils", +] + +[[package]] +name = "skeptic" +version = "0.13.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "16d23b015676c90a0f01c197bfdc786c20342c73a0afdda9025adb0bc42940a8" +dependencies = [ + "bytecount 0.6.3", + "cargo_metadata", + "error-chain", + "glob", + "pulldown-cmark 0.9.2 (registry+https://github.com/rust-lang/crates.io-index)", + "tempfile", + "walkdir", +] + +[[package]] +name = "slab" +version = "0.4.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6528351c9bc8ab22353f9d776db39a20288e8d6c37ef8cfe3317cf875eecfc2d" +dependencies = [ + "autocfg", +] + +[[package]] +name = "slug" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b3bc762e6a4b6c6fcaade73e77f9ebc6991b676f88bb2358bddb56560f073373" +dependencies = [ + "deunicode", +] + +[[package]] +name = "smallvec" +version = "1.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a507befe795404456341dfab10cef66ead4c041f62b8b11bbb92bffe5d0953e0" + +[[package]] +name = "socket2" +version = "0.4.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "64a4a911eed85daf18834cfaa86a79b7d266ff93ff5ba14005426219480ed662" +dependencies = [ + "libc", + "winapi 0.3.9", +] + +[[package]] +name = "spin" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e63cff320ae2c57904679ba7cb63280a3dc4613885beafb148ee7bf9aa9042d" + +[[package]] +name = "spin" +version = "0.9.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b5d6e0250b93c8427a177b849d144a96d5acc57006149479403d7861ab721e34" +dependencies = [ + "lock_api", +] + +[[package]] +name = "static_assertions" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" + +[[package]] +name = "string_cache" +version = "0.8.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f91138e76242f575eb1d3b38b4f1362f10d3a43f47d182a5b359af488a02293b" +dependencies = [ + "new_debug_unreachable", + "once_cell", + "parking_lot", + "phf_shared 0.10.0", + "precomputed-hash", + "serde", +] + +[[package]] +name = "string_cache_codegen" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6bb30289b722be4ff74a408c3cc27edeaad656e06cb1fe8fa9231fa59c728988" +dependencies = [ + "phf_generator 0.10.0", + "phf_shared 0.10.0", + "proc-macro2", + "quote", +] + +[[package]] +name = "strsim" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623" + +[[package]] +name = "svg_metadata" +version = "0.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a42f3d2c6f543a8c57cdb434697334f33faf56f9acc141e2bbe4bb1994055200" +dependencies = [ + "doc-comment", + "lazy_static", + "regex", + "roxmltree", + "skeptic", +] + +[[package]] +name = "syn" +version = "1.0.109" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "syntect" +version = "5.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c6c454c27d9d7d9a84c7803aaa3c50cd088d2906fe3c6e42da3209aa623576a8" +dependencies = [ + "bincode", + "bitflags 1.3.2", + "flate2", + "fnv", + "lazy_static", + "once_cell", + "onig", + "plist", + "regex-syntax", + "serde", + "serde_derive", + "serde_json", + "thiserror", + "walkdir", + "yaml-rust", +] + +[[package]] +name = "tar" +version = "0.4.38" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4b55807c0344e1e6c04d7c965f5289c39a8d94ae23ed5c0b57aabac549f871c6" +dependencies = [ + "filetime", + "libc", + "xattr", +] + +[[package]] +name = "tempfile" +version = "3.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "af18f7ae1acd354b992402e9ec5864359d693cd8a79dcbef59f76891701c1e95" +dependencies = [ + "cfg-if 1.0.0", + "fastrand", + "redox_syscall", + "rustix", + "windows-sys 0.42.0", +] + +[[package]] +name = "templates" +version = "0.1.0" +dependencies = [ + "config", + "content", + "errors", + "imageproc", + "libs", + "markdown", + "mockito", + "tempfile", + "utils", +] + +[[package]] +name = "tendril" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d24a120c5fc464a3458240ee02c299ebcb9d67b5249c8848b09d639dca8d7bb0" +dependencies = [ + "futf", + "mac", + "utf-8", +] + +[[package]] +name = "tera" +version = "1.18.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "95a665751302f22a03c56721e23094e4dc22b04a80f381e6737a07bf7a7c70c0" +dependencies = [ + "chrono", + "chrono-tz", + "globwalk", + "humansize", + "lazy_static", + "percent-encoding", + "pest", + "pest_derive", + "rand 0.8.5", + "regex", + "serde", + "serde_json", + "slug", + "thread_local", + "unic-segment", +] + +[[package]] +name = "termcolor" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "be55cf8942feac5c765c2c993422806843c9a9a45d4d5c407ad6dd2ea95eb9b6" +dependencies = [ + "winapi-util", +] + +[[package]] +name = "test-case" +version = "3.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "679b019fb241da62cc449b33b224d19ebe1c6767b495569765115dd7f7f9fba4" +dependencies = [ + "test-case-macros", +] + +[[package]] +name = "test-case-core" +version = "3.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72dc21b5887f4032c4656502d085dc28f2afbb686f25f216472bb0526f4b1b88" +dependencies = [ + "cfg-if 1.0.0", + "proc-macro-error", + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "test-case-macros" +version = "3.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f3786898e0be151a96f730fd529b0e8a10f5990fa2a7ea14e37ca27613c05190" +dependencies = [ + "proc-macro-error", + "proc-macro2", + "quote", + "syn", + "test-case-core", +] + +[[package]] +name = "textwrap" +version = "0.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "222a222a5bfe1bba4a77b45ec488a741b3cb8872e5e499451fd7d0129c9c7c3d" + +[[package]] +name = "thiserror" +version = "1.0.39" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a5ab016db510546d856297882807df8da66a16fb8c4101cb8b30054b0d5b2d9c" +dependencies = [ + "thiserror-impl", +] + +[[package]] +name = "thiserror-impl" +version = "1.0.39" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5420d42e90af0c38c3290abcca25b9b3bdf379fc9f55c528f53a269d9c9a267e" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "thread_local" +version = "1.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5516c27b78311c50bf42c071425c560ac799b11c30b31f87e3081965fe5e0180" +dependencies = [ + "once_cell", +] + +[[package]] +name = "tiff" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7449334f9ff2baf290d55d73983a7d6fa15e01198faef72af07e2a8db851e471" +dependencies = [ + "flate2", + "jpeg-decoder", + "weezl", +] + +[[package]] +name = "time" +version = "0.3.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cd0cbfecb4d19b5ea75bb31ad904eb5b9fa13f21079c3b92017ebdf4999a5890" +dependencies = [ + "itoa", + "libc", + "num_threads", + "serde", + "time-core", + "time-macros", +] + +[[package]] +name = "time-core" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2e153e1f1acaef8acc537e68b44906d2db6436e2b35ac2c6b42640fff91f00fd" + +[[package]] +name = "time-macros" +version = "0.2.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fd80a657e71da814b8e5d60d3374fc6d35045062245d80224748ae522dd76f36" +dependencies = [ + "time-core", +] + +[[package]] +name = "tinystr" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ac3f5b6856e931e15e07b478e98c8045239829a65f9156d4fa7e7788197a5ef" +dependencies = [ + "displaydoc", +] + +[[package]] +name = "tinyvec" +version = "1.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87cc5ceb3875bb20c2890005a4e226a4651264a5c75edb2421b52861a0a0cb50" +dependencies = [ + "tinyvec_macros", +] + +[[package]] +name = "tinyvec_macros" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" + +[[package]] +name = "tokio" +version = "1.26.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "03201d01c3c27a29c8a5cee5b55a93ddae1ccf6f08f65365c2c918f8c1b76f64" +dependencies = [ + "autocfg", + "bytes 1.4.0", + "libc", + "memchr", + "mio 0.8.6", + "num_cpus", + "pin-project-lite", + "socket2", + "windows-sys 0.45.0", +] + +[[package]] +name = "tokio-native-tls" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bbae76ab933c85776efabc971569dd6119c580d8f5d448769dec1764bf796ef2" +dependencies = [ + "native-tls", + "tokio", +] + +[[package]] +name = "tokio-rustls" +version = "0.23.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c43ee83903113e03984cb9e5cebe6c04a5116269e900e3ddba8f068a62adda59" +dependencies = [ + "rustls", + "tokio", + "webpki", +] + +[[package]] +name = "tokio-util" +version = "0.7.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5427d89453009325de0d8f342c9490009f76e999cb7672d77e46267448f7e6b2" +dependencies = [ + "bytes 1.4.0", + "futures-core", + "futures-sink", + "pin-project-lite", + "tokio", + "tracing", +] + +[[package]] +name = "toml" +version = "0.5.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f4f7f0dd8d50a853a531c426359045b1998f04219d88799810762cd4ad314234" +dependencies = [ + "serde", +] + +[[package]] +name = "toml" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b403acf6f2bb0859c93c7f0d967cb4a75a7ac552100f9322faf64dc047669b21" +dependencies = [ + "serde", + "serde_spanned", + "toml_datetime", + "toml_edit", +] + +[[package]] +name = "toml_datetime" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3ab8ed2edee10b50132aed5f331333428b011c99402b5a534154ed15746f9622" +dependencies = [ + "serde", +] + +[[package]] +name = "toml_edit" +version = "0.19.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc18466501acd8ac6a3f615dd29a3438f8ca6bb3b19537138b3106e575621274" +dependencies = [ + "indexmap", + "serde", + "serde_spanned", + "toml_datetime", + "winnow", +] + +[[package]] +name = "tower-service" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6bc1c9ce2b5135ac7f93c72918fc37feb872bdc6a5533a8b85eb4b86bfdae52" + +[[package]] +name = "tracing" +version = "0.1.37" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ce8c33a8d48bd45d624a6e523445fd21ec13d3653cd51f681abf67418f54eb8" +dependencies = [ + "cfg-if 1.0.0", + "pin-project-lite", + "tracing-core", +] + +[[package]] +name = "tracing-core" +version = "0.1.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "24eb03ba0eab1fd845050058ce5e616558e8f8d8fca633e6b163fe25c797213a" +dependencies = [ + "once_cell", +] + +[[package]] +name = "try-lock" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3528ecfd12c466c6f163363caf2d02a71161dd5e1cc6ae7b34207ea2d42d81ed" + +[[package]] +name = "typenum" +version = "1.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "497961ef93d974e23eb6f433eb5fe1b7930b659f06d12dec6fc44a8f554c0bba" + +[[package]] +name = "ucd-trie" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e79c4d996edb816c91e4308506774452e55e95c3c9de07b6729e17e15a5ef81" + +[[package]] +name = "uncased" +version = "0.9.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09b01702b0fd0b3fadcf98e098780badda8742d4f4a7676615cad90e8ac73622" +dependencies = [ + "version_check", +] + +[[package]] +name = "unic-char-property" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8c57a407d9b6fa02b4795eb81c5b6652060a15a7903ea981f3d723e6c0be221" +dependencies = [ + "unic-char-range", +] + +[[package]] +name = "unic-char-range" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0398022d5f700414f6b899e10b8348231abf9173fa93144cbc1a43b9793c1fbc" + +[[package]] +name = "unic-common" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "80d7ff825a6a654ee85a63e80f92f054f904f21e7d12da4e22f9834a4aaa35bc" + +[[package]] +name = "unic-langid" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "398f9ad7239db44fd0f80fe068d12ff22d78354080332a5077dc6f52f14dcf2f" +dependencies = [ + "unic-langid-impl", +] + +[[package]] +name = "unic-langid-impl" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e35bfd2f2b8796545b55d7d3fd3e89a0613f68a0d1c8bc28cb7ff96b411a35ff" +dependencies = [ + "tinystr", +] + +[[package]] +name = "unic-segment" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e4ed5d26be57f84f176157270c112ef57b86debac9cd21daaabbe56db0f88f23" +dependencies = [ + "unic-ucd-segment", +] + +[[package]] +name = "unic-ucd-segment" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2079c122a62205b421f499da10f3ee0f7697f012f55b675e002483c73ea34700" +dependencies = [ + "unic-char-property", + "unic-char-range", + "unic-ucd-version", +] + +[[package]] +name = "unic-ucd-version" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96bd2f2237fe450fcd0a1d2f5f4e91711124f7857ba2e964247776ebeeb7b0c4" +dependencies = [ + "unic-common", +] + +[[package]] +name = "unicase" +version = "2.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "50f37be617794602aabbeee0be4f259dc1778fabe05e2d67ee8f79326d5cb4f6" +dependencies = [ + "version_check", +] + +[[package]] +name = "unicode-bidi" +version = "0.3.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "524b68aca1d05e03fdf03fcdce2c6c94b6daf6d16861ddaa7e4f2b6638a9052c" + +[[package]] +name = "unicode-ident" +version = "1.0.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e5464a87b239f13a63a501f2701565754bae92d243d4bb7eb12f6d57d2269bf4" + +[[package]] +name = "unicode-normalization" +version = "0.1.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c5713f0fc4b5db668a2ac63cdb7bb4469d8c9fed047b1d0292cc7b0ce2ba921" +dependencies = [ + "tinyvec", +] + +[[package]] +name = "unicode-segmentation" +version = "1.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1dd624098567895118886609431a7c3b8f516e41d30e0643f03d94592a147e36" + +[[package]] +name = "unicode-width" +version = "0.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c0edd1e5b14653f783770bce4a4dabb4a5108a5370a5f5d8cfe8710c361f6c8b" + +[[package]] +name = "unsafe-libyaml" +version = "0.2.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ad2024452afd3874bf539695e04af6732ba06517424dbf958fdb16a01f3bef6c" + +[[package]] +name = "untrusted" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a156c684c91ea7d62626509bce3cb4e1d9ed5c4d978f7b4352658f96a4c26b4a" + +[[package]] +name = "url" +version = "2.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0d68c799ae75762b8c3fe375feb6600ef5602c883c5d21eb51c09f22b83c4643" +dependencies = [ + "form_urlencoded", + "idna", + "percent-encoding", +] + +[[package]] +name = "utf-8" +version = "0.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09cc8ee72d2a9becf2f2febe0205bbed8fc6615b7cb429ad062dc7b7ddd036a9" + +[[package]] +name = "utils" +version = "0.1.0" +dependencies = [ + "errors", + "libs", + "serde", + "tempfile", +] + +[[package]] +name = "vcpkg" +version = "0.2.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" + +[[package]] +name = "version_check" +version = "0.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" + +[[package]] +name = "walkdir" +version = "2.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "808cf2735cd4b6866113f648b791c6adc5714537bc222d9347bb203386ffda56" +dependencies = [ + "same-file", + "winapi 0.3.9", + "winapi-util", +] + +[[package]] +name = "want" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ce8a968cb1cd110d136ff8b819a556d6fb6d919363c61534f6860c7eb172ba0" +dependencies = [ + "log", + "try-lock", +] + +[[package]] +name = "wasi" +version = "0.9.0+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cccddf32554fecc6acb585f82a32a72e28b48f8c4c1883ddfeeeaa96f7d8e519" + +[[package]] +name = "wasi" +version = "0.11.0+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" + +[[package]] +name = "wasm-bindgen" +version = "0.2.84" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "31f8dcbc21f30d9b8f2ea926ecb58f6b91192c17e9d33594b3df58b2007ca53b" +dependencies = [ + "cfg-if 1.0.0", + "wasm-bindgen-macro", +] + +[[package]] +name = "wasm-bindgen-backend" +version = "0.2.84" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "95ce90fd5bcc06af55a641a86428ee4229e44e07033963a2290a8e241607ccb9" +dependencies = [ + "bumpalo", + "log", + "once_cell", + "proc-macro2", + "quote", + "syn", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-futures" +version = "0.4.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f219e0d211ba40266969f6dbdd90636da12f75bee4fc9d6c23d1260dadb51454" +dependencies = [ + "cfg-if 1.0.0", + "js-sys", + "wasm-bindgen", + "web-sys", +] + +[[package]] +name = "wasm-bindgen-macro" +version = "0.2.84" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4c21f77c0bedc37fd5dc21f897894a5ca01e7bb159884559461862ae90c0b4c5" +dependencies = [ + "quote", + "wasm-bindgen-macro-support", +] + +[[package]] +name = "wasm-bindgen-macro-support" +version = "0.2.84" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2aff81306fcac3c7515ad4e177f521b5c9a15f2b08f4e32d823066102f35a5f6" +dependencies = [ + "proc-macro2", + "quote", + "syn", + "wasm-bindgen-backend", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-shared" +version = "0.2.84" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0046fef7e28c3804e5e38bfa31ea2a0f73905319b677e57ebe37e49358989b5d" + +[[package]] +name = "web-sys" +version = "0.3.61" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e33b99f4b23ba3eec1a53ac264e35a755f00e966e0065077d6027c0f575b0b97" +dependencies = [ + "js-sys", + "wasm-bindgen", +] + +[[package]] +name = "webp" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cf022f821f166079a407d000ab57e84de020e66ffbbf4edde999bc7d6e371cae" +dependencies = [ + "image", + "libwebp-sys", +] + +[[package]] +name = "webpki" +version = "0.22.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f095d78192e208183081cc07bc5515ef55216397af48b873e5edcd72637fa1bd" +dependencies = [ + "ring", + "untrusted", +] + +[[package]] +name = "webpki-roots" +version = "0.22.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6c71e40d7d2c34a5106301fb632274ca37242cd0c9d3e64dbece371a40a2d87" +dependencies = [ + "webpki", +] + +[[package]] +name = "weezl" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9193164d4de03a926d909d3bc7c30543cecb35400c02114792c2cae20d5e2dbb" + +[[package]] +name = "winapi" +version = "0.2.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "167dc9d6949a9b857f3451275e911c3f44255842c1f7a76f33c55103a909087a" + +[[package]] +name = "winapi" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" +dependencies = [ + "winapi-i686-pc-windows-gnu", + "winapi-x86_64-pc-windows-gnu", +] + +[[package]] +name = "winapi-build" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2d315eee3b34aca4797b2da6b13ed88266e6d612562a0c46390af8299fc699bc" + +[[package]] +name = "winapi-i686-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" + +[[package]] +name = "winapi-util" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178" +dependencies = [ + "winapi 0.3.9", +] + +[[package]] +name = "winapi-x86_64-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" + +[[package]] +name = "windows-sys" +version = "0.42.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a3e1820f08b8513f676f7ab6c1f99ff312fb97b553d30ff4dd86f9f15728aa7" +dependencies = [ + "windows_aarch64_gnullvm", + "windows_aarch64_msvc", + "windows_i686_gnu", + "windows_i686_msvc", + "windows_x86_64_gnu", + "windows_x86_64_gnullvm", + "windows_x86_64_msvc", +] + +[[package]] +name = "windows-sys" +version = "0.45.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0" +dependencies = [ + "windows-targets", +] + +[[package]] +name = "windows-targets" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e5180c00cd44c9b1c88adb3693291f1cd93605ded80c250a75d472756b4d071" +dependencies = [ + "windows_aarch64_gnullvm", + "windows_aarch64_msvc", + "windows_i686_gnu", + "windows_i686_msvc", + "windows_x86_64_gnu", + "windows_x86_64_gnullvm", + "windows_x86_64_msvc", +] + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43" + +[[package]] +name = "windows_i686_gnu" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f" + +[[package]] +name = "windows_i686_msvc" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0" + +[[package]] +name = "winnow" +version = "0.3.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "23d020b441f92996c80d94ae9166e8501e59c7bb56121189dc9eab3bd8216966" +dependencies = [ + "memchr", +] + +[[package]] +name = "winreg" +version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "80d0f4e272c85def139476380b12f9ac60926689dd2e01d4923222f40580869d" +dependencies = [ + "winapi 0.3.9", +] + +[[package]] +name = "winres" +version = "0.1.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b68db261ef59e9e52806f688020631e987592bd83619edccda9c47d42cde4f6c" +dependencies = [ + "toml 0.5.11", +] + +[[package]] +name = "ws" +version = "0.9.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "25fe90c75f236a0a00247d5900226aea4f2d7b05ccc34da9e7a8880ff59b5848" +dependencies = [ + "byteorder", + "bytes 0.4.12", + "httparse", + "log", + "mio 0.6.23", + "mio-extras", + "rand 0.7.3", + "sha-1", + "slab", + "url", +] + +[[package]] +name = "ws2_32-sys" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d59cefebd0c892fa2dd6de581e937301d8552cb44489cdff035c6187cb63fa5e" +dependencies = [ + "winapi 0.2.8", + "winapi-build", +] + +[[package]] +name = "xattr" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6d1526bbe5aaeb5eb06885f4d987bcdfa5e23187055de9b83fe00156a821fabc" +dependencies = [ + "libc", +] + +[[package]] +name = "xmlparser" +version = "0.13.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4d25c75bf9ea12c4040a97f829154768bbbce366287e2dc044af160cd79a13fd" + +[[package]] +name = "yada" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6d12cb7a57bbf2ab670ed9545bae3648048547f9039279a89ce000208e585c1" + +[[package]] +name = "yaml-rust" +version = "0.4.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "56c1936c4cc7a1c9ab21a1ebb602eb942ba868cbd44a99cb7cdc5892335e1c85" +dependencies = [ + "linked-hash-map", +] + +[[package]] +name = "zola" +version = "0.17.2" +dependencies = [ + "clap 4.1.8", + "clap_complete", + "console 0.1.0", + "ctrlc", + "errors", + "hyper", + "libs", + "mime", + "mime_guess", + "notify", + "open", + "pathdiff", + "same-file", + "site", + "time", + "tokio", + "utils", + "winres", + "ws", +] + +[[package]] +name = "zune-inflate" +version = "0.2.51" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a01728b79fb9b7e28a8c11f715e1cd8dc2cda7416a007d66cac55cebb3a8ac6b" +dependencies = [ + "simd-adler32", +] diff --git a/WSL/WSL2 custom kernel/index.html b/WSL/WSL2 custom kernel/index.html new file mode 100644 index 0000000000..bdb8f02481 --- /dev/null +++ b/WSL/WSL2 custom kernel/index.html @@ -0,0 +1,139 @@ +WSL2 custom kernel | philip's notes

      WSL2 custom kernel

      2022-02-07 · 3 min read

        Why #

        I want to run perf inside WSL. My current WSL2 kernel doesn't appear to support hardware performance counters. The HEAD WSL2 kernel supports hardware performance counters (apparently). So I will compile the HEAD kernel and use that.

        How #

        Before

        $ uname -a
        +Linux phlipdesk 5.10.60.1-microsoft-standard-WSL2 #1 SMP Wed Aug 25 23:20:18 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux
        +

        Install deps, clone kernel, build

        $ sudo apt install build-essential flex bison dwarves libssl-dev libelf-dev
        +$ git clone git@github.com:microsoft/WSL2-Linux-Kernel.git
        +$ cd WSL2-Linux-Kernel
        +$ make -j12 KCONFIG_CONFIG=Microsoft/config-wsl
        +

        Copy built kernel

        $ cp ./arch/x86/boot/bzImage /mnt/c/Users/phlip9/linux-kernel-wsl-5.10.93.2-bzImage
        +

        Add this line to C:\Users\phlip9\.wslconfig

        # Settings apply across all Linux distros running on WSL 2
        +[wsl2]
        +
        +# ..
        +
        +# Point us to a custom kernel image so `perf` works : )
        +kernel=C:\\Users\\phlip9\\linux-kernel-wsl-5.10.93.2-bzImage
        +

        Restart WSL (in Powershell)

        PS > wsl --shutdown
        +

        Confirm that we're running the new kernel : )

        $ uname -a
        +Linux phlipdesk 5.10.93.2-microsoft-standard-WSL2+ #1 SMP Mon Feb 7 20:04:04 PST 2022 x86_64 x86_64 x86_64 GNU/Linux
        +

        Hmm not seeing any change in the performance events...

        $ dmesg | grep -i perf
        +[    0.043340] Performance Events: unsupported p6 CPU model 158 no PMU driver, software events only.
        +

        To get perf counters showing, I needed to install WSL from the Microsoft Store, which apparently gets updates faster?

        Meta Key > Microsoft Store > Search "windows subsystem for linux" > Get

        Confirm working inside WSL

        $ dmesg | grep -i perf
        +[    0.272452] Performance Events: Skylake events, 32-deep LBR, full-width counters, Intel PMU driver.
        +

        perf #

        Note: you need to build perf against the exact kernel version you're on.

        Build perf

        $ sudo apt install libdw-dev libunwind-dev asciidoc
        +$ cd WSL2-Linux-Kernel/tools/perf
        +$ make -j12
        +$ cp ./perf ~/.local/bin
        +$ make install-man
        +

        To run perf we need to tell the kernel to stfu and not be paranoid

        $ sudo -- bash -c "echo -1 > /proc/sys/kernel/perf_event_paranoid"
        +

        Relevant options

        $ perf record --help
        +
        +	-F, --freq=
        +	    Profile at this frequency (samples/sec)
        +
        +	-g
        +		Enables call-graph recording
        +
        +	--call-graph
        +		Setup and enable call-graph recording (implies -g)
        +
        +$ perf script --help
        +
        +	-F, --fields
        +		comma separated list of fields to print
        +
        +	--no-inline
        +		Ignore inlined functions in call stacks
        +

        Install rustfilt for Rust symbol demangling

        $ RUSTFLAGS="-C target-cpu=native" c install rustfilt
        +

        Record profile

        $ perf record --call-graph dwarf --freq=1000 program options
        +

        Convert to text format and demangle

        $ perf script -F +pid | rustfilt > perf.data.perf
        +

        Open in (https://profiler.firefox.com/) or (https://www.speedscope.app/). More details: profiling.

        \ No newline at end of file diff --git a/WSL/index.html b/WSL/index.html new file mode 100644 index 0000000000..c6956a33d7 --- /dev/null +++ b/WSL/index.html @@ -0,0 +1,73 @@ +WSL | philip's notes

        WSL

        WSL2 custom kernel →

        2022-02-07 · 3 min read

        \ No newline at end of file diff --git a/__pub/514CqlmSOL_AC_SL1272.jpg b/__pub/514CqlmSOL_AC_SL1272.jpg new file mode 100644 index 0000000000000000000000000000000000000000..53c510b4c4a09acc97652c3b88066d30c65f0ff0 GIT binary patch literal 39149 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 literal 0 HcmV?d00001 diff --git a/__pub/786dfe6f88a6128908d4efc0f08f6478b2-Kintsugi-Plate.rhorizontal.w700.webp b/__pub/786dfe6f88a6128908d4efc0f08f6478b2-Kintsugi-Plate.rhorizontal.w700.webp new file mode 100644 index 0000000000000000000000000000000000000000..7a51a5c5078ee9fef1eb49a3b78470413cf6a951 GIT binary patch literal 16160 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 literal 0 HcmV?d00001 diff --git a/__pub/Pasted image 20220213095604.png b/__pub/Pasted image 20220213095604.png new file mode 100644 index 0000000000000000000000000000000000000000..3808e8a1ed4dd77fd2646791f6ac4f9287d7c938 GIT binary patch literal 429897 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�%GE6o7pU6 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

        cxw|x$UBC0<}v9 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

        f0J-Kqvnq$>GzX)45=<_2tdt# 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

        sb6>@RxwAu)w)(> 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 literal 0 HcmV?d00001 diff --git a/__pub/Pasted image 20220213102656.png b/__pub/Pasted image 20220213102656.png new file mode 100644 index 0000000000000000000000000000000000000000..8e215e6314e198b942f21ab1728e36b873dc96b6 GIT binary patch literal 16636 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 literal 0 HcmV?d00001 diff --git a/__pub/Pasted image 20220222190924.png b/__pub/Pasted image 20220222190924.png new file mode 100644 index 0000000000000000000000000000000000000000..331b42d5f870ceb1969efe5a86ce845ea2ece5ee GIT binary patch literal 14266 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 G2>n0vWpJSY literal 0 HcmV?d00001 diff --git a/__pub/Pasted image 20220222191023.png b/__pub/Pasted image 20220222191023.png new file mode 100644 index 0000000000000000000000000000000000000000..3db6e3825a21c400407168ad1dd65d82e973eac7 GIT binary patch literal 15308 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 MkWrDYlr#?fU!Uj!Q2+n{ literal 0 HcmV?d00001 diff --git a/__pub/Pasted image 20220222191145.png b/__pub/Pasted image 20220222191145.png new file mode 100644 index 0000000000000000000000000000000000000000..3f63d2580f3432d84e902a76ff63df696c2935d3 GIT binary patch literal 12671 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 R_=goF(pMCuvL*B${0|+(2MPcH literal 0 HcmV?d00001 diff --git a/__pub/Pasted image 20220222191240.png b/__pub/Pasted image 20220222191240.png new file mode 100644 index 0000000000000000000000000000000000000000..3b1d9330626cf981225c004b2eadc8d23f926bcc GIT binary patch literal 13143 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 W9iZKQ4!;HRs#?39PaNo1ef6_ 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 Mo>!5}kkR-4AJ(2CH~;_u literal 0 HcmV?d00001 diff --git a/__pub/Pasted image 20220222192006.png b/__pub/Pasted image 20220222192006.png new file mode 100644 index 0000000000000000000000000000000000000000..764969d43fef7825d93b85e0aa073877eff674d4 GIT binary patch literal 3954 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 E0NWv!dH?_b literal 0 HcmV?d00001 diff --git a/__pub/Pasted image 20220222192042.png b/__pub/Pasted image 20220222192042.png new file mode 100644 index 0000000000000000000000000000000000000000..9265848d6060dbd7df792272ccc0494e80a0e994 GIT binary patch literal 4003 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 G&;AGIwtb`k literal 0 HcmV?d00001 diff --git a/__pub/Pasted image 20220222192216.png b/__pub/Pasted image 20220222192216.png new file mode 100644 index 0000000000000000000000000000000000000000..683040f3cdb8d01e3533fbde2cdedfe818ffc105 GIT binary patch literal 20946 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 LNkvXXu0mjf##~FB literal 0 HcmV?d00001 diff --git a/__pub/Pasted image 20220222192840.png b/__pub/Pasted image 20220222192840.png new file mode 100644 index 0000000000000000000000000000000000000000..3e21bc7f0b8c228f9f72e4a786b5e003454218c3 GIT binary patch literal 32770 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�ic5sDM)5DZu_A`5dARf4I&2*+d3SA7H}Iuy@rR=0Soh83)AKMi1JKi8pM-% zPeCA&kD$q(#v#A}(C>)}Vve1Xl5z@Xu=VTLs-Hg(L5AtH6vu2)Ux%*(+JJMXR;ma3l)XDzRzI7g)Bve8-w+rac2*vuY*ufHE|+gShz0J@4|wY5XY#RZ%Q~A5<)IKMu@)x3s5YV zj_y0&lxu?0wb!zIneaOpX4GM6x>18GOCZC;?(-4T{5YMz(3%@(bmg1TLouj5bFC>x zq~Z5(PDuDeMC*!S7_?mokWa)%Lxabv5H?PtFoSt|jN%$RpQBisHi^K`VFxx<+StiQyF4b%{f*O%uiY%(HyN<%1qSEDPCZhK1z$*A6+^q<>MCF}rp?nkW2XZWou# zaRfrWK~B+2pHUk59@(>T7Cp`}S5Cd)D%j2$9ed-1Bqxo=+p{;h=uXDO8J&7D;FIYr z95mvB8>35OXR2chk^ZbvUNwR&z@<&+>eI-5m1Ey7rn=+d-`P5!Hk`S}Wj1V3=b#;0 ze>6mTd*7m>Orxug-%#T9b~T|N4JnD$^D^4?$0zh07N547uzfN*UY(!me_%G6)V=G{ zO&M=%esM*N26kUp>p#!BOM*?}T$@Uf3>gpWSA#UidYf=%wf+;~ROd(}Gt%m&lYr1Dwy&4VRXEG8-Uxc~g3O@?|?!_h68 zx40S(Gws7ASHfF<`oML?~LFsW&(0~gIJZ4K1=Wfj=4lzlI--!PQ?;lBQ%@6

        5De|5tC{6%JSQwXZ}SM2IfYh0%MBG7=KK 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 KCvcEW*#84@fW0*U literal 0 HcmV?d00001 diff --git a/__pub/Pasted image 20220222193326.png b/__pub/Pasted image 20220222193326.png new file mode 100644 index 0000000000000000000000000000000000000000..7df17da9b45a0ad09f2397d09317d78ee6d6a6c4 GIT binary patch literal 23594 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 U#^w^(0N-%N`kWQ{q;Jwc0k19n2mk;8 literal 0 HcmV?d00001 diff --git a/__pub/Pasted image 20220222193443.png b/__pub/Pasted image 20220222193443.png new file mode 100644 index 0000000000000000000000000000000000000000..e3d84bf43f819106af6424727860c695c1ef21d7 GIT binary patch literal 28203 zcmb@uc{G>p+dis#qNFG)l?)|A2~o&chRPgeNHUcvGnuCbQ&cKt3?W1rB2%W!NeCec zAxQ|C=Y3o~?{BYnt#`lQwf0{7k7uo?kI!)5*L7a!d7Q^_ocHasDyKJ7@1~}ppx7*b zMpm7IVvQpHo7zB$S6&~Ym876xrI43BdEVv8NSE`Y^V7?#6NAxux%D%ba$hNKy)wje zN$cd=9kTK~Y9V9o;ieKH7y-_Pvf~3R{f=$n|OUhq@J{9($Kz-@m92@W;5zI z&V6BKiPMM9^dJLuT15r(TUs zuQ2yFcDb#l#&G9U!iwsqGu#@~Yz>r$70Wjn-Z=48RWZU;H|r=PO_y}D+0mH0)7zv2 z=*@C8NA+3hSQ%+%2}JPkzN`L_LHdbLvD$0(g7|94k)tu1YG|gZ}?vp_(rx@&$z?T`4-;V>#l5-1q|m5 zxoVRX+gbYU zkp4WiP}Jz_cDAC|Y;o?^=AE-2<7B=%_juysLc+po62tVqB**f}=7(=k%mjCm+WYL;(^KMyw zMp+FF{929YY*)?u$A?_!2f`x6U9Nuy7%w<`hxgOmKUbaYic&PwfVJPZSCplwBNmFkGZ)y8{LL)wj%Eu8^>mf zQd8YN=jP<7UA!2Sn#z9Qz=M#GbxcwbcM--h75=m>-QD-PtU3AkXtO&!-jDrsDon}9 z;M~7|oqvU0`J}S4@-;`t2hq`K8H%iQAKNdfF*G+fzsYI6I^6y7&+-6rtH1F)eK)u01nUW9<;{3e zn`g(LKYubiN4sWXd&ZLAyos!=l*RY|{Q2|gn>PzSqk353bLZ%t3ZvuW_kA$QUg;=q zr4bbseV&qXQbVJ;rA77g7QKwHH*Z9j3x$py!-8M08`!she*!l7bzWY}moEzT_5!zW z-+qk+(9-fRGhmgFh<^6$ncl4N#fy8Ur>EzZy&gV%`0oAtU%6fQVlx{X&clZ{2URtX zX7Aa(d)%$~iit^#?T1foZQE!lYa1FupNelbouo8T+Y?&cq!J!Ob=RrKK!lk?Cn_oT zM!8}{l#rFtP;;WkT(3WqnA08Hs)7P_n4TMVUbovJME-)ntuof29f$ksg?p|HHbl>P zND2rDgda8E*0VB`S6f%N?%TTu`^8u0`Yk_a-Utod@kE7_o>S%f3;pGT`%m8+nJ#oG z*3PuoqT(j~)rIzgpYcIw8P*5aR4DQlSN2r} zMI5u(A>893SX*0LwDhO0Xu9pg9WEiptV274k>b-`OSTchS1Q_clG}ui<87A95i3?+Sm$ zjY`G_fB2x3q!dxUS@`SQ^*eP>AfE+Gt%wY_XAE}stO$|q-4V22PR-2P`bV!ni%EO> zrLV4o(MnN5%B49L78ZwQyPR20-(%_(E}h>j<45!0?a1jP^r2tYe4kw$8X2h^o16BZk@b(^{UHYv@^+k&5C@9`T2|@ z%yTRr<7-xz2BqW`6yg&SZXtU(tS-+^A`!)NQ6s+oS-VCvL$Cfzjz!ALm){qARwa)g zKYm_A4w6IoaR-i;B;^VN{*P^KNvqnZ0!O@8Jhsu(cf2;IKcxB6pfN@Q>85wW z<&3<1*%g84sqXQyl11Lqh1Lw0vEo@A(|v~y1>sbXSZhnWSi|Q%uV`H|Z^E-XENYQCW}?eid-^9bJr|ucUuu_~X7QBO)YQyNim8thCMgIRK*oOyu*>7p z_sMZ0YJif3Vb#828_XX2n)1Y5PgDo!1z+MJxI3ci~udukF*+ zgNTe`_t`AxF}=XR!2FekVO*-w>dJCgHwz7={FyV~-XF@iGBeU~XZJCMj9?eir(wj$dGX87Fr&?6AT_%jk zv13^or=p}~R`T?epcNmdP?cIfN5c zsIRXtnrsjwiSk0W$r0OcC&)pbY?M+}SKpS`<0Xb1Q#Cd_S-r<*d{AmNVldV_26@E+ zdl#R2P%mR=X-{x!>VkaIa=w|>+b_WZGwaS@xKP`wrC+}^KewqL;BoLvUXT5j!s{?JL)T(&4X`@MHz*aZqXGuwZNRM~i$BM&F z-l9a6RYt62>}SGJ#?1kYRPEIN5LUWm{J})9QGAld8(-LwX}GS?dCcVJ$GE?NgSR}3 zi@OnJQxZX9^uXc6cM<-R;}x{oMpe{)v@8t>FV7^^*oG|QI&vBKaNCR47n*7DZ{F;_ z4zM*bz~>$D`t{NC8pf@u8cY&ykI0vmmzN8QdRImSMPz-|r)V`?W9{qcIK6bJO?-e_R90@=hRbP$eex8<=`0SaF zbGNJiEh<{zfbwYP?v$`Cn>KACOMWWh!M%H1NJvuz1_dD@e#dF32EICb_Ii`qcSQ9^ z#iP9l_k>e-`+mL1_|fRSB3Kv3HyCM=Zus{4nvt&sAp><`A+fQI$J%vo)n4fsp9j{31#Y(8=~K{I+V8w0L>z1E`q=<(yBVKp_ilX7zFE!xuu{PtLXLkc&>{Sz>N zd?w)d>pYNxcDBjpE&l6Xv?>@IA3%0xM(8t%*k0Foq50s+lb6DW16H=5Gfd&4rsq)l zW}&~hdwzZ%a0Rt_*REZFMGqq*18c7|>+ew!J06B}dnlu*{C8L35WrhP!n)YT(nZG1BBJeRA+;QQps6M9h&w{!aXstyi|oqv+C;7CMFy?IXS3m6f%^-;RX1y|?4#T8v9(nWI1AsE-(_v@ z;J|(GV6(nOUMDvf7b_dvjmtInfLz~B4Yfo_dWs@A3`W1?=sI^fzSPMHL@e43Jl1-M z)QJo%49HaN*nX*IVS2cu)LW`0S=F@MXJhhLmUx>=C2h)EC(*NBxNt!!Mmz%L&zh>_ zlvtBn%s+wg;}bP3lTkfOerXr;>^rUU{(fmlNX5OqVgxdtz-CdHWM7bqQ*~@{N(u(C731ONo|wJb5_;KG?&ut%^1DV*M763 zf8yuZrm?b5es?aUwONlH;^yuhN{+1_y5_Vfj@b0_D(U_}am`|KWPYzZ^P%2Y&nzp( z65Y`p9RrKkA6wG}1b5#hxE9Fqm2uq;Qb3UCGIi2ELTN8`f1UIEZF}V9!`1w{Dc|*|grCKdrK(F-f-Mgo#Kd465jh?`5M}>tGxZZEvd$D&>adAbb(*})Il(5b3 znT5S#P9M=)j~=mdFYK}|(&Iz&H2RuvcW00Az2;_h^iHp|dAiC4in@dzvaxd>a=bc5 z>npuLCjf+hV;$AhHi4&O$tYs>_V!Z;rvkR_4;L_|1{CIuak+`+Ic)3xQ~cInMM!2s z3A$6$-wPOjxjyn3%^smUDd&=ZNxkpgFD}~?6!9=IDX+P<)-0o?JLK_W-xXlZ^HZL=RSNZ zV6}*sJ!;K8(p)Y92$~`^iWYwtqEkViy}?&n*RfTD;;YAGJ*hds%#V6jS7yZ*ekO1Q z-fSO6PWDAX$!cFS*bCC505$jmU}I}*>m8=!4;6U}WWBphvX40YQ2JdosY14!^uH@B zv!(04P0lll*s}I4wB?1PiM1`tHg9-x+_E$G?)F2PnI`qSQ9Dq|Xc+mg=jIBbob3oo zyr`O8W*`#x>+7But?%s^_VxVL#oST%zyHJaIZHJ(mk4B@(TobMfNzaY_!Q@VB!ivl3seg%v}2 z48bid@W=Z2{8KVtZzJHnvSb}Ci27lSB5?lvc@(X3gc;C11!OI_t4;#0=yZ~+nh)Zg*qmfa< z?I_@4`S7$oaI&Cj0~3zo83%`Ky~F?H_xkP0A1~kJI$1B=@y78GP9ehdoSt5~)&qK= z#OVxg5?E;bS1OQOk(Tc;9=S={Z%xga2&w{<$0J9!-YPqxqq7@f*Q)q9^3ENa-}(Jp zNWYEPvcVbI_!cLan~%?wAfwv@wjy)ywMwKx0vysxf0mwpZxe6+b=0Jm&!6ADaU2d8 zvWoQD))+0ev#_fHCzzorceAfF!_J+5dsSaPj~gU?rKTQy7!tBe*qVtj35d3Z*%$z; zo~0kcAYocwH1)o2ZYPL_GuA^IIY8@@<976}{U}X8kn``bNa^)xVlAE_n-C0*w!iuF z=QCbjk~sJ#3sXZ3+qVxTwt=d|20o>lO;Ir2xN+m7u&@@83%IIJR{vBWsSATyZr&0j?D@OI6{V=EPt66f1Yzt-G!>!)H7Ez zvF*$8oZJ^N2R4jOmMiX;XqVH_SpHLeF6ZP`tJp6VDy>_ddj_M$W_J0u1|V3nI6FBr zbNty}?cP?C(PzuzohLfC=-ggD-?NIB zuk}<9Z3tXn_HLKs*;CP4iVY*`mPPnc{9!Tw+cmPm7E9 ziZI6@qk<736)n@Sg6r_%Dzl?bn@VC%K9~66RQRgH5?xHOP6ii&5a_^2ua9+{p4B>k zo^HcGjK}Stl`v^&6#AOl#BNU+cZ5ul9KNCMm_^$-${#_QU`f$@5}po43O_-~w1o-{ z3#X5=O)og?2Eyf4-lpFraAgDfP7Mu!e;mFYJlb#3)oEuMtO1cpL5dW(7s6W%$GM0m zeh68g>hp}QiSKHK`liscT(W>qWd`>N6NnPsJG+R!566&_hLLcNxO6{1N(Q+&v|bP% zP&phO9nl@=^6tc!TYk-dK+4$sQ4b8 zK&3$2*f^L_QWAqM?xiN-hOvIg`Opt)j9z{G`c>)b)r06*zI@R^?ZKZ>5-1|0qRh?A z-kKdnKOiqHE$wZM&G-i?J*QdI#Y{*@$bS6W$t5o-K$fTYYSM9o&wT`V`e&xoW?hYp z&5sWegl|!moc95(>bH4MHInOvtScMAPa2{xLk+hs92G*7KGmqKr1ZUf6W{j^)7S$5 zK*t?^ple3Q%Sc0+Yu)u8G=V%=bP(`>SN6-(?b&YAS9kE~eZV))e-BYbaYUYs36@+4 z0RMHwrdvF{@V6-GJYSn_U7Q`O>9yrY9{bS{9aL{J95%}16QHCtrHyYV)pv0;ZyxMw zHJHv?Di)8oC7z4grCt*F+#tTcXnCe{q$ArO>;kyQO*?s?6&FVXP2wM*`vG#dgw@Gi zxUdV^xY|0;dGY00u1c-a1q}kgF9%ChVvHX8&*N^QAIDQ zp5lum*@X5ch#Bg}%0#gDSq+V<;f&ITAik0_dV0(h_+8wm{EEO(24d+$tW+$Y=a3>HS?v0&4Fw_qF1`;89J%)MEZQ|J zn9>uG2SCqjV?*^cG!8IO_g)j7uT}LbClG+yW1R4^QxEmQ7C=5>XJ<#_`IhjFGBWGH zSEAXlE}qszkhu2U=Hxnbs6{b^uXt)36)p4k<=LKgeT!GxkWQM!(tYTf4qa6Y?UkrR z|LtFK5-SB9K>8?Pf1_90I715-RziEQmTxD1O_7chi%w{NaH3LsgsuPOtU)w?l2Lf^ zXV2YJX!jUt9zK3tb#wiu&*)4cgp?cb<7~Tpe{kC6M}#Tv6i3NJGFI|+tZZ}FF5i8+sZAqX0(U##^-w#vbsIflEsWk#-vf^Qa$3%n{2VJpIf_ypOD z_bf2Vr!fpp&QGZ@f(EP`FnV{N%>yLfOWlHp*e*|3q=B$H-zuXu280(?$)jy+^Ng=eK^Z;w*p!GCr}G^D9t{nUtnsg3GlbP8mY&kk0B?t* z#{o4BSOnyays|Qy;!y-tbo)omBrwO*bYfFY$)d;!(Aei(R_fF|2F$Vn4g%f@C-`eMLrKP29o#iqcb>j$;FTMIh z*DrA<;!CSo?`X&uZ%;`UlkAAIT+e8^sr8eQuRtcJTQPaj|^%U17E8q1`;969Y>GL}80{D*2(r@?&u>g`4?JuMkZ0LEMs_9>GOn;SD zS&dfuHpLBgZhx@=2&3s&Exid>8_s|78;B4Id12l#kfk!ci&evxt)a4DOWkv;>`#Hs zobF5K8+~n_#$+tMyxTS@!MXVIOjv7YPjRv8P4$4EJ91?FRdz5ZQ$Ie#>%3GH>z-P- zTgqad^I~lFs~G8klI=MM>Kx>5%5Sg}?c;@9-giyb>R6F*+}Sf@5p8Z2zI2{4dk%hf z==O8j`Zp+XspBr<*PNXCrrio9cyDma_I%`BYbP45CbsQ|Zs3OXDgBOu&WoOxMY&PuvFWSVD_9dD)kW)7V9X*Y9g>!h?a<#GX? z`DHI)aHqmcr8=jj)n$WRHZ+gB>lbwW&KIY;ypLyKCU0M4Row*R*z!L|j$Gr?bG}E{ z#Llc3(rd)Q)9=c;ajSA)&iFQZqVz8-|2NhD{}VC+y)@%Q``e}XseZspe7(i4;6Xhl zpTs7!5vK(9Z$72)7{sKeVq2F>Cm@@z=IEpm3AU*zuE$U%pu|44|8UGbIlzj>!3vXX zq&{|@gxf;FiLF_9sRt!zO>tTjWYXu0pU1K(0OHSKK|(KZITGE1S$*&Pe+8Vhot{EX+8C9!@& zQHQOa9|kZ_Fx=y$w>hAo{K@Y?<(SIWCdGTTbKB{Qd!;ut_5649$bSTAl^WVJRjoS( z9G}n)CWmjV18Cr96dz@MNI@_CS$4hIp4YkAV|O3{RN& zo_xEG7V^?eOXQbs1CbSt+237tXsoqB8mYR}qX1MM&ih(k?z`!Rs>}ot86m$+U6|V; z9iY8k(6Hm{*AGnzr$JqPV%fykdrU}39lAOz-OnBIfVwa$tf^59BVwj=>Ed2c#)-wn z#hn&}#0QHF(KX{jf&Bs7qF-IWBpMozS45!_Lx!2&hQ<|yCeA5B9eK{_;u!jdZ!Hf| z;t9r>nVHGX_4J_|)I6`+v_nNh<7U~njjcmyy<$9PE=bOOTL< zLu28&kmZB)2v8=4%1Kx&01z&~2C92udYmdx&ZwwtsS7<^VVyTg=zR2|+31l8djM(b z6kwkI{ClnZk*vC@v4r|9d_DoZN6uxPXIKxJFmKOQj6 z{%vrx8zt*Bv@TWAde6xqopbT=4SKH(dPBAB1Mnfr1z62rb=1DnXs!w8gE!@a5&yKQq87b5F&9| zS?aXK;0eJ`P~N(+iLdBBT5-Y4)ikK4(BGdH6+KZ)IMwv&Qzg(D0dNR8vP~~9=H2_3 z`2NV*d3J-{f>F}$Ed~HYU?rI^0w5CL0zriy>I1}*wHg|`Bt1j`TiIhh{%o`%2;1!Pky|l%bsf`w&f#r^yFK4@nkc7r?^p1t{i( z@@UypviC%31U*x!V@8?5TOc%Y*AmobDtaw%_gKC1R@~lvS{Xu1@;f66keHcfcDAx`T5>LFX{H}s|L~ZbxPOqp= zr=fm#Md#QovhYa=v;MR!KVW`>3FwGL8xQDY9N<3u+7C=8Axto}LO$Cj}_w@?P7snwo?Lj}Ub{2yL<2fS(`j z4>%_4M#t|Hk9-#E$z%A^l~WA1^aT=i4&~X8wZ2Tb_=sLXieya2mIO+GydD# ziZi<5j*Nu)x~iPvdSwp!)YL2pR=aoaKBK63x%rv=f-Q5}WzKHeP}^qi?cNPjML~`* z4M{i$c8(^&JdvKB9->n2p0&55^Zru;t=0=L(f}YYzmI|KhCaAP23(R!_PhfNd+hX= zm|^;r1s6$1xod(EO2Ga1AwcY8?;AQTc(vw&U$DfKi#XG9d(zQa3U!)q?j0hS`W9gD z!Gi~5l*YMwF+$FaaeBPQMv+}PR-F^ zLsL5%QJnVIuU~(&FIaGQT+l^LcHuYQdqg7HRBR8-didIBSPQg5M~o^rprHoLL}kgg zA9z2RetA&I+j!vgeo6DiOD`@}MTP&|EEUEeXIOn_*HIy%hw#C`^A@%9OJ^rx^`AZa zUPQei&CUMJs;mb!tzuf_9@Y5VE4zMMs(#+8cUMc}F9@`#;|SMHZ&L?S;Aa7eCb&Cii=v= zicWQN&}WPul@91<=UFWszv^V8VV&Z)Y3u(4A}7xKC%&eqW{a1@|D1A*_oZ7t47y^i z`i8B_1V%>R?P&6)Gv(-REPcL3G2*0dz|U=szM;=I*TvkbOw2wVu#&ibpdNuIz6 zo4q!9c69r`n9+AW8Re$GEO)+fTihs}l|WEKLxc6~r+}Kh9J1a7T`4cWUbL$^$1Rvz zp?*29lZd)#JHVH3tZkvwI~X>~sdAd1v9j0pK1zOA%~>G94olML#5Vf34@->wzTKjw z(t3wYnW^tQU>Ve`yv|phqYIaT4a;GXHA45-VYyswj3&CtVG;h-Ev;Eo&JNk@*$<@L1`pB&rFL+j)(|%*^|s2Es>1 zMq2c&O-(roegPF@u(C8y%%g;;Mvg^&e_pB*buSg%^#R3De)DE_ID71x2Y$oIFxr_% zd~+$CM>WAWL9Fd_DkPcIfd7mE_11N$k|iL&^jvz^<7mU4h4Zs6uTzt?Q&`&_TM+)FI@_cDF78vXb22Eb$53a9EC)A z*mc~V-B$c5>J1@#&VYPE%Z#-4kA?gV|)COk+Jm|NOBh8x4C-1z5wBu&erT`v_ToeFvXb1QZTi@hgQ$$1C%L$05HH zs~$I^hLHv~FKiSc`p`6SsK$JFCLf|*>~@T-Ee;#Vng22z5(6WI?r~jg5`( z>=g@@TI!{RZxE^?b{yJ&|20wc`LLn%Pq@6v*%dP~vk6yY1f>2QN*}D__OPcQFkOgz z2y{O`*B^`}|DO6HeXRjRP|J=iUleAdUOYW{3r#{Y=;W%Poh=<58<|Q=KjKn}TMyLQ zU)~j@8Y*4A30#w?q5$PYRc>q3WRPP+C@w8|@D_aEhHwP0_n_O6tsyR)`$B3ej5+(n z#G(*;#FOXdCVDDCZ7iitROj_P?{>K+|Fs%gT9Yt_MK3SThTOjoeA8m{_Sy1IR=N#O z=tO{Q#h0gAAcCmD1p{XYtf;yU^~Z{ET|{Nn)l~vf?mjcp3p6>>Rk%|`vd$ep0)~vB z5F7K!WEB()A*>fJUdZZ8B^sNXoukAON61g& z1cR!dYuRD{+u4uKj>|+L6hszrJrjSi)fcqeS8y`j%#xlxL%#q@5UIu>M`zkrSw)2d zvN3KN#!SLh!i0Xs*w`>f2foGqxD4ow09E+5E=d@sxWXCSwF>gsiEjSXPM4DED z(TP=z&ub!xXvU=FLYQN-VO8D_AP;_j^3yrhiEp=P`>u(uAzlqjp?>>zZAOm0}V`#{R zvIErrzOIfa!N_hjOd@CXyRp*|LRPyWxgc?b6GD<^mo(muz{=30TDu0B2Ik>!&@WlB z(qLqp%&uS^3Bw6m8W3P?7E4i!#=d%PqJLU#t#l=Q8Xs%XSg+-ekbfo1FsBTIklJTd zn)<$&m-y)4Zq}*=3l(q$BMtBZHfVveMN|~6Twwf9Z@5~JSG|1i#d9Gza3iQGC<(}= zaFVQAqGtTFcHwew>or_UnZd`fb__b;7y;c*&c9i&b^0`wQ(+w7a~{?}8ejfg=HOY>dD(r3TeJOQ zfS_Y~g?b?f>jjeX}>nXdh3`g`418;nYiLVssW$ z2w2$xp7htRc<640UChoEpMW%TqMHy+knmvt#NI5wXB+yyHQoj-EGym9^zI>U{2O82&RxCP8!=CGdd}*6-z&|Xt%kdJ znF+1|sO4~16Ck;^yZ#lSgs%N`- zW%a?X0E>~Cjt?L1)U8znFs(8osS*xXxO!O=71I51D*RgvW)N((BrckW(R zhoyQvLp)1LYG7(=mo*b3AMWenR;lZ&g-9yL!=g0cz0p zV}>cd&+a5JNXsTX-=K)rQ}*@nY~~|ObXDH;+Why0mp}9Vec_?k#(!TJ%6pjjPa@sE z&?#5q=_a50Fx2wzn^Gk={e2V9aLB(eym4R--S$X2V6yD^-|wrO?|b4)KHleHuTrjl zQ+ukh(^>CZPItsPWzu9*_L0yG8JCK z;{60v-ShTY+1(1skvi#l#vU=YqoX+zQe(P)Idpv^M8uX&MZ*Z}xa3v3qV4WZ=Do{rChHGJANqO<20@Q}O`pvq5cvM`VHh?k|I8qDj3qYIzTN1A*A`K7%OqLyP1X&1v z9+)u{Pf%}_LHul&D>LA~cIdIW_Z}Kbm`EETQ=f#P9=QrtLJ*SZ!Gj02VL$^e<_au_ zR6SR|v*ayo4N6d)Qd1v3cyJPd;2&6}GW zB2|C2tJzD8wLdW6VFFTzAUF`zQ1`&1j`WnqlI{dE4pATx|A6@U_~lDrho#BKrzds2 zm#5wC9}L__&$(&q0J@BHG8gIOuC!^FoErG9J@8v|!mEnz90a==ey+FNmq2AAPoZWL zUlbWOfz47IY%$iK@B+}~K^739D?;$Jcbeu^M<|@({A>R0PtKr{k98LlWI8oE_ykpD3Ohm{w^U%?r}JckiBgIC(uRTa~n3ir+(eT%mcEgC~*?0_gISf4t-gTLT! zxx>_o=8Nr7^+_49xDn?7Y}-9!uo&D2`3q!?F$vqe#;ww_dEw^SM0C8EXKjqRLZVSa zG>1@0X2UQ@V~B|e%P+4tCNu?fSVA|w5BKns;|`yJya5H#;=?3-2P1~;>`+ws8Sky? zA<3d^nl4S#JcKg{2MA{Sh&BxH1;YDbOw2ue(a^O%TaoMiWj}32rZQi5SmN~b+lu6a z;KU%JDSp$frs26-!h)#`HJeJ1UD?g`v!@n}>IQ$w&8Zep= zN@yKFA73!s1p)v@*q+o>0gymw(}`4$fdwe6{CEMB75;JLay1syzsZap(@79wiMyrv z0_-$u+S>0xjRIF(|0=B=kj+LqnpC|>vCh583K$Hl?AKzD10Da@gt$JW_R}DzD;EPC z;~2G2*)R-wR?1W;s<4=Fzg*NDAt{|%3xV-mZrde2_Lj$jWs;0-OrAYG#bj(R)G&=c z&VoViINOF}zz_*dpNAcai%%co_P6=yuuEro`zPrD!JQ6<8;hyxYtsXpzObsE+VtVv z;YFqC9o4-ounE>Xa~)zlHBS z952g8cU?Ap0I`)eoB!fPP<8bwA|lCL@3Zp1Jx8Zp zDfGeD?P?pEW{K3A10oCcH(m;I0rme)GDA77wh+5bw@(yKD}^)EYzr5ad=7xlVO!Ap zKqjuIIR8Tp_TZgx8?yVPva+W{Mk%TP#V#7kMGMCU(OuLBjP5#p*nPL!OD|-F$kGi) zui&=;Csb*YJ(QhTqw}ru{pM7kpYm!9poL(Ec+nbIW)M)=(G0}1cMH|ObFodBP~&2d z)@WVPOKVhKt5zu>rv~nY9bDdta)C%Qu?kBe__pOh_#=TUVZ&O0tl#&o`n{yAf%BRu*lrtI^i`umuWf6VGOtzKMY8WnUeQC-Ab z@>^5{R4b5KOFWia33QLh)Gcy35-k2_15z+ZV-N*!=Pu3FNSVMS3-7{p>#~i-`ubj3 zgRg5|(~Zn~G#XoY$Bqc*3{YS&HOAwQJWz-$ton8$Ok2I3*<@FPBCfii`vCX-9p1LX zWSo#_T`|*V3L0DJnur*w|3r z^EW_~4g=Sarl=Jrm@#nz!RPYj1ifFxr1$TjTuuM&+5!>Z0B0~DaKIop1JEFOffff7 z4~T|o!9Q>_VMb{;#5{OT2kwdeW(9I4GxzQK-qBz!2n9pyHNFmroA`Rjcr0`VvETW( zaNS@bh+i7Bo4ug2`XEUz{dO*e*gpX=4$ghWA!78@K<){%b^ zbzpwqeEjFoy*=A%cAl}6=90ho#OK6&ip}EOGUlrkE0z)dPG(~3TDDZ2kofROaci!NHTl-jl-6(d|I9{=vOAwX{?SmrQJij!-_) zUo+nn>{YoxSiBq_9&A@l7Ej4!^q6gL`FfB*$_RxAXM9}58`?`(93{avv_P&WGkY+t zR}4zd9w#F$WX)G*Y*zoy6WCzPj!cn)Y#T3V^t_jW`9qJz&K?thsj1o7N!rzMT0&je zcrSJmbN!gdpqP@9(l`j<#~7@*V4@PR@BC52jl|7{@$pk2Az*qWL$hF(EjxceR$lrO zR{H%@%DJhjsgLdLHJ6;bs-P3k19+Zvb{3|UoMQ#I8}*LP>S$hDo)4F2&O726#zz||Q$SIOyu!49c` ztTE3qcX9X*Juo6-g3*dOfHBTTdUKU3#kS;$!3U6)0|+|Q5@--vry56;ltJ+p$V07xO4EnEJO)&_nShO}d^wC^AR zkReu@3i31$455<8f)Jw%(KddyzJP6^WqZY4AG)!-{UZ74L2aV$&xE7qpPf2&>W}q_ z$!b=eP~V=h#+cGVhVNTuBe;Ls*PN$jvo5(JAb;?2xntKMj{6@@Nu6x+d{gY;SK1OX z%iFk|ddXk+7e7Jb!c7`gXykK4#q-@GD`TbqbCW*ev z{f24ek4M8lH1BD-d+?o?xYw_=@wa+PrEj=RVA3s47QyvRO8(VjM+YXZ#)Xf$K61#w z`;XA&;;*7WXAGa{YoZ~5G0Z~!v z6INEE+k?y-o#p655x-_l`_OIvaC7kClJEZVG9e-1T|@QcC@Ij^MEGvPVoV$$Pmm}-#;+eQleyITb5d_PHSXn+1beCEII z{V&77{8!$iB@gd;K=t3=9{02&iy`^^Ml~7*yEMO>Tk3`sCf09@r~BTpiLZ70+rWK1 zn=9TrUSg_=7*^gI|I9q?2u%XJs*Yyn@P!}g*4sAx^HE1oR5a4_6}1|-S7%`J)0}EM zCd-U5f^!7!+R8rCA@CiTU>nx7_ zU4Q1k-7nW?p}P5RI(ykBQz}jesIwZnu9Ih_KH~k(F#ms9nT8WdlN;HR4!!RlzkPcn zQ%zh^5mU?2$v5>=$G_+dkBl{$;oK#e$3H61ddZy^;Z-=4-Zq?;V`6DZQ)Bm0=W-+m z`hG3lM#nDh*-2}+revGOoZJDOuz_yL+11;!Yb*G#q^5AW%54u_w{9I__aSuLSK=Uv zm53>L+LBno>eV=YiGLocf6gVdWABNL)XM6>?z?@H^Ph7p+PC-KcP|xOZ}WTEtsz#b zG1zbBQgXV4`+Guu+(?(Y7#Y@Sn}t4z$u2u4}Mz!m1MDjzBE&DJbN<;@LE)g@=Jc7cK*#S=LJ*^3Q72#7-}l(7t_ zb77MIS;-rZ3U#|$(_>ZhFO7=wmCWtK&>hqM{rfv=LY^`tJ~um9r={oW+q3-J`755( zBfd0VK^#~sORm*5HK=U{mX>$meS@n-2D}bjbje_g(2IX;X}M*{h#G`ps0MHwj7&`5 zrB)}U$Wukg0}zlQWfRoe(k}%WUl{4k3x-0ru()V zMF78kj*bp|E4zhX1&AfX-$~}pSRJ^{AwroBynjq_=ia?6`vC=z2}sYEjf`$WXF{z? zR*mI|P|CVCq>jZWzWm!&MufC^d`QcPk&;t2rqc0}pPwHJh*^nPj!Kt;EI`90C{#nM5Biv z%#IVpo`>10-Z#9MpXd*XT_XDK6A`8@Df)X1lvCt*f(UP#CQq0T@2*ce{MS@%gr5FVcVHoaBXNCG#X^BL%iPD4Of`! zamv0mt}ZoRfWeN$FBpwJV6P|Qt`EsD3)VO!JgF9DMRzg>4R%lkZ3VINk41RD|JAzd7Nk8ltOGAsj5 zA&n0Ap+o(f^yk)MR`aFytDB@bAlCqG#tR^|xu>VGyV(79O+SIC81sj+aU4wwuGnaz zuZj?Lxw*NP14S@p5}vHknU8cw8Ko;H#~^yN3w<{r&yobKh=xd|Sr?Mn>6OfG+<0b~)przl?EwUS1eL)gj*5 zEmFeRW2_FpatKkZySw#t+Y@0rg#{xEOg8><3h{wf4CbS4Tl~!}EG{F^Fimtt>@ri0 zA(UP6P%-ULU-L*tzcS2*6SRcS;|vi=-P>C#SYn0|-DRP&UZ)-xgAoSi!Av2#5iaD6 z$HlQBhhuRf}bF1Es7 za*EC96(e3S0nmbKw=R(Z7j^Cw(;2fsbq$8ciRO`H=9q$v#1K|&k)BB^% zn^Bb5`W&fUiyD{#vC%$YP^Rw&6|(`Z7(5)j!LEO5IfsUa39H)Fq^6$2a9j2!kqmGj zupl;&2lf!6PvVIl!XBda(uk?lIs?>_ClccXhuuh5F?=oPOsONG3{8~SuS@M{Y#hX5jf;IZiqIB3l9_$+1cf44}E@b@7DPl zxeB8py~sR<(2#MV)z#IIVb_tzyWrU%e8gml=PYm_BXm@}M)@C9j#Iywu3ko#8&{0<`)Pfj*CI|`hT#O77PGX{QwL_@O zV{@2_khVX5Jc09zdw@5=+W=`(o97g63TC?}lAe(g?lT|;KI#zcjGml4^o2Ze1oRn+ zWuQRJImz%dk`4gc;62!tD+u&PVFX}0!x2K_7!MX8kGEsrc9L7p%IYwg`XOef)s?YT z@o)x-{-td-)EwZV(F@?rKW&T4mE}nlU-()edo@dk0>q(j8|4sVC@j0+88p! zb3*z+i0bCsvUTn$vFs4QW5{Y?!6pu5biu@paE3j9G`ADQDiJ~tIsp1D{;r7avkIi& z&~qC)fLkK#?Pq8^GjajDQG>x^99rDX#hx_4K8o0%>^zG5fLGqh0#q>id zdG_Xw+j|H3M0K+FP*Uh`%Ld5q15ZOv0djjiuD3}i8w?1sm3;h2XHz`AqoSe$4ICL9 zN8S9WA@!P~aq!%xM{W^mF`oZzFt)yS^ZVI9ec#1;#Ck^G#MCfID`{lz6`yy>W3$gm@oA6b za4AkVRlC#S@^$#Y_C&gNA)ABf4)Pz624GBwTd0%tLc;ewglKn}UZrRlU3yS)j*X*p zTDhgj=#d=Tc<$KMW!mhx@tA2E-FD+^*B&8#TiUc+j@?&ZN-EO(vtHe;$j}P-9em8= z??xX9EN{Ie&TQ)9!dSuoJUzXHEnA+QXOh$KLL^g7nH>|3Z&r4v!cg(qkA@NMU#M#A zp1*jJ0LOXwGVM$BELzE=XP~5{M2B8zD5uDF=yT?W%`!E1S%cLDYJ6w8J!PmTtX+JA zw9dK+mMJKg`5jQ&oT=_%=fm|+OASrfFVk0CzkaHF;@?LFqqQ?&hXglFEyFFW^;bv# z-&&vl+$rI<62;RLHmJFviSecLeZjD^g)1=AgKuzZhx7;LF(%^baSwNb5n1r9rkg?-MfukT;>ArKl;ef_XEWT2@BSbLAP^1WXt@F zty5Sw{6pX&a?FhzH%12Rxx6l48Vx#A@>C(jkWqHuR&=8j3cqc2@7}rdJz7M8TerO` ziwB@F)VM1%`mwvy>9N(8#?jF?zc(L0oSvVnzHmK2UV)pY;@t|vwzOllSM1-XWIa~T zb~||IW*U#F=+~GP;g+KZxP0?(E6fLF8B_@9Coc7EWV4Qm-=dgu&^Nz8p+JQD7j9Hx zUamBvduWr@|JB!5Mn%Cz(Gt=vT_VyjjFgm!l2StqEgeJ0Pyz$e45EN^Nq0zyI1JJ? z$bc|(3?hv~mw=%1=6gS0thd(te}9~N*S+`LyU*VH$l4~n$7`SPuIhwT0yMTPMD!8 zZ$jnxegsJlJpG(bp~6HQ!5~;lEPO!Vb4?<(eKQ)!XXDEUpUJ9Jtq-(NR8&!7uWXA< zLNcOUVMkHm*JxE*U4lZN_ko#oR+bf+@lI@R)6dGEb$lgziLf@Xu$?$i_cO{fq9bi= zfgWcxGmDT}2l$(f{&|PSqX&VeI3iif=j;ol@^E6&cxv5ZU9f33T+dLHfc1H-=N0rL zbarOImtwR%bMb})I*Gg2woH2Wckejw;-$dQ9%dRhQECQU5-vpO7_7k|z=PC#>YI)P zjrGnKUklP-*@0#9dS{|y>-W7ZveRSeMgtRl2}twxtRUJvF+J0lSLd$+$}fy-XBaC1 zu0KOv5ZRZ%#fHp#g!`v3q;8DKi74T<3EbmWTKD*99XgzmoIj*0{S~23(mJ|VFOo&q z$S4kii^%!LU(E_b>pZ~y-9Uc`^;63_+-Y7Nxa%BLs@<-FOTQzkg@Urqt9On+ikxDE<%lArziF; z9OI4m>YuS!{D{!pKJn`O*y=nWe|BN=(#4}b`00u~Rg`P8oS!K~06vkowzxPEl|7OdB+X z3l9`&ePA~rJ!-v7u-m*!{ds`y(<(X%s5V*IR0*}TagKgUt>Fu&U17nEiiG|v=yB;u zxk(bVy)4L`kHu)ofJX8z$yl#*3Ho(xI=_RZ9@A>f53LptKLNT3WFANydUdB@pU93N z8yJtUDmk-e-uP&1(yQ`Vn@E|YQIH|oK{(^I#lJaxFkPf9ktyZE;qI{OQf53;Heqc@ zy2%u2aOTkG+3@RfX6yZiRab-LY3xxtblpBzT{XWYY6L1XqAr!_bjR-)0+)2xo9}y| zfzdKzri}t84W%auS{p`$qg8P75S4@$=6k6hv$R z`6XYAX?(8oUlU_HbltSd# zN5*Q5W~z5EfR8KcNfSbvtIhJ07kgVHV5gyNTw00)f<34g`NZMJ?dB!w3Lqt;y_A$p zTW!R$wv>`+^*vW^&hJVv<~sZdQCf?^5qnE6I`it_4~CI;8;KbSbN&19JIq{9{PNCX z^DRn9p0iV5DBcMJP8qsG=i#FNHeX4|J4z_g7N&sCsx-WikCGt$ZbY&ORU4>ePv{B# zdvmjZ9q!dnyw1HTLCrN~S$HGYk1&Rr-z6>7vQ1HGXMP;24u>60`OPFBB^PEWb$6{o z_HPT<{xrwVu?W7An%-)}4s`m84+7OHi2j9enp|a{4o*Z49E@h4^(b3{Fl0Nx-ZvV} zj?wRQhvADs6QqZW?vvPJ+Cds!mE;+Wo$TPwQ!|55cI*B4V=3g>97j<&>~+c~;^j7) zx&e%zd}3j){TbT-=VkB<)&2&|>tGp&f06GbWD-w?P-jM)k)}`yQ>nQV!9k%CHoX7VWd7`4 zR(~vTP`*gR*3?HonJ6xEh30k~wikZm1f>*P_dYX_YdUIpAiE4|pIGCgTha8S+7Bzw z`O(8vT^TAq5PLjYO$R;vqjB%wU~$U_lA_yUmGJ__A#ZG3v$xovmyyJ*&q<-*nb3wv zMQ!uo^dFb+q$M%hulRdivwiH(U{?oC8OvSeSqRAS!L9VyZoX>r`G?hlV3p~9QsuyR zL&x|3tPcA^74ErAuCt^w4tRy#lIG|18x;TC$$G`z+F;wqSM0TU$SsCkn58=|!uJjs z|F1_tFhdWC3eS}ZQL#RQ)U+MJR<>Ha9RqFOSNT8NLjy^A3rbhL-pf-&H+Jt@cDDEc zUe;tHS53Fd?NHT zp{obRt#-NhOUKXFRy6ZjRe}b`SRz;`!k7B0wQrGre-z`L)aEth!`GE$A=I?}r<$0T z>AGs=gWy%cl6u$76+)^uK!Nfdq3@mdRV-orfVWyO^%TbkwAD8@bE2_x%%1__9gM+O zL{;v1JsQYVBFWC6spJ;f+mw(mIF-O^1C&P~=669Pc@t`c;WZxrlXJ~N*X@M@5t;qj5u z4DwFBxkcui1|28tgh{@3`n^j4_14mRrlq2m^{%v3MHEdGN2Hv|IZW6OF=U?-4$gdo z)F%-B2M=*R_kn2Q?`||pQJIwV(y`V^C3Io{y(QJZ7D_J7TFU3-^qW(LnY*Gj z)M}y%aV_Ah7~C#e7R{C@swr5~&4BR1q9$X96@nGV-w3FnRaGRIq74PoQ2z3=DfJt| z5JyoB3>nR5!^4CH3p&$B%vZ7YmZ>`ZX>Hf-L9;~4C%rcdH!ft4sLTybA;+lEhXK2K zRC{y%e=k=?peB>c;DJ18KCZ~HBv8HBRe497p;ho3)3y&Kjd+RI$QJna&VX7og86W{ zyQojsXl^CFF~$ax23F?c>+ITEzi-A><8UU-3Q5yF?vjTbL<4AQH(+UPc%I64 z#j_10t<$7DUpeFsI$TB^o?S`E^6+Ghs(;bP?dcQs<_D^1GGDIXb_uotP$e6;u0xjT zWUI`xfm6l0{BY}hL$19f$$NB$M&97>7V(s`jI+>2I@;FipSuRDXW}JQq#UePN$Q-T zdkgH2GvFVNldYXayYUcyrp};c7w3LWCx;R!SUcQB{PSlFGDK1&fN+Dh;2`0NuXWiC zmRcMaSi~(=5rA|@Ydk3#s0Su9fC(ut?c?$-Fw|5zvxc^X z_f&r^zjbYwu+Mm)I!na!2n4yqXPTrSAwlSS4>T!9It!Y$W{Zj)PS8R|>~gTIzBoo1 zy*FkRf+j0^>{5HYzmLoILxdHaYe64fWc+>s^(?D3$TS8|XTW@{bV>_83?` zqWYh3XMo3kpzSvoWo?KhlfNx=px4v^o*`oUSgJP<`1Bhn%OppP>v=$^TioG_5vuGB zgKJ!uP~A^lajyj6?w2=e)f?7a+$EvfPx=Uw4ET|lM`K%k{9Sxq1-N=4Ft=mK=3SsN z7@={QS}ggv|19hwblaLHt&X1fZ;t#cW&ItDLbl92LnApuvKWjEg=1$Mo^;tJ-sCGH zKUseJy+FYj6jb@HyIVQaRCA0*a#aTNcva%q&gO&7$}{BH#8-;~>78pfkofAQukGgY z)*XCVYXLE`RZ1~lxc49{rdS!BKA;7aSbyqJ+`GnjJ52oPXJCzzt9DFD@-m( zIBiG*B6C-|**?lEojesuuVqpjks^q=-KM|6is8QGItrVP=#o9e%$lq4gNN`qTdg|R z^m%3dFCubMzq8u3w6xAq=}M-?Jx5EHh#sEN7M~CZJ4sOlbNBB}BU+m}mG^{(ER_m@ z1K4?7=xDaSqdY~Xens^&(Re8ui9c@4TE)=@_2(zm4vrqIYL8c!+~nflCWA|apX2D^ zI%UguUI-C#T8Xu;J?C_gh`9=)h8RTc*;@(%mAz=_$+p(zN#Uk&DPnoW?}%!d+yyqD zyUP^Rg+zR>Vp1z)@iY5EgaP846sWBsN#X2+5~@faN)WX<*3Fwp5bjWxi3&27*Qab? zf}c8YsAQtY)+a~K$9U3(x5_f(%bDS6-OGM9GWHy}aSpk&NXRt?-9JO2Cj_74sANJg z3`)l2k<{oyPO!CEl@r`msHdobqo$q6+a?lqraT2>*tnSPf4E7yiD*^>FhETA2~`Gp zMGHW5g{r9N;{m<;dqNpXbCFhm6$J%P=a7KjX(|$IUi-3+yM(oj&$c2jhLA}_LfV)w z>uo*Wt~!B|NO?V%4Ncdmt12R6_5}@=MQarg>aeqrx*$fLi8X&tbRfml0XoFdCi0Di zho7aA#ySrvd$oe+>-CyG)lNs6<89e*isWQ0aG`4{_~NT%``bUy*jHHVz!|zr?o$&y zAXrbk;$L}qn(c_TNNWpJ3S0kKKN9zIY@gdG9iPQaU?9qP;*f*9#UcKd9_e=E2U<;f%=Z#UIlSb)O%L|1@!7-2!%(b}4<+ zn;pxW%l#g={19NIgOA0ciaiW{JLNZzfjkE`W~~Q||gM$`rc4ko2ElA1gT1=rNWLtsmY2PHdZI zv_}_*x#33sGzN|Tn4a)G^^ksaqh()}g^EaR2EY`uQe*`qd)8@`&aTrlhSJ|&s7i%J z<_Ubm%O<`MjM)}+Y*${I%kAjrQ5TPaeU~~w7fQUg1Yw+|LiKC=e?0;>%zluNvKe{ zw+`F3wOj|PV)*N;igP|^x!@O2{VM3VxFFrf&*l)9wg~}Fgy@;Y;={LN2+&i5H1l8G z#`N3&MzEc@9J_;v?e?h}URSeThdf3iw8olqgtc`;^=I>}y5(IlP(5yTM$g;JHl%hx zVrKf#75t?vur+@SE~eW5ILS2QATQ*y-akh05@t)eB}=#IgFU~wM9qCsFgMfd@;_|o z9KRonyK&Qm!LGlhrYs>*TfeQr&Q%3s%e}o?O$_;AS^JM&SCsbZMOT~SY7-oACF&h) zI$^I00^0pZ9IFNnlyrrpqC;m#g^r%@%u;=5oI=Q}k#{+9ZtA(feC8EpyXOMlkId}3 z3*N-dB!M`keb@hln!`-HqfuH9@6psOUusYUg)l=cwh_{nsS2!b%vcny#4}g@Qjvs> z|CC|#N6o=*EaLjODr)ogMaIaG?MQWfd@KcklWD-z#&yz2(@p3Vf=SNGCm|!(5_T(( z9x_#|u65mR9Q<7uH8AxRVe*^#D(kHV<>P=Q0$&TXSJD`3rJmi!<4c&My|TvejDraa zrE&GKNOEo8x#FBog`3D~vz~PHlFsW)D~nf*NVL8|<#Zm!S>=gh;(L%ygG>HCI`?;j z9FJ$ixfZdpfG|}%z^8`SZIgC0-*+O|g@h-YrP+fb{AY^h`t^gH;fD;tGDv%Ug`-yb zqm|hn&n6av_SpR&v)nA=O>#>6Z$Cmnd`DJ1!XwhPtWXP>^fPJ}lio(|EP$2K$T1r~ zce20qlYq*TN31?hagk~=#1 zM}UoI&7Kl|o8gj4fobNduN}cLJflQS(>lk@3}u+CpTjLtV!FJPCW&y3TCrm^o@qq+ zzgb6;N6W7nMY`*o&$k^$!@YRbYugXeU?O93BWf41`b`Nu!OHiWi&3zRL+$7Bf8@M_ z)*bAY=ZynXp7KF9=6D*9IALF2rvUce^cILH#nXTCY*cm%_=U8M zOuP*Elu!KQtWM3=-lO4@gTh}s3O(Mzuq^DkEA|3(B%PNfu+-Um9y3X$llos!k2^0$ z+IKCAW`6+!uryr5gxifKtg2%V1HRw-4Y1x8?gT`m=bZ03=h@G5p2w$`Dsq(9?_Vb)Bcqgm@l=hB3;-Y_BTv5y zB)vf&a2=8!g{ms)~?S&j<$T6juF*P2c_c~FwLLD{(s zXn=8+9JwxMCa(4I5%q6ozth}_1cSk7vSB=t?Fx%CMHsKzWyd>VQWT9U0r{dnL-N1v z-OP^*V=-en28Qv5C49Lm?6-L(EGPW^?@1wz{v$Uop`>%Yu1hC9Z+hN@BZgdNP~v(d zpYw>kr}OYij2(Q3`U_oO;vJc`a zz}MADlCwq$hx;0Na0C1rdEdw2F9CsP_kjM$`5U)_ZvCP%JZVx(FtxgDv@Iq8&Yw6w zKQFuw034eD{cCTZou5}PoS)YQ`OZxm8H$BbklFGZ7UK07wD+b5EXr(eVjP zR$iWTg~9C+2y2J8Hjdlw9}CIIE=ifIYddNyD?#BlNIoMI8)F2YE7JC22$`fSlyr+k zI2y6IBCV_)psrF6{_FuI-Cw-sf57r*7e`B}2inRnS!8YO5iAfsFdz7V^mP^%7D;;( zQ>fb0=YJ0;JxM)y>*#0;<>z;Cap7|j;kpH5E zUw{wH|Nk21Xm0xd8Fta~*RVhL_1AQg7axPZG1OJ>-``;-=MgPZ?|JCweBQLf9Rkb%K&1Q4~ zLut~O|Lfh~{U!M?0Q_G7{|lRcz9pek`nn|le@H|6y2C@dw`63G$>g6tQFkR@Nu(I! z6)8TW=(AkEQb}>eWBsUL$>4c(tr+Utx^8usYeMopT0)tK027m|o=H7Oaba@(%WYAhLd9!0{o^1Rt_rC%6@ zQmG_d=iYhKx!j)|gDc>^;pP1Gj{KdLe?3T_>l0X1TlOIpOcvO4Xa!!U_Jw#dApW`*cFG(?1t_;h;|-OnW5 zkvA8QZ)Ws&HEO=aCitp>HX6$DG79Og4wVE% z%2PAjiXNyS?U2{;s_4g!2z*cHwmtWQ45kRadi=)*oZs zwr}o=-4#||*PJUVXB~-~t}{SM-u0UQ_;5~0)E|xH9JE$YS(ao=JN6yj)@sx@@HE##^60qV-(yK<(IRkyi0GsHN#>&hI25=NSS$IWPU; zm1kOhmXd*a18gMYki7J;SF)q)Q%5prHh)$y9PyaGHu1OcE0w^yAJiC%oOqF|o@%Vn z{qQU*iWyLFr;lE=97VxTvN_ba6ry+Fx>i`g97qf>1Fpl_b<(uhX)iZp944tlt#N;D zQNzrzn*(qnCIBUNNnFMB7sX9Dy*x}PNfFE%jd)fFhgjJ-?+lr65>VlK`<{$4`0yyv zUkXU!9*5x^x<~bJy~L=E)GvL9X}YI#Ek8OC=Ea|_@MnS&%59sskF71>Z{3J!>J?6p z%oFu0t~^0cLv;_kH>=!0WsFj`O|vplnZMY^LX{{&x%cdVCNe!gvV|GYOe=jnZQWh} z*dS#*M5x=JygH@0$A!_%Fp*9>W7{mzSZ^Luy@Vx*@0L_86_2T+q-hrdEMl75}{ z>59XB8;+k4v1{5$ce>nMVkWc?wTsP?d>af;i(E%DVAcdzlue?C-{7|H?BjJ5(7!W# z9haA_9iq0&tpw)#VcJA2w9IgNw{OWVW&o&tvR@?%M@99?^J{85Fd!Uk;XK{z?Q zdB4*~XzF6&e_!h21W4-@!Prs{{>vf*0p!)U6BP2O>6y$K0XMX6_dbV*-dfsP0_Djv z=~_)xxnWArBAJPG2ZXBfG!ZnP-H$}|6}^=Vt4>xKTt~&0Kmc_4cItq4R;Po>QDc!s zNkpx>73UgkOL?o`8z0)5hNn3c8h<8eA<1!CMry4Y^9+u=amrM7V(x2+el-sj`4GGgL#*%?P{CH`3!h2Ns7dN@bh*1kQgv^DkQYi!SDxefC}E zw9MeF`pfl?Ez*QF5oHGd-GL;x3||26<+7_&Je7-E9*fmvipX%9d+HYB4%P4ul+cJq zE0(8ggzgBEAd1Z?X%6K5kdcEN9E~C;>L|j-=36jI_>d#6SnEJGwq!j2C(kcP9NZr6 zfD}U)X(gfYp~gyfgLf)Ntg_;NcC*P)gtiLfEZwIR7w1|WKjrc3;W8mGyG*6YMNT8u z5~!r*zDdfu0>lF@4BlQnJ_Jv#nn*i|xTHDJplrN@Ec*{%w}(b|`jOi-Z~w^P{I*m7 zn7a5Ehd%Z1xu32fxt$V=MZVQH@U;7s=KQ=|d8kjD@0>M=(+A~Yzr-lcxPIo`>=vSZ zE2;db!F2WEM}}(M*fQ+=Qt=nUZTZu$dCjIeL|&Von$D&NZv4vu`X_5&2fuW|a%5w@P?|n!)b)P~)<{I1478*` zW7${yKRomoEe6po2rIu>mtJJdP(L$%G!umeTY3e*gqIXN+hQ-YGB9(A4T%oz@)@We z{N=j)Z8zmnQ&xE9uU9Jm3KA4`i)s>$Y` z5m^WGKG-fOUBiI7_#Ovvl`HC|-iwrFEsn?gG5eolEA z{J$xx#3-ed=HpDrqQTi#^pY<%%CPu!Z3?bxdEv zYt`604HPDcjC}}2+T4ET7fe!WiG3Aicyww{=r2S`r^U3{L#&0rvTH#Ey(nams=r%h*D- z*Syb&4K5wbgibE(;E2vjGleqHaMJXPKkKIM50*XOt(uqO2VE_aHFt*% zpRd|@V`{b{^VE|M8ae(ji_z}1k18~wylih=$F%7^FEN=(B|aM#SWiKpxaLO%eGB&i zJHw9&$!F@-YfgEXniC?w*7?c2jBKL*oM3b&(^go3)q8oKsgo8t>07`ncfcv-old!h ztTWgC8(Rs!zi1ypXjv{p_Z`U`AkYtvw&f1(kEa352albCbjH5BcX>>}5>Hpmx&#E` zKz4$U#5&AXZbK^>&QI69shd50z5`B|4bCf|dqZ%H!ReA#{qHF3aN>b2cv@!q0yX;8 z>z?a37*R{7UEXKgnjh;Fc=`kYKu8EOEI%@z`Cn~uLFsqQSau#Qh7FfwZ(9=wK4A!{ z!Bkk}z%YEI%Z;> zEh=Hnj=>^)#7CzW25cMrg|UHooOzrQZ70n{&RPqZfmSI^dQO@0lA|!oKsjQ+w+fHA zpfWP6DxLD-S=^B@{YnSbBA@e;V?Sii2@{?n8JSmMAu6Zu6rGM8FYQ1`k4DTJswefy zh2-L?BQ>jFxF5PjUV`~NWfk@l0N1VXWQO}0<81!mq|3I=$CNg%vaYubT|O^LGP#V| z_3N$KM=y~`qITLkasY3RFbq<&^4n)%I+>yf=;SS1y(Xt~%qexCuCf~A8O(`DHK{RH z{PnFf6NdI?g+rAn;VgBgZfw|!)kDD)WZNhnwcPVX;xEah6yQ7H=gZDIM14TlY3px6 zh@yFqWbvWoPJLKSP?6AJJ|1e$x{v_hU@f7i{9cMPzQV6Trc$GvMtC;|qT|deL!}}3UNXRe$GM=a@t2UXC zR|s~C`8|0W|yGMu%mmn%LV5?>-J71HI9w5>ib)-3+hunziRwwdwe2|?iGY`>OS zU+scC4Lmo43_y&}p?!{>ufHtJiPpL~kyxen`}U`hVd3NPS~Twu~q9DF`SA#>H?%i(!YxjFxkY4hVtt-e(u5+-~WdqTY&UGKklD645;Tzffw&?HK=$0NNb z$@^X3O>3GY`fYc&lg}lGD5x1-Tx)(&+R*Aho~yov8hNgVnxUWku{Y^`{&^2TvtK!R zdP&7KWg^pink5ONOXRxCO@A|kQm_v_yk}yoBHARG*O9J<<^LHP64k7~ zj2Gr73YE+>uaevtyH+T}Y^zU?Ii)tBKoDwD@&)}+aX!9s)p5=#bsOK7#qU~wBdZHF zC-ki_fah>%E_9z#yLc{8tIBv`r{Je*6-lPbV3J58TkCw^`99uj*RL$>%Fqe@0uA-fEL!( z;~ivo=R4k~+WdSRU-H%RJc8-q(q{;n+Gml-Q0g^4Aw3GZHCn=}*-lY@rsciybuZEE z8CAL1!#T&dt82whjXmi?2ldom;B3qD(aAIC)CP+Z{oO1r4I9s89Y2E;orHt5RK?~! zlIrzX2s2LZeCRgv>sd2&DZ($_eoLNUPHZJ-L~glm)e)%m1#4#6`00`^*=o^O4H-@O zROK`_)B!3FGR7cK+yc0ToSzXfb5CX=e;#KQ^*iFFUk#;+)o<@W0N>lHk^)mr?AZ0P znUG)W4`|9?lv#!tSoMDLUQ{%=AEow;Mq=nP^;!KNW3#cmOVkNVx9N_B#t!P(Cld`> z>InCt8!cG7{iGutA9N^HpAIa!D6e{*KgI8h4E~D{^K5;6VbX3k__vhy*`d+ftUzB$ z`9qS5WLTkSKIIZs8qIpiB;2u8^zvGohquWDSvZd z!t(4l$}hEjrbKqQ^MY+pd0}V5BHmq2A$01BCra{oxQhz=(4k$R`TZhK zboB}X6Cl0wtv_)cHQ)V(h|`JZdXGe3#`*?yO2ki-Q&b7EJn{D>u<_Y_0_P7E5&59> zjMfJQ2Ma}o?%{SH_y8Z8rT4J?s@_M0?%y`+)gP?QP44EprM|sk_&flGzC6AaRhrG``0d7rj7Li2-$RgqhbYOV zSE1J-*&)I3Sy~4Bc43aCm`qhkr@8@oj>J3ouvDbLhXv=-O2z;qAuEe6y#I(_J;b&T zDK6;b4(n9J#re6tkgk|&|CFxse1@>aik&@B_|=Ch4#yADI`moy$w{*nwyPMp!pI<8z%5he0fYVWna@_nQ!2_^$CEQJhke zQYqV=z3B^^j&(pl3%Hcg4Km8jj+%=9Yy%nFPTJ4rv-Q34UIijBle~UuDCHV`bnOXI zHY2`M_~;;QyIle($6(h8G@TeUOm(2z2QAQQ4<)*u{1jQY8ZuQ?U&@aIxvXE<;5G-W z=Rnc2C$8@GDcz2l^hx;}jsfJX*o__`AV<}@(W>lnuq67h1H0@<4q4p}UA|?yfhyWSE2NulA>Owh2+%cL*w|L%jMuka@aYjxFMOU6 zQaP{chKKzecbHX*s=u^N_##9P;#-&+5%9p<6d`y$*7&?vEe&qCG`c}I#(4=rWje|M zah3H0*U;hkaU}5895uu2dO;gsJr(zTU%MVt8kkAGEJvio^gVi_I zz|>%g2Bs%x20OW&<8azScOVMzqXcGeBNBx}kg0{w=ewXG?R4i;QRQcY6$8aTZzMZ^ zF^;>=_)Ow?vdWn+1yflMt4O?~VJv?r&pK2GunPd?c4! zMpFQ8;hzZ%qy8XCA?*hCvlu*_pT<(Rk5bjam8%|h2QvL@98`1clY5kw@Pr*8w^baR z!8Z>bEQgHTLlh;u!p`kp$HNN)a;ICdk*V!7He!#tB7kX%Vb0l5*%fT~^ATfaW(I3-WcU<638)e5NJ>Mrfr+7at4EU1uj zvSM^|9Vs%0O<_8L37dBSsC)cn%2Cznn}{lHr8(x4p%kwiJ?+@_#EW>9HUhYFRIOlV zp?f5euOQ&g(?Pf4{Hkj>#g827+^&-$crbH0eH)h~KGHsX-W?!)2kPh8PWyZQ%KU{3 z-2Ga1V3wER*geO|qO}xnsv7WB5bDul99>CttaC~QSkb#42uUnJ#useAcO@ZYCP^lz zrj6Hjd;^2$K-c_QsZ^q2Btx%~i&0(Ot)wo`H3tmi`L>!ZUX*r*GTAYB_+#Y3r&4R# zWQi$N)b#BJ`{b4wK7wsG99(aBHTc47UurMH3$2tiU)3FkF-)g`Kz-tNjr7E+r%}*9 zl4T%x9;7=6m`$*8Tj>elR^ EuLS*-*RZD?$KR93lzG7TR?h9FTTw0~Ywza{U3`N|dJj3`87tJz@#;*7`1VRH-#f;_ zXIC9ra{OLMm&Anl8R#>mgXl&N9?=R$SO!bxF4_Z$BrV9Gouq_K1Q8DeV z-(kPxt~oJ|CIeQ%6%Cgo#-s209rYHCC=oGApNbBZe<>ddSF0c1*=}yiW)LNsJz7aW z5iX9O&dN+gOXdYi*6v#A9rn6|b)4J;Y{Uh#!nvt|CX_)VE%KsFpdUSGmE~D-8*;E& zk~#C3$b}G5MD_lHU#EmwFC+-&jY0Hl5C}RemaYj%Nby4}M0=OnV?*v~mM%%J8tJy{ zB9JLE0CUT9h$o}-PD`mwh*N5huWtyi2L%1_R|7ugRwIE7eJhq3sGQBy=<|3JgWNVB zd;R))M&u}yq*DB}Jji^f?y!zRI=_NMakrDcce_Ex`mR;Yj)=-Ml{1b`tPD+TxykuZ zN%?^x`eXjg6L}v+Cs>U*Ut9TvXGm4e7$t<|?XAX?WruW_lD>NELV7gCn{9KuO}y81?P3R|_OX27ljXAdQo zex&~NxI9pw8va=t%1`nfe+tI(jJH-^SCS|Q;m1(MQd$*SOT*j_s4i7FK7Tzt7nz4b z#3;a1;zkF+*K5Wcttm2I3ji^nQ>V$*Pnbm zfl?eO3(*UNTW#o5R5ft8^#PpfO0U|Bfu+Dhj2;c)exK8IGiA;;DA=Qfi$n8cdH4G0 zRH=sQ+8=+73?JG+kb)F#GAo+_$Vq=h-N<~tzE*Smwy3@ybbrQfJ!zYE0}|JKTg?{X zefS2$KkN!lF)8^Lpzvck?KRxA;x|SGi8;PQl=45?W zNXZ9E@h@yO2MT2WE-M#C#n+}PSpD%c92$>$9c@DocAB#b_0ZLh1Rf96izqE63m;|* z>Q4|CfqtMhlkGHe$&z33(cfQJ2T)q)<4Uhs<;u8CncC1NtQ2-h|C-S@oK3u83mKle z%m{56G6i3Ph;f8|uD=c7)1PCXoc^8BCc-E*<^aBdQ*1?j43>d>W*wM6u+XY}<3utZ zB<`>VNlEiH9pBsdNDX{Kim#ENb-U~#wY0Y9b-f*scVcMftZ(6(>ZW=5oT>x#p`Xd;vVfwM?FvRmq za%H;J>=OUiwoEgVA*(><0b*{Z1Spd;}a*ky6Gm5lKv6m{X5 zHgL&0-YNGuTjDjyCf;Zm`-Hyzf+7kv`=y@UAUu8BQoEBRkG1w|&rdOC(%Z4*5A9Dj zLoNxX(V@UnpUAH>T0;n0E3>Z?Mtt(?kEu|1K4+>}IffmA@3|h-(X7i=P2bJCn&@U* zc(WnNV~wu2k&IeWHl^;WtAi`E|qLm|= zL7&f?6lbAD^S_Qy3E6CBR*leB6Bfzg+KY6s+Kqd-EVzw$+%UU8?ZYB52Z|Wq?h!GR#^|x(cJzf)aA%pS*RR4++Ec4eB>-U^(@;= ziksxlR1RN+P3xMm$b&SYs^hiFfY8J*U5w7t@Qt7Q*Ii?WPYNjtm5~Lg9pMhUDqm`A zT1N)^7FJ*QNyE%VsOYTQm&5A99UFCxrO|(VQ(kmpd}_G{bw?#*XGooczWbY>&2rIg z=H>&#P??Dv;yc~44Y%(nZROwOkgk8bl~(`L1L(1WmD^B_MGggu&frd7ian!{14Fs9poA@z;fjmYU3qV616>M;_AQs_F!bqUaLHNxxc$L!bm7I;T?6Q5`}X`Z zZD>$Mk9hUOZf>c-Z-%d5jc&-zQ%hz)Z`5;Nd%FFdD^WA)ckqXgoZJ%YRSw!$K2nJ@ zYB?@W6~4CepMX5^94XqbJluD}Aj28Y zsTZk5w~G;s%5%f&XDJcm(mKp;C$blK4y)o43-Y$OQV*4V~1eUIg%mbY|L#U;+h7W$FmQc4HQgc zRS5>{8AN5z*s7*9bM9t2E`v68eY^BtWg^UZWHtk(&u-S#UHJ93^NE>Uj`%ozxGuqfC+U^Xp14$lHT3c>?q2{BOgY^2jnt1 z>WzMf)Rd~Ir?h^F91*Oh=)`_P&Rp{}RSA1*()f!++lx_2+XpZ2&SxgeOm55=U)PQ0-NKGMmh6 zrmGKy4K#BPqiEXR)}S@C1m4!*GkTSsH1v^K29Z6e$Wmb+P)i~t{gSP;6|W#m!V0}b6Z4$$$oqI zxl`2qSSV~3wm9OJnw`tqO$RT$!NMrKBi_VETxl)rr1!Au!4`Ik32r{mh&-IHim`BB z3|=pt^fJOdXz=4xWpo{m36VH#+5Wl3OA3YOw7+R@@#(Q*d7nrd;FO@O($)%NjAZR# zmL8g_FC){b`bF_NJhZJtt4fZlasg`=gp3Kny$d!jJbDl+?DR)m$8<4#@8oq&>wdq7`U=d{T@9CjQCeOrkaK8kWC7eOKk{qqu24w=u9uCf zP=K9zYW`@HEd;x49P3SVi?s?2i1-|V!iSE?lMcF5f*8CxB{)HGc{RedeB(`Bg2xsx zga|W_=DqpBU&62P_Or`YjvcVtK)F?m8a$?*E6sxu6v6&JFva-5QjL?{CQ>0_qw%&X zXdMt{3V+kXYi$>_B(LhO7V}j$;424}s^=1{0Y+i6(F)xIJt&h%908eSNk%d^o4CTZ z$`6s7By&=H_jdC;C0*()vkG?j7Q0a2gzc0nd_j%I!t94w#gRNtLY-&H`%$unQ)Ybyrtgj(>`L3LRH%|?L+6?%!6!c;VwdhP|9v0l~V!VW~T+X+pI97uxm+( zXSX%{a^>>RDIc~Mv5)B=|e#>{+4G(nrq1|`>Qo7PUs&`OZ-E_^)oCouDprYU?vrQ+`H5w=Id}Rr?`P%bs zQbvH;<7G3(B@?}ADMW!&A6gUpHAjuNccH5g^~2P-Mvb~?#G z3nE5$>8_~){Yl0zO!gN2vBqTW0gnG?TU9fIgVI6%UCgy%>Z=|#_uC61m8hqen=LRQ zqQ!bzHC%2@Juf#Ot;21DRdFwAN~1!3u~gwiPDmTv;8Mn+g~jO3$duqXS~@aF&AcJX z(mPOK)|j6)<0QRIzBO%2acX50ZLBpa&M@18X%931jNywy5DhixaQbGdZBkPFz@j9@ zKBW1vgRuuM5McK~JGDUK9P;dA=HtC*I{MDU&`{6KciGip45NXe9nJ~07R?DyWt*UT z@`~AkM%KHrKlQ&;b!fpx(G;afr}!nxSE2W{LTWji!u%>Dg14fl+1bMJ{2z){D+Bdb z=WN3s<_XH8MRF^&qayt@5O+KhrFi#us%X32`CgT#uXcS}ofZCe>&eSl1+Qz&;*h%l z^Rv1p1(ED|)j0BZ#KNPS016LpGUhZ-`Xt|5H18806?LS|YMAmQa9YXEm40TFBIa|> zm3YM;nLn5mPU39p{(S+5 zdsQ8geI(zy6PfIn!Ea!ZL0v1ml{R$zg8IlLg}M$_Dlp#!cCuzn{vX*Ak843zB7=zF z5G&?XEMG+MqBp3f(l))qp()ocLLqcG*B;KL5irDykPs~qZzbCHN4MW`ZT*C}F2*SP z8dy=}$5(+!z2E5`=%?;={Wa_`g0U-E6p&i|IJ>B$TEL>&W)1tcnn%%cjH_~q;qBOc z%p5m!oTgic>LPkpV~{W-kg|(*io~x2%;iTtr!a**cM9wkP}c1U=qRg?!!f zj0-DRH7CVu78-r@#T50+puUa>(qjxGzzfL3}LA0M{fB8wrWyTFJhu3 zdlYBk$NwqlNHj$8i0)?zt_Q8`mzSf@RiZ1|vb!qLWTI`qrD#}hdR;cy{39Hv_CWu0 zJt}ffNVr)Rm##|{YkkWg@L2sU%r0Uta+)(Tj}(zquaS4R7@Kdj5WLS}*KPz`@gLqx z-{`Uczl;km`F-Cv2*2K-!UaU?a>gc{^oluvmGu1GSAy2Da3pN9(FR$5je3rIF7MOl zZ-)h9n;0>X+RNzPJ<7uVPmF`B4*9b!eZwk5;*`ST+}!?WaiZ3!vVtl85Kk!3wqI68 zTC8NEB42-S49rlkX-asQx)rD2xc*(R_)Gj+gT8gP9?GewgLtWYOgnDK>VX8N{&9Gn z?f~gT#^22628Xxq5X#{{iDkZvLirn4rYo3tzCD*0a9S#*(&Cxi8G4Q=F+khU-We23 z)ZiAS`e+&HnqQ{SXi`FwlLg^;=7QDw_-WeS{q7oJ6(oP0O-#|)7P?5ZUDI23N+fwB zY%BVq(7jN9-VdHUy2__2tW*stL-U=OCbb88&2(Pq#&~0O-8jwITauLKg?#rui+s2u z6;5zes98T5mZbafu*^oVPv06bi_b)=sz&>M8y$9xeH+>?o;`1kAH1Gdcm&mns0>W_ zJp4T8VbMniejP@j=I+U2s(+Ihjj0grf}dgOuYd9Z+kMGbc|P}u#{lF)>}o)+$4Q#w zhlVK#&jXy>o6rY3nlpbCm+NNV$pEGuim&$1I+*l#Rb(t56iCiE(#dg|RkS%CaW#ud z-<3^7^4bInq+^`bpPyn#7EBuUb%ssN65f7=FWlUC(ggeZdY51o{7}zdvHaC==CnpI zOqISgyh)*`n z*5`KKPwF*zS9eLELXp$)6K4LbLpSG6{~V!t5AB-yDde%Zk0U90mc;YfT!6ENsw|OZ zJEGu}D6@U6y|`Hl=pwn1Yo?%5<8;%?{pKepachfIkIU9ZiL@U_b(ygk<>F{Ulm;o= zgA@Xm0Zvb8H zd{Nx6{S*8x-3(H}iO#{0wl!I>lXgFg={Ve1BjzUkb}o~no9p!-Yo zmANO0zU8GX&FlZ*CYuG|)m-M59x|S36*44(uB%I<0F3-l)VmWm#CWOex6kilNEVxi zx3E^26_T56>}@4-NzqBs&>`L&I9(AKN{Bm+o-G34q95ixf^Bie$4&Nykn&YjaD&m_ z#MFqq66d?|xY2>A#f&}AW3CTEAG}*mpt(FYTy}mGJZu}<*#h%yD4g`1*9zhNoW5Vk zhs@BAb})vA&~HV!=*r)vF3*?@9vvn*;0n0OUGfay7@gk8a4{R}*th z;LRi{m%WMNR=dUcBk6gQTtb6swhjkP8|}SG)ll-B+OmnF_ONEbs7Zv4SH+OEMZ;|U zIL;=zOvA;(_0A}*IZ^ghG>4lM4Qbuf;3#a*o#u=NfOwGYD_f z1o|4U{T!mRPM5Yt+->ew(9ECEHdFu|>^dnF|I&^U$X8kIrvS9Q@r(YS3lsxz;~(3s zgVLVA+`Ian(wj40yu|**8Jq0)1QB;pw;=E_m`oCYB6IK6B@evTC-=*>M}>~ec1E(RF{^01 z*@evHh*Jg$&T;hN5;sNs$ohAT^HQ&cP8&(K=_zAQb0OIN07{&hc`?SEJ9$*!&EWm` ztUEo3=g${e;q?9%rSk5u^HTAgyu_qRi?wx5HKZ2J+5xr1ddD?rvk#BWW#utz5azH?eUyIwAGL zdeJp-;Yvfb(YRVr-V$#(W1-|-81n%($60t>c#f|^*;83VU%cC$aFS`9ESSq$zS0mq zP&%?41TRi5hheMY}zk{2wq+YntBN&l}OI^~50{{i-3W=q+(b1`mOhG|!N6 z0QRtRyAJ1K_O#;V3iWJkJ~Lr4Z49Ls2(xJa9DL_a613*sx5^7M<03dF0JGeptr;0szU~%u2s(4L6RF5|A^HKUJC>{5b2Sy zE|q@XUy7?;yg8CYTY|cmm9#MW&Yrs0wUt1Q<{CV=O1}o()|a4d^_q1@zT6To*dA<8 zc#mP66cv>rmdbl2m-K7i2C+-D*8BKwSCgnl7@o3xZ}8isWw8haVUBpXPM zoNNOE+wd^yxukVJ-}1qf85f`+ZOq7(&W(j<(1#!zx-aCI!kesR%YT3t+!l6qKhBbO zs3q%%X8e{!s2NPmTZPz6oaDhC>71%({Vc|2OW#<&YowRx;hCpN-woBzsOT>%ejaZh z2Ir7_F5o&s7xMrx5)z-p0sAPo$(>Z8tya*sQzR*xQ?rymJ3{xS(^eEWrkVE?<D!8Y;dDJQ|N3< z8j83;1^ckP%BCR$GyYI=sgriOZ{%fgUPwcxQEr2niGE9C-H+V+))u6Sp|rbZFsrOekPd9LZ3Rc<bKYfZ{DE{$Ul*0RUYdqP?+G zJ@*6nog5hOXP(bLB}f;Lk6{78cZ^CW&mx?>6!zjv=|B;)wI(cVc6slRWrO}oN*GOM z%)KtIB8kvHQ_nBPXkP&~Ex@e~?+pQ+?3k@nQv#k27(TxC=$h#($vG`7&sY9e=o(7Z zYchIPTzt5oj)StGWNnu(liCnzAkC4*!>Cqq>+c3%gBY@9TY_(<4%E}0(QHByR!(KB zRX@1n-!P5wW!dn?{~`4#iPO%!EFu+h(5^y19-)Fa)yn4dwyQa`nW1LfIV4ErV5w!C zfyTh>@h{019_-;;Rm^LVpwD#f3J>7YPJZi81K2 zFfp~wN-Y`IJ%1NYu}bz2(faz*&Jj%{rs{#j$w0L~weI(*?-%aQQZnnU_h zW_U7+X(k;X-ZYr~xV*1BvNR$XZ~4YaL`D>O7B?awbt2raVPzq=z1*vJ(l<;mq&n02 z36qK9f}nQYa^G=N)c)!bpK<(s3a7SP;xdff~wRzNoHg(D3b zHIhs29c~r~g0d}6Z_>=SWHk+@iHK1s581yqOW^@X(>`j;(_#KdzWRQyY=`+fLzI6c zHl#OSe>`3Y3<9tL$-Nlq(Q9KtLitM|5R|s1+%~ezFxQ<8@>zBHn>oiDPp2LY332n? z^aBmi$UH$zjP-pNs%WH}Mc}hj;Y9ni8e#V0SOrWjUbsVRTs-4bWytv*W^wGBL_@!# z(@blcV@`=Vt+vs$ju7KMM_4@C@)+v5EkFD~oY3(_i;fVqFJ5EJD6#h45~8q9s!|Z9 zfEDJg+T(Y_e?n+Z%6Fv~3|VL*NL5MyGIlow05f2>?01{wd^`eVphlD&r2Z_r@Da*~ zfZm#!Bj4>k{+lQ+0g5r#KBPY@#On(ig67OJ*nwG$itlh7wee{wLlY^w+6At3!Q z<}02p8PhL*$w_Mr+*5^tkf&u6!nEB-)+15sTB-8GpNPsKDCKzGwi&U3oN#Ov>znF8ke)UyW7`jYURW(jByc7F3CQBqia5<%G^uA zFo|X6>K^HTKO&}@*baMW!6!D__k=T%p;H~LoEYy#KaQ}AN6sn?8O%+#RSI>RF&ejx z_@bZC9b@5Zc`OktDiK$zu-I#dIc4C>Nm9?tbN`4O=ub6PYQ-oeQf{eh z5n+eQt7)?tad~#!&xy~sNu?vHTgn8^>? z5;wt@*L_C+8wG!vKX$a;zCI5&>U|1+{f)W*2tLCPwD}xlnPDeartb)yx0cFr1*4{m0+QQ5KbD+K?y z(r{TR+L98f3PkcGsnMdFG^k|mDKa`UgJ!`Cf;n_QEFE(`mwy+^|3Gd7n*b&F_QUI- zTo{^Ixml1>GC4CysWyb+8_6)b3V_ls^!hG*=eCtx{KueekMo_-yd8Jr#t3=03NGv* z-WZ&aCHngWtLN+Bd)r|(n}{>{&=2I3u#t%HJGozV(@$JBW8pAF#esqyMBQsqOl=Q# z$TrQ?t99)JiQK#ELL(tw!Ig?_n%Cf=iH^_3JAD!GsBr>eW*_ozkJ>S-TfHZ_H$mR+ny!O*B;$ll>YR zkog}+0FmO5HbJX4e1J8W?L?XLIqo~wqVg3T>0m+}9T14&m$8sL)K7=@l#QSxGc<_L z;p#~vO{1k!xQKYBTe8;-EDCd(q9UWGIfaC@Ax|3SIWCjk;X%BL=m4?a<@47t5&Q!H2tF7s?SS7TFdn2 zzIa)ms=*@mWbeb|s!}{T(!jrnFH}&fR!z|K;RGf(@{m+(`t$!?Yf7i#I{w!B`37Sa zX(v2JbzPfmm)$mbXg8cCgDmXBcqUm zZ6#B=L+d!I#9kt4w1#g$OjNVG$tUO&DU)+b<0ZB!wU{c8->a8ss|Hq}m z%w)cb`v!!fBjv>=Y>Y}ma__p(B&rz#(~iS8J1a7AmtZ%zfk7f4aCpyJCQvt|i1)2d z&k5@=xHj+^K~ws7^pMtdQVnXSU^{j~(5<-I+MI}Y8>!ffr00#jugaO=X{b5MHl16T z=XPHSH<5#=G&OVxEp!M- zCv-$WL7J4%0wNHk_YR@=Zs@)Dme8wr=e+OlmYMsHGmhg-cCz>WuJx?v`K(w);m{eP zXZ-sHZJ{5ORhl>Pov_LG8q6=L8|fgvWRm%>Kkaa1e62y|*S` zc4j~4lvpBlqT%i0d4}8cD6S%XP${?0^AFGO+qc6h2G(VmM@RizT zql;Efdh0d8qo`4=Qu)9W%Q=~fkF4rKqB(?B>nvR@72)%X-j+= zK<6%Ofh=e{5RjjO*_6u@PW_pg(^{S|v`UN@Zt28g(mTTmRBKl4osYTC=>O!OXshXQ zNzMExvJ~`!j|IIvt?J6dLZh+$+eHgz?Vto=_Q@mnx7O>$Y0!|slGC9g25>uXi`Cw8 zk7534Om88g2(cCICprsnhUpi^Vk&nHUFWbo-GEG&oE41YP1`)eLt#6De_`EuzAy9K>i6r zZ6qAht?}P{!a}M8U((6>E|q4&24NNv_M~&%C=_8EENCLX_W;2z&5~N7`g(7{F;6$g ztc~q^rU%}tcqgbdq)%-iMd}^FtgN&bRukPAP6U3)mp4JDmTjUd-TddGLZ^+@V1?wR zN9g&HbEylZshE~rU7xW~GXY4f*g$9>-5Wjw)+bBO^XbNt|F=|0Dng#ny~%s_;-4Ew zOW+)Sa>bp(I;h8UvG31#hO|!qs)g?;VP{w*Qg6pOT;YrLFyu{*qoftT{L`x$sA`RXIb1i5`6h95udk zB;o93;)H*BR~TKDso7oY$hCQ^h>OZ-rI0W&i5QA<(E}_|8>&QfI5%*Q>(Lbt5{Onl zdDoFa>`_i0UH4cz?ug)f7UyDE(o zL1v{U3Jy7)?DwQqIv}=~k0$A#PCpw3NFc9oSN07+3L=}77YBTd#e{0Ux-{feSqjhu z1S>@WntYe4?szDxHVYLXFw%qeJrps;RL0-0ks~4Nkr7jOU~GY_oRm zQJFdH(X%*PHd8x-9~X-SkdkYT0P!F%73YE7Oe0n|M<4{`v6KN~Q*u(Jj6-Xd)6C-R zBP>&a)Wrk;lyS!n2qwd~_EVCBS(aI)dQ0&X%WM{Cq-dlKCRVTER2NYl8?#Pv&LosVeVBsFg&1b6E;lLMQzupzRQ z#B_p3sCCZ7VMQj-;%zgXbk*&pYd19L+>)aBn`n}FRx{4g0K1uh z8nEUNtYjshc(u>)zlW?CXumCOAH!0b@3rv>mGs~B_ttwrG%Mo!izsoIBF#?{wwdEJ z0}=S(uK4k92WZByB^SCpHZ*!!aVuk8ngwyfR$J&Qs2hBq!JC@Eu48QbLF<;vjMqa$ z^N(0p;Bcw?hBQ7a!VlU)i4LvP&n{JKfSZ*%a^x`T2P4M}5PtWkiBr|mnH2S!7`I8) zU~Ux>(OsDVJ6b@qvOO&6)#DO9N(KB&<}@}v7aHX|aVLEQE#vt2G*?6)!&~XhyL`%9 z%DR>G`!<|UomB6oTwEE)W#_Y%u=0-TkGQHUdEYuHwoG)BSb{vC(mTT`AHPVkM>hP= ztcVvv?&%anLB1LKzw+24zW0{l5t0ydqAdPjA=8v#8|&KS7^<8XoPx==LwHtF^{#4nH4A}q-f`(E!^?8EG_*bHJJD^ zlwQecC?7k7T@J%+bKnXWG+F+pZ~S8-9W8y`X6yW|p{_bpn*q_zD*@4zCd8HB{vt)_ zF)(@luQxY{2d{>;y|_yi)+tJtscK0%h-a;%6N%JAGEf$z=t8N;h^rI_@8x z{C`<1I89%AS04y_7RI1sj11;1UwMiQy&DE5{fBpi?$@1e+*82xj3#w7p9C4g@vTY> z-ca4>62^tC4NbnI1{n?Apf>BJ*^iRZBOb+VQZaL}bx}3zy)4K=^Bj0VLai>n=Sk0j znLS$~eD`-x6k{|WCz}?>(S<9x`9KaHVdfrw`-69o>_s{;ffp+j5JVwesNa-B&>~5< z7FpHpHc%5b>&$a0524Zzf&LN;AMvB=r~?yXe1=8xvo!1PvBS3p_rHcuI;nu)Cm)VP zc67uO%5<=ni6i_qRYOB&^?jJ3d_-7*I5|*ci3b9WqGo%2(cP0*COrSo#1j~GJSK0U zAQxqP!dSV|PP>>IYY|cy8%YNV2;|!sT{lz&duqVg9|j8^qJM-for>7ZbFd_IhAk`r zSL*>KL>2IvbaxUaT|+i3t}EP~<2=ncBi1&trVawiIQSpH7^cX}o-a-EIffTa-t+^n(9 z3U1Gu-Ezfhss!^kKx+sYy2ESV`60i_=TZMFDFWxU^9OyK2A2OGr&Tmr9rr=kO8+o$ z=D%3j?xWMR18vGT>@4QE%DKA&|EItiJbK`{byc6>L%|5veALg>hZV5pp?%gGJU-t%2fy z%oM~3Hcqvd`R}E8i$8piT&=%0;Xl#*aWL7|^VHdqJkD`lb4qf%39WyFs6h`41wO{9 z|4cg0JdZHw{gX=+?Yg4TIc3N{>i zZ7FJH_W7LjlJKFwZX!B}W5o1bo$94##h@*BV7iDVYxTG(?T`#SZoN?p(;coGy5-%j znX##`A!A2{(&Gqta$#AMj&FvvVePX2YAORFXxLIY^(L&S&}ql&T{}b9IB$J5*gA30 z*+}5!ahLw($1i?Dv>AU-^Z#a%z%bV(vTR3#uQ;UwSNFclC&{n$YSRCTPvJd4jRJtY z8t#F2Q!o9X=Rd{P(jwVGSA-rv{+sW8VRaLoYfT(%)T7Sn{&NET|<*!p`ZRd()ff)DG z31Cf-8IF~9rXI1<3ttp*r1Hxa);~uqBlltu}Js>EVsdwB+duUbTQwrpVprlag zf8?KHNX7l121unp7T8N^AQ7%k!RYw@U`@rl>J&)(mk&jfG4ghQdk!K;S5GcwwMkzR zh6M9bJ-J5lFosYk9C&m};ZO)!(r13&s+4S9m8)iCP||RP)qP5+6#D0WlByS6F?|nP zpKfH{8KPAF9}Q!9W+J$1cX&{pEl*HNT}o_2tM8Fl&bt$VYEc45SyavPN_)chbvkUG zd+`)7vd5jiYx(oyFK}zwI{_Jh48U!QyRXNdQTr#t#*&pnn%{Kfu+mLwv7qPi3P7r` zaoQ|wQ@8a#o5+T{OqG87)>?Gjoe34x{Xu>Z8Od}nm~j8B#ACPBM3ir^qog#`4M}L` z8^sG%8}66aUF4nu&>d(}>jeOH$^Q?;K>D_Xjido44-B)!X_iT%){u}d-cDEnOr{t> ziqMR(Eki;V)VM#IV6%%HR9wEjMOj*AWO@Xx;5O4Xt-LJs)3>ZR?c7QlUV@wdXTlpx zPF^$9xc?ZGPwm$4mqn?6+-S&q<*+Ik1=qui9LQ_nNzyjTCD6i_gfGb=@f3!D+)&gy zKe|%U$(K_1ar!*aQ`>ZidIBFbA9s0>ufdw+YIG1{>yc_?@V-2y>B>b( zh9uG{odcd(wXT-04JZCU=j6FhZK%@%UR%F+-yD8Z1+R#bI~dkekUM0uwUM6BRDqXm zm+eo(z>N3By2Cs-5lu&Y51qKHs6a*+aya{&LC8OI^BwhaKzF%ru} z@@Uc_yZWf|5Z((^Syzw|z30gQgJT`|KnSPiyYgQS+hJG6e@n8|<1m!tNdx7F=Y?UO zoZx?4?c022N%W3`iZ)5^8v4{zWMNg3Kmj|r+n)C)t5+8DCbLXsrxk7;kQ9N5p_&w{ z{+7A+mbn*n?S5Vq;C)~dNAAUWHMJzwvDpsNbtSRuBj%M#Q|{v!PPqA5D*IzULWaCU zzXRU>(G;4--~|8!V%rGwZIf8$Gdv{|3*sZ}hm*z0nk`|n0oCDb+I163}~19f#& zMCQI&0#$XYjFO@FVg_)t%rT*ct^m~QA7A|gHUlZ~0Qe$cX~j$$uXVnX z7Biw`ddGk-T-|AwLEy zl+c-wJczS(XOj*FRL_^m)zavSW|oJQW2;}e?z6wYAr&0KN-ljm5S9f6XkGL!d7mtn zu1}WpXS$Z$wyMgUGpWk7Z~3(r^_OI^5`pRzs+2;}EvE!N43!YzsEQPZmX)7ZdBVU> zLh*|&u}0?%G^}Tu>KDxw3yA1kg_ZWBCw?Jvc7uk+HBow0+{FW?`Cb|ww1t`yn{lms zz{|44?XWnRQT^600hPeNq=e(aV1|@n&2bmTd;F>X=Rn&1O^FveowOcLy8^h9{@E?> z;;#OJUR*mDxE;#&mgK{CN|>0$x&dq>Mm>?`i>qZ~)rDb?Me3ywtSSa`V4XY3<1VbGKe>5H|wgc}HhHI8THuoyC{5tG_|TZ~Xoa@omf*RLYY z;joOp`u+opksbh6!82!b0UQm)f`6YY0uiB$l_%7wH%@`#lPO}rSgCp-vpn-<`zZd( zAGXbSl}E`nh))2CDZlElG#}0gWbF*E)cee)MJi`)yNy%_kaZw!-6ukZ8Vc%y66_I9 z5%d}B%j*@BC6Iox^3(l>`jU0?+<{MpW=iJB-%el5D+L$DD&)hy@7;=+HH`;(iVc(*ljyQhzXH(oi#ZQ)~R4n zNkfnCd710PdPqx$rt6kb8m%?)qw6}cqqwbovvQ%C5vm?FEAJoHSHLa7BmXfE7r%?d z-FBdv;xoA|4EZ>!W~!KTyiKEk$*rn+Vx(S|>Go#n$XDeeWAh2Zn=P(#3GkfWrxkTd zw_9q@D9FM@DJGwIJe?)wks&vBfAI=`cIAtu4Rjf|$Oy4gg^QPnz+yK#I|NYfjh}#m zq_XO$c83w0F%CqV8LQ5wcJyk2Kd4+Q2nc-0>G!%!u3)xwG<$jM05BQEjccHKj`m%_ zj+v1rRlvoyrv8ysi6DEFDWqEaerRsU9&e&Tk(|B+fR&E?(Tx@OJ%EPCuG@{0=uZ5g zo@y}td;Is_-4!~i{rL6Pvhz{8_n@5HI@LvGSbo`b^a*zI6P16*MGh7Duve(~cE#>B zA9^9jvP$l~>H1#r9bL}RsYlTYM@F%?z%B z0lnvH^z5B=y7o24QU6C;!x3JKPoZ=%7mGGDE>0DrPZ26tU9Z&wFA|Njt#W-$yI<3L z^ST~G7X_Td#E)h_lYE~{{P|T@z3D-J&rA}QB(4F3Pkk$YYEA!nT%QLP$WZ$=sxl`%_bcW}Mt-Ua z6?h*Hlzp6rB2HwGv%o?gT}!i^*m?u+%=O<*rlV{7-oR(gBvBdzm*!p1-J`R0StM@G ze!CKuc0xAq_rarUR>{^4rit60^`q|9Q||Tf&8Jehb##9(u+i3QzN++GXmVeT+Ho>umi>JQXJ#B82ME%XoX?3ZR_95oxcI} z^1_uJNmH z5;|CyNhiBHfOI@*d?!t!eaViCiJadc9HS}E0qji;ud6{z5b4R9qp*kwtFY##{Rt_D zssxgW4RxzX0RjCieE@wz-}TSu_dK(nPs<#74wu6a=a)bUa09kc?{ZFP3yjutO(Eq| zvjHyK-u;$gmmC{gZE$~Ug@wcZfPA3uvmIN)RRTc1Iz#$co=sv4-h=8MNYKq9j3wxf zfn)z6PPSf{ve#|6IKYMS+|R?m-K98H0KoYUWY?29n#=;F)dx}`E~cA9;wbq)V6MO; zFwWe>9KjxsK~g0?rvo|yN~K1*zd(1S1$pzL!2l!ZRnU4oVEK8-B%{fvRQ`^gSyX;9 zkt{7`yNt)^)x--6-T}Kapj>1~g6NX)5sp77%wq0z$0=-GoxV zd-GGKyWEr5CcOg@Q-k^=unkc324q}=9@kRQ%y%Hc-hdT zu$5y(1X?*M@W(ZS#07>G2<7mrI?l@WY7u}{nvo@WIQrCa`S_l-1-HV4K4kyFc!&8iaRD5&H)|tv0cN&2=wY5X;?_JV) z*8yd9Hi-i8ppK3NoXe)4-VK;rLOe_Zx&cNZP&*qqh>az(F_ZW#6=f;TI<4uI*Vfvi zOF*~go}0T5cr?xWkw)sN{4W=bxlQpQY_A;iD)vaYK*`@$srkh&WyQctcv&!CixIUL zF$cf8ttq(n-FN6R<|J!x2er|4#erBU-udF%G}7?;11X>8YA)D>`2uGTrJhvL(NMmZ zU>fwWAP|X1B|LI&6W{_>DB~`+Y-f%w#r>{e?Z;^*3kO<92%bk%!io!L01>u`FWkVu zhoKJU@zi&3o|I|d5tmq%q0Tziq{Dv|u^kOB-5(`XdYc*0k$%$Fa5QzR&u!2=r32W9 zGNZ#fXWLC55IEzVSQWU@*3b&_g~hF^am?P1$mIKYkAgLykQ^17J0(qz;IB1?2aY z%>!+~E+H0r!rSl4Yk(;bX&wxFg^?(V&##IP_1w41@fy+#onfE@Y;#8@ZJQZJMfQj6 z_(5-4c*{?V;fO46+5Ec#(0w=c)jU6s`>P8N3ySop&g&oCEzUb@m;g6rQ=o z!zggjH~-PQ;eD{Tlh8WRUP)*29HcF#p|J!e7kV=>Z9I?Yf*K_Ub@5XB8gfD(R<~xY ziRp$=kUPDW=p!|6A?g(5jzXKgL4xMiIMx#wxvvf zCE!xK`|oU~il?P(MgXfRI0>cgIqORiu=A{&txWX-b?HWexF7spVg7*ScGTr{5Vrob z;tvHeRoYvhvYn9#pINm>)9$hlQOlo*SNWW+d1Y{yY|j8Ls=#l9Jk~ZdKnQ8lV2$gl zGDpldxZkoq=I7p(%B}zfYJ_pzT9X}QU`=O5uZrzvA?DbaK&1ErWdWlyrxW@=Zm5|ILkZRbTwuJGdZ-w zT9tyTO%h|J?1yE_tey*@s+xU%Sg}|g>d@^GGHu<*zhKHBF@`1fEm^o1GsftxgYgil zojzXAuL*BS&84h$jb`_~^c=B&MWrT=wF6AFQ0(eWzm~dyEQ7FnnJ_?$CT5gTnCa^d zwqVQ7=8YqIgrvl7gVsME)*KkVq(@BrF0{McOP20_xj*O?jsXgVuuoKsC~^JY6uMz1L!5ad_PFaOU-F-aYBW8r^k2 z-yF;Kd-GQK|A1CMifc;R**}7rbD3g>;4zV)SI1WP*ADPl*{i<2Wuo0=g?hw zhP%@kgWc92*-Gk1@s^3Oh89LkJ+~!}I+rRuCTjzb7v|iokm;1l$iB%38JC&?F=$&9 zML*YzJ>0^9b{m8_>1^TZ|tH=40ik`W)H2^{SHny%0(=hmY#aCQ;Qf$@0CZdY z=kK@c{$9=nlEb%|2v2Y7&730YvCsSGj0I_i+gF+#NLAY_i~zD>`+dyiT$WYFg`8Wb zyP)TI^FziXTmgL>YqE!Z%M9ra!P^%vW)QBjGLUp`!QgqKk+AUtE71FyV$#(WI33~e z-OsdOJf{|GGSE9cw(?li>k7}%`z?_7jRd>SE(gG=bFrt*R3qZq4vSg`A!NSX4R0^m ztx0IOtR`w{iJIp<^1PLYB(Tbm6L97XBprUBD2tW~>_(SCy9B_vWNvccjrZkG+GjO& zo?D0yzivBmg1gQinN_mpckmQXl+^@#hCDG@xk_8{QuARHlw+H7;K_2^E8*fMy&ZPu zRA;soimz=Y=OP0)7v*@i$NTTT5VzF9NAdh<5aK}i_*P3vv;frkAX(%O(?|F89hRu* zT-ID2!?uw&4hg){3BHtJv8Z>uB&O_d4k{&BMZ3oPLvLR)+^zzJaenRLE!czE3qT>W zUj0P8_t@|1a-06zJB@MI2v6(v5}VTLTnw93G>f#9kX9)I1wR5Z57jkkef-}^^tHzN z?~*R6JD&o@RnfTp^rl&#Ui`%LVHt0^M42r3Vc=E-nLLcMaO+9v1Mi#Ox(Vw-;}RGz zT$$H@6)f3I&@8Cg8-V8qI?R%EM_0F2CymP7VtFPUq=YY*vik3y^xxv4$I6AjYlGpN zMspq|VtD>NL3KELj1c5lX;!<*wg@=%Ry}GAE7CLcrYBdAxiE9{v@9Wy@_+|TxSuwo}uil#l(7p=cN=N zQ|Czmf=U48Rr0GKNFbA&`4-Jp5UgrLw(B zAc{h%=HE6%32zyG3)mqRwGR9H}?`?9>+adc9FfreflyWe}$NgYL^XE1(tf67cvL&?_?$vi751oqYWkjVNC8*5wp1TYk58$E7K)X7-w{VoDQOkZVQUiehvZanH z`~0Z~KWS|1=}4_MV?KE4qCAuXqgwoSWhcHWQS6}H@C!z%{Nrua!pPU5^0j&M{bt1aXnYS()5EPxEoHJDr~2)Z>$M|f%_F=O8MA|Q!f_(UsRnwc*~$IHA2z@1np8&+6Uhr5K%R?W4Myaon(+|qX(&rv14 zjyG|(FIS@0WE@|kUVQ>6+>&W(b=(-D8f$egN&-38vJ0pwUPH;3`xynlZmEz#ZcJ{P z3Qw$an@oaQmn(XuA#vDNxFbl+S$=q3B-GbqbJwN^P;mDPau9H{@%;tK!)lv=Zw=gx zf5oQ>p($H?4bQN4d@YMW_fMr_4jGjI(9TrZ>`n(8r+-a-5@b4>Bx zG2rcH7pbHtC&Sk6PTwvw*8%gRvg!{)*4~uR5p$;jR()8N5N4yAN3`j|gu+sry=Yqv z>y>=)xE4$BS~5w}c2K22XJ$vn28+ct_~w0;t#~1YNNNMy^*7YV`d01CLCnYNBUS>x zNpIKet;V-?BZbA*NzCuYEILlBHU{P8_VJsL36`1dJir#*4JeXv%*~97%Ob`9GNIV2 zvDxn1F?`aDa4a{UZG5$(vHk8zPWT>;n^{$B( zLjy{Xa2hLFvY=AYi={GVwAf;x{>J4m-a=1QEHn%ia&brM{G%dqK46o4Sd!r{bEhju zXzJmKxe=xKZqLh8()7YrTV9^{6ngUJe+NZ&ec#P25s0zk2I+Me8p*)I; zri^^q-Ys)A^N|6as@v|qo?0GN^=@}y#kjPZ(@tuw zJOl4&5zgudKWrC8%4;KJXeIXvVca}>MRs_95A~FVwF0iG?_9)+P=R)tBzt4gy4Y=5 zE&T1j1~nu-5=6c#klrV3X3z;%wBa?Noz?vlulLD*D?V|aZ7aLPGuYyt`vQ6tRnnm^bP|uu!W%V$b7jYx%Q}pBrd?C` zUApFEkW1|=?Z1^4m!FUah=iTrqxV`h z-n}P&9Cz5vuzR06ph2%)KDmL9k#VCUPSH|@65!& zNsC=Rz z^RYrLv>PZ5|2-e^!%5dMKpDvf7Nk7a#cRE+S9e*cy$MPK-?ITkmB0j8)&4s3CFjHQ zNYewciQ_5rs?1tBuY_^qU4Or7fdel*8TSw$7N~lIj#78UZ_LpWOgJ_mtUJ?9gA)k1IzJ4iQP? z`YkVN?s#W$=Xk6a@&r9;%{xFcrfNQOvi33;Mhc6_B}=-fScC;-_5uPT*4S@RjIPfC z^pLNAzu^{AHGRMo<)(`3tAd_=WxXU*D(RKmE7xWi4gH11{^opj z9Lm-cQGLhm!*XB%HOg*e4d~VMAoq8f`NF;`QB5pUo(u*^z!;7ZO;S3H zOq&sX)ZfR{wU%?3fI)rAcjzr9nFaa;b|}O7iarL)r60XtB$6x90;6Rb#Gb4fQPZ2k zwzQJALbvs!R+TRjIBfZX1w7EpS%kQE6P z`tM@8w0&dN- zq_8(cdn&=W%y@4)b^azNr64b3=+ZB?Hr5$VgZK5QX4Fe5m+8W;6FKpf3y$fK0sBRf zop3}SOz-k5g{bxJ7oU)Y`^qhe?^3%2Ki{sKeTR$+tEB^lj1lW&I{O+h0Q5Q)7vGt^ zorupATYHLqOAR``(T@ZoV2?ytg}o&nF5e}P>P76W!pqXyUGoS{`JiB2Z_6M}i?PGu zs$nFQyx1_de==jQ`?=*?Wv0vr1IJsRk`K$D&H49p=$~{> zICkErsfatRe=VPtsV@#4G)=Zx`gbelFdHXPn@A?MSW}~1`{^j@!M6%MZ8P^u|CW24 zF7M`BU1erYk7OXW!gXfL#pWPt#>e>TZ;ZeC3T)G`U3Z}>nA7^+3POmm6M ze|_30PEkX@``t|9Dd%bZx|HK(Wk)mq%SZaH_zbqPvByoJo;%W7wXYS5hrK}Q<@4fu3Ay3TgUnvSq|GazlzF2gskMv()yiWZHWNz~ouPoIa!s1G6Or6A39&v>l;vkn&O*8&fb1{dqqxPZagU z?kh-gLHQ2V``(P{xRo)DwpP%U?z-uc^d?))ufD8T%RYl#enWVVheOGhN-_Q|+QY!I zB|a3sEg0LwVSgyEGbeW>CK{PPf#);x^c=R>DWWqiHWcBUIgHYY>kt~t#yoQ?w7w-9 zdchDksy~5f85^{Pp_+b6afNw?N)Giz0BfMYF|E{9;OBIAK4m0Ggl?T$6qTu*WOcEI z(Ym7y(GT)tLCsl63Eu@zGSE!-h4f;$Y$KyfZ(Vuq7P8?1BdRlEq2p@V@qC%nVx?g- zI)cu};lk9X!IpxDQ(!1Ggq6laZESv?#RPlO|E(>FV14%UpT94j85i^^ah`?DC-M}s zF}3tJYjnQ;&x!2tX{r5r5*DH=)rRhLc}u^{ko=7P3P|eA~ZrUcH0m>#?Qeb(h^{BEXUMH>y)?G>~1zI9iBsT;H&6J4QoA&taIzjW>?)r z9F)9-T#Q~6*YmD}FntH+3^Ga%;nAAO?V7`x;{U%A8%$L4nFh#oyhya8Tl(IVJ!5tc9}q_`{_ zrVprBUou@vP{#=(=c1L7oKq(jOmC=iY_d#(F{N|8JKJ;Y3#+M&wWLs z2`x~488f=sL9CRK2O9>r*JFE2fnAzHo)%te3lX&KT*JCLEJkYOEi_Ib4o=fV2ZfU-#@S~Lt2BNS@!aIj z!astAyeG+weMU`EB?veMs5ZAD5RP^ZBUa~!R@Jh4Q_ z>WL{E#O$Bu&@M4@S^k0{1A~E%Lh$`6xbjbv!xAcKv8#tPfj^` ztDz_1 za&doIL%zJY!F9jky_|0R<2;|Q%t6=1t;im@&y;cmd&5Vjhl_r4IKwxYgKn@_eEt0R z_t(b(_tHkf!@q=k{RJ!?H4>tt4m*j?JC#SC%2L8+z1=XcKHKGKm*vDb(J2sLJFpJ3 zUcK)0F_haV@bCc;K$%1M(DT;l_>|u%)|>4X=mYcU8xy#lxVQ4&7@Hgf9j|6^k~``p z9i~uwK9|s1=(w(fA#Nw~pWkoL8#&@uXDvKuhP3%@^6uRSkvj>cd8t;k(x3gXh^ykY z&>zPsk1S=s6&Iu0%D8Q3Zaq5}PetpZh$4)PT<9>b{Vdq~62lV8d|X_mD5$#_mN(pMX`2<=NF$LXDXe03&6VuxA1JFuqBJo@$@BU<=$XQ#`{P2}TPhZIkk2Vmt4 zu&{0RyIqJ$6;pq`LXDDY_e-#N>ge^aw0mzc8qMk!mEN4TR9br<&NVY!63WAZjaB?0 z9#5Uial*MMNo;>QC5$87E;k?eRUi_BBAg3#xyTv^CnApB$J(1>hu%hXtVh)@S9c74 zER!`M@ZwICW_#NB<(@yZ;*`Fw@L($TBDP1??kp@2?eRt!3C~z64H5-l^Ha08UIpo z@t_Ke51XigUGWIdt2+I28+3iHuSZ)$#T)F+89Rb8!3GThWw}m>6TUjX&K>_^4HT?m zgP6T_zOGSc51634Cb`Nd?}@#d>_OX$Zn!!!Aw#I0B>HAj%+}>L``yykq6Fl~|E_ui zGYtp8yVV_Qijv{k0{Z zZ*lA&m4)Z*`AF=lHOEK#4Bm!tRKJ_nD^&5L1tq2-L+!XF}E!noHv?TLZI0h6hE1wG=uBj6?T zq2)O z;kn-7DSVpJET4$o9R~1{b2snpKxUD@In#`HpSzqD+x=_{B=Z@aRc0SyuB&zy@v>5jF6G;1C?n$ZF&JI^IVps1C|2;3ktSy*4vLM z-CArTS0Js=JnoqdLs1^ol~3x=sE)ZRPL>nMS#_)nNu=GSrQg~XKJ(zpv|Ep`TY5Xxf!3+6(I@H9lv{$ExdvDH;8t-?0A=fitNTu=9M zQ1el3k?kuOLYG;?=j$n3{OKW>yaGR!lb_jqyUfqFm+^6kC(kcUK5-QO#8Xl)jT*^6 z-Q7$3xjtnOLIbvMF1Q~}>y8xP5HTu@Y2bA38oz%bF*CZj2iRyP1_q)9xg{)&s`|gN zCW#ylew$G@E|m;yTrI=q; z5D`28quoY^g7pD~^J;S;axEKJfyYZ7bKRb^cQKC@!%*oS zq!c2Tff$9^HScfqsx;(yK5WU~T3I_}AHi)Xww<>U5x7zbM)SOrHxoaR>*A?Dcn%@p z-T9|t_#Bs$dD^-PnS^_lHO0FfCqW!}H@0X*&lNI)`6IfDWtcE@*oS;RkGZOtXB3hl zTJlXaq9AhNDMwh!PU7)^Sx>qzdJ$Gp72fq)s|i z0+jQ;Sg&LBZ3Y><&k1uKTq@Ql`$dd07AMI7k|) z4+>5zCjT&}yBMqeFBA0Q{*&t&hfS}P#f(Q;l;}prWX~gcT=?ZcC^p)OkF8prj!YJk zqcR{cQY79cU#WR?(Dsd1brm-P`PpL=Pc?lyTpn=nlr$-?5KzvD^>1(sc9?lTO%v7MN_a zWW;ejtle20@QB&Hd34f5CC+(1fWjwC-!Ee@83B3ajQxsW)GrELB|hzia!o(?SkKG| zVEhvM%C3_w;|qG#0GQi^KZGL%cvR4|fG!!zURKIjh?cZE)7D!tb8>?Rb00Qi7njz8 zzH@Ip%U{aE61Z^0Pidng-m5JEi31s!CryDK4|VKk(fq_~$H%N-br{^K z(K1%m@N&qfbA97=3Ua^tRmlz^X?RlMBD@VsD<)`7XooU8I~$fql8W!SZVcP@{$3NO zi_$;_d6Nxw_sSyXdX$}fptQ00RtfC*?#@u*qa7zBLI&UCt>}{ri3dON-Sj$@*~ft6 zovQ>!SHjFeoXWv($7R&5VG{y8y9>oVPxlL1P5IzuPfe1fA)2&L#go3Ohz8>>r{6M} zfoO_8Id0^ZQ+buJ8gHhz=@43BnKqCZWI(O3aKPBBD|%BHb+wLk}g=Fi1!bAdMg} z5>nDIz)06n(%mV|+4FzTS?m39KCu*+Yd`zhdp~zv*Y7TI>;M$9>_g;R#19)oTk&z# z7d6krXy_eNG+gSbT8Ve)5r@41A9*`}cSXUnP8Dr|a69~2E-RUonv)d8eeh*a)CmZo zVk6oaJBPhmB;DMWZOV7oP|e)>PpZFbQT&7Z`%PIy2hmR!d+V2FSTM zbY$>t~oV|4=6`(=}c=k=pjtu(g| z;8cdq!-Qh3&Zt{_caJBr`xfZ z?aZV0=-&BRUy&LAK>H_xv^oD6g=G{G8FeiA852K(5?3VYN82%%wa+EjCVPnb=V3Q!`JhY#SiE7Y4o+mS^e0nqsCZgfMr_-5jHE`;2)b z;nA+#ENj87r{OCBX%8!Zgx?AHb@iYiJlm-AxLAH7Lg+ zTyI-3MJZGvshjWWe2dY}dy3Pc255_-iB)=}Hi0*=$|H2QL)4flt==I^@`vTC>;dv*6S_&V-?i z!y9LJB%Sy)5GHHEUAMY~PFdyYZAx{cE$l3{;WXIEdjW9kxCTBUg2WZ&zcJ!_J66WK z9r_9l16(Y@5^R=ybyuBnzDh%0^oXWA`Lj3wDB`h;43nd_FcvoOOY57+Mf&_;n0aBb zYl?SRv!MAAlBHvJ2R9isrLiN<|S z$2ZP|<>o$rV{ zv0FDk6yMh{8ag_AZJF|}*!;-LU@eEU(--qNR*z9j$2sH}`nd+9dNN$Ia$42L>*di- zw0Y(<*!pG6q6$aziNhH=ondqrdh!l@DdXr7fL%1IhnUBbpNZXCcts#i20`RwrM`oS z`f1sTgHrb%C#+SooKfV?_AUd7U-4-6(BOfSm#!wkbp0)tn*)Hhr2z9;Le)9vGDy9m$>@$fOVx>$QeVV^fz%JQDZ!af^Ek@t<^_JANc+M`%zzEP|rliocr-fltQJ^?VSnZGO&Y# z4%vsO+;X-il{kePw-{cVJ{=C_X<2#GA-Bx8U2-=lbBsxkX_#jy0)sP0tD?p}3=1J| z7`?SIJV4bFxs=Bu<}G#PZN>dx?|!QsIGW{s5@sFbP9esb-{h{D|AZws5MTIVFYZT@ z{&#ILwhyA3VD%((Z%<8VSsf7nEHHEkxKc)=r@F^XW5VU}kD~*~*}$cl z&?PA@_{0rYP!mM(f3_0%;p;2%MffSFc-w6X{pxG`xy9+w-FP&gUiGkW=E=lVnN+x} z(SR^~vahM#r_fC2S5(n%$8+^SXv3}Yjwwi{5{FIjE4yF?QN0dAGC-#P{h<8&Qf%;V z8facLqZVB9M_kk-=!6%t64iSeq}Ulf_t$UxghQ>%advIwJ^T)xUK>5jFEY#3tm-AU4>ZfdFI8Cq_EH z^^6t+*5EAiX0Ljp6fHIKfK^@!N1YD?)?2Yq(D19m0i5{1x9x8I)4Yk#JMg@Wz1$c0 z;i8IC<%z;~XBm@G-o!J)n>datD7ntTk~LN6jKgcZnOlsvoJO} zi-H0oeYb~dkL>eA7U0&@Mkhjl{(JTY8lJw!7tu(WW=MkGou6m54FvK`yqj)#T4fOp zyrRC_jZd|_r&_5lm~w!XhcQtILy9Md!dF!*Mk<;eI)vZ2CcY^!(43F?@hN=&5#DJ# z1bVRWgYdUCm!I38T<4c&t@VDo{YNWcr-Nj6N`xX)zYYp3X6_bG>R(EW5HKt5N4Olq{#^hIy>BJD69NmPva+W4`tZddU?ZBY2iSPaS%n5wnxCk|9)O) zz-?oRMt%V9ji;zM7?W|(|M`s3{Sk;?iU-Lm!%+?q;MbDPj`P+@QN*8qln7T@%mIo3 z@lbx1f$X7mH8_)863+4us~MkO#lUvG7kcM`$}hLtGN?}Bu1c|m zn>Dwr7*{_5bHGy4+kFc8D=cnQelLYF$xZa#UNfbcb%w=+!FJXW4rLGeKHz9?%Vybp zir*0{FP6;7tsw?Wvh;vtiCvvS`e-ry4|P$D|1|^~#jGFs(5v{Nl z*C?y?DFYbz^ePsA6b&bRWCcN>uBW}#trV12WdD72A!HPuP;lvVU?nwVXQh&-knxBy z0m&D|eXP1M5JZhja2Yx<+JWm47DqzoE!f)TM%p`?t-^CoA>26hbhcV$TX;vp!Sg>3 z9N86yPGA2)S+Xlu8Z|#t^0UpB322{{_eZ$CLua-%R|GG&uJChlmT(dxMuvBsj`~FT zb&`E!svg*sRlNYmb-`A%iu`n30_8z zy*q`|RyBsbOLRM{gnEz^q7d^Gquu}Y36<&cp(YEcxkT+1<0}Z^8Lc-#vG+$i)U+C> z2Nmc~f!~-_(NNOxP^9TuKWLS{d6CXmg1uIDGmbTX%JxcetS_C-oc86E1@*n5LLG$Y z{MDp8cP%PonMA|o=uKLVZ(d>Y8YUyY~r^Gb;ZUpTx>Qth{ zdv9ehA8#D$AxsVYvn6hdp@%q-P&JXXtw z1w@rao{%oo!wtNDoDopr8O{j%e|c{At9#c4H7qV)p`rz$X2TSOFc@l&eeJm)mwwKHOJ`MB`}1HU|;YKX$-4_1_4HN9cgV-WC^l-#;FPt#nmAZ{PYR~o@jZEW?W1;; z_M+OhL|9c5lSi~`6I&4BL%PkI(HGG^WvRjz;Tp4H^Ksikf8bkWFd<39BUMA2MpGEl zZ)=1~C8;Ak)znhP%R_w9dCYnvN?yPo2>M;d{h4)_Z0gPq>=sjLF8(BlOstKR$jGH~ zllNyUQc;la#j`e(86NG-W27lkZ$A8Rd1`45@F{G>8)58$IqaWF9gHTG%PXqG)0oC)dT8;Jk9WlH%!#XZb zlpL;U9(csx>4QK^U;4>sjIR=7dy4`HH5)@gi6Lpwr< z&LpeH^3W5$o8=kZk;kWeEhjDlD3-cUpwBCigeo{az2Hx1CWEz zaUjbQJP1s!ydViKCqz<@{^0VYO7Bj@zWXxcaejKV0n{j~5hrUUex4vsg}Wr-&?ZpM z`gKJF%mqPj(bs6`MWxQT)U+E{MjeKW7|b*{hCPflXEPJ3QMLP+MC=`I^pmtqc;Hp0 zC?8SB=9}kab{>UU zgnc^~>iCvdUQl&7Fn=qrs57SG<_o3$s63_&Ch$OhZwVSrYt`CE1K)2iX$UB3Z2+cnE; z#k@PCwNpKAvAW$)IrL&6W^BK{K-BJxh;|ve=1&cX;xdZ-DLsdTRZl-A#s1xL>2mcf zmSxlxNn^7MYhz5HybTt(*~CInmi{i$>--Ki#wEjd79@Srb9!@LW~{f$O|;BPw{nOZ zi0y__b!aImcA&lM6mzJ9c@zCi;Hvbh76Cc50Y+-fw-zw$*>fKE1U9mgrCe%5P<(&> zV+_}tu?y&R$L;a{*00^(Z6_}xx!1ItKN+FwI~ao3zF8X+)~Z-3618+}2MfyO5lnHI z->;fS>kbm4itH_PutohsNtywrZ3ZfRnlBb}4hO5Ex=J3JI0#s3?a6I}ZD+&d8evej zmXIP5uJc?%j#9NL0XVw@0?EB7#EBD&F)B*-ByWUFq6>Mkd3+f;A86s_kstK3J!YB+z^dpZ>K1^s*flSPU)SA&$F!PCKWp@a97G|Fk4CZYIczd<1{Cc!ra@<#hV3 zuiWV1o$;gXQOwYwu-|J-q);-v?rK;3`W?}gm_gTfYq8;o7Exg#q|+h)$Ld@(Uu!%z z9u38bcA9{zyN2zDZ$_6F^*bH*i57Pbq>6MS`+rYef!RG&D?~-0=k7M?xc;U4Q~1o` zrIm&!Z;oFZ)Mze#$j|2Big7xDMWdIVZAPYWK5X3M?=HtblC!jCZB3)w{X@KPX$zCq zW%|9tAkW@>_n`wr;`igFtRf-v5$Wk(2;Y-&@Lq}ae!rUTkIX~m$o7(n_qt4mM&`WxewZ0)V*g13X9 zlHf~#;JHiici=>jYYrI&xcs4smsG!}t5}0g_4)$fXuwx!l$c7SkfBP#J-y^el#yF5 zJMG-nB-65i{ua>9f2?58=mKLS;z)VdirG`|e}@922H;2SK0rp7FhOJ%kJW4Tgo=h7 zuHMhz-iykrS>`N-q`*&^%5>gKw(9*+QmDnK|(l@stho549Iu(hxItKcLc9a`7m!2(tNC61Bd`_ zmpNdpvJ2SiH^8TIxJ`ewSy;Vsoq{==%DSXebOT@-Re1om1ojlcptGQlc~;gX%T?jz z1CY``XL4Bf93#7Cid=R2@w==`A``Mezs?d0hve>zithYU$1r? z7tRxi3?~BHBD#|=^pf>V4gh^%$ngTzYcm2BQ=hg<$+dUrHM&@0i0l{CX{Q<^3RxiXb>C%uYKy<#}BE@>Z(Tkj6#} z%*%c$Mr0zummKSCWvMZ@dn$Cc2t;ewVB9AF1LWpk#rj9LQXXwZ3I2Um473z3Clzq& z_tf9=Q94ys)0qbhY?J;j*Z4GkHlOuNokgDv7J1zS(H^ck`(ULhZDm`fVA22@Mv@uy z$j#l2xI1@GnPBEdm*ADMTAyb0k>ViT^%144(+SIF@ljvR$2IGD^;!Oqx2vs&ijloQ z{olyd&@0s8MoIqxnhm^{7l5L$vYdSo@|KX(Lqv`L&r7aFP}?qAFZG>e1UGTrWsl3_ z?!9m73^vS3bL@U1h8j)a*!vQQy!V>&yeCdX`HB*9yIJtZRV~smHCGuyW#;&D5u?_y zo+CM>(~v@aGyN@qNi!})_f6%Zf!0fq820JS74UNsQlj#|^8bDFnzS%pIStNF8hHl_ z*Cj7s@lehJU0ETmhi>IXw$cCHGn>mD!mW^=8jQ*Db1jJ>*HFWODxA8Caj8xJG9)E_ zGCjF@t@KIV_Lb(uHud}F3FQnQE~jGD@VUFYYZe+hh5LrWnziQeK`!wxieF(N88&X6 zNkoB=CtRs!Y@9-F+o@0RYsT~LI%ey8jgeoOPk!$`w_)s3HI$8$I33Tr04|t$~`h3>`1Dy(aZ~qSQ#RpD>`-W5X43|L^z>$#J^gdlt zbmV!cecpqJW#> z$qzdc8iVVtE~9agPk^%SX!|I%%(62O!{3@3yR7EkRCn)e=c8AcFS$s4oQfnxfZ;}9 zJo!c+;XM{;k|PvGB(~})Ci+tjO6gQPBAy8UIlBP7>o=Tf3=w@K6aU75in0^uQJdT+ zERmDpo6@MT+0ad^vcV4qK8?|rH0=0(x|#J(8bv&5G&D5s5}yUTbUq#i*UY8_4)6Sz zI{_a@qk0gjwbuc1bVmAfS+vl zAa(0AcLm9Y^j};3jag5m!&R<14a#}}nW>i&#!t5Zv|RIcA$hro$(zR8CcMre9jFql zSbPWJ;Y$D9Shvrh1e7b!f3p{J?DAXhWJCYLK5U&`sa%s6T87FzcoEvlDWC1_RH8PvB9aN?2% z3A%)Tz$%pQZM7f!0$G~b+Okh`{@F(au9TRa%zaaPm7Hdn$OUTWR!lj((%X)VGS zbE>>%X8qdhRS8>O@b4-+Gw6F9Z2tj!==uXu-0kDWAKH!!bamRhlGHT(cOAZ^MO;{b zM}Kq;TLj-Fqz;8=m0{z<=BOfeCUR%gtX3T9`7~ikg#;xaPZq;JowWod`q{+(S7v}9 zDNr>4gl7|UixlKFO`N4;FTvLpHVt|Ov72k6nY?fN+!iAQUG{8&lcL99;Wve>b?@|4 zcsuyID`i83_o>l8z-M#k%Cji2>lV505Z9KlsI!!z)_dJ#F26)J+Zv&@?8}@5?fTT9 z)!XXIw{ct&3XD;3KN-Y|!Bg=T)|z*K!PWt+saBvqeGZ^7K0D*1g;v~aIJXXfghohV z1RxePJv%13pj6252r(vaPw7Z^<~e`+RZ&}^+n z%;hBaYE_}~Ji0ypGGtq2EoHWuqj`6nI$nBqXgG3NOy^&#Gi2bb8Ngr*n~P$WMfSaF z^qS9s<3Oke;U|pR6<;%z8~Y<~ndDZ!iwap7G+{3IFF^%>IxB*7hu#;P7yiD|Z;@QK zV3g4E!8H(q@y$`nq?2Nkmuwi|qD0s&>RQU%-lGY-iCtYPTBIc-x*N0FC=D(+ zhYKe3r$ueO7BtuH+;ty$G<-}a(KVxG=kqFVwX{4^QN$m__lesw$ugKtr!!(`(7Bgh z;+5l2pghfj zV{m8VIn6laJLS~Y<4)EW3+ zew_ehBUW8^F4y?-z0`}NR8mRf8dM(sl2l?s?Dfb@00b}Qe`Ay9qT^5eDgJiW$2^29 z!#tPen-cO~Sm8RJtpl;VNOD5J4k??mYe@@?D+gY#SC>`dAPT-;g?QOq7;QFH1a#tU7T&o)C@={U&X*z zas~MXAUhY45kE*F^faPb-{;`PcujB;wkpT~C=F2|oZ8=utYBT-e1damz&z6lu0d35 z=&41m$>R@GWL>U8xB9zsb3z5G+JwHuxqR}$mIsZWpKQYDnpl#i^otJxjOwi=5j)df zsdWauwk>0f^!-Vr9l)j3YGs(LA zTE(GFlr4S=@@4Wq-J4Ar@52|v7XA2W%_W|YC#E&I*s6J8NV&CISq^Twv|PSc+l=(W zf9byM<|l4>0e^CpPx1I(dClFHoT1hGn-^c4_j2ND1Yk3AtC2%;sEUcPF=@ z1@|sSQ+N(75YWj48s}3Tbo<|>0w*JjAD5Lz+ZLrRj=H>0@!lvjzSj!oMfoeem{(NwF6!%co{fO^_GA#95=e{pP#?a*k;JUHg=)wV9b^i z^_g?$^q>fO@%gsh2Eq|b;{QM=gV)!pH*0U}PA;#XuGXDf)?bs9BD-3S&MBOwq=VK4 zq|YMUE9-QcrxDiBx{dT*pk`4xi->6uAfj`A?fx;7EZOaHsV$jB1Vbk^HV&2aD8V_Y zUhc(m#aldPeYQZ65$?6}0Z(i7NfC8c&(l_)wdo4-09Q$>oySb2|DF2ll8*3NEW~)LIGgW!r44WU)zHxj5qt|Ku@9T&*r)dV0(>T2 zRuDu?(tMCG>< z9;_hLBjt&XQjV`B{3a?FqTb_{)t@=LPt zMt`(R4@(nAU>yTH{4Hv&XV=Awq6^?s)XXx!39Mj->9WIH&VSQF>w2mkNlL9QW~{?n zeM#NP=(epD4OYNgPRtJfG>8HUw>r0w#n*kSoJ|FP_6_o8?cH_>K%mr1wtoXq*OfzV za&lUetwZ3D{4Im0@i@nL;3xfQDCqWZgnB<(3tXUgAMke&pF?g6V}F_l6wDwtcGR;o zrcx}4)qMRp3ZE8;$@4a(GmL3?z%IO$Ua|s^{cI|x0|e8~Hi1&1J{t$=2=-SJvA!0D zN@qbYDV2MFX8=hI>v?-F0={z8QjOQTr5;=K5n#1vhwpfiy9UjY$YhHEKGl|I*!daV zxzy=l4%pz!Ra&s|8AFKROA3a0@aR&|31S6W=b=`AC9avv>A`_Gp!$=fa0cCHAGnQm zJzPLE)w7*Ll8>GEd>SLS1zKR2O~-XVrP^ItEEHX z^OgzHIVytLZQwgJ9$k<2x}EvRNbw#cMQsUv_ASAiGJnPY%o?3ttz;Ixz#CY(gH+z2 za~eAnALqx7g64_!+-3^{BGi6)3<_psMv)Y3>RdZ3Uap?xE)(IznTeyd zRgjr}ig$^{ZpQmN7@v`~ZySnV7#muB53mcM*|bQbx$>|-I6kF$sATGXYD-V82*)0; z5$+N0gvNAAV=QBw*6@;ZM?-xeuK>FOXZl3V&etL^q}K%A4JfGC0i~Ieg6eHhuL&i0 zdDFh~v&KEvksHjl!KuqaUUu}^J;kd0@gC5ExJdUcC{eJJvgRD)`X-D2+N4|g7J*!@ zO~^W!_oYGu{cn;N1Ou&(*Y!hg3;tf1yf~Yb3Dc-9_0GP5yQPs${+3gL!SFT2{-}Bz zlV?G6%}agP`kq~?;+pm4lPZC!C|6P{9$rSD-G{pZ>vykLlCXY9Q<3weSct6OXDVJi zsFU`^v#~AZ(8j%7;4MNIoZ*5}^K|s*{5aI-?jEdLfd?9VfSGuHvLyz9aAG!!9F9Pt zmypNHJVwxjJH}gbDLPh%ce{a^$h~=Ay55HH@AXW}EPj?~HH>iVrGTD_J5$k{qAx)0oI;)c0W{>hYcb73xox;1 zat*sr6mEOsFZ(fD(vLfx`K|5F!yXUQ+riQ={Zp2jL(ea;ui}f%{ireUZ-L^4+e)p`lxp|6_<%01((R9n7Hux*~ zb*ENVT2H|*%!Qx1c^5TL@x!ymSQbEyO{f);=Fn2%~4Rjmn)=NlPR-Z~m zH1auLVa75sJv)Gxa)!szqzkN?EU-2gM36 z&)ty;j7RJu$$OwOOuzbqXE!9MT$kB@5@V{1ysBO<34Vflz;&(qc})>=APu_?X>OH` zmFuE=^@};zu1IV&_mel{0|B!+9ToH~4czOvK7bgD-YIUkd98oXRLb){-SE+g5+!rNB=&ZKf`3z_Xg~P@1&)em$TDbwtj8>5|<1Ira2|WLtgSrTXXEOVF`L80Cn4$)|d_65gO7BLCc4f-sRL^xa~ha>0M0j z92Wm+qFFR)5&p2{SFEiHJ1;Si+LkYy(pI|p9_ULETPxXkl04~qnFHQx5=c#Fd})>! z#(~H=bXzxgO$$4kv9U>@04uzjvf+U;)NP?Ml;plocwI!!x}+j96uud7Gr>z(DX@Im z3q9NLzng$#JqWuDLmkH#HbRXg724DMCo(JV5}5S%?^yQq||? zbjC&b9c~k#)}TrSUm4D^Ed>b`C&R$z`||@>)WLn&W*CP9`?!vo%e@VZJcpU{@i)mY z>jzkhyARJkTM@oi=Ry2|1`sJ0e+fmX@#?7aDvSr zN(YLDN*PB^*TXooDYx%^^8JQ7%+gMM<)|;>p^v9AO5+7-Nx)l1Ir?&Gh-&)GMwvq&Rh(U4%MQrq7aC6JzED5VVI zM6DePx+IA>HYCJK<6|+odIPK=F;aaEpKV}lEi@qmZ&0|H1_x=vj*@~ZTe|niY)mPev)ABX=zE#!Zz3INS9ISuQ^BVa zj_Z-!prMz=G`@N21+eL5GLKW0u0Z}5XP-ukpYXbrRI1P@k1Ga>E$r?}f<4Vo;d*_g z_OAH4W^R*YS-lPj>Miqtm{~>UM*UH?*l*t45KQ@9i;i5{Y?&iyOk+QN9z#mXTjf$p z*EFR%QUf&yMhdwbJp>@Pe6Q$v_1Xntxz)V3?Ohw2v0fH(3RFg~8T_bH;71ebmy{2U ziW?H?%H6Y`OsjC-u>Ga}WmC1#TC>U<{PJwS+ejouQ$jIF>hjqw@dX+0WkX?;e3>x; z%Z#LyR;?Db5NrW>82$Zlok^=mIGkJg!|V->oqO1v{%mBpDn9BHj#}vY0)&Z|J0)J> zb-`K8^sf*aGAt4fatp*f)KW@D(R`WyFDnoC_b*nUYVeBmlOUkVE1J4=9M*Q11ISM_ zYGorZS?rqGaZh?99Ybo`>baqkb=8U$S`V?@@K%Li(-;IL5IC&d?dR|LH&zl*eU6vf znj_Ovh$fZeq_UN9#ONHsC0uR{=Jw`&eZkgxUql;fV`=L@FbV}7{9>tXlItKmr{n># z4KIb2&E69vtLLJ0@pF^9d~s2The#pqArxxoJid}+y8_!qn0)Etxw z1wR}5?h6xaq($EC_rWV4)5+H>4CsEgb0zdWKSH542YUU`at&Luf0h{PyOB=O=1Cr2kCb z4N1uRHndlrjuiwcTwgD#Y->*ICHGC=4?blPT`FXC1L3D_X!7xfXx2n}vkDTVedDfM zv#f_N+vyw>cZwXz-hIS$ruBB9XefLnY@T^vHLj+0oM1{nqFcVgmpa9^(%PM|viGKk z>G^g>52FEZcy4YO4UTtwRBo^oqdXR3u*p?K=vmCzEj^RYc`Ok86%a+&;XYbTps9vz zgqt+8C3*lc&1#6s*s$nhz(UbKE}do6I`Ix(JZ>`RJqNV1HBZv|>rq$W>8Q&URIl;h z#=h+b`_VvM-Yv&CaAW;wUPe+N^rvn3u(EbNLf)O0x*`V?L&+9kAt_Bsu8iFlsZd)M zV|ogxDcl6$m^D51SK`q2^`&)3b;Uh>Myt=(kY1gf3^Uxxf5>*&}5g?hsH!w4#$WTn~>cP)yK(=121|y zdn(#B{Sx!1)PvU(c4H}>`5_Ym~u&$nI8$n9P?@n^Cn-Pb%XyAOPmu(q-cTDoizqd`N(r`d;_n}%3 zU&>t@dq*RN{xa+L2YK>Kn#98VdB%D+SGfiiU8ocx1GQNtE)0 z8SUIX&PjbbH{)scHTJC_zWL^kKqT4{k=bh?4Ojm{FIns-Ilqf$yT|XA9BKCE76nD2 zM18|8$}xwR*wC=Ku@Q**C*Sdg`pc7&h(XHqtgW5-WwqHj*hk(p{&#)$nRd+4w>h;& z;6d$FSE{s)A_3G`M`>-Fs8iQ*-!Ob4=Hh|#V@WJ#By9V~e3?Rs;*X@bp@X0EhIL5_ z9|A3V2@mt{7KNN)&r)_#K^2yNa?Gt*rJ&?YWj{Ob0@gkb=|oz{u2r-giwj+)M>kdr z{$7FiTUb{(2G$LNl!j@aFbn!4exgv2y=K8B$h&n*th%OEupZpOO}tl5R4aQu{h>p0 zOLnpohlNCQc5*xS4}|xf{O(WK8Y`%IrMl+cJfHYH-?rTkx9LQgu2D(1J|U)Rhgh`n zJy^bc?ctzF)R3f8qJy={Nn3}n48hdtvC{TKVGS)f=ab(1sgHKx%BLR@@01ee%;q0m z5EtlJB#OExw!Cq20v5)*qc@M<3BcW)v#exbO`bPHd1EJs%y(Dvt<}X?UyIO9L3-5n ze>gA>>}*qoxPm+H&{BHx`8S5-~LjCb>7*`me<=G;vmwR6{`H6oAf&eY_#T zR4uHGZ6Kqp&MH2P%~;}8raCZgP6%WYLF%mAQz)W&^Z&DiXAJ{;Dt1D`fPs z++#wlnCQPBeet^>zU&S-th&MH9H;n-`L-j`WL|F6OFiH>SM_XM7iPf4Ww{}y9GZca zi{}(@nI8H2`K-BGF{|xo-fYbA)SqXD&LItwwN=!B$TY3VaI#+s!4Ka=tX7XbR!Jc$ z23F7Uy%^dZuU^&|IYu1r{E{8Ey)Gu?w)S?YTgGro``>N*g^}>1@cG3N^9RayF8QJH z3fCieh3+){6P7LK<=9y(r&i`@m7ce-LAk$i-8scnH$3II7HdW_3p{-bI()lG1Pbp> zjW0K{MalxJmsM%t45v6Vt){hSO*YPze%|~(8VJ3{6hnR9DG-nwlX7#gUT7l4?U^z z_iy`lHxPX1``^dSFxzaC-(-klB+yx*@iN}Jd%k7`es54es&ex{VHlDdN7~BxICAOV zg)az+r;%MLCoEYgjzWkl0rxiLmdwnaNvw9hHAK&yS_T^bN_y=U0b{Y6|N1kxZDu)z2w^4`M>NUi zPYPE**)jDwh@;E%tFCfSm!yzHS0z3`Wj%8{>vMO!exWsk%p2}jdEKRnJ>^*GBpWFutjNS)6u!dRHwB3U(f`-RTP{L5k=xtaMI z^wEwWT?L@todC!zODRAx#CGe0c4X(J$cmpw))g3o(3U>XpMY-~pq1|@@mTd*n^2*I zn6@$~w$MAl>9jG z1ZcRNA1wxAo`incZbwkkh)XU0abN0 zD7yNRv{a!~RBprBf8Ao)cnc{Y$By!7m)E@kx(vSLD!)A+r?=51d1CditjM!di2CYp zK;v6Y>aC*V@1RH=c8oaGy`xuA0%A1|$e#`9cVS-JRKN5aF5wXr^$}R0*dUJD8=?97 z*}{K)Fy2dt0Q1WGA5gOy721DwGUyc57}%Qc=Jmx=<@bGR5X$b1Y*I8TGZ@SoS4i0q^F%F=)4DDMs3%D4 z;#c@$Cm#(NOuN20o!c&w=%1Gz%Ox2fPX;ZlqtR;)W@n_KHm>Bv@k+-DQb}}(K``e6 z=qb5XP;_I_#u~1F_U>dW2QKdZKNi4Faq7hfE$f@*HwUqH>#)a)c#^di!~E?GAjLT? zCOcxPm(oKUeSElYDzF(gh$wRqS#Q>~btZ{*djeo9>ncMYxcQW|J z_+Z?R*DW7LL?D?oIKpE;-w3b0jBowj4A;;O|5Ewi7S){}7fbp$*e(BKWpopM%UonK z+qE)3sQlrD(a;WDDqm%vb?h(-{{16NwJ!KDv6y$;d@O3%_;*l5RTpbrE0j<~u%$;> zH%5hM84bY`jesmi)+rR|ojc_`j#V$v3bA(&vZNjX=FJl8EJD5VY?aQoLZ^>U2P+nC2EjE^h2@wa73)$pdQPa zsKF}$)M5$k#B~iXr&r0&mlaj@v&!>*;Ahwc{MJZF5DQfKC~*!coU~xrbDo4L`hJG= zYKyMwcv!U3zn5h8bU5jNYybQ1F?NXf)3qX_i$;1Ay@;52Jghxi{?~og&g`5tdj@fzqkv$NI04 z1;N1)*XHkIkr=(v_eBmrq7^N5aB*KP#+I-l9)7%9%QE z=nwzrGkerP=5kEZ*9W>C7kTaHL$#cR1@+y#?D0_Mjkf4m&ciD2@m)j1TlMKPvk_8~ ze5|H$I%OE-YVqn9=>K&|&PMo_@;`VH!+d_&VfI{x{g=TjO3U#Z`o6R=@FcaX zLxW1x6YFnF1}s}4!7A1)AB@t(Db7wY|N7PFxdKcRznt3NuYk8Tr<7-`n_U}l82Ra? zYZ+$UFwlJ%df2CJ@mqQ~+rFhZvu!CpQRx?TM039VE8PS3S#^R1f@G~eVq}Swi^Ygj z!ma?6%fE|W$Ni}RIajJTsw`azn}7shsJM)W%5%R_2W1H1S#_R@vv~c}iKqIS=V22k z4NQzA3K|2{ZsWilQ?GyjkrMB;MquQvnDdXvhhY&&kg) z%bm>@U36C}z>-e=duxV~#ihFPB3ww3?!0Cos((kr+ijTDuQ`%CE>2BWteeA4kr;OL zAW4rYgBrx4ugwtu<8ykrV7}gPSu2rA!KvlLFKFl2@+anh9~DAk8Cjqz{mbRkk*<#g z+6gH}?3NPNa)ebhf9jp+ugqG2EE^01W!$YbYzgThH}iN4U$GMEI032u2}OE6S00mp z1>`69O%<+@#>6yvP(!SW9eZ^>*5^sJrz$ruxx1hT;HM~sQLncbLWoh*-cq}_?`L>X{69A)72IVi>Et??i;D?Q#ewMgdlFNnE!-2v;vselR?opRX&!%b+33US3 zz20ggv-Xs+>2|sJEX7GEGt3zn4k*6RhrlpI(3L7OjV#6r?h;^mayP z@mZD>)GRq6EWtu`LT3-E&PrK!RYmKp#$`kxJn{-+PZSelAC4}SZsg`XHfw5C0i23f zIMGK|X#7m>L#fsTz;wNIS|w%2oji!ZK!`Czete*f%gt~zJ%OvR(d%p{h8C@|6 zKLO0I<*kW41iJh73cRC$Ub3l6s_iA;_!)_X@oe$pCqck*cd?t+R-zU#mNg-$f$62i z`VVe67ZV1)@iA?EwE9%Hq+xe+&@u^qo!L56)yRge{O3L*MCj{$dYmp)TNNNMJswK8 z#^pl!^#m?+Dhe@tVOg{aBzwS|HfDnd!(uv8v;?cs|kGPXN6KA7#pK9T&CwT@m&*!cYOH zp1&~Mpn8){Qw{&Fl%J_AgM@VvSLr+3`}!#-39KHvW#H#aNo3D{y)i_VD8S~Na@ji) z_NqVGP|wb3cTn`tMDamBUxZj^w7@U`CF`$ku071;8}sE>UhGd;v}nkR(_K;D@*wd4 zsu;7W<{w|KTP>^xd?>mcT%wgt%J@_rU)R6}QaA$$S~h8rTlK|8J;*vPpN7jjGxD=H z5Ha>`8pa*TEv76JqRW|fy#O+5q1+(<-LD(NJT342BjRmzkgB-5Rjfw6?t~H`_=f`Q ziC)+5nJsGlUf&J*{A>a0)b}sQt2!3wLjjcrMSYNpR`DZxJy??BKyZ29nPmzdv6&bL z?@#pTbiqoxkK6#yq#j);kk4ErHv^H+3F%MyA)%frSBt0O5f^-tDUU5bKyFPbTOI7^ zm{m>{^_xmrTXgLhF01}kE&v#graz*YQw40bH1Uz2bO@{J|EH|Cj%xb-|NjXAky4SC zkQC_J&nPUH z1GN1mppG>ZV{8@D^bdAfJ@v`%)_{XV!2hEI{zojTDK-``b#{~P#W!nxUn`q}H!5qd znz{xsgz{cI7t0pC(5K0XZHf*UANTxiv76S`!|x(~VCd&coAceH?MKIp48Oivhx;#0 z2aA{KWUZohi{|3`!-Wn2+)$i)lMwZ#<|DcFLGf}_x9*HB;9RRoBf@lz2F3mC9u%46 zP7QLGNo5fv{$Xr46>P_$_?$klMIpYBujJ6(B)FZ#rDx!lVufqMo`-s!nEm4ADwm<0 z$?9l5NqJOHc3r}TtBk3GpohV;Nk45t)Tg42rqpUZInhqn?M8IW^Fh;WEKa-I3R-_7 z9geaWL(tn~!O0-801cfqOG)1{{}eR`h&Q5tQq&rgzH}@WKPz{2F9jIz#r!b|A%<Ol$3JEvuC90q>-PY7^kwez^+F%`-n_kKeZZganA+iMP<$X*Ysn-Z6{NC z42ioU={@p$^z?IP@>spP*c4*Ci^v8;?+Vtl((*prGvAO8@7vN^^EZ}p`HcK@5-uT+ z?-#6V8h@c8We*qx;6?7^deE=_@ATaL$pY5jG@CXa&kk4g%ySljP#>R!f@Tf1U6QN# zJZ2>*Z|P>FhrUs6>+JkGU%4=oU*=4x6fhP!&=3-6-VLL@ArBLI$3wVQxTeKpYg58Z zJ_k?qoC?mP7bGUGw=rw96RrKnDT<~dc4QNl+nvwHDW>r)<>~2hK!S7TpgC4?0S?Yj zvHcDVD$ad@n_6eZXLX^enA_$zQbh>`{7ch&*dfQ)qmPrd%h!$XWkdf#JSE8%4`UnJ-|9##<^`w#*Lv zuM#3sW+RGC>p8ivyI0>P@J8x7_W04(>Aqxvuj&?SJKgqN?^f55RN^k_tdnKvv+O>7 zm5q-HVL+LY5!)?3;4B?o)d76`%B1m8rcP~OSHOg$N9}uNK3C61aCAoq&LLUv)S{uU z6w;CNt{V4ktHq&@{^JzlKE_Om-yU!$&z=l=`n=@M%%RKf(@JH}u`T!w94gu<#)&>f zaP(T;Kf1rL>^FPIlf$nXs@WIGYf3kBU&F}VhA{2r-UnfjYPqWjZS(|gVtVuU&zz>c zsVU>un76?t{FLK^QDtPtW|`&a;hp z(|3qG{{E$y6l>voSH|m1AK5SemW@{wCa<3%B1}%MCw*k1a?Fu)n5bh%M(zQKoPCi`J*sTFxR?2Wg|Wm-`4t}=9oMj-{jy`VuO-70M0 z?Mpv)QMv~q{pyXV!*cr-%{?%(t_%lC0v3R{gqVBHhkDg(i38;|YSYzB(TT(g>q7p_ zUJq3{jhWMhVLT7sgFHjSaHU7h$%f$Ys;Tm8y{zujy_a!u{Y@PBM}hO4pUnagUI&XRHIUaYOL=fKQYU>dA4 z+(ROG;u!2W;+sbjn)|+h0$KIB?V-N*kGNmI64G4B;&Hap$)kdO{ld zWfh}Kx+a2$+W+edk`p$cW$`jLsW6d88>JY?JK3}o<2#izciQ}$cg0~d0L0v-QTyED z`|rD6xhqLqdd&X{)`(H+y*F6VY0JRG7&kMU?g4t+Y${P=rW#QYN&YY}P9r+*0a^r> zUlo;=?;{dzA!L|s0f_|8z<(M$04%Q> zqA?=k&D-E6MacUQ2jg6vHRpKx8+7%y`+eB=Se1S2Jw>Z(6uZ!dtH4%zOR}WLNT*mb zPRGHH8~DjeeA-67#&hMv5i+QN`8mxLq0dA_tknjcF;UJd5(w3_Vnbk@CcSj9!%-{D z_03fs?UmE%EB|>N;i7C=p_(WTW{TQ8f|ZI#XErnR+XI1hkn(eJ9lPM5o}X%B`~j5~ zrg*%)2CCetIia~A-WcVz3ixDbMb#{*uA)f9&Qz^9B1D6KrU;XXS+Qg*Ec?;-KBDEP zKPD??$38>Gar+{%f0F4!W<{(gCOJ-u$|+i7_6_qzyai6!%-i<+Q@IN+=toZ@a7ELZ z&!-b2Oy1SO12sfl!4`6B4X--~el8ULZ-@)dSl>nBkT%Kr!^!__u>Wx!{-#rNr+_b9 z=?no^kKcyO_3eJB%BZuR#aOcG-X^Tq)6<1njq4%}^5De0*6wSt1iv@zYNSaAW|T+E994J{a30 zynX(-N8C;wx(cE2Fr*EhnS^U+Rd~E%gB3+V1{@o=% zM*=a2I$LA>|6Ju}&Yxzp`zTpw9&=oq8%`|$9@M3l zh&q+vKmC-lA?s@_kqVkttY_Z9fz&?YQrEw{ah#f*-=-e~D-M4zMDOhB)eW(&&fL6d zzz^4jl_($90Pizqou94`@ZMt$%7l%@{)%~;_(T6{_$qBG*enp=Wo)nxoWN||?5R(D|bHpJ^*TEu0 zikc{3)vWOhr-YN?n)-_BAeE&Qt*;5cHL|aUwI+#&EH>SbrAO*)_fNq=m&LsdJ?|_R znkufwT6L(fy(8}H{T4l5etG>nRrPPBu1A*8JK$xnEbptofGEeVK#Y##%Lr?FLPE>j zWAVJ8N6ebNS0v+yGSPNihI;=TwEtQ4+T@_}VEn!BIwensO-m<*M3WsdWJcLD1)?@= zH}IM3e}H*wP*XK|K*d>NrsmuchnsugMVg>pT3c{oE=I=q%wLZc+PtW$M51M zX8nE9|7@RJ82N*phqco875^5lJVecK7sEWixeE4K+B->_|Na$QM3B^x6!&xSN4Ve6 z-yv>3!a7pC;hY8D~yzNXs{?bYc%x@;JM`-;qFE;02%P}W*?{)jyS^DtX z=C9Wzt<`G;f2H$*{M7&7CGhvb=Z<$O4v!fnnMB8C@B?3c48|XRMX@tS_kuC_yGu&S zw6%5KlzBm^^Q40$p*8ds^+7FVQFUXN&HS_RSqV!|3)CtE`dmX7J!COf|5A5QB|B9` zO?O=FLd32~qWkBb+F9ZkP4|t`3ohoG0uKvOi-KK!^hEvXwf%gHYZ*LFoPKWD8rJN= zbWM4C1W0dbolkayYc6v1n16HfLFd)#q~72H<5Ss{(8kEqU_mLrTIS(|dWNL&Q*Rus zdA-WQ`+pk~&Zgv*h}~^l^MCbB9Z+<|XgY-c*9i%7Cl1Ywn;pAGfAz7&4H8 zNq1Ot+2iOVcRzaH?x4$Y1PN8wUK=#jry=!FUFzr_IVsu|IU#5M@b51*Q4gut1WO*< z8ki(;c@&+!cJLOU9vt0GYn?$<1v$&jU$Z0X%44}~6xX$_EF~g0qcqNI;d*WL71l2y zPi$fPDj7Yz-t#p*+^2~=v-(*@6(@k#aPJeEZjOf*B|m}LSc&xuu!(qB>+0y5-riQq zW%ayOQ%`7)!rI_!e^e`Fv=YV+^#H51akjeeWdcjzt0!UgnA_hIe+1JLM}ltF4(9Z@k&k3NrsSRt`m8mmmt(R@w$HHsm!o&d>K}%_54ETIfbsA2eElQ z&SY|B$>&&qBBqqGUVpn*e9xm^V@)3Ygb)Fh`u$WI*?0%yu8LK7{V`o>BTB0p_@|lV zJubP=^R=3k8Q?sKttnt3{#Fk4d55S^ydRc2POIHUXkY^6{atdDkD5DuK+$a6Sogjx-zsQ`8J$GYA_bI3dn<={A zrC}%>{Jy=@HfcZ(COstr~^Nv)HH5gy8phO>!eM`))m0Ovnze~QC$Mk}^g_4gd z6pSI)LpugAGrahB+y1>2V<8PVe$@7e;}gst7&#G?vpj?1^cLk$-=0C1OyATT23>nl zCHIs6Bn2jB?&pxGo?|6hfcAQY>$^XXwPMx!|2-xCb6A*hGR*z-dbn4qqWpg3mt)s{ z_qjC4CrEC6KuGd7VbF)RV-QxqrhHA}BqRwlooL+vCZ*N|s}(t|9vW6Hs%49JQ{DDk zN$v*@|Bi)PObRUi7PJ}Y)52_Rs|ERx z*b@G1h3?-~y~1`G)h8a4QK*9=OX~~a+`XCIyl2I{IJEhLOPLnNZ&a`wi+g{OlK)5v zBntQb7^X2B^LWfVQo|VsKSzG(Wmb{Yhcn?|-E72J8g!XxEZ?>5%7Vw?07|mi-*c%$ zEz3Oz-F-CTnN(EflIi?>P{7Eq0qWj!evCBx!#%mU>YLi6yk8p!b)LmsbN|qustF=d z#sk%B&f<6ETC&<;5!Ni53u60fqGs?I?)j(Ce|9S_{5yx=XLd>G=zK>`oK9QYa|zSE zI&;N7->TkQ{IYkm;<@xux}pC^KX9Tb^D6d6tHEyG!fSLw33#=T0v!G}4GLV&Ay7?U zJv3+@D?2Q8N$RC#a%kpRU4m zOZ3%kgf;l4XYOurqj?COWEXTu7~?z)h-dA!8Z{CajBYXc*4NjG@U*(RGw-xN7mVzX=m+65A z%FZJCwTl|-9HfAV?lg9%kw{%?EicevnJDuZdqG(9 z&u|aFoyv-%d~{IYQAGuU&I`qZ54gsd!ty_qz-ZkX+^Oa_9vv=cZ8c?x6^CVo6kQD~ z&P%!H=MdM<4A!i@OMkIGnk-{CY3q3GE>C>RhyKe@Xz!m8GMK(?)&^qElFAEL`EA}9 zOaqe%wT!8qXt1#0^4TOSL}av$I7Rk2GYGk|a`iX;i>si6rT@-l=!&3{OW5x5O1ika z##FhgJMt)y7F%o?VXmIgPbQ)yq{KZc;Vsf4f@(h17B23a3Q~3(tJOFtq1?B2{Lw|9 z)ZfXP6l2c!gtdlx(D_eWJ;PaMubQf7%hu)U6T|G*!=9Y-5_X@3qWZiu%bk3X1tMx8 zVuhjm`T@{F^xIK-^k(VL7MyOqWUe%ysgnccF+bBXV}90Q@|%tM*c&4sh`yx0mN)xi zSY5w%{$lh{ay0sqS<3_ zQB4xIJ_5k{{hd}Jk|DwUL!rMZhMpqn|HL8kV&t{% zVHEs%FXlM923MssSvzc512*gdeM{3$vM#_gr5=~a*c*S7tsZMWm@ddY)o}f+v4_$U z&+*EZ?FMT>l4T`zjsrdqS+YyD)P3wgV6psw6s#AT6j&EMq=GL8)}&qvNz z=R4+CR2-7BK7671xNdUJtxcH>>;G$e^&-pgCYo3)qbhZdtW8nn?ADZ}8Gjj?W8zWB zrut<~RE29Ae`9}HOF&a*EieUYd+B``q5=8>H6M9@SzH2i323^KYSpYEvkaei zmMX9I%cbk&#|7rI&8^qr5OXQIm^Wu4sxFj#GkTb*4^#^vV~LVa#*!>f8f*57rC)3V z$-+@<;G6Q+^UirW_cBP>=y`VGO(=Q?0vX8i+890*gnTmN3ISCeC-Y7&nuh^qjIWDP zAWAIoaFh(_MRusa0@U*>LkGugjwu5c$}**(0!E${Xq2;{n~>}-o1`x_R*=Bijlh|X z@6*@FQ?}wOb*vHgK_G|Og?Hv?1~oBlU+IMgA-CGMb(@iI8?(=sJ0Z;83scAX0W|Ny zH(T)FhovNFDtGnfCwh7Rm>>i3!g((j;jkc|@ZCMt_rf24_sE;lk2%ePa;{!@^YWMr zzxz@BQ&qrpphVY#trGNQ_=*x?0B11S!OmkdpY`sd8}@C3#6$}w< zoOG($LV$!TZ{oc*_oQL4aj!pig=;!x1{|(?V-R# zT1I3oDvTGgm`yE75B8{Fo@Sc1v!kOy^u2CQuZp8eG^iPB5jDK1Bkj21x#XiQ=>?u& zTD_9}N`G7R&V(FSD==sFz|3J1ZuB__$9|JzEV^ME)DB#W^{tY|u^(KRHKy&XSPrPaarr1l_b zex*j1Gol{zvl4si4*SbAL-W^C*O3QOj??CrVo{N4dxtPfwiKQfj2wWd>Ua9D&? zzmYH;aS}1%dNR9#gs@`38H3l=PH|XB*OC8` zFHE8>7@o1-AaLPz#N%U_uD?|^wB+Y@xpdh&s&)ycD!T|^+Z>u_|E^!suCRm!q2GI5 zX@FL5Ffg9R`OIO@za3c8N7wMiEH7BM+KEC32}LMz*Fx}9huLUM-b#Pqe_J2^8=J{9 zlasp(%Ts;B$Da(=@k|Bp9kulsqv8f($@6tG@oNzQ6zY17>d- zMzo#94iWle#=IftTG;hJRK%M;C|MSSFxEocdxar5mF6%%O33vuI>LA85lNT_Ne=eU z7VHW3+_E}gwf&qu+bobDdFcYWl!kk3WxK^1RwI{$k?nAw9N393_1dZ3UZ1a#PAJho zRlt84+GRF@Altm)Se>Qf_ym%#`uszHY|=##{NRx4Ovu#>=9_5<(?1{~XzM&wzOw@B z08wFi_huSlp7YZ%&pp{T#e+dzGd_wa6W<*&tNa8eL)}xF8B^(fPfDMU?U?xJ z0LgI)`i8Q4kk=h5;>f#|CaIJ{UaPG8cin8;#5$a*)&UNFvwq_PU<_>@T@x51Z`Oa> zZT96rdu2Nh zYA;lUAXCHN4v%Ik3=bu;M900drGZza8HcH0XAejV(h>WjnrmsVx>7ypDH)9T*4+nk z;r+^|e=?*|dw?ZP9Ig#FEKEx7FDNx9c3t_7dF65lM#Qa$yaC>ZZu(1w0pcK?z+a|Y z$A?}Js4)@^_toM4+GxkG5W;iEVYZ2f8O3=yk=8OLyTPkLN*3`^@Bin{e_)t1`*t^L z%tU$nC%4zDs$zh935MAnUV`YvhclRNq*my!3Zl_mhX`Mw=Ve*rY?)r$gx4m9Hb1HO z>m@%{!y15vhE+CshD|<&re9imhL54a>WhA& zc-pHpabRQnNb1xOSf!Nv`m`zjoEvmC@fLD678NHwa`MVT>L3RPZd;^;I$7Y3@ zoPE;;GXardXevm3pe32}*)L_;Zb18S6q}53bz5LD33Le711V{*h&%RCm0hqeDf==) zj3o`E5IrCu)>^0)`M^rp4PxCrbNH8$^ly6aAtBBssO?M^gtV<4!5tBJQrWkKH*B(w zvd`p#&@iXVrTrPl>WN{5*E!GdLXX#iZL?Fu;u5TBNaJYb5Zg=xL?6`SdPv2l1=>b6 z4o;}UbV~Ksi=5>;opvu8zE@8$-=q`5f_#TObWOb4z`iR4UQn2Bb0?M5gp-_aB=~$4 zx>!qk2}bkyz_odr-WZO02DDvK0SEOB8(UecP3K(QR|%Qo?!3)QL}L~&w#=^G)|0Z= zDP_;!`J|uk&TdWm2FRb7gO3hx_Na4icYhKe*U(;=5Mtxz&^y73T-f#0s=;{V5H7gx zRu9m?%*OR=D0p*(%`7)H@In34--1{ePo@? z%BrH~sAKYX)Z+j*-zl@$3~M@8A3#4OLeGTAc!MWqr}K+AzB1 z7U?g*Ay>V{E?3j+J-bjmH{*>P!IjXz@b;fcb~E&~@M^^F*x>3I{az)UmdT^L5cR}C z8@k<1B{y)jV*~!F7Sr^zyhk&Q*{P<#wx#CZMpaC}&Rx9<=1;$b6TY zfk@D+Qdt7V?ZmJP#oB`ZB_8Rst2L1W1ba)cCID62j-z&Qw zfd+>iG#7w(7swX>fXh#uS=!*Rnst`T;z4z{u!qNvlK#W7z&(A3#U<(et(+(O%c)># zSUx(nc~Tvl2R&^v1ZPP=yS-Xwk;NoQg&IdE6CB0Ro8^w_nH$O*Dfqo&QC5CS5cX;u z&oJV!nGYIV4xxQ+@^a?Hfen|i<1T}HhhGx!*KKuTl8fu)1}j)Uk9~M;84zi@R|)fk zhT{Ka&H`}oBQ{>S00MD6MhMLU8`D}#qo_q(-9k}_@1R5N0G0@{t`F&sA zrTmYcmboh(fsG~rSvzC;J4mH!5F2h7#)}5e`~bIOr`blsRHGwWG#C>_C*YQJn6pAD zhb#n6e+dC49K6I%lxG0R0%osIOR$@!=XJj_H|R)N5lDZSjENMM0bvZ}|T0b=LDKLH4GNE=h=}#%W z`|c9WC+MEZT3MGV<3tU3U^d21V(cb7>1&G~iv?qE(6F+GB}S^MH0EEhB3a0I9w`J zSv2-q+VEUFc?8Te-5;vWciJ4epk?Tmy1aBK_W&Q%8`8U1j-i?zDm(@;XwqjaI2>CT zuj0y|8@_J5fWCv?q6Z$vDdNRH$~vb~1o<2p2%9l?#2q^SbRngo&UyiRGJ{@-W?pdw zbDUbTQ2#TUhVfo#{$$IDmz_6b`eBv5>pA~y#{SW%^KS8~CEq93tTOX)#j^`pboJKBk1V_}F#%u*RU1qT_7&5&)#b`~f~v-26p`;nif*EDn2pW5fI%+x z#!}0&hy7^$zG@L*Nw3Myy38-GZl5)`656E;d1`3ssZV7I3)8B|FC}$V)-;C|W3q2P zj-_FjHt64|v=PhJD$JAOoey!SndWG$kL%~F~ohB~m;w^l@c}$ENE_W9f=0%nraN`XD zSCUS!Pv65IhWTjxky33e)1w)M4*bHoSb_xKdR+wL<42Afmmg4u-4>RNboYH_CeY*A zY8Ky2OQ@noG9!g&%|f*r+y2>lPW{r)ijHIi`tmHj)$3FiI<V0*1-8BAHURa)o~ob^0lqU~^p zGH$w7JhilG!pbT0AuNMD+9+1&E%xFXhJ~L`_9ftspLnuZm7MhmC zB=!+%NR@t>zOOL(v-R2vBrMPb9cFr6aIjDZ?ZAX}cw8CyjgRl?UTS2^?09h+{5iwA zyGr68<#=yq;319xevl|PN>hAxhWLQ>K26^XuZjg6cGkA64XT+0k#6UBxzF9@d+ROv zeW$tT#k%y$>J88SHELl&xZq7$Dyw%@zk{hjYshzY0=UwxNN+#4{FcSW&GD_eiqPr0 z8|D;>v10G3VwrlrqL{(_4=iUtV~jQ$0VNM7^LWZ_$0v!i?D8~@-#+z7{a#w1&W8{K zYNRQJwJ`NRV7{)_tzMP8C=n76Gp2*ZoQi806+fJHYCn6*ef^NE^B_#$7oJpxjgmsv5}6y162hp2y@tIF3^webV-` zB*X{EV0cYXiN6j@R;A^o|0w>A4S33bxPi#2Ryo^mz~`F7(o)eMF|-y|T2lybhWPZp z>J>zZDT~!RkIG8ON!b@rb9iq4(T96%1L3X3gQ3LAe^eSacp+e633E8$#vfdA1`I>m zP+P;_xmWMA!P6eM9c<_MU(P$8eQ)(%6`Gk^a?HwXcrGNr7~~zFc+1anj~o3PT`ffH zIX|fZaLT;K5Ydty++e;WBxo`{e0cl7_i~>i>B}=Ggn&W-va{H6HZ}`^V_(g65VknH zyF(VO_3OFO4&d{0t}KqyUq27GT<)~kmtQ{{g8R-{DIWn=J^bhR=NBG)`}}>?Ri^SH zHBD@!q)erGF9pnka-R7tuu)?1Z6s~Aq%NTBdZ4<3#qjj=TBG%j5tWmEeKGW0*^&#< zBN9Hymr!ToJ#k{7BK=h7V(y2_AF6)Mw$!$=BH;BSoq>e1IT!qx>iVlx6FZM^76Y!U z*X!Q$8FD)`xCyWwf`XG_%(eZ3JIQkM6cpB1A809Dlh<_}qZ}jM##KVE;?=aWs;z$U zW2%)zx8sr)x`p8J0;qu%#q!UbVLr_H|*X>nV>e5!K1=`tUfvo+`20otxb)<6I;5ezv|J zGC3h&0zcEwe*_UGm1j89_u7v%^<}O3HBX9NEqA7tdVc7IXW*p$3x?QVbg&)GI&D+m z+n?K!Zyi+6l5*~)^qg-6Z|(2@y3A@DMPo`jDJT>DUpVsDEl9w9Y8tT3ttVTO`&*-! zMK8>}xnif{%#5hLqCl|3iYc$02g=fS6=@1xk9M{*U})$_kPC4C$+cM1DB;>2YEwSX zx^&%oaIK$);u~Bs3ws24bp-l$;BvQZs~r6K8!zd4%jAL60fHLtI>o_MjubQU^G@eO z#mSx8^|7K#lre9yp`SKPs}@#;9y(vFZI4^72zDq^$v)stqpF#dnA5;+7SC*p&N=lx z4V5O*kV9EL3*roxk@!F)jyaYVZD9=Q$MJJ=$|xZ`3d;(vR5v# zw?CH@7k{wSxhAq$X4r65znFy>mV|$$kZ)vy_@fcWm-Q7DqliNo(+%i!iN$|yZEfYq zq5lZMQBqLQDRfG)aDMLoc|A=z1YfIf&1g%+4DXSd8x{l~vvQp%H@$Rb@}^`y=#!tp zN$;o^=B#cpEkL0dL&dcHCEp`syp+C&XKF8AVF-BQ2snbB@2*fcSL!c252gwz93EE! zHurtv-#}4kTfsuBO5EZkln-ya%hWG!GJX4`nbezoLSc-IczDhh=4pjEKmRHUVkb1L z3_4=&P?Wx2pHRad!oZ3{<7%up__W+z+l8@C>U%OCL9Lt;`j6T;9nDCT`~sCNMMXsJ zIp(UfT825cb$0397h6|HN#-2igN*ftyqECn06M;u@Ef9;k2P6{kE$5DhXkPa#iaKQ zd&O+VI)$>v*v}T~96DaDhJqY}=zJVsNY*DEy7KqSblCJ1Kp=oQMgGdnm#ltWcjc^B z_}X&aa-4M(qr>T}?~8QM?Z2XZUIp<(xgMKt5meK22)^KmdtXN{KW5Lpd{PTIoD{n* z^!M5ML7{d5MgB0YbN1|$p0%^waM=Sd?3t1+*;5#1mQK?VVF>+a_7y%~N01!ENCGMk zZa!Zp_+CTtjv$+63xNBZLd0o2wxz$ib@$uYmY;x>dnKR~<6AA5oBSgvq5**Nh5K*0 z%|5kvDr3eEry{3XU|qU$_C@w}N=Q7VC0JZYR;{f%t$f;)eR3L)xw*jBLVO2u2AyI1 zmtvoNgYMp=Gkt?vvAj#!&AXH5>rxm3f5Vw%BA5Hh!uK65Y3bRs*DY~(6NT{N@3Fi) z^&+Ns{BeA!pyl}+r^;x3t#r#iMqc*Jx-Nj)zOE^kkNw@t<&l`cKofy`cLkR3v=iBJ z;E&)X;Qdq#qa=zaqPGshTPAL=G7HQh3?zHagMalJk8Ayrt(h6y7$M>r(wOL&)QkWx zZ_8J{mV+#JNbqZ*@;2V*KG2jBs&l>u$+ zgsi#Uo=76@mBMJ*^BOaJcY+5AR6+<#Ns$f`#~Yl}7z~>uVim2Vzzm!iOAE2njgbLP zmkGD4RoJEU(sR>5vQIBXjry^+NCRv~!%k4qJpguE&j%W5kfdYZ1_pj(3_S-?* zc$?Cm`+9mm6v8OotIP_9S`>)oGu~ zMyjoB5-ZH?EndqJ=S4(3;O}|$=M5A8CA1G2IO-P$76bYADIgYyN{zjW>zz;duxNxK z_8o*Zm~{Ih>uYF*zf;^p_*UG#th%Cscp>6zBGWW!@xD7t&eW)?4!GoFC%cmpgs*?D zisv{XP8M|2AG_qc=*4wPW1yY6=Rls6dvx^_8+ih)2fH;KK+u6sj*bmlmL+N$>gYA; z8*U@Hrz1=%kE4r(aRL@EhHB?>?&4i0(R0Bc+@*Hn9Pe$qTDA^M z^kK)1RHn{&{z|?!@{L>mjJIaoZmr<-UP2RX3nOdHhQVBXq4vqpK+X0?YA2I`W?6)> zb^q(Fk4w|#y;oK$WtIfaI+4~k7ZpDQ>IDQVUe0(8yNRuy7+>A(l@=Tna@5T56G+^D z(J-*?^}--FC!c5^kDo#4CY0a`F9(lr0nfBnJCyPr@tl^UhleCkyEH*Tnv{*Ck?1>q zHQrF5;yH&Q09iEtsMS!isv){qJ-9!;R&^RYZ?*s%gfDcov`IdwKKzO138O^hV|sE=gDQ))DwlOM*D0Nf?0>09TU~Z zJCymKhd&}kXK0_h2(l?kw3~X^vVAID4REBm+S#&|y$h1=@2${6P`lQzxBC`!I+_X$ zt1rAe3P12&4TRj4vBsiDOs|;(KRPT-+tG~#SZK&1DpSJzH~e8ltH@aEqr$tFW?4#Xa#R+R=fN}$G#l&$I1l)CsW`!P5#Bmp z+B#=>w41dKn@(V|T>C@at)@HVve!l~M5RfqaKV9d!u)4=seypN2iNDFy(yMglMx_y z!hta&*7gKZ&v#)$GZEx?&)De3NInG1h8;2}RtWTuro$C@wJ}R%V@S)Fc0yzBre=< zB}65FOj}Z=9z`$%ZhzNWFC>RNHRWN&Ji^8l<#@bxVY^kj??vtDcuWJF1nyO;GhMoN zNYo+^5=P7C#{H@0IKo(KB;X2mzGpxOGh24kbn?rTgL6aMgMLd5 z!~P>~@=?@GAw`?T1%5grK+I{Jq{!BTAi}>9TW-@F%Mw~qRfn|f+yF~goO*>X}n*==# zq}8>=|HUc)IFK}+@)-Xoekf7PHeqhUtsxIe&9K6tWk}^{cO@nkt6op` zOwS&2{atNvkA_b;ku@d06Dmk(#^%0gNH}*>&;7r_prWRLBAj> zEWItQ_zwK8&p^kn%ISvFCXh}Te z=b490m%hK_(d^bmtIKT;VQ_|@bBzJ+4tAycri{P~p)25-&|xY@nd$7wP52mbfXg#d z#<&YJKigi~fPi*7!W#j?`$3r*r%=tdvE!$yM}0N(0EznkO}~30A}KBIq6gBqtKt9_ z&!018GCF;pGIe#intvWZ-tY8-^*L1X=oIgWyc&~y`Vi_*LrY7XOl?ZgaUCFqzgpko z8n34))1AZPyX2oBkTFWtk?7vQs372`Ew|CFg;6qjnH%0-Mjh1RX6mIsnQfJY-BFS4 z8_HK1e6s7n6!bZ|9S@JSN4-4(Bu}+Wx+u?Fd5euQy~BH(`gR!ICnYBLV|EobmD2>m zxi6Ht!~#xz_{fAw9=zX=Kf2^f`SlfLiMETT#>lOkQM;eCbb;)~M-`YE@9TE1Crjoo9i_^SyC@z^Cl`UoMI{voCuAgWOPd)H4KL0>|k}AIRXS+2#N0%{TSwENi zLjJ48IiCHa`NaZUKFyU#j2L%cz)S{GayJS?fI~?{i%D zSM>1m5?D@pU1^fiesIcfX~)Th;-8hzdQC zkGua#>K5L148#5}c)N-aaJ?nz>=_)tnFO}u9rWy3+}$twZ*+>^cdE-$p5qQwqi&L6 zqAI)NUrgs+TWrfqhUSW@V-b1RXS5By2kyQE6%Av%6nV+t2WmOX&L0!ye9&j7n)p=T zlgtBd6pOzl>~OjjA|aIOeXivD_gLJMB=Fw4SvAeHht`Z>*S%W5mH#Zm-tMwws0_lY z5yj)@Pbsqm3l7sQJpak3;ae(Kr&4eAm=5B)ZCUvWtYuKNV7Zi@4Z2pyzAyU2@Zh&1 zby{~)Nh_fgVxCaT8ruQHElQt0z;SJ8k%hgro8UN2Fmr>X6D^1S-< zqUMfFbr+Eo*oj=Y2HNKFMTi`OR zb;+J)oh;t?%`(}wp@-1g;D@Q4l-dLsV6`roc4F7^Ph++t7~HGW2Mo*#z1Qfs`svhM z0lWfvJwDmTPdxFE4JQpr$kAGPf40|woe_4#)o7lvt1V zau_#@CD{6>Nu&mzNN}CqTP3rn7IjmfUvs$+nG3q|=W3d=9aEIJ8yxzTIf%&LP4y&5 zVppV-!Mh%906)B67cN@szX#wk&RzK}o8o<i^0 z`6iDHrq4Ka8gvOSy5)Y{BJp45e7-Xbc4_G=(NYZ2jq|6Oi9dc1;O6|DnN(cx?x1sc zT>rJeKd-d?;6czrz(JDaA0Q8$%#@ZR-ebeP$_tZBU^IeU%XuYIXYiehaf^<%?#}NZ zK@DA&uAzboh3RHaQnDaxgH*aq8IeJhtO_)V&UyYAYfWR#MuMlwfrtBfqon?_{Ds+< F{|AJPo0I?m literal 0 HcmV?d00001 diff --git a/__pub/Pasted image 20220811125039.png b/__pub/Pasted image 20220811125039.png new file mode 100644 index 0000000000000000000000000000000000000000..e36ce7fd07135ac75d12dd9aaae586c7f15bb424 GIT binary patch literal 78583 zcmZ^~2V9ch`#)^?QA;Ts4$MJjrlzTAxl-wqnU%B5u*3zKS)w8i9AH-NRhnrz$Vx5E zmE{&(fO}+4+^Dz}Cy3)upYQnnp6CBO_`>_`&{Ro>v~@+!otkx2>&U5E-tPk zH*Z|K!^OqT&Bb*f^AIoRN*41xi}T~Ai-Cc~O#_3|7M|{pTwI;Fxa40W92`#ERFZFW zbaZfNY*SR=_w>CJ9v*$iA&6X4ThmrU`q1K#oD74F0gsJw->u{Nbi20nDIogv_IKq* zrBdn=c~?OxP?ywaFrBRv2G21%08{u%YPzy5c+B~%s8FJ+s%jS3K=YI=&uJgNR~PR5 z>c{V+^A#_mSV4!|J zj$c3hI{7-8G!^@ogvojNn|bmFy4qPhiH7fH#bo(oYbgb^LijT`f#lA2+ zh`Wx%Tey?;%}1uDT<1CGhqw+NIKjo?JJ$iuA6J+Q*I)mfb8(&H963`GAIinYIiBEr zEj}FlPb)X~2k!rzAISW3_|M zNM*-|?room#F>BY3TE#WyBtHab4lMdF}7Jm;(!GJY^SedhZ2@3LLG)7L6?t%KkdE6ihno7Ie1% z#E|rj=e)kYhnAL>(#NC%mx)2uRa*hXkGYjOPFc=w8*8n3bC&cfdTOcvBeS2adSiw4 zN2y=WP!I4)925JRla}`7{_jVL+*0hJqWoV;TCgy4R(eIu)QN-^Vw_A=Tk$-}>*c#& z{ORgs$xDcf9-9ZWh5@rOex)B z$$A{fRsfd{n98m(b>Aijo+lzabTvG5m%wG;y>~Pg2&nP(pRu%x)uys-eW}fmlihk} zc<=DXX!=3kuB2+`{i2`8wl#_M8=z~Ir}~BUD}E&b_Tw|j6D9qwgBs^>Wv37z&z?}> z?Zz~Gr_m_R2H@7MschTV5;K4d(e$n~1LdyhU9vY=X;jzP0++K<>9A4n>6uEEILD** zxpjBVCKFODBMI}3qUGhfn$S|7?k#lD=YoE+1IZQPxiy?EGyIjRL9|4@Kk+nWztaqT zvU&L4ZnE3sdA6I31ZWFa4D|SWR+P6S@xTaRZ@Rx%x9=Tv+&67ObTlNm?uw%Wh})Q{ zy9um19n-XBXz!o<@PiWXy(S;VPaoc$`p1j4Z@5I-o(0|a`!EIc)VLKS4wR>?YqUBf6K<{nhw(0QH>Oh0U>Q)$Ir~vCpd|0#jFejc;}5oCO5Cj zVkzk(cuTZ6qKWE}{Z^suh2V1~6VATiYpc9mK>^v6WrEk%Tfd$RrSK;~2L0 zvw)GT=da(J9hdJlB=U~d81(G|lo#GA#Oei)xhLlt=bycpd;se(S8qv)n0yf&<>>f9 z^_bI@<>D__#pD4d4K+EjKdo5r!r$&XG{YSrI?e4_974jKDpSn>4+Xcd)$;)#Pep=l zucOY!srUNM%hEq;CGstvYsf828WcI2q@ymIuMO-ccf^?b3xY6X!Fk;}R!6sS9&(jY z!OC*_y}T38iU?F~JCh(`&$y;tZ&Kf-X<+V*B93%Tym@fq)ltNEWcPeROl{Lf%Dkc# zQ85;H-DHH)r$Y&A7$O}hpLCd>*<>MU;718G(IKE&N{7YUiKhU*CYh0}o3*cERV&KOyN=tr&8L>-1y;Dm?%mxB z8p22@xwzKe1YeYosRL6EQ?@4>#e5-HA2eBd6bw=>2pY7X zWB){!|7hA&e=>j)-=cneu&B&C$Q$)d)dDCF_yHaRsUc}8=hv#X^>sBbQ8G}JG8D^V z0S*N|M%2XRt>Rn}Uu<}t+Z{`N#D-e{Z%8$E>AS*{OQ360^?^JujbPE^BXre+ql!{A zqG;gft4hS=z^3x(&u0dPw8I&b4l~9bNZagn0q&6CS+P#G=`!)I;CBN^UoTcGw#9hg z!;V^J%jeAJwaW*`e^VWkuGJwQ3m~cUI!EX2`2LJt_D8IGr^;^V^?_NYA?iGuMb@w- z9C>n4YsA+cJ(kT}1;QY5Qk2FbbkMpag+g}FX&=IpMuk;$Y-wmp^78`SPFw$P3armF z-~8!o|uI7Z;ihr-@J>zKaM6m1y-g{yejGtRTdH2R@O}Z>?S8Po0 zgUZ)cTt7a=YRTp3N;#CC;ZfKu<5s3J{k7FfKPX@WJ50H|ioAO8SFPqti-G5t8uX(b zm10-2T=k47ZB2b(&xN7UH@oGu13`1TRJdD$H{&c8zDA(lSW??AXFa3gUM5A!R2FV% zW!C|)-=5gR@|s8A;Ifj#GJq+q)Hmp3aBaMP$?WpUsR_RZ&qTNWx#ZiqC<-bthF%g& zFR^sEJaU5FY+L>WB9gmahboPleW~F@ObgC{Riw$py^GUm1!JU=wptPoIDh(Q>NpbY zUpz2reJ1LS7DAs4OZlrbMq5^v5OT{2To{t@;LiJ`U@+(z!j;~Z^Fj3AtbzetTMpK+ z2FR(p#OmMf)uxRCBCl&dS60oRzR`1X^ISsJT4lkn(fy>0)5#r~s44|Y(g?+PT1AAKO1a&eRrh6aA~T!reEy* z=0D>3KNGA2JQP)Mv`6hO&{~_DGcM2OsQUkoU5Iz{1h+9{ttx5y#t7&=#$wx&+*08)oAy3^Hzag6GS zz|XDw6>A&7O8D$4aUIQ7J>JT;du0Z+<|6byn#lv<>!UR_aocXG^BUnef;fLrXeT*# zQkrNvna9j>6BaL0#QkLc!sLufP+<$dfzzF9RaL~B+JGrT?Rd=s?y!Txl|8Csd^1mU zmFrvV+5*HDlH~tcz5klXenr4TTd{t{&)?KK-h71WJZQ>OBUrKTZfFu>pT{ARzy6+{N?~1&0PyzPKWxlW1vOR_7 zjxZ8Wb>H>3Bmt*KMDXleUGDYaO%j*0POd3X`!N8)a@W~PtV!%h=MfWDGI!8pm~pX< zsOD0ic2{b-Qg57N8SZF0H3Ykr_*|?zuE`(>u{nh>Nk#0KJLXE%+-j=F!l};cyrWps zHkwA+DQTiKsF6!9yuJI5ZCW&&vMdDHdiOjj7k{Guu8vd+g1qXvn;c7P*senXn&29Z zT}kQG=FlRIax(e>3zg#OR5KvIt5^Sw_;qjuh(11!qp#lf5a4cq1{$4Wq95G~8V1bt zD^aE@oZ(eLZL&9<^t+j`6Xs6fR~pX6k69_sB78hQ{wo;-9)1Yizud$Qtw9Juz8bAR<|(QLh7ph z*y)sm9pIt3mP${4N>b!Gw#Brp{@%758o!S@Vf>F|=r`f@aX-1Ll4$LCs#$L;AKW)T7XYyJM@N^t zcgUWLBaLn6(~^~;pv!%??J-X>3s8&ZU7`Aes`M4=G~YYQ$+eV^-J#1qr{Y+h7&FBk zZPf@Fo+RMsY|I@b+H?5aaGm8KTiLfA+LpUB%j}5pwcSQckbNE#R*gr%fXSJgnpv8% zzN^CU>204>7`1atW7%EZe6sh_mO}Z~EVB$GXN$8n-^`C|-Leg8-us})&0nVYN+?Z( zo%$L2_nlk1zr^07#RcPoCF^Ys_aYIIC5lN3D+1U5E%rWxkFo7;7ArsaGjt8`t7>34 z_E{N>#2C7kR~JX0Vwp@`4ps59KM*r=w+MqP-_2}zE$-W;@{i64czs}hq;spyZZcyM z#?d3cp)Un5FBD3KuLyGQzw(HOQKr_1d87jo%|Vvtf0L$Jk&ji zP0h`<+sNrj;Y|IUHAUy%`G)3=@U6I@9R!-3qN(q)PPk43n@f~vmqX<(4a zL!0RD32EOH_Phj+B*P4uJq5U)p$FIYZy4#^QRhxQvfr`4(=lh}TVZK=CCkM4Nwk8s zt`L)>6@x=-I--5Wu^r;80xbl|$*VWMFB#zQ(rem&kYuUv?wc~iwnE7gbh{2=uhwV0D8RS- z)nmvPpnlGmY7NnxhV3SgnkEE{NU?!Sk`y+$HF*d*8&;Gx_;XhK9u+ggQFRF|xVMVj z2e;0?LaFQ$_vVQj&as&W&xAr#S)8qjx2bTaY3-%86(J`JGdq+WnmV5T`VBU@)i63oT|v? zZvBJO?L#k$2ODk*Xs93?@2+&yYv~@aiaG>dzr#ZQ-ou6(-G7{KTj|3O1>a3Q zw?%a`voU7b>Zl~FQo>#p@rA)(nU)vzbJ1i~{F-n;Ii0SEoLt+* zCp}jAo{4kV-=X`0J2)F1T3SZB;Ik32 z@zkFEU~NoEYm`aWe9sdXY1tkP^6LD%N4Nk(nuCj0TCYXjihkXJ#g=clX$EB-`B2 z0xZX(vtRc6{Yk2)rgnofzTxTgp#0WAR*QW;j`KVX0lu=A#V1q8{_4q8_WpX#H-BYC zf-kUcciwKRf;TKIY~Uiqe*0I_dz&ixX>N=QPd<6O`)~Eir$|&F9h{5 zz8S%KVARiW80OgS?s8C2v1)@Hczl0|uJ7wTYiwUJ9?jQQ^x9o(T%-7ph%zP z>uaTo5>`UaJ(Akqn^FlH=s(7{Mz;DAWw-vZt&Rt<(mzw|LL3lVG1B5T@kP}1(mYI( zDg~1&30t;CCHiJWQ=^I>r+hDiK)*yEJ)YNx>$uUjmGQ+O@)Q^oGzTO*1hgVNvf33I zj3d-Vh}6(B%S9S>w*lU?LD#DDeYbKkOT;fFeI0ROvtQfH#P>_!4H%Z7JMwi!vbZB? z2?PAZ=BIcTb>UCB-vFTdF?O-|=64H-?Nh$4+u&V7(Xnjz(Ory^@^bwRF?SJePt{A9 zTU@KA;Lsq_Y3P*v_3Y#+IV-#p4lMx{wiKV-m^>Q zoEO93Z)0hbB9nzi?e4s*DbLq~_P2t>tBX^olzQ}*P;ptRJZu>d>&C{CFEJoV9DX1{ zR1jKxyyMUEeFT0cI2nCXpabp@G?Njg5p`^mDQo0d^vbV>Tgu}0*|pp&k!gm{+L`<7 z*^oTK-bMjb#lI^mXWo8)y9eopP6@SSjyt+v_%0;g4`J2{zR%TJ-}rV2oKZmHa;7QN zjsK;GgdLeU;39HL_hMTzbF%z|7UBT6NQbLx+}=0d3Z?V+16{y}k49BdAbX6qp(ugX zDIRwayPuNtM+CLinJ~Usxu$fUP-o@&CvjPH4Km4o6x9s8ukQ71wDLN4!5M~HUCHoltahW&j6hD(ayo{?95G2>0)pT8-h-`f! zwf^Bz@L%|bmr}Go@|M$C6Qj*+@r8A`IG_J(IHgT>AQFxl6D+t#b#S!fQooRn}Uls1s^# zdD;s-maQSQW+shL-v;cA{@@C?cRaBPshR&S-wRkE;ZA76^ z_a0qel*+LnLdClOz?;wroVZ(xQmAA?WrxBF9GCTmGI3Tk#?NlaM&}9kTi&u(om;o~ z8RJ^BF0qNqmMk>5(@E=L^z+5*niaRv#YtZzw6%ymAj@wDS573T0#7q`n1vn_@G6!ZF{)gKouc8TR|==gX5@S|;X=y-t_xMl#+{>$>&?Xgfk zxxZFEhF2|Pm#L|Tv$RfvVVA}-%w2yDb0CBp|K*2cceuXamR|#*7)B@xmN9g$u7}$V zG(jAjn>&bFvG=%t$f2NLiyOyL`~-#PMZy}}k+#@HT8cjSh5749$)X}u<}-Y6)zk&| z0o~5#0snlFl~*b%vl)u63%ep`W4g}YLxn{L*4AqJ=qB%k8|i*59}Yty`z;=V9ze`% zLP3!%4p3pTr)t&??#O6)B+8YggFL6c?!3E93cHX(zL@=^?qRC46z1&tUY6|F@0Se8iiT(40Y-AF7(u(ft2 z>@$$<1d1v-n^v|Dd}Oku1(u}Xb3kjCy#ZiIb3NrXYwveaqqF@y4#AjgW(RJ@1ej#x zQzj5@G#zE%-LKo0;}p1$->udeb79L!qHewrM{HsdW~uUY;6!H zgbVtykDi@*4evQQSt7mZEdsk{v2gqJcW@}N0Jo8AT07%h?)_}#gXfJek+%F^tiOz~ ztUKb(19YM?TA;al$-7{>&%4v+h#($BF%vKot&PsiJG@p zljz(R&)K?1gwao77-LFM52ls08yIe~gX+0rNDS19-Kr!v8PlE=h1dj680aX)mtE~F zd7UDn-T$2-aJ?u-_od`&E&Q}@C|t|X4rqObd(Z9xJWw{PuI9YhN(Zxgb7W| z-p?p7A7*xhv!SWH0bP_pRbS9bl7BllUS9sD` zVx=zCLBM?|#eBT2qx^e;>E7>KBfXI}tHN==67+PK=XiH&K;Uqr*{61|=0$^F2FGq? zDr)mUXc;iS7fs1=E$%K!P0u>Ebk4ll_iX+4Vt1lgwX?m(4hJE7_Bki2i*$RZA?E@J z$Us-ieC_g`Hh4|MD(>hPucEDq$TP3tt(r?M&a{O~hLF+@i?hYx+dBnZdkVsaAZthI zCKZ7+4vcb(v@K*b89Vz`-=G5^h9E;9%(0cYl6;R4#fzRG+7q7A7KiNQz^dcDLGpH8 zsP>spEm1ZxWjY?YHp4mPJYjry%WWfetk*rRO9Xhah<^=jH|!gorV}o#N9b#fy@p5x z9PiN5h+cE$6*!Pz=3vm((UZb~aJp?hhx3y?#7`218VW8R8LnBPhQC%{pIJTQ)4qN( zJ649`z-agwc|>wLmGok5d^E7qjn2H-R2~Try#O=pFYap zY{}W=DAkIna(OxTs)tb2_GbWHu)=tb4x9_KP(>2Q{IY@rKc zJ73)p@)nP%jGegJd(OAgdy^h+S{~OFRW|6MYe#YK-e4%ObJwR(0ZRxt5HZg%8OEO{ z=9g7?#z~@WF-Qb@@^zG0OR=Eyesk4@O5vs(&-gHYAMS0r$x`_v#?5u$JqE7L~5vO%?!2ZZ}-d z2BlB96tSVb0a0OmZgdbWw zOV?0Z?Or>{oDvPQc3?bHCTW4uCF$B+HYE-f#7?6=0^GIRQQzB&&t6yN;J&VXhADVO zy;$d7;en)F^U1CfY3GaxJ(afXm7y%tXT%!a}hC5-DdSX$FW*57gybCw(mk0 zE;Q)6>3IFXt)dRHzWptsoYbFL@>76I9g@r>;r+YO0Yk6-P?3_(eJoi?ocHu#AHio0 z`K7%67Cm`Pbo zZ~XBiiiVN6qfYFZA0#Fl>^WEj)<>{iqMt)1^YYC5HiX2XazBpMfEX*pBR{x;0@(%f#qiBLn9i4FDbQm&}Yr6b+1dJ4OW408e!Hv_&A)r*<@9a9NR*I z_E*HN)b)DbBB~x!t6|(JsjGPdu;8A#B)gP_xG>TDEYfU*sl@wugH)GyT8L&M#iI@3 zZVKXgdvsr7j)TiQElt*l2Wuvzt@kqe|3LSw1Sf#!c^>9tzbD zWp_+GxAE6{(F*CESWp*dJP!Vd{Tct_(-Eu&KQ{9Iio!a}P)0;vXn4lK00$FxNX4!I zolzf-yrb1qxIxUCY5aF-I@GgqRFgEO=J?F0OYmsQO2iBN{SX(P)V@9T>l#Y?p#eGQs52`jNDJ@lD$xfLZwE4II=p+E0qvOQ4eA@ouhx zlAffr6DeL1CwGNXhElgxg$?lO@HasNF7|no3Yh*Ic--Sp;6V=ncJ%Z7ckS&AylTD& zOB<|*f8*zYjcf4>=R}TeM!~=>>_!;8lr^8w->rlHKkJ1%cozowl`}0!L^Ny`#FKdDZ}4%Xks1xLu>6pLsN2>YNt)KzzH&J zq4NIM+&q_vK`O3pvi>bLBfn-=1iKp}cz76&eWe^bkN(81<>Lo3FGML^i`t$CWllUf zEO=Bs3-h=>_k@xX#^Qd|p_Q_vfJgiFqYS)cH+0_NBfj{|!4``4;5g%ebw|6r1Pa1|-?NvUrb# zl%dZP}*II^Oo= zxV*oX&jm~B-+hA)5G>W;fVw1&LO&Nv*9EljG{@X^+4!BU|FbB2jIJF?hwQW3R6tFk z2h(_t@6-Pl53B^Wm!a?BpX1AFevuOe`2!xdtI#4%FMPM`+lM^cR|@3#dp|J_r;A|L z8M%gh7obOy<@R0;-pZ8$7NE;@6(8T!E#<= zGWRqnp5oiCPkNxPZ4T2Qil@Xf#Y@dr_G_hz<_ZQTwaH!w#<30+!8%Z!a76~TnXrIJ zR^~Hj_x~JtqPsqvCEksKtUGaVt2=cN{;IWT&^7y26IA>yS%@$1VFu1bYVPM^%RStn zSD?u@xY|Q^h@vc9&_)qbgRcVbs8UyJ+NY$m$iK6gv%ij;%}|gWEK5F%uFfY=E7ECY zW+t&05c%^M%T2vdp`oGV&&#-~0#qPnGBS#xflayzMfN3oO+V4YD+GR?jQ^;9@hz}q z6+n@Nd{BO~X+<}v=JPqfqa|aKA?N&MHXWH%t{ptLDL5(QnaY|bB~!siKHEZ}n4j)N2p#P&`(( zP{vM!!W)IJ`#dxKgj;aMGeBVLH@bKKVzzdhTYe0x1q9~~==tv?_YC6q2WmTgfaNAFC>UeLKHNU%sCXoUz&OqDsj5cT>j z2Uyg+wP{2P=LBH02=VpM*F8O2FUfGR-n_Dl8| z_!10)ko`SoJgjI;#Y*!>+kkmf3&RtBtJX)CIbwt`u-UrAx7S&A z&!vxiK#gvo^JiyX`}^BL)AqVupu$X1@ZVsg40+uL8eYHMsqSy)APr}TzxWcuV(poA zq8d+TRubL_2K3jz|9C2+@gvt19pWedE~YNQ{;!HTtAas)2Sw$D#L_MCSKER->Wmvk ztNHi9jxrFAZyQyL9xjYiApyzJ$|`B7EoNaxSr(IQro$wWHMhn+H--f(nB$o&FJ02D zDErx_c1lQrh=ghnToLQl?~J}L!<+}jgmFwq?DFMDCJ;jkn6f^cM8mlLLcN=hofWv; z5YF=4&CqcuTNFxm+)-e!&KG^|pPG4DUXiyWvj(hi9n#MRttGzb%2W*O_+(5(ngF9S z$0p}WSrRfb*W(-kZ>gcl3a~Ql6Uch^BhfXzL?i$b%@g#sf@A68ZrRm|pD+gz5Ec0? zQ;^Aqt>JsyKag7b`k$8x(>0(I-8smsM}I5_-gsLLd?kHT+u>IHOp6`zaainp2o15t zFn--=Q1>S;lrkY0l!}~&;+PZ%-G=DsfXQV}ROaG7FdD0|S3B@0QZZdiwN_%j!kJ_n zk2sHNF709+NdVKd4 zw0;SC%kpVTBou%b?=tJ&$&kS;WYmSKNLqd>%n03eu7x!7%YG^uvy!?}0IRo#sbrlT zj2;Hjx{-RZR-`5U(x1x`?m7jN-y^gE5tUCzfHt!nH7FsK+(J(WzHUTbEv;Te=KlFt zS-O6V&pEWbIy?-^3Uf}CogVQ^o5C%j@l;)+s&8t0lMr@lm>giQ{5|bVY^K8x#xb%8 zO_tPK1lP(>_~lEqbR_RosPx_3h^n5~NpF#)vJEy27GM%_(wPw9y}Mcp;AKO}SOK~g zIe31?`bh$5;Wd5E*U?n(oRseMK>5B-JSW@uYDy6s5m=E&Daz>|rk8A{(M;)yFb!~+ zG|IP495Enx%pmoJ+u(tM2s&XUXtys2$&cMDEFyafi+FRyfZXuOCld`4wIG(ODFdqZ8F$<|KjU(G}5FM9KbqEL3plD_pfB{z_B~| zI{76qz0eZW!)95HbVXl0cp=#=e+ZF)Y|Wl8*LOMU% z+p=mcm{ictoH^v~n!Dw&iM$G?U~Ac!@C=8mtRXg2R+)7Db-`#oJ?Wu5llAk|Y>~>a zHsY<|YR85;+2_#cs$49YEK!_<_s~5DiZ_ltvUgFgNM9>AHur*0Tn19&oo7T0y?NLf za5*bMajXBK_}Xj*a#uef266efQOc-n^SyUZBMZPf3MJzbjpv-xow)DCN^bYVKZ%H? zAf%MFcifc;RR18iz^y6l7WJ+1Xc;0AcbVIG!ox%f;YxiMK`ej~7t7We;N3T=cf80A zVnAGl861z_{@ejPc@;n8CF>yUH&HLhOG^F~%klBsmzqWI zCkGBQMD~MPt}FoC62ls&fQQ5e0@(99yl{$JJK&q*W-1VxahWG6H@uiB4`?OToFC=R zxs;;FJ$U$}_}ci{R$wTZA=Z7Ec7JY9V=BI-$aCw3Z)2d2nH#{k3wpFc{pAaV)fM2K zm8{tAUGtc<_znw6l4R6<+E}HT$r7q8wgs`PA4rLs)hU@T3$((O98kMbx7eJ2D z48>?^RHFukxawik6gpP6cw#%f@0eNAD+6Htd2}-)@#DNsbCe&7b$9K}^I4rpIaf3d zWm4+xH)FugR~bm|#b!Cs=jh~fJ5Bk3N!~)!ZIdsDhO??}DgQTfF*!c?&B4dFf_QQ{ z*=RG)4x?DLU^l;d-j{EN?~9FL6e&ZPND_iSNkNAuGYEKDUN)n1a|}JTn-SfXSl@|x z`><5mt#``z=8*eSrTKKK&_2TJj%%s6TVme{Eo&=4TVk+6syB8vqMwucy)@P9_a5$c zuT~aZN~&0g!BGXzi^2MLFvyfR4ZMOi(#OClcQfgfv#7l-0?ABAP%$~JyIBquxSY81 zjc^57pSb#sYRFk4Oq`@h1P8>N^fk$LZ$*!U63`Q@9}HRrlIBKi$JwXq6C$9q!*i3zF^t(AW=>rQ69<^>g;f?DwA!UsX6J z@bI)x;E!r)Q6TQ{R}NFGk8>AwL<*Oi`_NEkyV@FZKAz7FQBTEIXe|k;+gd&grZf9( z@GI9cPsr?=-takz@WP?#XRU%Ht1xz}#7T_srw1euXTpDt{Dh<6ykatQJxX{rKwnG>at-ES7GC>DS8I5=*d?cXmxnnYaT$GD38I z#r*u`ULQH&)l_>tYo0WjZ(v_yNjfjEnmj8G&cc}yAM zC_lhNaCxAD$YS^AK$#m9($IzT0(bJyH_fdxb^iGU}B zij_%Uo7LH7Zx@6|LEli3OM1^l2OG^+VTJ@F5f0rW5KgWX^727r{eSQHPF2;7Gmlg{ zbwZ25B>}08lPD$Kro+mdow(@u%#5i4Y5Vo&=4w&{EKNrk8YZXXZgZ!PJ6tx$Rwls_6e z5Gs?RylWA*YXSLPo8$%TE^DDqG`&6y5~uhA`cQti?31Oho1{P2zAG2~w^n2bC+pU$ zz86_vM8KA|ZBWD7%2vW0S~RAe4?O}rm0b0vEbpZ~O)@7%A4kOK^1U%&J1* z>`OM9l?ZVk_D!)T%f{{T!TDfDqY24%`@b=k4V;iqTn8epQcyG`uKd0o@190$vAziv zxOfV^t08q~gb(QxYaGO%CKTPd9KVTRP$rEdvE7KKDJ^JFH|xID&Pq;SPGIbYLDe=O zZM!V_R2+<6Bhlj6svqr*;*_8SbK*$lcw-r7FD$_Aqzh?fIb zxF6(RKPOneX&~8zjW>`4i4XdkP#&)>(~!H;8c40LYH`(Vz9~w=myOJELUEgD)zG>2 zabrI~%-6Pdu->EP(gEp~pN0?~=$@yS6Ajg5hk7#VZON{?!f{Ns+KXld`pzB_mF#n$ zH}11>G#;f4Zh!UvE=<@&4{F%gShP`2j4)w68;}(Ayips?jNR32GzhnVk5h zwnyDrgEa4Dc5U^#bzhtCo~EN&Qcbr8X>9rRP!+jWJ52>hwXYVBiEc}{%Lh1Jzf6~f$Jw=vF z%`8bDJvW`jq{rIg>il4t_JInqU|cPbQ}1<*3jG#cP=}xJAjXG)%gmm*en;(Uykmb> zNmC8AaG%4nHZW5Lh(Y)6E^GUF>sXp6#X~ZQvTkd%%hCARu6p@kTz1_%HBCo9*Z7zw zE8q_Y0mTJlbK0Q2)w~~_JXRv*t{h7xt9BiC6AwFuR@w*|$mA4)Jz)Li9&Jxy^m~Fs z5}wlaD>>=tzO2}o3!9vr_ye3(IG0^LtO;!Cg+RCK2>@n&|x!s#<kJyQTkn}s07ULpSSi?aNx2vtDFJafIVOq1utCpQK zzQ&xRwe2>sZD#keC_8P4sK6rLj17!RCt4Bp(>!s@b^?EHEvo`6g; zOBo(gBZc5iquc1&ak*bT)A+Mh>|$E%n|E$NOGcXYvp%6p-{lZ*;g_Dar`{>Qt!qg- zQ>C$Q$$DJB6hEG{KP0iX45oNhtc1mmYxa#EOL@agB3rShAu620rMg21sTZ@>vCGLEN5mgD4#f*bELg_Om<12e(e0>JhD6=Y zkZ+1zxoM-=0|Z0^1!kQx80PN_>0@*^@tg#l5{?B<5?Fzck+| zU%$Sc(%DMnlc4jdLP14Cwo42QgeOQ+rwEA9o@z!g({m9Oy1nML(F11Elpvc{N7&5E z?+QCxjz36rM!w8BlCG>A!t;R~-^7_x$x~>4bAzHLXdA6Tor1iTB@{XD4^Vx~k+ z)+ISd3zjZ+*AnMB)(IO~6mO6mhRK}TG)Bfhg}BPu0AAKO?XO%VA`c2^a+Z?Qhh=Uj z%eC{Uf2ZGaGK&k;3f%_^p<>BkcaehunV9oY>0*MP58D2>YVML+jc*_;-JbRrz{7O+ zD-_Q<@be56=Wnb8-#rbW4XZGt)1;G)C(p@DHCdsxTDxRBg*Y&xCDCgX^}^JI!hq|n zs+U+vJfV!`sku$O6yMT5x2fQYD4J}~phY)z?S>{dYo6<4c8b8ZKog&%5#1rj;onC? z=F3Y4LchaCGpaX--9;Zk7wSHm)}DO(pcD$>F{&_j*Gnp~uEe-^kDhynE_Rc;!zrY_ zKeh9@A>m_!c(Ljw=LL?VPk2s1oOP_VsOVY&0OR1;=|og5yvTcJL^s99BzyA54?lUv zzXY}rug2ntFBCh#MW~-uf74Jnf%3+VKoMGuT)f(Y+9)Gu@yR9R3D#$15-%fnDW^N}}rv z6KL|hTQUQ$dQpQrfZ7If(GbO=D%rL*u4T9v;nK}O4P^A4>nnReG44vT?bk8W%EFEd zMwkMB)MYH=IDU#BBrllqF!%ySiVFOu;HvjFAC^hii9a6Jf~LLaH^Nn}0OunwJ(~Aq zWh~ZtR%^2n@Ps@%Cz5~zrwNs#$8ok&^PD&ar_?5LR^_Jt8@Yw7Nq70T6cEi@zJyi| zqC_|WfG81sL~I?t%4wysgD9N-8DDjfn?jvxYo zhz3Fl3IZxkrAr_{6qFu1n1FzQw4kCCDUmK9y@nE`B%ui?y+cCpy_dT=-}~P2-Eqer zgTL(Twf0^=W@ES-O|YEg%0kXNh3>;R+d7 z{T0g@PHR(b>#h*oh#d|lmpYuN&>V`xrl{-Cs;n1;jq>b@jF$XyJ61X$yD7mK-Ip+O zJ_Ucdg9jq8! zdHr{yfpf!#{%3Y0RyVnKLrCMhx;rD*4tataOxoXR2lagH0aDKfp=14}du(nh0%Vmq z%EdujRU3Toe_a4STGiwhY!s(~Rn)G-(MAbZlTDl{yRfHO$DbhX7nVRkkMJ-i>1vL- zS;{)ZrwBEm_du~Y9V9#>6xIlEqO36AdD>|9AAI#c z0H7xWuIa|7{;5l*@HKJMzJomW1$nc)T$CKHwML0y4E<~$g^4KC3bB7AM<7%ZJG?ZP z31rs~^3g-#a{+Vkp#tSv?0)^j9u*~Z!(E$(-4c9&D8Ge+@&Y7t@@tB;^{8O}!CD1S zSs(qkwUE7Qsb1 zWjaAY8s%jLO*E5el0la?X#EZg>-yV@?HsiLb%ZM8V_QQg0Tt1-W%;rp%_T~q;r^LI zdE8dwI~aT9p5(eKLkl9^r6zBi3k|mNlcRXwGp*4X>gIHDna=4(>ueTyc)_d?(SL zv#XheJ~Fa{AR*Woirq;5LgOTkkan!MrcLsrX_DAs+93-GUg0S0CW&`r0g|>oRG@HN zhAuFr9AxeLArxC%_y$RA7-Zi z1kLTv&rn<1O)y^7^I{B3sOxb<9$PM3RRvHB@#uV)*`rt=?L0_$tOBFFs?5R(%a2>% zKmQEV{$KN=74?%jeM+_5k~BygUmpOcsym9Qemx3?+?~fr4||Q$gH0 zR@J*=EOx?l$Ho)9jgx-{$Sb;2WjHP(b7q&cr1k-BW=^pq((~TYrq_3DynLwqF*~ifb5?S z*|qp_)yMD zS~n8ROC?G<+r5Y%Y*GJ?rxtfWLEIUwH<*to+atYh57MiC+kYFbAiZPf6hbtd~~z%6x}9f*3tv_s+jx@`?l!asYOsv|lxre~n` zSc*{CoRKbh799+~6U|>mYqT>}_nB^KU6aXOQ6N<$T+fU}PKGud6!KWgLa@y!cL-rI zsI28B_^_q~FP*8|Ww3o8O}iEa_Do6*%uZ7B4{UmP#)|b&zc_ZQD+LuW#86LmezHho z*^L*=(^va9SpD2&`P_k@gGszUO(m?Pq~@W?Wo#Xv{e`MHYB-n_87K*V)J;H;TKh`T z+Y}dUNAr}%!ka@;2xVG?o8skU60@_VOI>QXNu%+u?lI3ipoA?3(#H<5BjXd80%S`y%6xCB(cS6?chf=8|rNLT=ZC2i6KG?nf!c<{30z4!o7^9&S zGzP?<^VieqC8xzm@a{(>jb;@i8x`cjs3EJ$-bVG$i)N3_^5naHLxo%?ZGQ+&yqz-= zb+#)ZHvvFY44V|gWwFY`5On3u~Lap~8iW$N!d0Mn;eL!xi9-@w)XT<5uo zOxb9Av^Sg>+~@xsSQ38(`CXs(d7qAn+nk%+Urb41)Dz&~xn%#6cGV*<|#c#kfqgRof z->D z5_oII?vR2As~EaFj1;z6P*vW&VDlEMY@SN02`P5H&d@;{ViF@3d~wLF9x~v`KX0o< z>P1&evc!<~ckla#*Ydb$E8G|*&~#Z`4jxVYqpnkkVhg%?3sKLa22O(DKk!D5M)r0M3E;L8ujW5a$PZ zME2(ifHk^{qJhK1{zl&SH89jh1U$drb6A(x_#9o~o|&@UjUb@QmuIyD?5k8UOasbC z`9(;$i(&J25oQk!+bNWlIWCG75c-w$#_A^)pEWQ2d5j5%|9u#ZO_Waks}= z2dwx)u%Oye7ewib6Ls>Sztcy272@LzG4%}}O9oY#J{AYOJ-iE%b?6};pKy(GV3#O` za;AK4*Xyt6A1Wj9SY9sPG~lhpT#h`5Xl|$oUX*vwtD(%6;dp@-)NZ1afNs%6I)Mm+ z&-a)jwsxa%4kegei$uwzkS=@OO%)uoYj%32Gkl)mEAPR1W*-B%P^L?OmDz~^V2Q8N81_K zY{WlH-i^83Hws|mv!kumFBVxE;i;C+N)DECIOP5Tk_zyc}m=i7c_$MuCd+}rE!<%)bT->Ht zzl6o*;G<{>{V+63&(^L$LnL>M&WOhe1fNGc1{!XQL$DnlCeE78qN*YZIs@V%BBTdD zTpBrn$)wWWa_q#AfKop{!&?K58~QFZ|47hQF$h?(WpSGa_3ES@ayh3=VW94)yV?li+Boc$73{mIm zL8&VhK-;0)^x_-A^)Ak+>4&*?)oz-U(B_fegS?e>NGz@x*s)9$=C_>OI@J6^)04G_ z1xOsvY<5la8xw9{L}fJnf7zu;`#ob8ag2ZIGlXaCjq3lqcMxcQJNOB;_vGCBJYE$&PmPcnp>KgzA*H{_gnwC35&MX!k?DmaPjRPQEssB&|wJ(q&2# z@^x5np7<4u0l0+46*MSjrAvE3E08v7d0OF$9CJe~?~kr@t?+yNxUsExY=jY2Alc1)ezT|% zfwns?1by6@0u>AJ>%PL%G9{M_X%=?GvEZdjmrWN>rlZy}$M%;oDUt$qAa246vrBea zt7Cj*w-JatL9YsmcWF`}=JgNm#z?rs!Fzw!^%16C?R9IysL z^SoJZ`6usH+}ohfX<@6VQP0EC2ecB9ba!y71E6+#fw^`=|scZ)7ay`$6_+1 zn0`Q>RLIl>CV`aSvJ3^b(pA=8^@h-nGmL1yc{geCnjI@VKn z20U$um9Kg0>S%`aXITqNy#K=fvNT{*5fA~U1Db&HRtlPvQ#n{3I|7_Zm@DdBWy{Di zF!RAx2ieimm0c82cYW1{eWWHII0h>W`Mri(t7L`Ro4gW>e*zvNqBql2l!6+J=A->Z z5=9Tw$vx@n3b4YPK2k1=ogPD1xBDBR6hXeeC-RZ!StEkq<-|#9e&<;ZJ7`B1ib3L(8x{<`=5Nbc0Z$Gw{S^pW&8rQqKLPyOKf8%gUdKlYQ{+!MN<9jDYm*RJxO3k|q1$#0PnX=@-&lF2Lc#_6 zdThB%^^<&i-*9_=!P}8_Yp8v~I$_O)W}JP@vz$nS?3I$FIJaXfhRY<>gvK(C&05^z zr|stv+lkR}d|qr+61>xL9T5s7v0mU~==_W`J5b+{Nh~h(T2sBvh3bMKEDztZ7rNY3=Y;t=2zAnyPZ3<^S^M5oa9HI~HKI()MVZ-Gfau%)7~3j0uE z!Orsqg^%)xt0tGN1ySO8fcFSe1)F)3NTf`rSGXyJ*L_+7#nywDCRps~C@oiKj&8-T z%D%UloR@cK>vgmAF%{|cIE2VT4wKg*=wB9MZHgZ8A1({YeIz-^(rI|Buy&*vaWPE4 zG@rHB^YZ;AFG*h`Rj|aeYu(h@k!(Nn%49>V{Cuvb)zPoATYXbnHMcU#hdShNBU&$A zvk($@^N3zx^bX{+5^JXSlnHm3mbrP`fmQgDuv2j!PfUv~@F@Puvvf{;bdy2YNfU%) zm*)WqVaH;$STeN?q4v47&4CPHfjwAga5n`AtG}5~bS;C{+G|z{XPo0Mn=k>!#M73V z(7G8HR`@eZJ@MI$#*09R%WRyMv)^rcW{I14DA@37Lo}WUwc?M;q>?O`iX$V~A{Z4c zCt|`gaH3ob2X(Yg-wB~Mw0TkW8P8Rq9FJ&lw-R=sl({Q6~h2OKFXM}T%-q&(48^0h@s(rgzp#Pup?6GMjl`eQZjYt6EkEu zZb|t2d`Nd4UrVbGoG!2x(;lk&zv>EselT9(@vyp6IPy_;^2&n(=akCc4(JblYahng zU*sG}mh+Gk4gv{55*FXyW(jKK4cOU5$+?x zxaG^vLm50}Uk>bl+0GU+3gzr8*oC2YpjR(!Yklxv>S8y0T^{M@%<{ug`=G))VMka} z@YCXu!4}+LxUp-d%T0Ilz|Kuj7Ac7uE}RSYo{&9&mCa_Dm+i%w za7`C>%g#(EkLO38_4R#6K^f|0QRbht#hPZ1mGvw3m92r}DAK|~U?EeK>G9oOu9%s{ zBQTPW9ei-LjJ%&ipZvxBI*+;K*5LcM8Xv?g-m;ykF`yR64lps)OXA#w@BR~g6^e2J z)TE^9&5mO?=j%9Vjs9BMyh8LH4~@_pP&RMLJX@kAnlyPZBK%p!Db_qYcTxE$R)Nbi z8&UCx?dY+f?Mu9k2zDZU@R9G3$*v#!T8V=XN5?HM$5zwZ)LH6-VFHmN2-MK3>>nd# zAxh?Hv+sy6*jr+V`4ySeRAvg{?<3&!-T44Ffu0qSy_?5{*-Sf#sXa`WtG|RRkU!zu zksa=x(%lY;$+6shhH*LheACC^qe)Yg^M$Dv#n1W9LfVJ(X}BnTvQ(htubfdvU2|Mr zCnUEb!SI*-?TE;=z}!`rRm)02ZY+*%;=stT&D<8OtW-Z=)MtdtvorXeL7pOH4!&EH zS95uJ=3BD)RnI=6yn7AMNfWf0*_e3Q_91x4rZ}Yf@fCZ-FKWT7l$7A0METd?#r>dd&6}lI*&nCNyey^)8 zI`7Y}JDYCr70sltF}xrvh3bM=TZ0hjS9bGULdhpt*ms_0nxclT1_J6lF^4%XhiS}P zeWm!z?3Aj|4mXl$Z6iO?6>)v$C=)#pZeJIF%eSE9e9RFCMnI!vlwxpT{@X*T3FGo6 zMlyND>)qOJ?2bxJ_tA$`=lCbLTtd9%Ix}K_Jcv=Xk6>91vU#J$`3V(S2T0a-?x4o^%cm<(TyhDCZdUeE5pOiTZI zQ;_@6q2WOl<=qdED-0jB7SO#Ve6A6lOLhgs_m(hz?%E_}VAJNy=XB#F>1be)1}!!_CsU z@9AQR=swV<3bR+S+a6Gc!FH!|Ttfgmdkmac3q0GrN}3fvl5n>J#p#$et*d5eNgwZX7Jp ziK{#>SWI@wfA&gV3>5 z%F$>{#CX1MQ?i8n)cw|lgRv7Iw^I+%{;AnR4Nv-cD#@5GZlI+_5~T)aV!i8_%{ogG zewcqe`Q_+S{I55yX5xb5dvb%1={9s zi|`1Zff%Jy^Y1s6J5Vq2zmB9>h3Q8>Mq(y2*rHe2%4H8Fok{ocIp>fEgMIF_3gBLm zN5HGI;owt53W{9~6OcUoQyDH@D!$(tlfWhTTRktPVCcEi?}lX*psHE+zi2vXbGPG< zBg4GXdal=}1Otrab$O{$oiHGU{HQbaHvEDq^p_}hE?aReLyB6?$^Q6%JK3F-ywk7$^GIztOBB2 z&jDbr38GsZzlQi*bh_XRn-aY71`jAR^n%?KJu7rEpiTpm8Z2?pe*#!ckXs=-n3TBy ztUr6gH}7d_ym8{}1ChZ*nMu2%mw0a3mZ>xm#n)~j8i*9RiSs%}r^=GN(}}mZuP1on zVXKhSf$Q@&EA~qra^*!lMj{6!kAIUHBWXH&q%z051jv*|O#M4a$Fft1t><6mP1#@A zkCq)Vo5p~dYQ8WMYv;nn!=HDtdQQtRyWOkZ#Q>12oR~iSxtjhfXz9)9M$+{9@zr3^ zpW)ED0b{1W3Xa!=P6~|?Ai$1f*X~mb%=>IW#3ZUfb0W4;R^JEz!+QsV2wS?lR#sgpi zf-2@eXDYmO1DM7lx!G?4d_oC>GaPCIpn6~C$m>4B!+<^PHCGhNE1zcmy!T-y zS~uUpS~aW9qc(t{uO@E;KLClMEd9d~CWm76Jz1AL`Lmjn5)&K8{Tz2>SWV^R+-^Ht zPC)<~Bs;DqkUZjsxpu`l5(d2$kb~l=-<=Vcphdo4d&m39UF%i-xPs*S~M)5N)NYmPBwLZq1y*M*6-nW+HC>X()1CT z*T<4}w4H-I%H9Xo*MsSnb1Uq)m#gqojShvI@Wjcb^lVZ{94cN_(52NLX1;1>!P>+w z;Gj?Iy@5N6)3Lk`<^n|Z3BQ6>+NV#0Z+<(F3dyV}YTvxbwsHffHEQeBWX+5h5^pOp zx?w%-Ut#pUE_iHNRglUvQsgFGu;ThSOz_40y^RTITx9SOkM{TSO)RT;jRCK1xKcA` zmoR8o&fOVhkau;Z-Zm;2We=aBYOV!A-l4ab-n5Ob6r(VC!_NTlAs6wiU^`S>$eMb8 z_;&`#8Y_p(gsU=;nt@kkaT@v=FsW6bJ9^HAUfa}@&5AsS;^<6(rF}48yXU8TR@*N* z!qWc@M)X+pc}36rbAi+Zf4>>F3iY@p;Mv%0#ZnY92onC+=B8z8y>zb(PeaRJGl^UL z`6On|D{3Hm`CofT;MGEBv9sj{Pk2TE9MXQ$gSe5%k6~gBy^eWSaEa}9dy#H+!AEXp z2J%hUn@%f$Fz&9x2gb@>>%&v7bL*XmLNcM|FB94Ih;xzDpg?A$NzDlc236R;lgFvb zglfYQc(vT$DV_o5#LN{4Geq9>Z;rV(f2xFI=SKfrICYScg96X<44Ysx2o*AUY0ABSp6S)hgz1)mZ0x!-}h^S47}Un$v#tO{aX}H0*My zHIp5eh@)4l315<{S{zrcI9IdQ?k+04cw)7l>UVAHraJ5~yO4{z1?$OV!`fLLaqn5( z>XZ)U$y0J)+M`hdvu9n`loBomK3Qcu>Ex&qS1>9ljNSD;Svk=^jUMqNK^JAg9YP0| z4{wgv4_~uI(D;7&N7DT0Z-{< z9>~_v#W(BNFi!b!qO6ryexcKKZmx%??ma$1&oMtV5H-ua$nQyK@uHJ0)_-k~zNk2m zt|7U&5MSO&hWb!Za9G}!*S+@fdU^`a@To}-Xv7-6oxaB*)P4y&=^cn#=oc|F3k@;2 zJ@tpnFjPCuXhzEJ9&G(~%E#(4(PLz-v@+@#xyl@$Y7VFQVkvV$u% z;b6I4^B>@4kNM&{`K_1(?V~`V3jhLRGmrl`lIQ(xGr>&mL?DzcD*(c_v8;~WyQuMA z`Z{e>*QIW2W{-L4O8Ko^HF-CSVqN^BF;X6LX=0_(Kvu_hXi?>^t>tCL-TbiQ#C-o&>iTjHa+NOGU_Gf!`_*c5E?fH#OXBWGzM?B`~!>+i`r&wizKe^BQ`(}bufICW( zZ~SE-Y4x>Y!9OFU9KJx%<<^ql;`~S!0(GnQx5u@+W{}yuu6J!$_SHCKg5SBrfvtti zet(auZA0G@Fs5p`aQ;f&v2%sGl9ykU>2jCLyP+#|xve99faQQQ(F%|G9H|RF*g*44 za5X<}AqDuqJnr)*A@1YBx$v$^mkDO1XQmnA?#8pR<5FG8ysuuU1lf6IyG(GB$9%nS zrrCqV?m$tMUuvUm`lhmvyLTf547XI0P>k7Q~6SKyvm+~Qierg>GJC~MPk=xtD)vFVlNZe~Ja<=+mt zFZqD;vdXJBtlSFT{1J7|cl87i4Ht)$gQenO3=8pFkmua97k0MjDt{$7A#56m#AmIwUr=xx!vE20E-7CGLxbC+J(EbSp}FM}THpxn?k4QLTi^Xt28 z^>Uk?DjxGBqlOzU6a&d??y}ml#NPp3C;Ry)HqL)V?TD}FPx}L+6+p!0vHWK20P5~` zwpLft+uf~zuH5W}3`Gm8>X>QPe}@)6kz;meu{$hDjp4++n|XxHh`+RTJ~+{PVhki! zE$LNT{E?laWjed!qyQ-$;S8F*U?sEGVN9_Ws${Ui1`^Gt9DuEH+3@e z#iWF(NtS8{!bF?Hk!o*3^K{$n{jFTNgf(jve&}4q4ZmWdT|%7Q(0l#0)5PAv!T1^* zmCS9ev|yPTLIC@GE&c=;QW@nPbjJIPEA**66j?QWNyOLUrN(;W)=DQwhk%J_q4vL{ z=*p^P>6o~~d+5Ed>xK{i`5EWj?m%P2wtuc?FX#KnjoA3XKpc1zYZY)k_F%?FtiP1dJRKHkBg}_P(ofYsWH@$e>G-6!=C9db<26 zI!C8w+~)AIq}O|H>eS;4gkI)`AVwT^`ho)PtaIm~Iol5P9D!=iq5yRc6oHc2vN{d} z0>`}3U5F!UFGTj8WZpF=1ALB4_4s{$Vnqa_=^?rbM1kJUOLPSSg=MMw3#Hpd+!G(E1NalY=_1Ramw~{dXTJ5o1Nc zAJ$a0TEpt&&KV!ruw^sDLzNsPlOK9nV{7lyGs+Ho>*7o89VDLksrxBkBE{5(o+oL7 zn{IB;ipgLC<6o3;kZxuFLt(>OetVnU@nL!NtFrjv^G8_sT2U)cp0C#;{3C~Sj5KEf zxbB5!Lg%yYr~OhH)$b$y!|5+}fUX!GmT-Jh;AmTtoqYKFhQQn!3q#=b!hjou8SOd^ z?ctyRR-;=W(Ii5!puE{Jh!L?`p9HG-5~9jnp5avW2+Kt<)?C%l8jk*lWi5+~P@n*Q z5ngzuTWzAfW>3efMfWSC8-X*JK9mdcCzTXkFSI(J7MeHjO2WAs}^{; zvXPYmDRMh&pgTyr%0c-Q(r*6wPfIQ{mao9}KGW0vSa07~tQy7f@wMqwRX9&)SbI+-wv04M0Il9=AGjxY z+!gSlX}7+YyQ-bZ`>LN1(-S88cAJeSl7Stkmfnm4OZ3l%Kn0bbyaoj~xqe!PQ#JVs zvqv#sxk*8;`f2Cckl|0opBk;5xnsTd5u$d#!~ZQcHaLz@d6t2m(>l^?_v1kvFU_u; zNo!Tq%;@lmk>3sNS1^@)Yr1}lP~dj?Jfo#3<~<|74=o8&(>b*WC0$b$H5o$J%RR}+vdcyc^gS??ur=i1Ym=MOv&N;m3=btxt zPtQmvySeO3#Qt|G$lIjQ#F=2$4*rYG9c>rch%nrO$pVkroZ4ceY#&s{M|=1nx*TSp zS`I)>r;W5_U;WA??}s7*;c0Y&f6@g-CVHl%eKT4{!349yu+cpy`nSluiAAU?9e=r= zQ}o)YL)T$V<*M56M^8!Q7~#No++4qYA}NEDjifNkRC`24d(??T@o%4 z-yZ*nxCu74D;hr=faZF|K{*V)XuV@x;e2>WNv^uUaj0O1m5ZuJ44u{O>( zG6sEEd}Z9|Pl8KtB9gft+D&1kzfDpI13Ann2MKPp_ArjdZ%Ol1F$*2OYG5>Es{PMlYyyIfYhl;0(=o=1ukiMkQj?-3(jA~o+?Ld;MNOuc)GPLmz(NdSc zrBumKUR}HKakBTRPPzOXS~v>1@@;ieQ%v>hPE2hMSa9GbgPy`AougIs27QNP*+$si z=Pawp@I6P$;d8b?Ve1mnG+1l)!Bkxe&z2Vbt^TVWvrpf-M1LGYud4pOG%pJGS$iMI zT5D9F@(!2|=L0v27w|cgqduYH4t`W|C`rQFu`Y-m$n&pjwMuh{Gd1}k3zG|2P%n~I zl1-I93~)GbBy${dSaUQsKDzXv{m}A~;S1RfCY{4nnPrH2uyo7er%NXvIhR+j=XFlN zokA6;|M-SJ17xR?KRMZ?8vQC%8Ok{lcd5pI``lpC-i>?c@HA!iC2fy^OH8g6%u+h3 zs(rYAdFQiBhQMLLnMqCQ;ZO4A@1K~L+4mP^>El75D71j&WV=6W9^v-S4t?hpIqOp6 z>iL!ssgSs8hi4~ptk(U6z(+>A_dBqc0wxh>Q?E?#T0K3>#r$yEpUNjcVA=3Rayq(y zbCH1_UXHe)D4+AHSQAY9FzrRRPKyR{T|(%ejiQ;RVWuk?YXSBk1bgyMu(y8Y|$8`5zH#kJCd66WpaWEwWPQvZl zS#^!jT#5dXk~YWOX9I5`yE!f;xMfBrSo-62x-H*Q{p!Q6B`Cj_E=vf^{5w51}d`>=mkaSoF6=UT69fRqm7Fq_iQG@x%+7K9r=r#$K7#SPvX`s4A09o`I8l z+}=x8(s}IkM|zH(wHe>?SAJkp$Tz}_8i%h_wKhIolO2b7m4s%4lt61 zH+_UrxA{pbNsYe>f30auXfex(FY`o!kH>k0`s*%iFa&e7h<}I^;zEj_`PgcZusVDu zOzwGw1n$?t*}t94qsDJFiL~qK~aZk5|lG=&&Z!Q6y7_Mn*w*h6d0kM4Z#V;hBb0Mo?awS$%Rp}OuH#(ZKev4`Wvg#xeLV5bENf;~bsvgCRyal=as(geOcX z@A@NF*@7U4`k(N|H3)@m3uD)eol2ESp@eFBJ?fxT?dM5`gO4DnJ!M#xWyaRNbB6YL14+nFJYT&B5|8F7nU&L zL@IrN&#Z|Y0G-cW>*KYs5ECwV7nX!c7Ey4W4TgPd)o`D0t;IamEBZNp-yuIo9;Y-dHj_TQ9OmYAs_wX7m9gA^sPe_TQ=cIS3 zNY-JQ{bM7fND9*Ar$;qKVOpY9`I)&E1N{_XMUj%Oiuq5tu{*7C4n7A-foD`9%=BE| zhaHSQV`GIc!jx+8jptFO{Dl^bhMOq&mQrSB0kisK{p0>i@!MaNLL;Q z^8q4Cn*(>$a2XUBuN7 zPtO#bZ`hjKV50EXAy1mLb2s(hU5#O3-)~A=fx*DoxwkjuCtDf{8{ppd@iXlemJPw7 zf{`_B4XDp~mRikP$8{fxi*-@q@N!UMC6O-~^rDrApC>dJJMpj`zVp8L;&>=CTSS?} zUj;qWWheL=NxxdhTYX5ajPRGNM=ZQypE;C69B5jVpC2bb_?&kY-Q4*gK+TPxCFYe{ zz^f0UypA6kp1y0l9rbmcW~=jrYIwKQh}pIDLM4Mk}BO^R0qpV(S)3Hq6Q?$ ztNv-K$_aQ{KVUt5))4a;iMl(r;(xt6J3-DM9WsrY;Iy^4ZK1Rk2RAf_(BMN3}hz~9n*jETs?ZuJl?vn~4~M6KVevS4;QSZT3_ z_*hn3#L^@a>XtBBfC?Myjy#6h8`16lAxC36Ij57K?=2uXgAk&*&SLOMN~}!}{74+U zPj(7tr(G9B8D)Nue{MO)4053m(Xd{~oe%VQ+$){Jp3ylCP<`KS4xj2G$M@kMJ7if2(2Tw8uJ)_TnG? z6QYy+s^#CQFCTCAsDdE4$55?c;-v$+bqIx28ZCFv^8oJ+A zX7n9}_Mh!>s$-)CNwnw-|3FSBMLuAHkxd-SXhX^>56TM z;U5dlQs7dfWo&+t4pL9J*w9~KJGP!VLY*P6xI!qa2x{O-- zKGVs47Rg|yangL?6UzxxV5 zl;?OwWF=sSF13ax%aMOuj{vPq=Fgl9JipU}xX4tBHoeGH@`YSdmiyAodRpVNwh#LR zf=%KbwlH;wD0a$Fd)uu#G;;SM`$pt|vQlDs1t+^%N-_$D6^l+cUgKg|gOLr6o^6T> z%D0RsO9ZkTVcz$|Wdd6lPW3UbvJFE_Z+UZ zv8C9d`WB<}r&OkR`DjeXJutd1hUqhKX)4q2_ZMg@j~43#=*CIb^ScGTA#zG#`5}pX z7o(2!1bgBZ;`st9pod>g!qqp-6-ppKa58fqzp^m13)No?*+-JusGH3~Wd0rnmp^j2 zTkbXqS8a1zlR+%qdVhk%cRo##P4D=rR1n50AVla_SI!gA2azli?@&SD_c^z%Uwf7(X%WQGwr%b6X*0w4t7Ybo%hdG+wY`TdqCDn2YfOsNIkGb)_d z`v}&PcNqHg&8^XTQA1PYUDrBmQW(kaS150T$*{ir)YAk`L&%_E5&{{fzGN@^MWoko zNp93yGa_IY+xVwi+=ui;_x%mw6816m*4XjslNgwi zYno(=dCiz$y(^S%AO+r!Kydgi_Q-!RrzBiAB@5xoJgjD=gi%WuE*V)gj_Qi#QfS-P*C zvvHj{vaEh@BHGpAW#M5rS55$~<5%wrsPx^_%5Lf9sU}cWo9GY29t9d*S9wsjkz1hz zvQ)Z54ovNT?%AqcOMET{b|x8#&wxudn@uw#2_)ypf%o~eh&_WnBhOrzR6_ZxK4hP- zwWpr1D7TB0pn`BfP=7y9un4d8a_*hj=V9BJRnag^P@&DCyj<(D#zLSA-`9;Q2gTWY zdV?r`pts(LNBY*3Iq2QGMg9JhslPwyTO>YDl|^wUZ$p3)nT1x;UrEh7Oxmg&(cxrT zu*^Ri*dXs>{f4-87z@E@ujhuoWnE z|4L4`u8g*6&d@V=H~6*_aMreg$W8FqwpCw(5_fHR=92f{@8`}N^O>h^Z z6iUPl9cs0OP=T_oNql(BxCNdFS-zNRWE&ov9bKrb*~HsUmrpEQ`_T2(P|&iHsw=qt zn{0U-YC?q}`)*mc8B!K1=E-q%vZ%uO!zw;Ue))1?EhV5n78vn>N8-zGW zhac&E>#o38a`jFayj@Uu4peE&ZZ1@w%WY?wWkLx|d^cS)75T%BpI;Fp+fDYkT`ecu zW2{lR8tqGB-xd&W%Ic*qa6U8^c_vkPq+7jRY8Gnv2AHfRxo`7aL>J_Nwg~7}DL<7v03Z7`Av!#!RA7qPUa2Ik$rKqlP zS%Y<$%pl=8&t0o?;Ixt{-Ncrx?aw^X`J`0Osq)p(*MohrSn~NTl4TaxI4bsoHE1Kb zUGKuGinjem_PS%X#9hXS+`{gp`Y&N3*1Agj#rjJncV9~=wm4cmql!ju>td=JU)e2P zS2Oj=+P$cLWYcF9t*FXQ$QitKe5)2tzT+6CWa!8Qr%(0fK)%#zRzK1`;8WsKvHv-b zu?d$$BrAnjv0u5ek;mJtntl4ndezx*3lKQnC_`mHOK)edUYN%yjiyiN#8 zs0VGzODz$C2$}7XN9I@bXYK0eTC&B~?6U783Am~xdusVs&sKK+KG*0oze=WAZ$$5- zs^`x|RE_TzuiBJjz9^;VCy4ICA*tQBTa2*1KQ5H#sfcbBtj_1eLI%{7&q%KY~8LmuGN_kldvndH{7`JKdtC+j8a!HIWgUA!9Szd>!@ z3M!N?0G~#TkM|h$g2)#qZDw^a+U(BMF$%eEbSU|z?>s35jxTw-rwn3HtWcI*qMQM@ zZecp!>}<|x%ePXUIuoLekj+?&j;$1UsXID5&~sL6E2}k^O`ELeFxdHgkP{#F6iH@+ zaj@flTR)VzlRZr=ef=Y0zq4aq)S6-6%sH@D&)l5zrtEj^ z`Ad`M#JwNW|MwCuJU3;21(h|Y{kMna|3tn;&Y$^<+@`J{4_cAORKbIO^(65h3q{)$ z@HYP3w+-NPDZwW0120Fu+UCs(p6nJ4@U;xT>I?g?3!sQMhINE1QbQ%g%XmaR2)zSoFP0=`XE6{RiLEJ56*O7H3VK31eI z9vNjZFA@d^cekUo?%Ixd*LCovLY-TiStC3ws0y;~Vth%lwT(Ne)FT?qo=mQJYT+SO?HSLZ2uW3u~L z+v~piqm7fj!9H9bdm;89TRk;RabV|Mg80VELI3=glp%cqDncN8tJlQQiedx)`O|8d zc;Mhc;xw!{?Fc<)Ia|v%RV7tG-xCEAcf>eUuc>(~mGA}VJ_1ZH)0Tf zgf4z|BkX*NIdlET+q{lpvq&k-`JQjUh<&^NTW!f-ve)iV`OAgJJGOki*Fh}eHJg8y zD`+^EjbAdzo%?cD3M$GA-**UytD~WpXjjT?!egJ7WD&xZH4GunF}ja0G@XwKRYy|pFd~u)T5jcN zHpcmh+!+L3J$*i zitTr+&G%sYCdj1M4|DGj#P_S_S4$SwzAaQcCd8_7F^0arg8B1skYH*7-%BzGkj2qLwStNSZ?rQ=CuoAU1Dw zYt?zDa>&Apt@kY2JG8}9&NZ0FfDaCvPX{x`lu*yqkl;6I@s9^Twh+m zk`-2r=O)PeTzt#S*2RjKzc8gNLC7n)wNTO?2RxUZ{FmhjP=-y5Rs6c6U(PhA_mf;M zbpigMA@OsB&wuf=%dnQ5STaMb4@6|}C5>X~+Y8sNca4rJ$Ng(&d}n9G>Q}ydIwL-45cs%VfZM_=-MKooVWXmZno(|g zj^A%Cv=6v2BYCl|FJse-?hgE|Qsw+;C^^tO?PDo0Is#*_V+K4;EhaOr(}#SY*wVT@%N2&A)1fTf*a>*e@>XK)+)EmPpHyQU?n8UXq4*3C(6U>1w$;%8 z6R62eU0+r9=7|>m1MVzozIap0g0saxT(7KFUBo_Q8h<{$!ZcMS8nPIwk>h6Zck2I6 zO{`g{hot1z{Q+H){fXeDuEH0)+IFdQht7=cpGW3LsQ^o-t7N7g&O?1oE-r~LUy3#O z*6nh9(GlJCzYRsW0y|tqzAV6i!||2yz*CwE=Br+vAC=ha6k9$o@I)uBp-56$uwG{( zQZN#wt<;&mn{Q`z-LhCd>2bJ9hom`ue)w&*#3f0W(ZCpH*;r7!f%}>fj|E|{DVI^{ z_C%eD?~M1kG1URrb5NZ_leg4%{kr%OAS1_S^A)uFD3oxcleq8FApAB>GorX4D)*T! zzj1*uzQt0B7BY5XVgcido+ky-C#yk{b+C@FEPE!@aYv(f#PI}&Zx$uhdBJt=X>(^| zNqTUM9g~!E6vpp5f>-GLQ)OR%bc(lBJwLS9`$Twb=<~arQfqWSvA$Z{^|1AcS<6Fk z5Sv}af|dnap5R?kokrWas$p%O?$XVA-Is-HtNGbm)zcmtm%;B@16zCI=#8fCcY_m< zizSz;gJxcu+B9oT)bq6^Uvb$PG0{UA^eYdS>R&Nk^$<2H%cauSqlEcX4m@Kxk-nm( z*M@!1^I70xhf%?cnnruKU*(bn{#*XfJr|-7+k^kUj-fPNJ_i=)l-{2kVU!nPE|pZD z5hXi9wI!0|UABXyPpXQO3hZIW>M`+Y5S_!Iv$8>>%)NE>TuO^MKTEVeaVLZ5?@VD|_ znV*!o3^s*50$(V0KrtIp$*A*knpIPDIWKr_D8qVs*hO{o74=w-7679qIv~trQ-dVG z_2pUspE1b>;g(oX1@UF!c)`7;@N+m!hGc%|L+U&nZ0@PvIj_ncBRPw5B$Mca5lrF6yyiHmegf#VBxM?U6|^ zqFPn3k75HoZoWl!RLrKD*ykorlP4Hr})P`fQQxiD5d~w1x^a|(Bae-LJ zkxYL|V4xuSF8^6aOI}dVk;3hyF`6KlIc;%@SCKZYC#6e*!pLe=EOd2PxeA1*>s0;Y zri}dz?CrQ^A<83@#ja5x(hQggb7YVaO2wjFbpdr_y^c~hh2HvWSJ+t*9PR`X@BZ=b?) zEm{A3p!8?{u_%N$D8_0TbTpC?uvK?)_LgIPUKDpHT6Do2sN1av{?F0*Gnv)lPvf!b zrOtyE!UHzs6Ylk1a{8rFJ&Xdsl!nc~nho2>#`6VjH1Y;)ln2wko(($kKHI45hbf6o zfC0$zN@>uh%Izw z(mC_v{ZGJ?d1hK&Fmv(ZbiDc0`}#WHxJ)&oNZE@xq}b8CnwLHeREpm$rIVoUxbNp0 zi084rM=7oD9l4`Etfap&B*c~y&h`t;IrqYzm1jV==4ayf;3ZXdD`8dI*C{A@LzLkBw{aOD102+aF+btG)l1Az-vmf zt^re1q+To#!k#@Xj4E0f9g1IgzcTrvnWXPaa%P?%!Ehv59)>A_btfp zii8Wj@hjvEns9&t>&0P$QCEA@F2SQf;-pPBS$co`M7%DcrWCv`{c?son)o>zmkJ!| z6m)~wYwFWgn_-oONegmjY;*O|MX&eXL@3T>Gl5OMP7IB0p8ya0%`)kDoK+;fgm|TR z4MhaWu^631o{px0tFzZzA@GA`@%oiJz5`EbPc$~I zX{Yzaip?m;*ghD|IQJ7{JF4Bkeh&(Sq{sYHwTPRfrT(gW_`SklZjg=hG?_RU)lf4B zx(6yx|A~1l zQ-4t*U`K47c%AONDM>JaAmc})ptC=6 zgthK%;`B8cx|S;_LqqFd796e#B0n88V$-AGP36@LahwuPS{@a(b~=OUJWyiHaJAN; zF^8(RcPo^m)CG3%p!#JxfjT6{N{}yE$5PPLwiOaW`$XjDNM=t3v7@ovi_aIZThB1e1 z`s1#8vqqx3mYJ=wb$)o+F$ioS;s`!KyI!bW<{9I||0%*JuExGKHhF(Oh5|fs68U;G z$GzD5xs=cw4bsk{Rr5D&oTOhZEXkh{=pDU1&2B2NCP1 zk$%s34?aciAsl2%91wh$r4!71dV!hd9*f5#?qjic+3`S>brYfINs%xn$skm>WJ3Mj zUr$DgEdKJY+=xou2g|x0qgj;>CVp27j8N4ArQXa;&94?7f|L_!SX}%%nAoyDyvs~2 zb19Hk@k_h$M>~dY{O|0Li<3Xh&0`CCcO9t&%vI@rmmM$&!i#-UXIG#hom6kVhIlh#%RmkMTPP24WWCGb$A zY@n)}U4}LC`TN~H%xc-GVt-EF7{o;0^4)5@d0f)416TiPYEBp+Dg_hR``!nE`O^W6zZHLe+so-&h+(3>7;x<`u>bn z^6|-Uof1rhGIu&W$uKV2=T!LZ0rR?;Pjy{;teU?Idel&wwgaa2`6uxEdJ9y+i#D$? z`n}{}eu>*(s|*54n)~els!FT z;&z+FMy<~!U{y5UY^5OWv`Y6AYhSrVk~#+ZlB6c}wu6plmbV|jO+r#r?pV^&*|NOF z}2WGEGKaSvNUK{QDn9gFG1pgy06f(|i)YSh`GIAm+`d~HM z@MLmXKFB+ZGo~=p$eB$;$;msoV+`G;qh0OY#4BNY)rbz!D^~DSI`MUJY)MR75ss}i zrRnrTK2b(Hk-b~({A>eNU4pjkq*i)TdvAV7L&BR})*+%F%D(YL3|M=}OZ(oqtSZYk z&Q zEpc0&LPt|oIHXm}kft`6>AB278DCV1?#hGN23-UHV=1r4DY3I*w?%V)gi(s}ni;9y z0QYjg{Mle!uQfI)05(vf73aESAdQ zOe$tN#Dv?^I&TFTDH%XxU&Q>0>_##8@lzxnY23^=vwbSY{RM@sz+AHQQx+zHrlX(R zb*fAX9gZCmZDn`?yWZQ8HJ17LR4|oE?8E3-W7!gYyJDdwN2~l%a|g*{jp{|2k8C@% z)DRvqfy8&WWyjX8egSMN&h_PXJQn^9Tl%)i+{Or4A1rVj{STqi%jD3&e4&1B^V)MMVpHf1yGO+Nba&6T$IXQglW`2f8)LAQY@Er3i z@)lmRhD6mvn|2c~ihubnQ}+27WgzVhg2wy|h%dMz>vH}WB>_IN$_nPKU%I&stGoAn zS9FxDt*`IlknGmLL;n{F-qIP!3LKg17M-PdL=2|Zq*)gWg2I*_ca3$8R-j}VzE%{~ zw-sb%kilHU>*Jy9>QC(zk+peyW;=qJTz0}`$BFbY6;$39zjPhA97IV&Mk79AHXE=~T_gu~bZ6G`x?iOV^c(5|D%n{}m9QAb z+a|p7fxBO`z0~-;6B-CfrljFdhDKI2HQP;R^~E)RaLwBk{_wU*D&7Z@<}m>yvWqQ& zFZcoyh=-H5pvdIG`8h8;mbKFLEB!B4J#I%hr}HM%F!ujAG4XfY6co$q+ z-plL1<=e_lGKtFDU?=%y2$^$-rwqh!WMTxwU8`#Urt5dOtO+@j^IiO`RzIwxGNU46 z4}2WG1v9QlDq{vW}GHW&`)U)u%o% zbT>JisERPXaDNrG&5-quCjHb7bjMAHDQn1PW`lo$hc5eJzTQ_M({GgzGTj0s3k%P} zCrT@< zPP;vb($^CRn|9PsYW}d~h6o2yqw7 z%ZX0#QWM}LJ`U6W^maBXmPkmp`1A9i*wvfdGI-8{vP>TnD#8@(j-2LqjCemgt83zx zOBTF8CNG)Bf|vVU{E-=-TP2mbv##V4B};k`@p~wxO-lIsBdkM`uiT%45vB)mkXlN0 zQN1@vilm>xZ|J4C#?M3(2g0|K5&o*)2A$_QwBm&>Le}e8;z_ z15EiB0;aI2%J~SMKA3Pq!+W=+P^HUS1%FJW>z&tH`fGW_w~-QCDlInPV+?`3bYG$& z?u9{FLM?rl848}t{Yj=StHI~%7Ag+5;!sCq1Z?`1*Wy}V>s~{fY^N`)QAwD*Uq|j! zU@y&5TKI666k3?e)y=5W^k!LUcD28D{+!d#ntlA~+LB_Q{|-@=XKJ!c{MLAxKu>ek zFeKF8EW1uCWs$`1Eh&lo*8^WRF%P|)EV!?eYI}Y32@eTf8pv)gWwtNFbRw$7Ys<4o z;G8lj$@4pfppp6qb{6Msr9P-qKaUD@;Ija6^K+Rd+>{%#bQiw-FEByu>3G%w`0V*p zO7X(^*e~48CH)-bUPp7hg1aS!%dWJ~uU7Yok2$fn zSKL@+1mntc%}jR-#L%UU>^k%UF|?p)i4N=%7YpwO^*D{KsCiG)Un2K)MnTbt>V%XQ zc;?d6yDk--!}&$q*YNm=H)AZcR8@|F`w(g=r;h~X@c`VJ3&hk+)S;+7H)b4D%mYNx zvVZ;F+6L@S^DNdzodbUiT}zs=`2ubQGYeHaNiz%O8%bBAXDdueb$*2MDxuc~=k>~> z#qo-qoQZRP={tsvqLj~>o_BRrRQ^SRSgEv7NY)d|e562TK0>tAM$ zACOd+(k&JEdP*2eYpU(o$nflw^4-c|SQqq}_Wvs7w6E5zNgfh&sZ@)fC~$JleQ8zs zG#z3>t%>-D+l{6S|4t*!O`0e(4#R_ij?xA)CVfHoG{?y?(qvrM&B~UJmTRuWByv;- z4vhD~wdE(kT74iPIpv3soq5 zT*<y52W`^ z?8}gfHDgPLvx6~N2$2pG(rxYKRqD+R1VP#J9dqYk%?2kA;fG>chmH1a9eI$4X)sI3 z>u=)3vKux{2H%iWr0?%j>`nSp?q==9EfevDf>3k++>k4RS<9tzkFA%l*5Qc=xj%kz z!Tt!KYjp0O+<|32L%blyG?cho1|U57yIR=!hr)aKQi^1o0FY<_^eg7Nvz7 zMUdw7?lkI9C@DD$Zrlq66>H01YfX>tSK3w%F`WAr#^k{uR`qJ~kKN~Y;ADNvETnM} z$9idVQ%EYutW6G`;kim1!oIY2A?gL~O{?p{93y?;Bx->`mHn2xBkX;{%~hjpmO&cl z$n_B)ub~=2m=10vhapau*hyGtzPitl7yix6`385Nuh5@`yd=q_aA-!jZXfG)`O!!z zQHwY^=bI=YU!<#k@Zt|NMSP!UBV!0h(*Wz*yK33#9aqId_EF2pbZlt0hlz6Sm1Uq8 zxU^yJ9Ru$lg`Hf9px;)487x`fD}aa4v6{ewd$yV8gjHK8h55Y~v3A6Fg33uZZEw4s z{MBc&631peEI0C$AB|`#bIkP4I8TwliZ;WP@%y7Dil~L$(+Apnh5?X_5-bz=crMi! zZj>?7!CniGe>}EXJ>`<5k?+$%i0nYpRJ&!>ikp~$*)2dsnUY;oA3J=?f>^HuGjWd2 zxx?}Lp;R6qH;F@5N9D&sgH*L3QteW)EOGAOnCAfyQvyN?<+j+5d7z>&AguFYu>1y3 zAIf!w)+t@RE>R8t09#?&)DadIgvr|%YX)NPlJsA;*mu}H_6p5gL^iQ!We6EXBVtQ2 z3Lg)5pv&q#Ij+4%v#;_2q;+buaj$RdF6iXL*+3+C(fqI?xo#Pl^1viL4KaexY!J}P zXzr_j@A$ZIIPSop+>fdoz$SG8`eIz6V>)2_CnEV?YrbYBg33tEDw0+X?u88hXZCdo`jq5X=N7IR_#f})!WIa^foYT-FCAJRvl1f zOr)j0l6d%;UK1Z>oa9_c;X(osMvL_(z=3)iKnp%@Wj^Hyo-d-1g$3IG<$7ZaX$_nr zvnYVCpUn*1{e2Nk!yBUv+KMR}QU=X9WtomZZs8vC)*BtyOZr$mfdcqLZgcVAj$npnVx?#%InyW=%Fffgsv zJjH#*oBHcnx2&MwlEWxx{Hl$)#Q4#UpmNE6S;IG@i1SbReb7$*KsMI{2(#pTBSB6) zpgN)kY80%o@IkB8xq&k_sRXs{#NIJYja93&&}+5p-6cdBLA3ASHo%56 zSUD@`(ND>~AeNTCEorn#9T|5VxhBp6(+&*_9oAOrwGzB~#0Y?n>@JBA!&R7G?bD9O z3==|O=RhlJhN)+-j8eSuH8p+8^QQd27f(5?%i-6>`D3j4C#I?2ec}j=7OnWuuwK$I z4V+{=mvmAYv`Oyv8utG7fBpF$%d>6FA_DDrYR({DJ9l07zIH2F446Rg1qrQVx>^(q zfwtyl=8w4Il6Sn8BRNF)f{*820Ib@ZtOb|>j8$)ZNyJX244Ibqe28i#c+ssU5kJj) zS(f{SIze6Yf8A@u$omXS233Wt_*RU7h0fibMXFp1viq0|eFh@D7u0p$d!ij%qzu%#bNKLnC?iids=D4RClx`eZS99TAsGA|43$jvps(sXM`?W zFgcu_F0L(u+kSK(GlDaQ7+L~r+JO!S&UZFw=B66&JV@@PrppE=Kg{p_N+>P=3V-0v z)0&f|^adc%VMbbx5%ov1B+htRs=-DdylHwYdk8-M%{BIWh)%iOZq;?(bAz1&AKKk! z$2-SiWJ%c^3^2;#7r}ouzGphBY|)%F>TPBlA?!9sA5U75U?(m{a_#vyw`+%y)|Xb8iYauV#P#{Ifz z0$fP2Ml5Q*-~079CKy%&kmKZ`sLC1H_}4#n#w@Hps|}>Jy~?Dpc;iw-OwLlOd8BJD zrUlr;*T_LPwg2H5Kj@P0lZm@Yp3adJ8aZRO7L~^v0L`K0y6eghKAQHNxg_;p9!o=v zj@&4siAXwm%QDZ{GhHBu;i&dGhuO&XVp#JUNMzh|ngSLcjma;m>{IMs?>{M-E28)l z{g#?yhrBQX`*XFYyrbllplD=4`M;n-5P<8aulUf}wr__oc$LeBHE1 z_lYz!k5gG|PamJphlpxkllx{FJWz_}50^(Fmo;QAk2A02F zx6B`+a($_;(&YrjN6VLzpx=qsx!zpqhmr#;u*k2(Q{Pm!S_cBUJ_0XbigffBZ1{M_ zax=xE=ylY`*nFJPtO2Rk{cE1@$idL*V$t0-Ifq`=m}G!8#gquY9-X+sU}Zm~{7GpU z&6HG%6H`86o%)g8jxZX{Jrv-M*g|xdz7$!P?7~UDPAmbocw04@IRTAEPl{$FnXT}S zBSiZ^4_$A_jCvY{#)>#TeTdm)MwD#$&&+$}Gb8OgOvAg8&6f+dyFJ^aO@pL`c^t zInW8${q+XVn;dskakWSGNsn#C7S{mbEw%0R`{~hhsxGtB|E*3Yp@oW^10gMG|AK;C z_NUzTvZ23jcDJ`hG^u8&fmH{xQIy9M6`avmAQwv8xyWK*Dfet z0#{?))eD-LmtTGF8owe~h%k|(m-ZsU& zMHQw@p?cPK@0+q4|2js4JzHAumBFs2bjCdj*3F+$8YkTbjrnV)(9-gAAx-{KRmQqe zygT4yATe`BL2&`}KPz@-Qg&B#hFmjJp8o z27z~do`Q-ANwFfD>fFT|Jsd>m+Wn&u^cum@8k;R1S;1DCagjcm&{@{TQ`t?_VII)3 z(B!%L9h~$6?dT#TB}NvNV7PGY{vG}R0kO98PJr|fxQ#ncc@&8vrJ`(j_Ewoi;IE3)C2fJR-lpNMA)o> zR!k15u4(Zf=d%xqCQoIHLR)7mh0#@Z`kc zJ~B!#01Wwe_xZgaNmZU9>(`a_bnf2<2c)ENS!}Y zuw`!b30c$?qP%*#Ub^i&^cElbVmR}@1F|dh6eX#k3^9s@gd^A&^vm|`haNHorgwY~ zNtBS}6s#6bvVN2;9E`!7?gWuxB3JIKDoigxz);PM$$jRRleKHgoxl_9M}M>SZD*+D z7{N_Xyy)z>C4!pv*lv2D#vw~i1OM}y#c>p!ib+p*YtYCYI;r0fU>o=yr9SYFO) zd!5$QtmqSpiMelpwi+oEu794WG7k0EJLMLMaOKG+)hX|X<-ul+_??}Rk+7T+&Z`qQ z)Gq4{PkvGIoOxda#dTKQ=HI-q{N|W*Pwg9QE9V%=v=}NRm#o&vf5L+wCW34A>F7jWx%E(ebtdGa1xlv`z@{z}36P zdu^j;Hh61)Sm#LTA5Z>^QBeQivj7GmnPk59(=)5NB#&))24RKKxT*jur=?_ zX?8G}?@)#G_q`M;ekA?xXkn}@p~{a{`flFyeEW<6iRaK2eL8+&7umoqs;?KpS3 z$xi@?|X+;k=jlYBh+!SI$$&c$C%-i4|~OfhV6gpu#vxI%saq)?qf zWI@fiP0^^I+f8fbkBm6cDDB<3CnIeXrSKKctc!VNxR;G!wu6-uI>+LOFI1qL=P`8Nn)KD_zgN;V{9eG{Sp=s+bM+Oa)0{hE zv3|WosWR+Qy6h?JN~M(T5}0SIDY<6X^zzpzm?!yZvV!B!hD9-0F4fmpp^IUZE?z|v zF*eN6Px#UKr%0Wm*@({F*wyDw44~oBD3M@XXdIrPX^*t7LpO{&nv&N~nd7(*Y!@85@W2E^h0lWTJ=^NaR4+d`kq_~aK zM8#3Gs`FS(GwyLm1WvwG9`{Xs6FFER@|ych2+d{vXW;P_Eof9h2g#)s>){tyN2 z8o9T8epeU`>9mkB?=+Lq-fXeEzKK#H#zPRJf)m_2XkW}%?$Wu}Iy8CyGY)Ayq+>2j z+FPTExw&D3y$4=QVlP~ZJ&3B^zT5{1HV0(YRRxVb090`2I8 z`LROh|GJxWZwx!sW8)GFPo-kviJvU;emn6g+NWEh3OcXvL3a|NY?0{5QSW*3u~eD! z*G()<5`I`FN!`15>b}Ks?&_C-YPVQxg}c}rW2=)Dnt}@bIYol1gHj1L#?@$57W|$tA{CCL)a;byf)vqjIp+>;Aq#1|Ju}p;)X>;la zuvLqLP9x+A%$@aFHIHs-b143rjfm#8+F}>n0bIrY=x}A{W%wy4Xj-x4u-bi9Czz1O z$cY}dO*2_^AQX68_OU17?M5YNvKOWz^iPVLFs_pTB2`0#WEol1!SQ8~Q7}dYYl`7& zXYR!|rqV7=GNb=u2%wL+0RAEF;fuKV)A57fuJbr-F*2LY)6S>(GlUsa5WLXM*kO`5 zBmwAfSBj{{u=$k~Y=7fp%xxgX7I)6LHkDnjc>EiAYY3vqq|`9!x)8kW{Qk@^55j8S`qbR zGD5jN!Q|^?ZMMFD>HwnqK!Sl@?)^Ko@moj}@A{q2GDGiaUNy8nK2que{eyos*KN%G zlXOJovFB!tRG*KmV`9+t{${>chG7B2N|e-P)~J5D1|p`T=%@1zm#d6&vXzL+mw_U?4-)8 zAgXj;WO!acV+5R(h$>T@=vhIPJz$SM(2oJ;<9E7&FPp{kPo=YRv+;JT(C|(A_S&w_ z+A3X^&Haz)H3WWN%=T)P@Z$qxrvZekSVC5t?clTYwO)@bs+~{Cj9pXtV6!bP{G)^P zcMw}qp_PaFlz`9>5CsFG%$=F|V&5b)cqhqAIb4-U{-!NW(ZS8bdLbGXe3>=2Ov?#y z2I--jqWS3*uCd7df}D89Y~Fg${OZbD7@dqw$lHg@Uw(9ll!U%dt>^X5aR1AW;cww@ zGOV74HSsu934p2o<_y|dX8oi%2e-eCYBsk9qpKCV!IR$p7zXig$J%)r6B^s3{s}tu_PtQaz1(r9_%gJ5T7Wh_CO{ zTF`A+V%ar_4WB^zW07rcJyBd9@Aq;-$b!(9Q_eI+G^5T5ZL(4Hmc}L)fQoke&ei>7 z?~3S`KK;5$8gI1FhGv0+i4ta*e{ailiaW>}Pja9Y*ap1sca~a4LdnL8Pd0i!O;;;! zMa7WM!NS5Plc~KH3AwLNWYUZI>q`=-!+x7HRAdVzd?_hmt*`iT%-(aC?FplrnNr8F zO{dMxN-NRl*{3GQtk==sAdNV&V2oY1vetP^Zqp*eCiho>$(UP}>yjOjH^>~wHStc3 zsW6YB5km|~b~SQ|^u+osg5t^r3{g!{y8L90Qs`XVFCk27%I;35yh$&n>!}oSuuUYQ z2{43VzJnIphzb5~VUf;J%u+}cgV-Dzfc?-hC_ZFK8Gq19mAtpvE6swBdmRO!PNd0c zI440j1~)1Q_%9B-Qz;Ftsc?A=3NkVTor6>Z7_`m@BVDDa?P#uw+8a1XIIvvNuv6SO zR+1h5Z1&r_+Th#vrcL(j*FNT}r{Y*A<3ely!@4^i3v8w)G_|m<`fS6}cWD{)ZZi=J z6~Q`v9wIOQLl#S^>KVtJJvmZ+f+YvS3&iDdti`de9Jtn2n#}JQAhto{E-{9$9TFSv zw?mjy4av-xMSG7zT}DwpvAHR%4b}p=@w~;Pv#zIjW0@@xpO~7$EaA;AuINHp!U>RU ztkSFuxCBFfatrW|OA%JpW*b=q$yDRu!8yHcUx&G&{Fs4wG509I zy}tmM?>x`CfCsc_cS#ejAA>4AY*@IRzog|--C@VmzV0^_Ob@h`)E{@1PUK|(K?17Y z?}G@PoYpOQX<@PRS>!=uZ%t-|YpFzH&Zee33(m#;Z)}cBCJ2<|Yj{ zy>I9(4ZN%`wiP!$Y<+vspBG5<)KF1YPPQ6N)=O3)ws-&gkToaRr2qFTGlMuJ6|?fr z+cUuHKo-f&);X5cVb4$cLwv}(bRfe2V(GpppdEI(I9c{3GcKk;0LFg?%CmayRbPWm zL|0CS5L=n>w{=8GK6|k2gof6Oh6I2^4lp?zL>9#5)fb>~h)KKM;r9lw9132^D?AGj zw&0L=ph#XT+c4|sA(T}Wm?_9GqaB<30QesOHxDum0!jXdMI*-Ck1!%S*qd4kHI=Z($^Y%L4%M%C@1Yvy4hf zeHC*vSa5Vwjdyg`w@C3^b>KUx?25Jb{qJ%zf~lD!*Y| z)L@|gPRkthBHguV@*HqPx^;p=8p(7nNf}#)xa<%F50c$>E;-@s9%Ms>ieC%mm4$^b zw=;xlFE7q!EG~9ALgwCrv2QH^S^G3V%dX4LcA-~*v!tsyS(YbY0olzZnR(^aFS z;zl-v`!i*?s=;M|GxQ~cC(~q47V}lIb+x%Np6?`9?$3mC_2lbd!QjE?9Nx!s6}NbA zC<77vDGHn|eJW(iA-;i#<(UC2MJw8m4-CkjR>che6xXJcX?l^OIoWA9)tXNJfLg%M z3tw`g^e)({4w@csDP#`zfTFpRWlGz8rDWq$AoZRH5B@Cl7T;G8Q;9PrTGj-j0Dg=s7KI6DS!tfV0?#)LB#e(+nBsRyAGu)+Zx$4yHRW|@69l#nY=tX2?c z&rM2FW~k_C;y0mej~|B+peQzPjYq~M;b6ch&34P<6_7R&tAqp}Xulf+JGLp_!pb|e z9-CpW+A@J;3`TEtSPGsmL`(RP0qSN!3gTO1vi*W=BsuDWHVtj>w_|~m_R4G`)O?lf zrt#hVEf@gJuxWYPL1wTH{{*;(3_R6dnJ2ucDjzkms)9|iVxrl9) zEQ3yi$G}y-ky3nFB4F;T;*|^`*S*0Q{O8$J1rr8u^XT1 zHO1mz%wkWCnfcrY&09m};<(|lgszX^nlm#94O19G5OB>1Q#zypOR?-jz~T3)S@ z2bP+|aWZeFo>H0oKSEPbs4^Z2Jg$olc5ke@<}huvrnOO`@MzN;PZ>W zvdBDvOLowqJ6S_V_M*J@A>GVY^f)fIIRt3b(QG04!wEPaxR%#G)h5ZkVXGcB1<23O z32Hl|MvFrx9oSI)>wvgt39F1MLvRi^rfBqB70b!2E9m98$tuM9vOiL*oU9@?nK9$2C7y%@*|yL3WZtj_5+I7b7vT4mH{IOu zt)nP1a<+b8%fr8vKIIU2tQUr}M=kVWpza3>vUG~+4jmqPv*304kJBdU3EuVMYCDA8 zf~(Og$t=n{t+YB+r)0VE1zzQ%{fNWd&#DF=r&P}zw4!?9am&&=d9~%wJy1urM;jNF zvi%BhZ0+HyaSkF!WChFYkL!%{R~R!A^f!64^TxU$n>{toVhQ?nBYj48C`n#@AVUz* z-NeRlXyn9@jSxykxHdZU$L2Pf9YClR;N8}5t2_QL3*a5xtje$_g^zeTHY^}$$6wJT zTW8!9|L4^7mo<3<{HKIMR^Yh9r|gS5_S%o&Dx0oSiuFhfLcH?sKOrF$Mp*!XbE@&) z&6R?mCMra}mi2+5E$&w$@?EeL=|AN1s}vK}jY}YCJ1c;!egxb$?3XJ;DLVgw506k3 z%?*&*->-Y(54mlM)YK%B)JvZnYW$ba1|%e~vZd@>unCx5K1gzhTpwZ12HvDTK966w zFYHwS%UN{@uvlj8Wu#_?{1p5a6%Tjz6`qUdNhFscH9!oFF?>D~R$D+#Qc^oZpWDE@ ze0ECeO=q~Sr@aQvYe$+Fb$p{nga#$kaexQqlmeusPvZ7Nymf=}unPaWs&_=c(v z{u48HKSoQ_Zu~?z1XEs`p%v&E#OZ5Lyp;Tx{+_M{T7+4WQ(qJ-X1apf+i)!UBo~oW ztThGUB@8NyIs^K|-v@vz%?=bl(Qy|{WKiD6r(UX@4#txh+oLo#E3eKGVlgZD_9Lb_ zQPxgT^PN{JWwd-=pU!}yo7GwUohWEy8>n$^Ft5Bj2`OJ(o`W-{UV%HeH(5udMdoUt z9fR4Mm>Y7RZpNgebQL^;xGL3ouo%(_N#!*OgscgVFCl;38Nsr$2sArgG}n_ z5S8veWl8>SLk>Wdjqs2 z=KKYx($1Tcl;H8UYjbVUzjw6Xk$vs6*8%|(%NrhZ#jE^{Arwcq=VIIC*WZHwsNKLr zcml}+?&CAgIQfNZmrY^hcw`rVP29aupuLi_rJgx{s_DS={KyMXIAhc=E~S6t^5I%9 zyT4~}9ouFK%tt4G|D1x9xFrQa{gW8dqoa_1ymZ>}==x}q9*^ZKYRnx_cV1ltn0Gi0 z@RX0|Z3@Tj+VLk0jR z1G#i3MG25BPLu7H*;n54d{MY5*RQ;H97fS-xj~kIPI>k}o&h9L&yA{b|CqY|93}S; z`OaP(*35j(+P~-9MkjdOnPJVFEOnFPzW>ArqI$ZK+=}6O70P+YBg}j$^rF_I{80hl zsU*R{APzRGc1QN?|6L{h^AFI1Ojr_dot&Xf-0*)6-m@=#@c9Q<^;#%siPA|l-kj;G zLCXCnn^DluA3jP`0GgR^vsRtx^Wy_xl+2@`y(RC~g1+3r@I;d3F%7xN=D1-) zOvDzT2OB558ZUa<0kUF|`QIcXYr5^|3Bx`LKv?AG&PN)YPGNA)*uJG{%R0jT*E5k$ zJueo9EY?8I(p6IJg6yb<%8GX3*CjQJs=6j2KOm|u-_9T=_dW-LTTC0XKLb7I7I~h2 znm3mi^5NV=@`kZ+km$c|an|8Ehto#;a0NZms2VXTbJ~!hS=>+bLe{5OC{k^&a2HN~ zFFKvNa`A@B|Nr-b8m`N*#Q-#c{h4#+3?}QWK%l7P4_3-cw15+jmLIfFw5|Y(&f>QK zX=`nWF=y849&Ws8%o)%sG0EM=kB3Z10_VACJz&C_A*+v$Dzndf_&j^0F0NB$!MwVJ z@{fJ#{mO`uxM09wdMZzj$e02|KIcEL0QQOO`2z`QlA!+(p$%q-Cw5 z#JkMpDj&iqQJ?U_J|Op2d%`3k>gi@(`HGsD(8U@8kQut5!Yw$I*+Y05mJ+%V3dT)6 zk7KB3Q?&fOrlWE>570YNT;3oPF|)MD@Kw`N2TM`AR-SNo{~LdV-gdv!Rwn*k188}f3Y-2R`oNvGGJqWrnpg1lyHLjt^?fTtUK`Os0q6y zTR<(m*xTPcJfS}KJEG(di0Te+A`v9cs6PpBx^*7k(}4iExJ#0`nf8D0!0hP5|BtIT z4~O#YkzKjxLEDdI?4Z_&>ea5~U z`_3>t*L?5$xsT`fJN)OEKdw3Fyw3Bpyx*_S`W;tR&dQ_Pb}!Rkr{Y?Gt`vWumZD0Q zm4IMn(v4_?f*X_IC?e1!zd}s?V0g;2UpgrsbnYV}zwy;S0ZWFV!=j|`*}^8yx;3H8 zgd$lq6C`b*%irNH@6dH+1Y6jni0Hx5C8UY9LX_LIvfP%a5IPj9%-y8*(&BAClBT(# z#xujeZaWK|Dd?ii*cC3_#cw|h!zpp3CS^TRT|;d_@tYA{zzH#I(G}AE-u-sar=#Ec z(PiIRK&PAGu2CkMdTt=5grS=~&4iqc1>%o^$lrt&wIB0U5Jv<5D#TM#FmP5^I1 zWxG&y$F%C~w@daMn@`2keCyuRQD&ErN*N;>w4-ueeR2K{dKPPM{aXr&g8>?)F~HCu zY#Yw@8fL09dBB4F6qaTfwJ*bsiA0fhQ8>Zs>~x>)lI+LmY>=J6Cwu z%yMDR#y0|nfl%_Mc>@FZ84nO>(55dR&>`nayO+6pv zHi)UX1ULaz{X}}ae;A3J>~bMDDd@kBiOWk~v~uIa=I;vwXP8L9c;}GX4qBh!jb&&92s2!37sK0f*g3 z4Izv^*tXzxX3;sL*u%Vrge~1*o!6P2m_pZM*~?_J#-%yS+i14BYwgibDy~NG#Jn)^ ziOJFjjJV=N1y2XS#?5G}EBI!O;PiT(Q^?t@WqRo{vb}>?{;7!_RXF>yH#12Vs}qAP z;t`zXeH0XMk{__!t9HC{VhDz+8~~G;MlDvlZEs;BlsQOKbx+P$ZeADFI6+Tz%b(EA zru7W_;(KTEo>o{;olf0DSQRKpZ{7H=%=CC*XZ8G*Gl>-iFLJk#`JqXn65|TCo4PM1x zrDHa2iYY-THX zj2N#AzA*8Vp=fjJe7>Q($0^9RrMst06V5I0ejsVGpJ%>l&m#gK_BwZ)>u9*| zJ{`?jzRL1{+FUmJRA(;2*h8z@ooMGh$}lv0(EVA^b=L_qASgXyl$wxW;1C{vqG&%; zPsMm{bKiRVr~7Ttn6-#~7w19E;^XcW>BY3Sc8urSx>R1?q|X89a+Y5oey)yA|2d|M zwgWLtA)c&;Sm6{NJ|hnl!A?t`aLhVa_vlLNz00>-3&%#~vaN|*;PbcXE0@LF68uKR zBzGA07V)j&m<|6tP3wHkW8kgLPlPpvJ?amMjqzG zDxfKwXF&_%|JM2eH>q2C7SPny0B!b)K?76G@I~VA{N4xFnmV_gO@~*TL(_|Q0)1!| zd@hXwz%$dpKZ@orF+d5RyTGu{`43uKsIjrW;j6mPayR1?*Ck3sFmC2OuF?YL6vr{j z=JR>`n)o2Y*pV+~-Q&a@ujp>8*Yn%y60i0r>oV=>)eKR=v{tk9<(rZC8#TDXnaJqD zBVxsVJikiTOzQqMV1K~XJWXH#igIz`7gSISA5S1M%MlIsM7)41!ztvSTi90F{Lv&=r@X&8LAm-(ifs*7PwkW*j(V(Px~>3NBMyNQI1ZAKRnd zbAsKjF`_(orv7%eON-RiQ*{M=%li-c57=7o*)Xu?^tBTp@x~NW-vd0-50FZ$hOt=P zM)Z--<*QyP(Az;AUPt%4^J%CCY5w>~ECWLWXPBrq&4U05r|hvM)z;Oszx2YpyFPHy z3Gp7AbF34VH2`AZu>97fd&8Aczm!Hn089CwzpUaqYrV5KgD-%F7ruB0$-WUuC$r5A z50`$xETik3Lt62FDqtO2CGb9?K^~=#(i0I~f1SDzPwc-?v{B{dVPXff`{#7Vus7!XmMnP7ASaaSWcUXU%9b38Sh?=`aX*RIsy8goHcLCA zJGr>uF4}ZIZKO^t{5RU?hCM*KHB1oummHNXGc~gh#KkHrk^W2E)c3hlTd9Fja#N%zH6`lv|-xIzIMiuEb zN18}!zQ01;7M{&M2YDC-7(v6`MS|KtN@x2YL^Rc(7rOHIBZn8%D~Q=w7n@u2>=Gwn zYWbX7NBuNXcor4PpbheqItn9b0`Q=dR(2n$0To2)UrHy!0bB6XKXjXcfOB}J_?Rz7=Jm1- z_;8BWhMVEDb%fxfa7fWm6=@)P5w}7gE8EChsO=(OHV@#Vd3O@_dBMBA^Eoi!o~r)u zlQskZtkwbZM^1_ZeS0-d!vQbTs;YjvUkyn+&S0Z~xE8^j+owT<`k+Y8`Iq@nK2*2K zyi+a+FBV;VZp`T0ya?7dsD%XkP0D&*L6M0IVn+VfK0a(@)_zw@8Z0ge>}`H>!9!;C zcf-khCimoS3OHorE}N~;J%fMy0#y7WAJ_QNA0Zm15zE#Y(BmoBHkpW!;G7xzRFFZY z80Bnd0PwnRh6D0nlKcV3$XkjNsg{m9mbJ4om<{Eg`Kk2A!NmLG4Fsh|F4OI+CCN1N zl$i;vw{yRO^2@%_r<$A=o7blzVACFy<0?;NOz@Td9x? z0y#}tDL1qBUr9j$%#*`Pj*v9b%2IwnH(ONFZdv2gIBgabt=*Mm5EGrBEi|$EsUja) zW+ckjfsWh;Yj@4)DgUA>^ z<;p>9P;7w$LhhC%3gwZB7SI_^h*QBhcc_k-k^C;Q<3Pd7JQj}|jdd*QV_r~p5n>{T zjhVEM_Q_v*q@*=Xcl2xjTR=;_Z{Zcl8zdW&>53-bU@BSD~zy- zy8xyUYbWjH=9xaG8qYYKU2PX1r=cS8lBhD^OR-ae_edCfWJcIJ8B!NTWGAc$(^%mH=e1y$R5@0)9p{6$ONz%h-*?j^GEQ{lE`0EEIx z@&(R|a|&M~#tN7xU_pt9>Fq2X?T%cb4V{&TTXt#}cwywM({I_?goYb6RvxfC=akyv zf=@$^*GYi(|3oc#u1xV#E2Hu3&moVm@0g5NTt=QV9vu(ACdlt}%mN6d*E}^r8r_F; z?jA?QC>%Ru8o>9=tzP;8FTtP=Z=O-CBnQSoAK*mGzlhsk?eK9ubBvE26`g$l36nh7 zpx}uEh;;Ik$n9rlO*%Bo%lEy^i!*b{K9^Obl%)nYC_I5&zb#Av7l9SYiwP@8Jb*Lg zH$R5VJY+ha0|rwAd~OqL$BX7(?N4fx54m{UZUV$b)HkL>cWh)4}m#&Rq-}(5{ zK0eNi9ROr)R9-(NHAcrYKJX=$MZ1H0d%1>~`4~r?W@{KDM9PESP+Q9y$g6bnM!n;Yp7f zf%jsGfHOPpUqBSaX9A@Rz8u4GxUC+as3m5FZtzzCSKc@<PL;z4}-Q*uxW z`-SF1&Lq>}bl4=&F2U70TLxcXac8ygM-hNDl{_yiT3^B7a4_!e{cpF4(nq3{-4%{U zyQ}yfFTaRBd-8$V#Qk&ddmhTfy()W!on+Kz=|q_9BeRK8tWWm8_ftroQdav%+AM7F z=WkcMFY`)C#F|g%)(&}csaNLdSoa$Y8aS5V2Dtl!d?NEAyG4OY;XMT@ZydK@`-!fn zlb{|fETX+rj&<^%#b`-<%cNA0H_ZuP8hCr?S?lJP!!Mp>_KU01&L(32xQoFVcBLLxUz9J^n zUzVl8bXH%UC?0eA8QnyzuafH3oct^m4?kten4L0=8f5Z(C!;OME*FXjs9PWbbkfc?`>*TqTKT~@H4tpKLwK+8x8|qTz`lwDD%ko+uKYyY%H`R{nXiZ> zBREYgC6AwWe5x)~`7=;l%=M0tUY?T0&7^N@9NUP03Wv65FjnjyD33Ij<6jAb*4Aet zIOAuhr6uo-_jyxRtn{J8bA4FSFD|kI?_4I-N|Y4I1;3C=?8SzbuR{C^fxp%zXDAJ|C!>pDg{FSX*?`s3Z1G>%gId&A zIAqE6QLH%4=Is2Fiq%}#a~Ytf5?X!9#_tu*T`fC~9ayV~LUzp9Gr*pK8i=4dmt z*NEhh9|}Mn^mv<)EOJGn4)UjmxJbm+2I`i)$#c?}dl?+~3uo6Rz6^+8(J-`{p9 zpEu*dJPK&Zxo9Y~03hQ`RHmdZMEVa56Ora?-ukg@+A`u-kuU!%AhdZ+b#Mu=$rNvL z_>FbIy%{agerTVy0Gu;-DKcilj?vlSvi*u*hrjW&$T!AUf!%_3u z*7=3I>KAe<&t>69Qy171#_)!jr-~ZKY@zkPl;XH9gybhtR1!F&V4!L?Y@t=!cwPNp z;v5WUV|!Ej_rA4s-iMV}l<4I%rb5);Z9eby{}6L#a}?B5hp#N5Or{4O6OBR3nJ&&JogIO4ao*qs{X!SP6`u62Bf48 z>8|0mr*-^UVbOWy8-FUd;wQHUD_AnvFrr0?*xhVKDME(N%%}Av>li4-vG6Z=?)xsi z@Ik%P=c?w2@J=>I9!(uOdRh8>Xm$bMPCM>0AqO{Q|ti7)bd(4goQ$AoeU=xNG8WQqIzTr z16QFuZ2kp>X@A!-ooT)&_HANH+@j!)F#OOwWGl2?v8 z?*a=7=aKToVyimBh8HJ+65?qlb?wru%ef5I^Ng!O-2hFm)}JAfn<4~QsHfUIoD!%5 z7?*Dk{&iOZjg+me?{5LlHk4Azeh(y=8-QQivK;S(JZjF|&N#miy5Aw*{m#_2GJEmw zpK~B!_$Yv5zY|k=*N!!A`(dtaxfL)E;g^|p-XBMVf6ul44^TAoq=Y#lK)El^M8X~! zzypj+U_B;s>@@gvXq_1$(_}N+v#{BU-WO5?Sj7g8hN45%5>Z0KV7W)pNI{?~QBWh) z2o+#3gGykDZB0g40LKn!rfajm^E14qM%;uaIYQ6?0?Yuis8>%NYB|Cykh zFZ?~lljVM-O(dVoza%9J0!%^_|AO~0_-!-=9|e0{A1co3=GUJ(Msb6H!Xrb@X#nvj zh;stWu)2`ywyq^Je**-vZsG5!Mb2l{v^kD`=aYP(AjyrFFpwUy$@t&G{9`bw@bAL7 zAp*YXT-qmS`e*y2VXYV_8bG)s46_hEx{)_{ zvzvNR-_AY6Y67&|u^V0A(%v4eY|6Sic62t(^cp=#tMuV_Eqcr+^cw|k2^QT)zPlej zGiW~FjgrL9v8m9fS5~42v(Y+5H@J2S|6ZqAf0%}|vw%6$n|e$DbWPVpGcPC~!oMW& zIuqkX%!n0zAc)$lBoL6(99yiT-eOO-+p8(qX4lzhDK9`A+4O#c3*PE*{8DS)M0(@D1G_E>`z%E9vve zH--%s9SR*sNJUDUIngE#y{N42y2q0HP?doRrmv7+n?Gq|oR=Xa@p_qKFlphZ=-VCm z)=!U**iHE8YtS)I41j~45oC}F(yYH~5q_`85n$inWsy3z44S)b4SHfV$Ic0BT1g@S zBE(3yezyjuNmMtfv0WxCx=U~@N|mXJIqs+*2H@0b zzBUlRLhmM0|Jx>90R?`ivwvA2;^o5aR~Je{QzJJ8luh1IOqLX$EwCeTn=$9dcB4u! zRk%^jQXHRILXgO5+|;)-2OMGJ3Qwn+UMG*hJ;G ze{JWr={2Va@DKKf(hiD8!wOlqOPyF6np{xqq0&~mR>o`|L2?(A{kak<(uUf!Wvrm3 zOtebBE{VHGfkXO*%ifs7T3G>|o2Coo@R1w8Mf2lFte)T+ZUlQBa?+ucD`_>ux!Z{24KvsA6Vc_Llr&oYP9g$Wy z(+4_XuLTUVM||h0DZHvmO3ViNvp2L3)MWNL2p?L5`AC-G^7mL^`6f%jj93wd9cd9t z!De0o7zKZ%9`9~^b%r{m^j0{x->>&G%!nn&;BH{B$ZJ4GtATa|qlcSx6)l%J@GCwk zF?T0^SsAlmL-?8|^>8;Fd{J{vW8=nG_t36`xd-D`IEMTsJDmUICzvv@mNq%D%tW9P zV*lMgXpyp&TZZ_hNfo4@Al7J1m5#T8Y6QZMnCA-MwfBeT zW>u#em=wn*m4ng)R+Cl~X&u55xVBb9vK6@CinK6=C`xW{)5KCD`jegRjS2F)clDor zd^_l(l4<_~H8&@QP9VON&TZXEGz+SN^<3!nhD7yXOJi*9XzuV<4jU&r!*rrOhe-V zrE#Od{$dJgpoh;J)NcJP&1^7-K0`>FRA8oIVJNpGx~}lHbsAG<>^0AuldskI3lSRo zX4&wOs)iZi0-aT(&w^i>L;6)Nx@7&&SDSt5ivdh7TW)^#`tK_+U5QYIydBNTw`7m4 z2c)+$sZ)iXw^cx*QS?IlGGUTZVIFfNC-6KVG;m{XpXop&7j%{!uNQyPHsktM%IF-O zWnRH~5j;YzxLHR-)(f+=*qTm_fQC(_Z}{id%G0r#|6qovo4y~D=-^{chwYE9e^zGP z+PG5z@a<02TigSwy1-NBw9b7=qMF|kGYzPmoru&1r0m-h-MufhSEOXF>iG)1&&RNJ z&Afi!AzYT%EVrVYN zFEGn3_%z<15X_W1aVkiw32L%_wk0_W6o9(Z0S#0Dx3=J4pOB79En~^W>-p&0U&hi$WkbK2{Q3^j*v=G! zRHh6_N?~X8X7;|sIsKZYGZ2-*J~+y@e0t@9f|+&7!uWAL)%9#?vsWfmF%3hsS!o6c zdVUw{!y9IzwXz((g<#~#GBW8Q_Y6{`O@EjV4;$Z}D_dT1ZSH zLuTG)l)^y;MeHbKzTIRJorkhA8oA;2#$yfG73%3S3Nk6AIXi3 z)>)@uhTpD_1b*{(s7={fJbLf@lOvZr69zO^BKT} z+;zOumt9r!`aKs5{$}ja$WQsm@>S6oEF^&ijil{VUdsXqr;>hk{kYl}T?5>>Y_7Cv zw%Pk(nEas`lz)rGyqZRf&OEafp$i$71J#q(6?ss3pK0s6Ytu*TUFtCF2R@`nj)1o+ z7t1Ru2=cH79}N}(`g^(Kc}pdOe^^vZ1zpTU2i;6aEfzang=#_*`KCflTaYp&%XWQE zTI7pmQ+cOyAABR==UB@xb$;AdScPxY=_>MhZTfODl3p%wubDZ3J0K|}kcUkOR7Iiw z#mMi{G{@d#I$)=wk!NH95+9zxTUXb0d??*nraL|_u0rQ7FFLBhMYT-S@qZ1rrr8$b zDFTpyEEhpRC&R}n;dr%CLkMIyC^tGVE-mkIl)9XBgD6gi0Ro7ktdBm|w#6oW&T8Xp zJU!dTinkQa%I;_|Qqju9oxe@{<%S@w=%+TM1LSiy-ec6msM2ch`sZK~#2B9hM$GrHj>W3LVL~wPO<2dn5J0 zu1be#{9spRQf6`Gc;emU$Py;{yLl}S8;>kcr4c8w8fwZ_9xK`N#v%fk&z83{wb&~t z#ySF!WyMS*2DhF!n8XxfEgO;5k6x3{voQ@IX0xLwC`z%sR90oE$BZjPC2edhDD z7eGebrHCBn0S~4rR9Vcbo(|)xu#V~cB4e}s3Q;wtg%pe#JZS9~X-hb=LV0k6bT+i5 zj$%-ct}{W|>swO26SViK#sA?&B3RTehM{T91vwDiCSF6@SrA;$ukIi2PV>r&2Hnx) z#0pqh2;=duZV2&)equC&PYZXBBegi*R32$P?;^FAZ7tbSR@Z~zwg0_0ggzO9b2u$7 z*vwvPYUwNWDJmAIMvtj!ffeqTS60hngbN{}{+OO8pcM&D{?a6a^@eg;9ta%4T6&G} zc?8Vmfy1u}`^mWlD3DD&61^9i$sc{6#Dvz*&DnU|y6ObJ{;@sa_to2syY8w~!dDu8 zP(7O9j>1G=s3`l+RPMDm9^hiifWQvEXmIdM?&KF_wW!s`njA@9k43ATILhBhXNB1v z{m^pIFqp)p&NmPT37CLsIKlR~@TTx=khunQ2{0FiU>5-}ASNZ}a;7kDK5Zo#PohXRuoAg(B`Tfdru#)ZGbFDVM`)dK~B z0nl+iGA`^>DZ@bYu{XQ2jsX+R*ujhf`s?HEbB=R%_oSdmGTU<&nz6ibE_M$?1B1vY z9sm@LY!-@TLYfMLhKdYoFtscP28mD;W5M_M8#<=7b;(!2WV2tNhRwnB43 z4g6f5V8Ac4TTq)LS4?ezQ3;7Sech*}8|_(MXpzX|%~4fm4}5c$Vl#Y1`jLd(!qr+H z+0K~M(@3@hyLrQI>EX!E1w@YXaeZ>NCbu$C!hgirmtDceAUB~{fGlwWbk;{V+U1IC zmN-kKi{{($3tX`^B(xRu7*m;6px3whstN7YjJ{Ga8)$^^LRoSv8<9#Ck#!7z)wiCa4Fl#4{RUi)@6GjI( zA~xOT3g&prPrg4=;qP0nTjMBdk}=v{YI|(Ig;JP=gn|c&B_tI<*^kY&Z!$d}M zyAI$a#z;5Xj^7u8`lI(&c2u}5YMH9z=Q}Qm;%of3fk|A>kp6d(-;S)ZQoK6)Mw5?(AE7{EIas3N$k2cg&7&^0KW`m0YkZ@*jwdI&G2G3QqZfsJidV20N)Vno1YPh0eKh9WW+ZQCt5@7JiB(v9(@*njBaIKURL2UrvpTECXV56t zL9YX}YICg5-c%1u<)F2;mcO)u%o;x1jyu}@TRi{fN|T*ST`}ujeoPGvC@5i`f}@%W zAvM0UWf&nLQ~{%HQIT6J#&^x%2R*lG_)Qqch~P=$AsO)9C^zWhA@6d04QGmFGlqsQ z{hV$Vr*SNJW^5{A=}l5S=Q`Iu8Zqg>aqCxj@Q?jtKYz8<7Nt>!!+p1wqX%+f5ujW5 zzfw;snEi}ZMa@`c>dGKl>E}Y&o*UcyLh}xR%A6tDVgt6uBwmz5p^t}hmue1tYAqL#MqJ8?U z-t8!X2LNET(axcI`-50m^~zA3VzYd);2J(&9EXT6U&{(eKC(MfLPUo{jW`G!as7;* z5iw0=7~3*skFo%GROcdrKY20fe9m~4zY>B$>~j`rRW;Wq;xU9|D%9D zk6g?k3WG5l`WS?5|649o&?I?C<2`px#ze?Wro2$g+`LcZ{#)`eeEh!FXuuaYZbtYF z-#@~n%b%EJd%9D#4LEn1(qCqKs0_9hUrZf)4(IupTl2<5k)<|aj98`cCUwY7v`{mp zXibfP&skQs^8_E;xgA@*fIk+L#D_2Gu}brh98XJZY-jC{>=4nxC1M`;ydI;YQ7t18 zsjT9iF=BIxti{|~DYkJ5tTtHA{@v7@&W{69Zo1`qzShp{;6GX5R`dN^}u)N-s-($da)^Qf?Pnt7~eFpm~ ze>i~N8r(LC)fDV7ShFv3+?t;j=)~$IM?=uojuNcS-8C*+-=1{06{Z(oF&&w*hWeA% z?$`_Q_`hPU3|%Uxr(5H+7jOQE^|$U0NYqAPk;C}}$>Pu8ZDL|_d30#NQ;(n`^cD2? zSQF2l{*O+0#f^N5+vBQ<+eQ=dB(t!DFHV9^mQbJ!f(ytf!nj(q$Sk zdSA=DR)r`|XNi~h_gG1l9qQT-$9$S4E;ilMGM5_`F8|aF8S>pUi;~Ce8oI5Kv>Gmb zYM%MHlzX(*Dj?|@x&H)gS{(r2cih^s>=%lS?&Q}_#ab!{8Z21pG{@VIzLIJj%2kds zC=#TLp8FC;V|+J>rzZR83MzyVqHOh32&L@uYXxc6A@S$V3Dq#EBuT;7MBuv^+_)Ww z(^Vf{D-U3=heDkp!`my5#i<(XXifOPj975epuHkzS>A@zo^!wG5>y@}e0)o0)aR~2i$ZyIq>(q3WoY1aBw90JZDtTVuk$0c<&ro9P z`~%I&!5468bv~r<6=Xuk439aEp>hows^_M7GQZcrwz6lOVCKLbrTAJ=a6;8Z&|F8l z&c>WYQJa8gy=9oeR!|gOkF)diUz0H9-x&>U`DAVVGc#GhCzE~zUH-s z1>KxGxTHj81ZW00S5dzw+ag^T_jLFZRcGiw-FwF8#vqw{)gOr%P8?*~vfYCaSd|4e zoYlHxmE~+^^&`m_IohtB5ssp>T$O9(6xFiuK#}XdC{wZ-tDuJchvs9{`cyX zh9?^_~YjKiw8I0U%ZyeM=)!pnsGGUcsyoro}}LJp`(c&y)zx!0_iY7ct|lJXEFUV z-kw7;OJe*J#Hn#L+qzc*_wTnBymPVuHE}@@U$&AbYXm<}C*husKyvx;{py&Ucs`&Kcz1l*T|YPvsL3 zBjzyL83mm#wgP+e_LENIE9PA#S#3ghWLw_-v@*8guLWGbC87k>lv{p$Xc^3B zXvoSG#$Qh2kyU{4A55F3d$}&o=dFSv@{U*&TX{Bn1Nj~ldELt-U`0jsbj)AS!qwsn zVJNWFKdccX%zXLH1LFS^E&eBX9J);dyi~Mwk8*DOe}l=Zw=TZ9y^|3vru}9_?;cNZ z(LJt(7};p+{c0Ig;0%~A(kxv2;a&iOJI+TpIzl5|5^u)M*Dc_Buox&Iv!nt93TGPG8F)FZpTDP4;NJh1tCFg6`amL z3DKf%1l${$-yR@4a~Mb~VhlIC21Hp8J2t(QX|ev<4CK+^8bHm2NoJH zD`%MGTMr1i2<-)CkZ^pq#<)VrOTF>(-Tyr|{u3EO*nYqLg}GD}eQxd52b~mlG2R9R z#OhnV4ui>k<4WOAH6(>Jzqwt=>`#I7-FV=bTdl$H92PN>=l4|PScQdSoNHMy08AHlha3w_O-`eCIy(Tbarca$@3n7~95^ zz>munA=TU*Qv=S4EXrTR+B=<^l7@>1%eSg)j2@Q@I}@4;Sozx3vVdn)o#DTn+v{Jl z3Xeox%W&~$p+mh%eY6K;0-e7M+uaJswqtnqjB}@tJ`U&GZ0{OYGi|g20$`jY!GKP>vBU$}9nj)0Yfu}3*(+r~U1_byIj%v3 z3|t9AlA4N|c5CfU!;$=rZvNd$7u9w6{+Aj#f2NlEVidC6^o_C#RJ11R9ZE_aI=0cG zmS=2*Lv4Q1I_&-bS;l0Bk;!q5rjg18w%^vEvxNl3nzcG_wQODEf}6jJC);4}@LYun z3ZCDaF-+ctErNU82|Sp+ze zB0Bk)KFI-lgsMN9iCiSm=$#U?r_v#j?Ck8>Lubl=H^Dg^f=nD@GERV{M8lJZ6|VHR zf&B@FWy0|Bmk{??Zbb>Texm;1!F z)Y>;aE(=&P=E8s9UpD0;@M`_y+7nd$RfvAk@FdV&02H$qALh8$M=E@br|fgWRW4^| z0&udJq#HOBlCGI%K}~B^QIT``dG@p}GYMCvc#w5}-Ag(hn4maF{E3`QJajq8& zC&&ROn%_BWGBkyKg$sDa%R5{2NbAI95f-jpe{T*;E$<%U zE61pmP4l_M47mvsRCg{$cjM-qhePyZqq_sY6)Vtq0n)<(d~BiX1ZMArVjexX}^6-rh2<73()*Rrn^W)AbD!v~pfliZ8ui$n6?rvq z@cpypOR79R#dYt!k%Z4rKSnV~G%Ah7a{LfxSEF?jtE;{BDr&Mk<=uq`->_^KBkw5X z`K{L8@hdMC5YQx|m<7B#UZ^af{xN!L+>_ECDztoq{O(=83VJ--Q-E@|Ig3~Z4w&Bk z!KU)RC}4<{W_&%r?Vx#dkVex$s!;J;+ilawq}ae6*<^(7RNDt3rd_4L*q33=lb=Jo zZY|$hjjPPNv`ic*rOqEF^b6C!g_mRnCc1jAT>oyUXv8+)9agun(k^(P6#)(Q;NZ8) zzsX869BM5*dETw*-ERVleM25lZFX$Lysk@Y1X`x~dJo}2^ivou&$LzZlt zZbZ(`SXHyQ8U(VNCv@PJ8#Mc0#8sk9(+k*4(6L*`K2OF5o)B^u;~H{Wbop5tb<}fP ze73EQd`d)3HCkYj2Ev7A#b)d*Hj=6!uZS3?$+n#Zvu_qsw64e7SJraPP0Z-!I&(CP zkxhF1hB!DZGm4yK}xYhG-dIIlJJ~i*DZ8 zZfX#I`B?ON>9r`olOn^^7Vq~_^38dVe{{xNpM=bXXrE-*zrFeXKfzcQLs`8QRpPl% z+-DmaT^FOAaf&|M`Z8N2(aQBY?&X!Ggo#rH)$$6$M5I+=HX(7$#Lsl#3t3~uS0G7Ck>+ynQ3r(|Jd7FR&6!Ch-iPl zcM&XJQHy{3?ITcg+*wo5>c}47xp=GGVCd6H`Sw!d$Q_y{(VkAwxI~MI;(0WwU*th4 zMv|7lnCP|iG*fxuo%QSPi}L=vQ74|fm|VPP`V9oqN)hH) zURN+}hohl;y^C%B7~uXWdQ7hLaPE)7>~$wi4Yxt$_;VyOB9cR&0D-?R9Q^=^hqJTXej2PS-?X#zK=L8{q$x+0`c>1jEtmcd_U-D!|MFNaj z_Lk1V)~{?&R8JH$lP@f9ti&ZZ`6j0!v|Rbt*ZSU{Us$wN->_SbqyE#Y^n|_QpI`BG zy5jJAVm;doHn8v+P+S5C%VyciP=^2b<`Fh-U&`vyNuqq?H3hMruMB0YR#fny(7EkQ z#y{FhHX4ePflH3Q^Sh}YTia2q90MG|(AO4j0u#UNX-Qv?sdq5|ruCJfw#wp3dh6C% z(M03~f2Px`wbd^#J?xY&S(E!WRG)qK?DifI)QJU+U|h_yQ`+^byX-ey=B_Jzq{7V-MQK z#?m-_r!UC(&iwR0NenbbxR#y#us_MX&KkB)m*CM>0SU3P5WEFkduvAh6U5gKt0JnN zGCVp#52B?5;8uQpCsn6~j5T(91cl+Eq=;fwltTYZRwz=<_wl2*^z{tAd3?02iK5i) zK%VUeDRedGbT(Bb;F6^z5elL(vLqAnDa#L_$P9rydPe>&PeKlM#i?_f%_*OPb#TG5*K z;1@@Pmo7ZJNnV0--^0qTF{N*Ouw*bWG)#0EtI&zzlFNx;?{EC5p{dylUI5T|68G6iJ(3aBo2f) zuG@3zTupme5gAw=vi#8O%WSWZb)PPr8qEIlxKv>2CzljMH*xWBDXN2svGweAN>U?=J})|{K2 z`CfB@#`pBZ*B2N8G7kWQp0m)6kB^u9{(bxX{^|?NmNMFH5^K}@d2B9IGMth7E5Ic& zkc8lG>|PLb3QbC|C`|uCE@+RsCy2cd2V(3YNtzRgF~JzO+Ga@=7(1qYD`4od-APel z{1+EjZog5O?uS1lFA0C+{+HY^&Ogntb4hix3e+0wfm_7i{)^MBbFH(vHclrW6ke9y z@gDODIccNg{_I@N)bb^(VY{WYyM0fJ^IJ%D_|IA(TidBtOnB*?dorwDqvkp)dtW&+ zQYJU-4qYT4d^l8|v&xx@)CrA$@oV*K;wZ+wCHD5GC!nb@w@7iVzZMem+oWC4`)F^uzp`r!f`` zu7=EFj^=xV(+A6?Stf_~M@=f7)j7CAN%K_qVN9CwA75m zOXR7ENd;K@=KIM5E#H&T#JO!vsn!PJw6C*?i*rkH!mT;j0N-xdL7PT5?Vna34eY_x zo6()#YTMuCa>=K&gSMEdoSDz5;n3tBK){{&xnqS09lbgyFy$UT(M`oPb&WoBVq#)0 z%yz6zBPI`|`_^6gU6z&t?JCy1dt`10L&8f=4#x7TzG9()ropX;n(qY)`;(hgen&k+ zeExXYiL709gkV~d=d&|3KIz3m%04mNXbl=?7FC%f?jL$fU=%F3tQz++g`j;Cqt(QEygpTZGH!))?;OUgz!OfrUCxI`lXnD=v5b z@9qz<`LC8|Y6zi!B!tYAqE>95?o=f$t%JUOX*KpeJ&ahbf|kE@R~Nm^!hQI=u6jHN zoUQJ!p{-4?ATX6#ovRj>AVhuVZ^u|cRCLTe&aYXT%6@j4xqhkQYdW)HS*Ug&d8d1o z*DAHUMMmyhGI5O|L;&QZfPj10IVoYc(UNiFjq8!{o_aUW%-Y0KSM(2(`oA3uEX7j|J-3)zVSax~!oz!sJxf~ds z?M9cvXmy~vN2^Y`(6y?)Kj+OzJ~|qmarPJQ@%$qg_H}?iVDnKIUEt~GlTifOS4>9D z!p$w#pVVK=Q@dwcn;qbJGh{F*p&^{9-TrKf>1!_C6DE7Q(*?IvRWBDphJ5!$fXeFO z@$_`v*&@y@V3xzLviIXy;2C+ly7qW-4iI&>_dWfg$HO|my6JoLcd_<%?ZNw6KJVID zF29g%`fXrPj%58kb|Illuw202TDLMF6Pz__A+lxA5YONp8=l>)=fk^)y0#lo|oKWk=88O_}yZh(rs7NL~wSd6xr6)d{ zzi^p>isJMcjPC#)Yg^*!V&c2)Q%&FX%EdW~b#QgG(4Hefh*_W)@vdtj-KC+ICeH)Cy z_|E(KT(|4{Isd>pznt4SujljexZev0h0cbA^vkl9%?I--mWm!0;Xs*YYN@pcdb$K% z(>dR-4A_5uOtm|S{tJ9cF-T5Ip_;hH@+ zeD&ieo)k(HFE1f`B%e@=nF~D<$r!~R*DDTSgi_nsA`w(T+ge`U%Lea9wyO{FJMqc+##Ba3<-^vI=pFZn zWmOiP=XcV&f1FcI2&vTI8|~P7>c1UjY~E*soJaU)4__NZQ4WhjrJ!fK#tsht=AHv| z+0U*R{Lg8#oO*;$brh=+qyG&T4mtYR?L&ObPM=Zr0Cu{GpJNL@b9Xz~xo$CKqkav= z=f_QqUO0Xm(3IfxpdXf%Bw-VxBLida9bK%Je(8{Y@yJ`-%ZRaoYxygm$2fPO_26yB zhOj|ng!9lwmUo|#!O_O+jX}T(|D>{{o{j%gP*?w|noZ96+|>1b^*;!Ed}`3if(Q0X z6o)#!-20hNtzu+_*&^IL&4BXw$tCZ~=5H*lKd-P|SFUe6^+akzV_EbLcQsEBqu}Lj z8H{Sq7t=2JNI20Fy}ohl5-;a+J8Gg%2UYlLpi`tfpK>z>d=1%dd;LPQd} z?}>I~K8_-TEeE!^n@@{p_L8|WI}O&$u2(g` zT;-bbI2-SgL)pZ?AFD}^WeD{%vE(b_94>W?53#AJanDpRGqNbQ%n29m`fWeCZ6xKG zQ_mwQJ}6})49hJNg8h<0#?U}i&fdr07TfEHNA+Z;8TEF?#Uld}jbh~r%@TV~tGypT zci6XWVRhR|GJvNYFfQ_bN?li{nVu_2WAf>PVWRtakHIZuuXBuf!A4>HZEc}o}KJU4y$h0nP#h>7XKs-8^}ZCWd0>*64e<|tEh}-Jqr|BLe=2% zdn4ix%A_9j>yc#8Qwa5K1wnlctm|)Xh1DnI?R|7=rQ9z$c7R9x&&TCITTQD@jji6- zb>wE|8~4KEr2A=X*XH6fwuTex8h8fZ|1|0}qVk$-+&1M=KyUPrb zMBaFqCc_i5G|~b>L61JdmaZYyk+UTe%m*_44~}N)T(`25j41`c-o%rW<@ZlQLEFto z4-s8<3kSW!(0q>z<6^{2M#Tp!AAawVSK)hvePAzO_E1w@d+-a#Y7+o?u5n$?9r0FtW+UH2sXqJ^QURucCnMYQFBE8(u;a1nCy zZxi!BC8SU;`biu3?(K(npaCI5rzV}*NS@f4iT0<}&eWA}Gmbg`5*%ZnOK5p-(QKAq zrmFmMb9cia8{uM*!P2?3C4jsjII#+US(AJI*Zbz%0>G!npr_A$B8jOr*)-x#>zVtM9W9=R4tz_$|KL z9+tAxB8Um$br$42>*sbes^rLf7?(6<4LlsNi-b1owX*5(zn5v((#YJKEotk?#wp0k|`H^Evwi{uT z%zF%KYUiypP%z3bF7<3%ln(9u_3#ytUhuJnQNo4W^%d@CuxqZZ~4f19yR%4fI>lLe|%o(h+$HGb^MyuIACunBWlCH)d}AT7sGZ0E_Jb02CpattR8R^pD%_4KOHQdIoiVEt^EWafX>zb@GZ|| zI5}=CGN}hai@@@hNr{=r~b4*RO=t<0s-M%np5qNM6wYp}zn3xv&NyX=8M(&bZN8L}ra%Hm;tKx+v z4zz?(R?^vob><8YYi5eX-2H4wwLTcE;ec35`ETG$k-(px8>6cuh(B%gh}GdQ zc)_@{z(WvckaYU9;S(nJy4^0ke35dK^YM>-y#wrnsyM;yhdSr_mu~IkSo3$@d%(ha zpH+mqce(GFD-e>ivF-fwvWt1_49+g$sn5mn{pOMH@L_hZ)i0+?g4V7U6jAt_l5-+C zw63i&{J^?-uZ!SyoYvhU#-dVDM(khTq*a3F8Zb0Dlc@8b6gPU@K>|%S&z-UfjK`4E zx=W5dVZ9qatICc6hZ4Ay_tuQ@8^`T?R4Z$=%w^E$P>liTH%RvB$izrd+JQ92pbR1d z4Z!m?5O~J&*VZ(19(mi5BeI&kAB7y^jfumb1v8%Vm=2JMqKRxAGLQdOmp+@hV0MXW zUncIf1AG5kk+FxV8mHqYP?bM3pe;l6f*M zV{97~W}-{nVr=hzho8M~P1;*FP zRGLW4cJZ(D5pSN_%_{jC6Hb87R42J|v+^u@J|*SSpFD2@rw?yu%yvo|hqfTB(Rk8V zFyY~!JmvYe?T6>}#PYy-E%ciZJ-I*K%HeUxasg{!^p=0z2KN>YDLRad8%~#T&Ibgu zR2Y%w0*>g(FMh9m4)R4l*lJi8_6To9Yz!_;tz5skh)o=H+ z3~TlWZN+Dq{P)Vl6$SksgwBOM3%Mg@3^`B#Dd!6#6E{2gh!@qf$4!T#=med}^C{4j zp(#0QI>M6vLFmsURu)dH@z;3(d`iTTzy{Tgr~LGs+Ob{di#>>PG+;1R{{>Jy=wDR@ zK75xWeunTaDqAXRk|}Rv!45{I#i50cAR33n+XDoX^9dq_PF;PoBu=)>R40HVlW5Xwg1@#IOGQNO1jD=QMwC|wXMGv zvzkq9pL%eQE3)PUY0cJo!?;eqF7NCcV+ZG-udc3f@F&gHzG`u$hJ$UO`)>r7b5g@0 zKMm_dx%K+7A1DF!D_{R04)H07!$kw~l{|xCT-i3qxSkK>WN&|OIu4HbgN{VTvG?nE zV{GSgAzh|Ix4)OkY;A3&ZsL5`nl4&i39ZVuBN&yogqqH&dv2V1@s3r|gPQ_$WFANR z=!fxTu6Qfw_NITKXY(&>t$($GuMIt^O<_8wlB|)A9lPSWRY>o1-cO^zZ!Ln>N}lf% zx?@9hJX9bQas~d2;yzit{u}l##;RMh&J@ebVX{X#WfiRXGEG}(aH#L z$jhs$#wF3ljQ@vcRryeN$Y`lhtx)qfC!Z0bs}-S^p{An(QGKh_&2+%tB0(B9omWHs zRSuM*0$9|Xais}73htQisD7vIu^*jwnLNdIoy|oYr60^yr?qqgCjLcSgFTmC?z_ef zu+vr=7qqCe{IUlN)3J#(t)~Q9m+XzCdVdXdQ zoj_ut4W{*j=9EI+Ra2i&Nq*NAuP)t(^n^WIM+MS(wzM|R9?0;H@`WW!%o?eojTIZz zRBmolna}u-RL#OW)qY_Ozlr`&*v!~D1R*KAf?z=QdTu+{e6}~9>HZE#X#}pZb@Dls zHB-HRw6eS1aM(}`cZywSbQ;QS_Kx_;(YCQS25euosiq2W4Q5C`C3(Mjha-hgNw*wy z4ftDd7D#TzJ#jEJ`jZ|{T(G}8!X4Z$(T%=;-ntmmyjB<&{?ThZ(zJ~2tQ}GoI^E!N zU%K2P(H?%VydIxebFY(4tz&*403DaW{UEvp^$kroxE0wv&kX4$CP%Ze%T6t-2IfZI z-kb!bCH($VbK3UyEU7VgCR&h%C=vs@xJovzhh1(+Vd?hs9zTIAPsqXJ5WFjn)u`TIUU8Lw1D3Z{V7Y-~J3T|LPR& zz1V2UzBMNjgF3aEMS8|;;N-wy$jRrv0js1!{U(5h1Xl77+4US)#ub{PD!+OE+`GwZ?tC63-YE#pCNAy1$9R>FU_Y~rSpC8 zILAS;{l=TAhLzUbbjZ1IO8XZBVfK`r;FF!^urDq#m$%&VOhF9F74rI&;)c zYuq^1;M(%J$!c@7_pL8sBu@4s%gd8P++4QR&9N_83zeTy=O-uwlnl>9u73bdywovG zwgaDnJHNi(DOkSzEl=xF>#d^Wrt)3V;tp2Z^^et(Z=hUQMcGj;t~PY?47*lMcRQhE zHcR`J?JP-^nzd#H0wvUzIA)a0W87w(VzARj>asDB-by2=mX*4n+)jsH;{rgYHl3>g z%0rKtI=MFZDUN6|H@Fh1Gx&9z9>7j$N=%Xe4qzxKC@6!mE(odFQfOe4qKy17wL;+4 zwzhj*1QABH)Yo#Y60&kRb^g2d^4yx){`EH;2-^?+p3FV7!K}5dP)Vn z`|?Ip;1P&l*sSkX*Fo6dtY$tYWmTdf6-THr{g~0zz_()2kNIE1ut8PO~w3 zN!XtLA+-?X3In&B1zSxg_=$glhC&tqOPZ7bASlQtaP!CBv;3wIn9* z%>(#bfu~wdD8c*p&Zxi#kjgwaq*al*i%F%G7A1+{lkZ{=jlDXPn;6Ul@LS-Pvnvh* z2wWl1(x34FHk@8WLNNnb$|K}^cQa949GWA(i_xFeFZ01c>1T+`r&vq5BaC!zJgGIQ2e6OO3)Ysg9-rNRM9 z=qhPn{)-cRR{{8eUhOj=w8-Pypx6<2KT14pdtk_e|+ux)6r+(J!WOJ_!2)Ws) z5H}O_2NbYSDAW_=s1rAM#Av*3*nReZ*}e21q0GBz!%T%9Oef1;yp5W4%U*@?+VA#( z-i}nrY5}l}Ydv)#d4Df5rdg`?=Yc|#iQl7VA;DJ29d}xFOIhUtCuZ^i6O=Q5@4Wf^ zpJO~A#4tx?^b^s~`?24Hy$FGD<2}1<{ZI08Xv2E|8(!o4F*3f4qqdn&f;)oY{j+Po z=+mzG6xz%*<(iR!$U6UTPi2kbf;E?ZT;MChXgITa=G^+-c8ykMO_9f2yv5)tcidFz zof9Qty^_>4@OToBBi**@xFx)DSN z4%F8`#iOuBSC7ek66Nec=Jh~+T%KUG2mQxO@L17Re&m3cgG z7HvE!J;B~SPAOSxkoz~z~;&F49HhZMVL4yiY(Oymz^2#sB!az>0# z;c^%FgJhKjd3p8A(WtnaT}*Z5QEZF42^e5Ji0CEC=1PdPkv4jGNdmOM14y`w(13Qa z$1_h>g_+{nW!j|5>pak16k0Vr3JXDWD2YOe?NHeT7B@^eR5My3NbD#Q00hO0*xI!? zXbKT8aW1wtzYe~%^g1H=V>}N@kB{Zjq-V}`F4-MT86LnqTKIVa$Ly1+V7in1TUfN~ zHQd{$ZWqGoaMka`3k1@L7f(&e@5*HOpp&px|2T76VYUP4a9{9noh21aHaa&>3{u`f93Ej{SnZTKwxENpOP}H+WkIx?EAor`)_GZKon}_s>KU?&b=)n76 zgS9k<;9c%5DZ(&A+iJ2RUc#7i-@{vQ4EL#^>;aoW z%&P?laprYyOD{hgs*O4`?ByX!mRTs;-mX~+3e(dRU7STa!R7NM)hiN@%aYTFU3m*| zdRx}@MK<0uKXzUoh&}6it5QP3J2w>FfD0aUBt4JEvPrxqtR&kS4J#khbtl>VO2Be~ zS|ro0>>jbz_lgkZ3c_VT2=fcJd(6C`v~;UBc81V7yMdPD7wr<{iu5pJax{dzW5=J= z#+dRH_F6;_>X07xOHsBw@%ZAYtvrhWM$TDJ(CUuoUM#h4CYjDdCzN7YZ4wrv#czui zqT&EVpW|6rI~bJVUvGhi=c58d&0ypVa2J39PIWr(wuuY<6n*a6&Mq$_oWu!n-UoL? zM_oev#q(8&m>I31+p%EKUnRcR3=B)p*<|F#(@#_U#*;*zU+IW*Bjks1x{A4TZ5Yop z1%<(-*>i!jL%MAW_MHGZ;peu(5KK83JxLnuqN524mzu8-YUt3~n&;&g1rRO+cVCIH z@}(}XKmCr2Iz`z&^!!bErI(YkYhiuC+Yi&1njQU}XfU_PxcYSTlWUD-fA+NxE`EYZ zO{#}Ig`5Qr#LH$<)_cRrD|m{k`-is~92rWX4;YDvPuUMp(zY$1hHF^Y3Tzs<$)EM0 zstTLQ)|SL-!*0faV@wfQX`mg^PRTrwN0$ua3KcnzSbL&r)dO>#M6;2Hy!9)aM-m|? zs*0Gt<$%OOn+C21V#ViR1Zn5?UPmuViqdmc711M2lDQR(mOpr;n${dUy+X|IDt9G&`6A@-&wkN7liYDq#HO|-Z^ANq8CI7iYZ*_N^+Gxi_sTEL%jTdch`T96qYBSh*{*k^=L|M--UDE+&e zg8+e@m@4ial)2|?p|puyq1`qx^K=3bsdSr070-Ik!-DbjrOgtPklwlkT!MuWp&f7d z<>FTC!&S`1a|gj748IdT>=)Hy#lAzU-f^FwP(JrJ`Qia|UhG*%tiFouCDlCu_dF}y z$YxS;sEd?rNz#&u1u77+JOq}z#3ZT33!#Hi*+ubZS5B@kYO=-(FyO5EKy+sw$7&4M zm0vQhe-swJ;QyDHiG**~3APK38U)^~4DhOTT^s%MRjLeSydf_vc zOovw!GQ8i2Sc)4G>FD)HW;G-7w{|>*z3I}Zn-0)+zW(o7OSE7|+r*jOU^5S8X_s}FIYE6k!rF=YU{GLsE*i)QR(0 z(6M%e$MNhe2qDuiXanU(Nv&L*p|Fo}Q6cmBKnA^JbUdm2Ar1S!I3v+hoEL!!W8k;4 zf2|-(pieQyCy?5N_Fl8$sigE~yIuxHZxL-xN~?A_n2-$Yh=$-3cSYEP=D#U#+QuvR zhx7B(1LP-#Wjg41Yr;{GgzI2|2-dUKt|=OPm_H9RCOu2_J#ApW{ui%{|rmSo9LYv#`7q`Pa z6VmFwCc6OP9YDr2NvwtZSgl9Z(E@r>e9(W?Ua1xKs|K3d`)y0B0` znB1>BRc)8D`1r{Q^L6W2{oa-8w69@ot=Yh}&ZnM(91P&Dk^m zcS_pJI=O9l+AqC7{G#{F&EpDqx)w@bQfDj+f)&fk{Zas_rnA~op?`4`+ z1-rHwI!bN~5D{S<6c$dZkkk~C35ejYn{Uw;xcigG*0Z?&m93@qY5^ID8(W1w9jn>; ztMa3(Wo=2#WMJ{Yfrad7P?{6N@PU5p-i6H~u78xv2T>6cG-&m^(D$s5(;&$)igRo3 z1?M~Lv{(Kl6Sah;A0rQ*Mc#D(hkj_$`a*oeuh!s;?%~^c%z$dipRxblZtxLJjJwJL zGE2|#ysW28VK?n+!De;0W^>*&y6Fs1BUlQJXQz)k8M?aD13DMWQT{VEH5>3}>H#7s=c{SVfUdnBSaS6p}>OgiZz@FTgNs|%abh_&+xo|hGzresNE^r^=7y-DB zbdnctI?wQYP()!Vk4P9KqKefc&m%%_Om z)vZv5{gM=fV0p;JP5+^A^6meYCjQMydpc6kp*Usd<$|zoRWQx<%z%= zWu{KwrxlbT)aIa)RiCsfLDcC=M+coUH2qFxVh8~jC$^!)^re&!ykTOVZ)n6LL3_RX(} zyUtTCSN_C1tz25yp5@PH=+lf?en>jf~2BH===`2n2hS{}J!>JB&BUph>yu@9dJ+V9N4CDR|$1V-;!KeAwN6bEo9 z{MVC+@|M5inl}Tcf`v3#kKT8G{oWh7C&hkeCCgwZ*J-R+rJzzS?QU|3(Rfkzcm9{+ z_gTXIzkQpQma+}Jw*~U_vw}TwQMg;O##0Q-hQl6}|ISLO(BJU>YY=c1|KM$P!SDBP z6LeSO!v zT`JzXT>tj>${U-p!nXsJg4R=Bb$KnLt8Z_(O`{oaJ#kt`W!0N?H@?i+si1S{j27x! aJwErqFg3qlEfJ=nUi$ZpbV{{sBmN&?dxQ`G literal 0 HcmV?d00001 diff --git a/__pub/Pasted image 20220811125224.png b/__pub/Pasted image 20220811125224.png new file mode 100644 index 0000000000000000000000000000000000000000..e36ce7fd07135ac75d12dd9aaae586c7f15bb424 GIT binary patch literal 78583 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 aJwErqFg3qlEfJ=nUi$ZpbV{{sBmN&?dxQ`G literal 0 HcmV?d00001 diff --git a/__pub/Pasted image 20220811125244.png b/__pub/Pasted image 20220811125244.png new file mode 100644 index 0000000000000000000000000000000000000000..e0fe0a7a6fd6bad273e6850e13101170f68ef7c7 GIT binary patch literal 80407 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

        Ef%DP%|wf-eUuv46joT4KWb&o>0%7uU+(Gy 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

        DnLBvNGGzT+)B4hv`_wWX7xM}Pki}hF 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

        6cS?1gt91R}3_nv`E>NS&C@y5= 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 M07*qoM6N<$g8cpc6#xJL literal 0 HcmV?d00001 diff --git a/__pub/Pasted image 20220811125543.png b/__pub/Pasted image 20220811125543.png new file mode 100644 index 0000000000000000000000000000000000000000..3e95b367b00dd835763f984cdbac5f3c664f1ef1 GIT binary patch literal 78336 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

        DnLBvNGGzT+)B4hv`_wWX7xM}Pki}hF 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

        6cS?1gt91R}3_nv`E>NS&C@y5= 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 M07*qoM6N<$g8cpc6#xJL literal 0 HcmV?d00001 diff --git a/__pub/Pasted image 20220811125808.png b/__pub/Pasted image 20220811125808.png new file mode 100644 index 0000000000000000000000000000000000000000..e65d0e34be25e60e272488cf196e0a0f9d0eeb43 GIT binary patch literal 65258 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

        {(W92Y4w5WRF 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�lP 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∨3rgv?QSkN2@EXsSA`ij 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 literal 0 HcmV?d00001 diff --git a/__pub/Screen Shot 2022-08-11 at 12.13.40.png b/__pub/Screen Shot 2022-08-11 at 12.13.40.png new file mode 100644 index 0000000000000000000000000000000000000000..ec83f0b628749c94c806dcae8f9a3cf5ade935a8 GIT binary patch literal 215757 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 q?(X|h7qvVw9$X9>i?7P^VO?8 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 literal 0 HcmV?d00001 diff --git a/__pub/index.html b/__pub/index.html new file mode 100644 index 0000000000..41dbe8cea7 --- /dev/null +++ b/__pub/index.html @@ -0,0 +1,73 @@ +__pub | philip's notes

        __pub

        \ No newline at end of file diff --git a/__pub/istockphoto-1280373274-612x612.jpg b/__pub/istockphoto-1280373274-612x612.jpg new file mode 100644 index 0000000000000000000000000000000000000000..6e489f99b277f15639cfbe02e15229cf37d1cdfd GIT binary patch literal 16898 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 E3(n#JumAu6 literal 0 HcmV?d00001 diff --git a/__pub/istockphoto-1280390209-612x612.jpg b/__pub/istockphoto-1280390209-612x612.jpg new file mode 100644 index 0000000000000000000000000000000000000000..5604ef08d6b0204927845d2cfcebd4a1ba4305eb GIT binary patch literal 25735 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
        =k~IakDb;7TD} zR1c15%sjm%YGKl)eVYniY~kZF%f++U5wOrg*M_vqkj~E@B`AE;s2#XcjE_>d?ehX& zGpd_qF@u;FXgAbCRmG5%c2_C5;1Jy~l+<-!q)hO|E9IDLkZ^GXS&Jq#b#l}cVAw{+ zo{G(o>=Kqae`K31QS8_aqGiH`^t<_yI7Hp zXwpmEu{;Yq@)vjt#1|EWS}IAyzMmMH0={ z-sT<*86sHHu`O3^z>?vBxIm4qc14-ew?U{^YOf4u5MBJL@784tpaaMA8V8p?B5$pb zzGXb!!Bpgb63+@Dpp9a#F|wKr29L`M=qTXSM}1WukrV|dw4-Ww%*j^Ae*XYS03!yb z3meo_0k}d3+8dYzoC`IJ` ztTf8OuijN~{6ipQ;wL5B-!ZNM*mDO#bo@a6^k}n_rd`f%IlBkWrCkYLQmx(|u?nGG zLfMy~-!kYA5FV}$vj?tVUzbG@Ee&aMOi_&b;#0I87B$7pIb$p;!WCF>a3KZ;v50YE z&0;zr6h5qF@64mq03G2JEA5n=J;8#2haCB4Dni>FOoCM!g)|IrFnp*}D`%DH!e96$a+{hF4Z8NC`+c%&O_?r7LP68y?av6dIK5zTsn+%u?Hk6|40@dE|W0*AjE zJ|$AnY=K+0xPNFG1+3o@l@w`|?DJ6|1UVeDHH~VCdn%`a%t>+0>QJWM8;gyt@ib~? z3ST6xd3T7is60Sc3{CBaUBg24dXJLQ@hVe}CU|ccCM`rXWtxSzlxW&-0EdtqOU17c z$N|*3a^=hWU<;mid7KdLoyh_lsD8 z<%U=uOd5dtFX+Fb<;(hC(*Dj>qtJuA4a5w!;tAQlF)Sdj*KifeUoizml$91s!@N}9 zcTdx6H{S$#CR|5D*g36 z-^9P1P0pNC2Ub{vVm8XgmdBjS4}i?(Pgdm!PZWWJKQKT8z$J&}L`8x3m8OhvdqyGP z@V;Pau!Imm!U(^m%l`mb_9l+;5{>;YH!mBPEtdpEc5VZvVyq&iDx%w8GjOZR7_5&G zI5WGI7Po+vYOA?WAkkxHx2k}K3Je%B;KCo_a{h;_1DMTT zseHl?<*JZ5Yn=od+!vTG0R1w)6aT&mS!18pG7VhM%}FPQO@;KZzh!k_>MUsMo4fdUXez?CXgA^xs@ zhyI`~F#iCME&}2v%7JKiHldWaEz78biF=r{@FN&6p($nsl^w9?(cnr|d{YeYLo`6# zPozNt1PBoN5FkMR01AQhKh>}OPFo4eKBNPHW9EC$>Sy$_$cM3q^X%g9c~bi{eO>H9 zh0l3QW7Q4A_Jq+7NG5_)JTOnu$MhU i3_g?>0SGGzGKbVx(x6I}E9p|cwe+v>uk=^`um9QWo6k-F literal 0 HcmV?d00001 diff --git a/__pub/kintsugi-bowl-01.jpg b/__pub/kintsugi-bowl-01.jpg new file mode 100644 index 0000000000000000000000000000000000000000..641cdbfdaee07c086c2232ff3aff2fb0ab251826 GIT binary patch literal 29134 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 literal 0 HcmV?d00001 diff --git a/__pub/kintsukuroi-orig.jpg b/__pub/kintsukuroi-orig.jpg new file mode 100644 index 0000000000000000000000000000000000000000..7f51030cfa94b7c76aec4e2b1b3eb1523708fdc7 GIT binary patch literal 41255 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

        fWm-fA@|42c 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 !w>IVYIsq`M2# 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 LXu@I4f3yD&)*vG? literal 0 HcmV?d00001 diff --git a/__pub/sgx_remote_attestation.png b/__pub/sgx_remote_attestation.png new file mode 100644 index 0000000000000000000000000000000000000000..e919a382bbbf9df72c5fad4774bcd98e18201a81 GIT binary patch literal 323087 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 z uX%r?}Cw_?AR?Pb5Z#%I57b4jtfrVNv9k1G%3x^&hdYy^By!M*42U+72t)FbK^ zNm*vrJmw;AXr|>o;vfP9qgJIHrDa)dsf4ucK`RuRfWzyRyi}g5?jTRi(M&TV5)C17 z_c#zT&uEN6`|c4pk3bZ8#?QlSi%bwwelZHWDy+)Vcm1&*kSWDmi`j%InMN^pp8KotC!Gw~GbZwwoJ@#d5xsgSPCpF~^KQ|rW-At__8;-lx&#-@Ni?f8g);9wf4{Ub4c%|Y z#F>OTPIle5SHE{trGxG7Oied|+2KO?FKq~aTWe={u>UWoiT$S&B8ubqN5kmk$*+NS z;Y)?7MrPHMGqP3OKWxAZ_pL6S6x@t{^DWwA9T%eBQo@ecMy1ghBP`)|BRt7+n1$0J zb{1whdd<^>FP3b`+_@lb#Enq25(Tw@$jJU2tJ%*!b{_tHBS>scti$xdLzycKz#)aJfJl;C z=~k*`FmyMX5qc;^TB?Bt;U|nphaDQJqPlDQb+NEnl`z;t++`Oa--#U zmXcX2BH4xIHE^f!ix_WWp7 z=*+3z^89f$Jid!$5oqQi_fG3A@Ts`;A?g!0b%!*m%tL1SOTi~kqT&D4G)}{1(AD^=fc#CdRSMydQfT7r5`V01Gy0_c)j~D>`=UXqE zbzO6R&2SGDhj;}C?@b#Wf2sRT0MH9r{Rui3?3V0tqI&xrs`9U7U7~-=dVKW6gCSK4 z`*Wb9E+|(HYZg#ZgELJ>BryH8U)}`R<;-oh*82(DY7T?Y0FWF=uOSgzqHI&9KM(J_ z%YD`4GM0q;Ze!0Q|A2#rv^yoSQ2X1KTOAPnMf>`X?w%p;8yNnX5Dn8ly_R=I&zJ?% zSy3F0XSGgw7(oA0uRy5}GB${ofm_5gAZfw@Ms1By{*koxwEX`iMWVsKRYbe^BqZqX zovsgV->TPWzN+=eF;VD8osdsStos#Idx^N~OD($vOp;J9WPjxj`Tkbhj*2+!P-Sz# zKLZdTX;{5Zoa`NJsN*rrGF1B%hUG6NXwhV}dcpl%%-*!@;^@wsk62%Jeu2_U1d zDXt5lD*5XrHSI%4JzdnKP1g^14Xcp17*x(`Rk{o7mCnG6JhIaspHJ#~;7!RXmCPK- zX$YlcnqBas)jB_Z*CyhuRrb<)+N}`HOw?wKw}h#I*JL#m6lr1|N zdXxa!rEl#OUwuW-!nso#ICMDZ7dgVieYq40AP)dr$keSN-WTDre`a)!0Ez#lRt#l{ zXb=`iX%k<_WKTl|1xZ_{fQKNBRu1d|Yv#&T63{W$Evu_kLw#9CZ&t)B5i&pV5+XA8 z#k~cWi;rKg*z=pC;p8}~AO{mZkpA>9?k=mxPVgrkTtOv9VFoMh(7*z^70`tawW?DD zuz>pg$zuyrS%G7%rk|odPDFfapVcpgLzZYvl79B;nI-oGpy=N`7Ck>Hq7-cbnW3B= zeLgEZwE3{6pO&hiFJgx-@M{vGU6wU4veG!xv&6{E_C;VCiQdhaf8a2+^Sl5$HXs2N zDGUg1c~l!6;1?R5-p~82{qt}|hZzZ*2bB(EaHtcM#8-5a&O;rQyOj(ow-AMxmdgzY z-=q5UVPq{pTW5tJ&1r4G->_TBPna8?rlrRV-LBb9#BjS z&e0B8FeNmz5rAnsz?>jrGp>IRe-3m>=15~(8|Ee96Uv?|bjqhEpLL6&4uIQ+JwdXS zEZrrZk)#(a2_UD5Gl)ZxjqACAl}W-bZ2V;rVC@Gr%>Gz<9m_&UkP_?_TT1@E{}(T zG%#{OmlSmx%QSiy_iYRoQC~f~3IPE-B5EKO+#slSbLSwUe2#jIn5EB@g zjKIThCJES2(bj063OfAXp`p|XNg=)PSOc$Ols2yUhYhmMZ${AWhg&@XhXcw}b# zb7wh2y=Bmw3>F~J1=}GAejEVkp?BlfSK^pv$x-#7s#4#Y+!RY>z9H&J(`x2lg0HR1 ziT_YyfB|H0bymkKG*RWLeCplb*k-#&b?HopeQ;hL&*YvN>o@M+DlH0Gv3(7Ize1+} zTRbDkkb;FVZ}KNtYE;rKFLR zCbrNc`IJ}4z0=r0`~WUJO11>KTE4@%`62e|g|I%rkWtQT5@LlpeUOeiAis{IF5~pE z1BzWq9*hz;KWqSsIbZF;-6wx zBlJGWCXx&2(x6)WNcw}_k^LVthe-CTMTkKg#Q!}$f`^AQ=Qi#1!}J5%s)O(J135l+ zLU}Nzy#hf6Ey_H6$3?QyAdT(}YRJrsyQ%Y)8o1Fs(qETWg3Bm>dDzYEAH>bM9I{>> zDa@jhfmU8>R~#nvOaO!!5r3J@(*HL5bof|%M@bEswI3Mt6uI>ZY$^r^fl-nQ*Qs+b zT>W|f{hvMA!2h)@=Bl?6RNo+ttT-q2biTw#qVdGP)VHVX(^4+rv1P-r=O@ae_Cf=T!gE{N&3r;2q0P(b3y|Pmk#vXu}-@g?48Wboz zDeaTIx9oom0op^7jPB&ST)(YRUm8HDErS4WlSlU8L?u)aF`=O?JI3t?!HK8od$$B8I;c)hqEn$(x#mml8SB{O&+M;L*xQ-3 zO{y*qjqG2Vf9#umVA;4nMoXxwg*h(vWn5zKU=*gve}34ey`<0xLfj*j_aH;H-}H!T zRT-@@Q*|-9A^cAT?Aw2{k_5Z8gslQ&%>gQD%i~kkhA6_A%n;yXK-9R zxfTy>`1bE9zwU}P8vD{*c+nCL^^=l1O7&tJ<61Z*wQG^dMfB6_qKR*4Ap34fElAm6 znLm%`bYVO3X0X${tC^H83IFI5yz0gQ^3*d1|L4I*lqy?!aPX;= z3EBbHAUWt&Df4Ce>2DVjl(G`0d49f3w^|nr1c}arH*C$pFC|TiLaC8qA6arQZ?6c zc`D38ae`-zhZZ+tX}Xq{keim>Ug5A?iU4a#rPaf6=MayADA{${B?3dN}83pE4~E`*=ux&8o?`Uf{Yd9gx65lcJ%&>&RRG$YECf>i~Fz0RFwd zknyE(L2(|^0#@d5SueLqwdW}MWUvY2j?WG;064Oedxr(zIXUg!GGAOr0!F-^~cZL=kIC@3RZP^mVM-SeuoM#X&zZ> z=xAB;ZsXeG`ha#Xck(i=Tiq9NsOPI!_%FOf0$jji9M@tY*&PM&;Q0fLe$Vfqfv(|z zoirRXhcdY(t2iz%u5zoz{h-jR7_gEW!EL()S*j%>dPg4791%s(^tvyWGiz3_cR=*U z^f`m4HadRyOFclT_`8;ajp4?~;-aSx7~MyF!56KjlVR$fqpe1&ui><@eyjoPyNYy- zV9jUV+2X?i7YY`7@;IHhX2*SlsUn3xJJmQAU20@BuUm9<2+5Z2187KMH{L2DlbU=n zR>cMd)cd!L&uDi0qz}K>x0nY-Ir6q8a}84}1H7)YC)}nIIlKa*mIfJ_&Q{PfcE#F5 z;(9=oLk1+Ew#1Zf5S$RScG_ELAF?r14E(M7Uo}9D4`&1`Xu3I~^K+zlH47=oxpVli z9pc^Om9;`Y^$~Za(?(Z6slmy|mQh)JjXv>Qi>{g>sC zjBG!Mmc63YZS!w?me&~s<5g;VmOGTg6o%42a5LDc$6)?cv)>DH37Cg!V4(bO;!QY+ z)7DvcFTMFkEOdfRji;4@=^uu~=CnAdAq(L*3w}!PuoOkvaix41n~q3B^4w@`eE;0p zsFkf9&zfXW3W3~O8z&j~5@XC>=mJBX`q`5+dxO1bv}9Wt>Gj>1*>j|DiAMhN+7Tn@ zculLg)q7A<2R{VlQwGxi=Lw+SN?$#c@wxd^v2MNsfxfhSHHc(eg%G)5nD<)ObRx*t|kwRw&^p7yOr;#`M+qbf(OV zI@Tv5+R?ar%&_=#4n%&Bh$7DgK_j|sD_?N5g``Fz zO*kOs#pTw}lNcp6?betSt3}qTRNSU{z7i2clvRUlr4anx@3{lXBa9c8S(%7kU0M}qy2~2vIoJlG?^L`fx|Pm zUb1>qE+N>_Q`Wfj5Ic3Bxqq$z@%ba0SEFp1Y#p-8x=vGxP-2i!gW)_N^Qj%bA-+HR zP*?6p**VV>X@maY@KQ?2lsrcvP^puiZcd-wHSSh+Zf<7gX1BY^*aB;LU?hAtd^(wIe`K!faxD>tW+iO9WSniB-&;IpnN+P1eR>+^Uet*o}j z*A4ICD;~H#W|ECVczc06Sf2dx2#Yzt7MJ<^VdI%LAHyCV7_Y*a!rc@ z&6WaSYIKNiQdgbl=7Ew5BQ;)OkUd+`y2%%dTKZUZPnlPdBm93hJ!3r4p=(JEK<>x) zBbj2bFz4MwenKHOeOI3bLdJp-V&+-V3e$DQt`ynQ$VBR5{Ev#XN5nO#Xo$DW7_Se8 zTNS=z*TfATX)L+8^#Ncsc*MI_`#((>$IAP`9AX-|oM`7D5{NDKh%MkjH#u3Ie)C5W z_WRn?7k5!C?qQfF*q)4(Fvi8Asf$mOkdZNkefCv)RKvn5=v>sZv-hPdPv}o99GTC%RQQQ;Z<(|&tbrr?r`TmB4_3-eW5S=iME zhXKcLzJf9dwY*l?|G`4vk2m5AhBWp>6N~0?E?S%<6-XWGuXVy0URNzB@qsY45y1HZ z-S7u*xD@%w=a&DMMlpUe8F_1w7uW}N{8}6+~XlIQ$NHbP`Yuz_(9HGQWo| zaa4C8mb8T3n`D=Y@1Yb~ER6U1gFIGir843Xm?<&^?;NA53ag&5ON)Y@7Ksv9@}~?; zpIU2a4jz6k*HAkCqvxmBY2TX(^se<)a@dFEx7#a+tB`ybK{hmHp7pa#XTe-sFArKf zg-o4$Z5i%$v?4hEO<^q!NI5SX36+{VT7RD8`N4*LLy#zRFeYjd!QsF$LV34? z@V}^#TU;+GMk5W{ zr;_2Ab*xD_i0e&Jv=;02$hw1hb3MmK|I-BNoc6=6*iZyupLG*HO~UR* zzr2(A=0^FDe_dZG0F!Qv)r&Ar?r*f^$Zyy)?MIfxCPpfzpbr`T>V=!&lR$jDEr5zS z^MtqEDdeVK#{t9M?GJrg@F%$sIA~G`A>gC~>}%?)i5`sHS}yU&H@nuzYIG@ws?)q9 znSyDdZghkuOgF7HIE9a$iubKMyr^}6m*KZNI4TsAv?~!iBX=X*duo*2<(t#P*1K@* z&RdW^fui})?@(+uME~d`plqf2*WvJ{{k9ou94&W|O`9?zL49;i!u`?py1m4m>zKA2R5Nunb7GBOCh)fN=SSS{;hYdDkmnD0YAVkp}EeA>p zdgFi4_pc8&C0hJ(PU92?3kbnay(lz^eD9niijyfTZ5o~K%0_+W`(Lp7qCi5i`<7q- zm0Zd!B@LksP7Vz^VBb1}Rrs4a)FeG%nqiY$f9meap)DB`UL%O%FM;?lc~y5UyF8Cf zhSI4sdNdfo2g(Iq+kbn)N>hUFIHO9l0^T9(^;!Br)0oPzl_68jrX)ro-mS>$fkH2# zVWHu~^atu>eYjZ=S-%w)sbP4cPw|D^mZg#%Z&O~v!39dcdTDVeH;F|R`)zYAa?*#< zrDnG_2UuagKIC=&B%GEgwmKwAjeFnE@<6AeehM;%UlV{%@7ZCB@yF8}|K;fmJuZpo z*OQ7Z?QPzcTc}GdV^IoS03V}5EAe2a>xW}I)Uj8(R! zD9pc05wWDD@eRbLQXULOqM}PSKpj8_cvOCgJRf_g3@qpK+!l>M@~dg0wRT4FZo2&z z|28f#f>9l{^!~m{ zvPDq7CIx%w$u`T$cS<#~;~08tK%%lbVDXP+Z<*nV2P>VBynM+c%l4Ug_&4yMNJMO~ zF9-?;4Ed}G|Fk=Xi_MAsKgT*g7MM{3QfP$wR`~&}x&Wm+f4JZlP$x)LT_&h9i{y7TBJ~V3&I$`^$|~T!#&P8HPGJ}vZRGp?wUpq9f~pTJ zRbf-^xilj2*MBIOTPJ1j`_5>Ic3H^kUJ1Kbh|6t}cYoT)P1%qHV8OM?RbKI!$OzGj zdt%>j9zf&q+qZWJjJZe39l7*oDOLA+QeGr3u@W7rA{}|^D+yB3LfY=P&?Zu+M!ZL> zC{)j2*`ZP!84E=C{1jtuUT1ZGh5IW-PaSV4kW8s;)$bT!OuDFp2JA;Z-5>o;9^fA2 z&De!dakI%yUOu4k;UC1_{mp;K%LtKM`s?oxjv_56_O@fjK5-&NS40R`7F*C)x%4m) z&OnlBX^9yQP##F&&0>`$)GUPhnvl+}zzA_yS^n9-a!nh#Kh?Y zS_o)8wk$Z7%RG5=!(BWahBc}|Ww#P4G(xgdLaVm-wVE~p^MCDA@zclvX$|w#5;S-y z0T|me<_MmYlxerPTV4+=RQVY3Ax-lwPw$xHR5XJnx!gM#$%GPz`@XPOkk2$9=x_&w z6i;)gwMstEjI3x_MSN=3v*t)e+>pkVx#i4(TH1^9y>(y~L0rPWRSMS}=;2?#G2}yr zK2F^-4YGjKIhk2RPX0^t%(a22DiYHnal0y5#88)|1lNgQ+I{p|9_FRJG0ZHR)49@! zVCb>mY-usE#`Z_XA@$ajCM;fg)mPSl$Wby85u0{N3_i+^DfSJKi}yog?RBQi9uknfj2XGx))qTeEpdo`3mK+QvSvPj24S~wyB4j$TCtu< z-y`?lGgv)X^lyvg!hD$ZjTQz*`I$U@QdD zM)X0_>`FlUp_^UAZq4iejPLNF4M(+*Lz^0 z8EKXaTl=?@H*K(idddcs`kIw`%7fGWP#;k{m)p_k+ZkEdrDiAqvHM%<_`5*1&C%Ahl%wH<{dT!*@w%(jM5b^_3ly9Vs=rLGl zrgzvV1V!mVgCE!x(93~V)WUW@IraR%s_-gBRS8Iek6<7wz*&WvmI4_siYaf6jGT3m z{xtXf!y!Io3mZA(=j1Tw=7FT_fw?xc^q0t2YO@}z7dXq#NuxS(LDgToE(}Y5Gl?OZB#1PDa zR$%9TYv&hl3&j`6#Q+>DFe2cRA18^YX2(kbBx@ixBm99h44(J*;C0eoM2ep_Ca*A@ z3^F;mT}Bz_jLgEQL&0#%iWuTpY4k)nZpD}F#q{Xuj{c3h)X)dg`qgLA;Br(VVS87* zIc1$F!^R6^g-4nLwhDdYzUt@sBjj(aEs`EM9K6W#73xBq|b#||Zvnu0LV29&b&fiTrQ`dGmhTx3bVG-i4O!<}>QgTwAVDHRZI zd{?k*fnO1TW!E+hp+~B2`ImAFOgP$I=%1dapRGJRwyP5X>ow95)baiiI$=DFh;%Br zMH+M4k&&pK^q=5&8UQKmhxAa9OAvbY`;$CNn0bQ#JLLLjm~oAP?6xx=YXHV{L2}4F z90yJ}&W+DCFF2u$nHFP}KP+bH$F94A5O=N@7=3ff*5WUJR2do=V?GoebY_lnRkKkC zt|%q+0JL$=@4+pU1ypvCKdQpKw@S_;JgzM3B)SlBK*suC%tNprW;}CIM`(h~Z6eibK9z4>Bo@)_ zNfA(YPS{_Bup@@wa@S@+^A1k#1p7KZU}Q9U0Fe1%1nMN#!(g!GLKQKsj3h@ooFyQ8 zasiH1WR$5Fgdbih!>U@94=F5qB3}5NL1;*8D0(ax#R^i0|#aJ!$<=n4WCOt;*!L z^qXFR4^l5s_dr!ZOv^~?ivQ3S0Dy%WAPZssCH9*yZBPB02n?;j7QAXk?Vf{|ymkez zPR(@TDp?Y5oI42!_&t}QA)6NdgOiGq5-BW$c2QbYeRV_!FOc=vIP}AD#4%61jG|=J zq6WLi7_T|GXQnWluIi9_umo=Gr+@tk%rVaIp5FXL)aP%IIBF)9RPsIVw>~H< zx?qu{!TZhNyI0Cd_#a#=&iKy*I|tsf+I?|eYJN;$(Fvh zP!oF^+WWA5L=ruXsb9pE5W@uZ4o^Id7}LZWz^*Ub1kXAW0WA>fN{sCn^zC`5eMOEe zw2%~}86wCc-vT}b+zL^~G9F$`vAn~R81WsIiq z8B%yf4=H~jmo&^Yp+$T&I&44owT;9NV_BK^*xfPMc?1DNrT_j(emF&523$#y@jJTN z7vV1vqq}LD*ZaY8eYkUaeqwrzrwWO*^CgVV+Kdq&6Bq|0SEkEO(%2#%{@Q!n*}%y6 zD|l-VT*{_XAkiyFowDnBzRg%x`(WUY)(Vu^j?a=CmRZ0cKv?&!+NpuS|loh8m`^G=03gOrj1-amuMY|bY zGM4^+gz;*GHS1Y}2jFetuY9U4C9E|dp=Xf*Y(!ELRoZ*^t??w95Y#R2i0)!bQMWd) zt}`jE!6BRNnI8_e32b72oiikho;CZ&LMy{CoN&`9k;`uHWOFNC`#LA^L^vjhR z8c;SjxNVrQ+)-TG^0{9eDO>Goy4rf<0vg2M1#Cj^2AS!WV%j{fhF+e>j-Q(<3@n z771mBfwx3n zsum3C$DT(SE>{T2{PRrN2lgvDWn1x`@7mA)(kVIb;XdC@c?)t)t3V+PvV)Md0DS}D zoD%6ID|Pm!Vj*nmK@r&JC*>0}?dMr(TpBog!GM_`^N{I(iES_Nc-Q&fsd9u6yF9CF z+8nx-r=p8zAs7})`_L3VxIG19Zq(3f$Q;3UC@%<5qErxl$CGnB07$+VJ^#Ejs#WPE zM`1-Re`1%z54rb2++-!$=Ph5+XrPNKGb2LJTW_9HKMFe0a4!jj8DFs*iePOvTE_bD zum&Z~1xD-$e1x(-Gt4A$V1TI#u(o=2*Y{Gw*E&%SZ*V0$LCI`>#J#mq!!^ex39y}I zyrt1EilA8j%dP|CY+crY>Pc9W(&-Znc6vVNal3w>+qLh)fYe;e`-gTbtaXroWwsmW zpj+W_ib{y}h#ad9*_#vm@A;fLhlmW9vh~1A6&$3B@&@DOm%-aRJ5NL8QPkg=91xZz*tS0s zxL@tJmTUeH4rZe?$&XK7-)Luv#{{P=L4~>Urt6u4-lZLZt|VuQ1WH2i*r$ENo4rDB(^p$@Tw~mVC2o#D+Lj!HIj0iLA2@^t#MS_; zIA2dXpgZuBKp;YJEpQY@t4@p}h5cXmfn#BFeOS3>2Oiu%Viu#iOwwKMq&cjtsbyG0 z*wY!Yl7nC1hG5?;xa&Lxy($wH)PSOJNXnQnn$Xe4{3*YfysbAq3(sr4dSFPyeEu8- z4hhmCGJ2ncaA_(Cs=13Nx}y*-ASeDkIg+B`AT$}E{I2G*^MDngq;r#>-27uRT~Ktc zjAN)GRmEieRGQPu1pv-_06?fSqKwR3xrx(A)x0uku+?59A#}0Yao@a$B7QQ9(*&(z`f6!yGk(Pv zxg&WsTe^75d9QNK^vQ#seZC2vZ^l7p^1h`%=b&G;cDn0NM(#;+jK{(3r-Tz|*fVT~y$l0c3%Fa= z7J01}Gb0~xiM1MJ)QxW3@_<;qj@QVQTX9iiO!OjX|$-tRk@&NomTm?X9 zD5S|hB0Sg>^h|wXZAc>PoBFM z6}7oOjYdw3pWoAze7HKnzn>$eD91*{xVv$wTl~W;i6`QKLM@rHjSY!mMnl-kX?rS6 z8uu^bxqvGm+Q}MoccCuiYy`ca_Y?S0y7A_NTg-u>DbEXo2Bl~G$j9P&91O83eot%Uec;N7 z)(xDbIoML?{iW}!Em-@T)3%Oqt-tTCEUk$sjpu@eX3}ql`+bY@7gW!i+}ASm+I0Ki z*&5jxSFSyJVo}0Fi}Q8c8t^f%EnaW|Br-!(GWt?wv6$5*rM2qvs#sT-lqgqHl1)`> zHoD^Cz~6Q4GcEq%v&7q0`QBIL@6)aar~&u@pr+oUxygWr-GdK~=30zL!x%GUi3@QR z4-@GNoiIh0{Fq2+q%MqvE(WO!%DO)79z&2D@&PpTHzAzVaWH28J&OEws5)poBd&IM z9S6Qv0W_%Nk0_g~Kdu=0-05pz2HM!biQg|2&=A};MnddVueo{K6?aK$wc0du;cKds ztp*ga!WyhYwS8@Y;tZwMuQc?}vA^U*$G%)){Wc+nyLT%rUq3 zM9tb$y9{@%ULDT$t|7^BxVDdTO6EXUW^_71n!=~CxvZ)(Yq=uDiPAkewN5 z48nLoR{yiA>c!@tE*T_g)LK{xjSUA#sA}vrlxzYAX$#a=J?vNZ z87XJSc9mmvF><;I-6rfw>TEE|H8HL9nNV3Z*Svjnb-z-#*9KKOl2_ScS}c zAi zn!bMNi^RJoy<(X(#9mr^U$iS3^Ff_@263)n2rq@a`)4AfHm{gFE z#MWCc&Np88a%mbpPAbV;5qCgFeLAZk~Bdq6Mlp^NU|L99Qa(k328i^ ze{(+vEP@&8x`mFPRq~mzuL*Dub(a42?koOg|D(^S=6eX45=crJX+p?;U5LqmWX6EW z`}qOPP(^TCW9PTmG3WGdX|BGBiK=p|Mf?7KPE4L;zh`KF?6+#)-RIYTiDPzlhV_NX zH>!7+?l;Z)+S`d*i`|anqMlvt4-P+Dj@QLXwN4A983sAUm;&`trD@!!{}JjV%j?t5 zc24U$M)Up2pIv5Iu zbT9ARYI|__7}wC`UfLx`H|c+~p3d-^oXi{N-Xg)WN!FuokyHRIGB`lo@*8A3>MWkz zzSprI#9{p(Hh!S{@9r%%$LBqUqXY>g^wPhRC*d7sxg6*C9deO#G0u^(p9J0U$hYHf z#VQQ@SO!(iB!n(Nz8debUoKJ*2@R#aA0ZPQaj`1gizs&><4*t-N2TWEsUKtiwR~ID zM;up_bV2#QCdN9`<3aAVLSC3LA~$36ZgR|QR~Fo6Bl82{md6NogvgX1x!_KTNmH04@|Z6G^8GjkAmV<0 zB%F-7kH3Xq2XF6`g4IuOB)}4{u((Yueu zx!%Xban`}r87Dsaqj-}Mp}qQ~)BS|RkuL3NmBDw>JMsSco=}2FsTiYA2Z}4BTn9jN z2{wMc)xwmwi}larF2qVaNmXU50(o@5{<-ZNK^XPxLDRb-j;s1)*{|w5Qe|=2V9vZ4 z6LZK!S(a1#?VKxI{S*42fmlep9ERU*{8&4GU#{(ukwY98<(whI|18uXHuce}IXjl-czs(UG13aH_K1XQRCUP@|J)o4?hr4k_VgzlLwTcLuooA+Ej59Z$4xQZ&{ z;dtNbeOvgpsrs3UOcUIxI3AF%h;ymFrl~XE;al*X@*QrF0s$HjF{w_D?`=7Iz~I_T zrzSeGrW)nMOr30uQpp-MR7nIfMTZP4_F|$uRHZrPO>PeOyj$`>v@2CVsp^4YJ*`s) z7i#w$U6Sy~8i1$MN>Y4v$;Y!ZZNmrbHhuBK;)I98;**KK{&oJrhmYykZTl$sT2enw zhjbi(=5^jkP?b}2@0Jn}d^`ja9H^P=iKsDwunJBd{P2ZCBC0SbssJYZ+j|oC{+qvrBq`8@&&j@SCDzc> zC;Nk|DWMM+KuJiPgl`IAog_dR2Ut!Xl&o-o5ui!b!+xXB07`W@@iGb9e%8VBgcSsj z38{-W_!9RP=-ycdr8z|R{2&Mb$cyUiK!%bf^1-McWnb}rgcXu_mh30?CwWa{D9OPj zLiK2a1TaHJen8jzwtI(8lGCFz0A?yFMR1k|7i85G#}&N?s0wSVb#Lz33zOgmY7y&8Q>M83#`jbe)fTFXEM>02 zN&Ov{^c+e+BPHmKQj9)Y0W(J`kICI*GHrhvI~VGaefp<1d@m;(_4WsbO@O75ONB`p zs*+gCTW4RPs;Y5L;v0cGnAa@Ufs1+ z`{98j04YwC=`ioT`a$-U{pLZV0caN69vC)R(yI-ct;IX__pe!6yL8T74~5nP^&m{BwXCu|Ns=9(bbhnx%`KlQK8RsU{;-M_O5fR&RK z&%vrXW%fJy;~mI%p4F9$87^X|w)Az1Mj|jxt`{{1X50b7)K_73Y$GSv zsEcgh#y`FhYNt)@-IkWRC*N{Ff{xS4QBeadb0+SzEjVyYzdkJAO#Lk9r9*E zbCQy*uS}f^Ynq9QR06Ai_+FW*K3S8m`}g)0+D{HD5*GVS19~}T_81R!O{H<(cOTk+ zHE=NNl&WkB@PWlmfplpv10@Lh-)~$dSsYHswfzQy%$jX~X!sefR8zcbblOmFwFy8^ zH$bcZy^8=^00A~tdQ>vn0)>gepn# z{~K}C)h9lOb?N@IV=VxfS^wgWMc6+VAZ-9RGbQ>5*ZiQWaX4wV?HZOc&^0JATb)7wm@E6%y1=n{h8XfFg2d_}{edJbct6;4!Gduz*u(Sibg$lf{~ig}gWA{vhe-WA720LE0AI5w}9!LGZ%g+&2T6t1POPgv5x_ z1WIM-L`zxG`bbTLgvp!07e)`B_NU&6J0#HLhfO!?oV*DL87D>oGwwe98K8zBhk%C9 zf}n#^7?R%o0UD}C11C^ZNe*?K*JA=yH5#Zv@}Nf9p;>u6&(~p{<;}CFyC$R$<9XzP zSYDWNDI^~W5-fPMA06Cf{r8y@0WK7Y2!KtjoEDX=S)RAaH9WPat9N`)`*r=MYgV4f z14kr@=eWkD_k-#6C^-@QodR=#cEO=s(NJ0Q>HE+4%P5`ka z^~S;ja1^IV3W6pROlvRe)x$Y5HN({_z6+#1lHrMU-w|N(TBu(X=^~^rl!htEe&5gm zw!4R(56+N9_x8RO_Pd8D+#_;lTs>mCnRi}wFHD^k6KLJ*dzMIgjn;8>A4so~`Z{Oy z*bMdCA;*<{a$PyGSs)Pi6o3Y*v@C_=!e=3=b()V4en%CVW>euuP+#2wK2MVU`hGL0 zGSWY`j*cQF-M_XiLceB0veqVM!BD*=MR$FRV?bDd2A*dXHIlmvIoLCxprU@}N=U4n zf*m6X=DXQFvJO(^@KGj zHuWAm*>!KCz4Q3(A%BBR-WEY%CICzn`c(<(f!~zIa6+JTkd|U3w6i}On3=lo-x5=sG(sDSiZqW<>S7TqhmcH5p9J;pI7 zdy3L#sGFz);%S(y&!O~0Q9;4q3Cx3I!I>#xOd(fxEZeSv6r@c5?6z;c{ko`*Rh^W< ztC6!}gX-8d>rU;0#A6DiBSYi_!$y=>Pke2AbmS1ItGYrml8EDRQZ#(5P%=f5ZXID4 zJt#Y&9@;Gc4FJVKlsVBgF=IG@oJ#H!-_6w(T%$5ux&F87zaZd%=ireF0l3y#tB`6@ z7F0MfA03*@YrIP~dp@?Z?NuUZH)bszM#hwBCDQxT*~c?4yeuXEQLe!E@) zE#$O7QuCSZ_hT+1Q5aTTV|CB(*g>B=y4QBoT8OzV6M>1}cf+?4?!bh!a-!P3K_ZxG zPe1l;*=eV1T~IrnI;GpWud8ju5I7W!pHcCL>GM-A`#er zDgOv7HqRUbpF#Rd%3i%R+L@BPE9#3?1Y@oEOcVjYX)mE^#SU!iqNk!lf*HOPl*BxZ zyZ{q!Fde9ZT#*{J$Z6}F=_vI9U~Yuej22qILZ;Vip>F(t`27%o3_nnza^#l%|Cqb| z6u}C&^G&-YNBErQB_zW?Z7s-@`UE|!+Dz3Cr=^JV{ccVgfwtP zs&udK-laZJQSZIby}ft6?ctHh>U9M{ozUt3vU!7ZTDQ?umpQKQ*UOjl0*=nPB;zXm zCzP}RFe)2j8PU?HxVBWiz2qpQOtg|y60MgsKjv?R^SRM5EguiQi&ee9;;{ZV>y`q5 zC>%S2KX7`c1AG-2?q9P45)_Ru0on}?Js<#{eXG4yM=XbaVN8=gdmA86>+3~WyYR?K z^`6qV?GFqe1+Z1n77hd(d4W9OmV#{TPRotm0!SW`@La`Ri-@k>}9_q!EWmb{m3kYi)h9E18!th#UD zs<^+>SCK?(uOa5kvJV?pGmH=cJ#`I*XBJ0Gc2>aZEXLAiTC(bIptU<_v~q%d`5P`N+iqgxezBJ|BB9}=%as?c3n-N-3B_A5CS=BP zp{j~8TQ2mG5dC8N+4sf)YUnnepoWqdsyhUkTAV7#(v);jD)SEVze%?A*NL!lx&iyM z19h-@-!%`BgsRz4xK#lo-5^<^r4Svfl~_tNKjiNKK-j82R0lY0zaBBzejBWHs9LED za%fYe6J|#(%&LFV|7Fv5>$8(4z+!2dVy#1~o)srH81GuW3IInACk9eDFNN));e+h= z4!sDI{$A7Uuj>tXY!AT})MRw?Uk%Ae6*xX6;Js7=WSPA|n{S`@G52a*T$pX0l$`45 zpSUslzpXBHy1U@#TVq@)sY~OYe1CKFJ01`l@=bW1cw^Dx%XG5I@J`CbACuTRrRw3q zy)EYqKC1t5|N5AhceRJvc&PU=v*PK|eJ$sX0{C*8)y3t<^_z}-ANR~QD{S{eEraLH zDt~4y0OAZ4Rx#*<@&$>v%&*WMH(yyYe{O;!yN6w6Ht#omv;M1u`x~gluPS-}ylj9F z`2Q)js4J@y96h=-ti-mc4_9W|hxJIe4;%1J{3G+}OX!-CPtJEpR(l{bZ<33DRrJmE zvChm403uh3_Q2t<6CPZAZSkkK&?4)Aap_N=CjF{;3%}qUQv@rg7b6my;2qUb&Y<_* z1OO6`<%B;%t{*@|H3=onk(gSIJW2E`f#Na%8;bX7ZcWxa)lgLRa5YKJ3 zr0pIEb)Zdl^o%~C-(0>r_L-gFk{lgbbN#@J%3eAb)>jUTx~v9j7`s!l!R{Z7Z;-Gk zDnzJ+{C&nHP4+Pq;w=X}ZK(N*XoEC-hr(f0lUbQi8wn z)pz&nVVf`leW8L{2=TCzlc{1lrQ5Opq<%{Q{0u?81{^8<+3L%$>d~ z=tBK@Ou+YdcB`Z|?#{5Q6a5bf4M7nd>-kN!t1rHegk1zB+$Fs2LYiT;-#K_NEObWD zD=y;sXcdc}QcH;=@_tF~zUSk_&EEf*`_tTYbFxr19LZ=F^W$ z*f$fophNV)W7WSewnf|ga$-Vl;FI}>AFa?FKlw`9WJ(r2iP5QVD_nIi!w+D>doR?< zG}L;V^?s3`#9-_|K=Kgs25Z)-0~hewf8}t%M=Ak&yuC_zx5l+0Ta3g zlY6ul?wSp9oQ@{TsrCVh<7#d{4}fM}s=a?#gB)#w`YZp-gnL#7<9JN3_}$1vXI4_F z_HgkJvH#rR%@+x${qDA#;Lm3r924qO9DREzF{<3$l|23WZC@td{he?MNNGwp+Zlr) zA$i@`?@Y3zPxP&YD;^}@g#gK+vRP54sZ4w9SfO_J(eAb}10g|4Ab0`DvzKTO<-+;l zZdftRLccH+g`y0GipVLesH?Wy&`$tcvb;Fq*Y9kP`uG?Cjn=zwz_ZEhY8#dAFSNvf z+Bunsxivh?Hf{v&M_Z=NJ@#_inQu`A6;2;D;oK#V&}@iEXqwP-o$L}CG?2^{mIJ0v zc8?vgx#T%{`!uT8M*Y)2F9la+n(o!zo`}cfY0%|9J;lP4a0Vh}hFzifW;rSD=AYEga*>jHo{4z-X&BWrcNt<$=P z0%*v&foi5FCqqbA>;MopJESZJjmu9|sq+hxU444>woD%e&W2xg4FN}iZf8Bo^rWf> zCp)BC%aZtq8Rtss3sv02>U*c$UAW=i?WT`bEsK9@Gq@?|0w`@I`BwDPt%WPEfmA4) zPN`+-YGtNrDPbi+55iHD zBMSO3+-uG`6@R!4ZOTKKiV8?uv{9~KBzZ+_*`&Z)oy;6VO=I)zv0fQerR5S!oB1%j#L? zEljv~S7CRY~VLV_fVsM_+fpU;f`@>nL(43d3D&;!2Fn2(dMd*iFb`v7d}0}k9r(e%ov&X0DbrKZ^j z^^+YgxXZTNAu%f5V_LN7rKM&>Jy1Is1*@G>a=0;(NFq(isJ~MgUES zJ=Td&6K3Ac67hE8`)`S+zkot&0BjhmDjY`&Tm||CG%eAn#>yan1!^WM{HV~<$Y}lJ z*y&9VBq>akM2$fgTr_QOu5~cYt5*RSD)DLn4mmKMjZ6>Czlem%$hr3R4Zd;P!oGI` zniB27yzbU9$xsIj@dY$gC&29YlRFB2x+lXvbilak+jp;vd3k@JiYOV#u};Z>8prf) z{9~)2#%N$cIj{KZOQEWW_EvGhpUE~%c4yJY$q4hc*;}IK=LV|d``BkT1DF&7fFx$v zhh+gor0^bu=`c7S4ginA;Eu!-^uWSr&2jz42A<}<%O6!UZyNooKwY%Kdq2sz#k&3Z zsgAxq0g$4di24mv zrslM$;Od(eIRRr?1-UCurr)6dJQEat6G(oI{@jJ_bYwa>Jgw8=GjsRXB%2v)sac6n z5azU7yV*t$0jFXRI2-GVwfpN$yyR;fG%ni!e#B&`QzmbX`tXRqRXBkPKt>NvR<)|~ zs>@2>xa5_zDU9dlN#u24qE9=n+q9SJ6k)ydO~PYqp+Xu*%NKyAsk@B}=fm7O4Js0u zlc;wYv{FKwETgRR20{`7lB-HpsNI|EZE4fbGHcg`W&gRs;EIhsr{ec#zn3!ib6;Ky z09@9Lia%ZnOQM|sU~#8litH;%Ij`ccV@R9@Xt5UR_EzjQE?z&hcJA2;j;!u9J9fd8 zd5`IeDm`T8v-fh1XM1E2lo=y$n@ z2wTFUmGlOJrc&*p<85F@{~e?=9z&T3DY#ifMaR3?4=I>HhA4d&CgN40s!TfGowZGi z0;rrA@RJVsxLRfa%NIg1nHMd_Bz!Y|E3UcQBf)FxN1e zD?%1`VGnscCMe}L|{}0 za`K^{rVE--Mr&Vk@*(*Nt~@Ufr=mXAvrG01ZW6>1JqbMK2N-DrBGA( zJ`Vzy5jEHJ{VDc8I~gF8$7x1BuKLb7bt)kN_!Y^E@`nI0b(|bne!Tz9AqqX9~6=)1D*QJ)-a43vcP-n7)YyzdEB_h7t~r42E!ef1r9 zJS|nWpK`VW%zWv+KLTi4vA5f!=m3C*deo_ygttThP2*3c5kEkTR?JMZZHAv%9xAB8 zeTcb$$nW zC?w^+4M4;1mT|*EO2cX|?KY?UnQJ&}zL7llmE$mH=7j>#&`Jj+&spSxY>s+I@e2aS zYz6=fwH=X2w?x0U?}GAY&&{w68w3(+4G5yAAk~NlnK+6-gw`{VP84#ICr<;`GF!ii ze{{XSiT=S;dmi9q4z)=MEpX^YANAH+ROQu~_7MYVNrUoFypekD+y2xToWNm*d~KbN zmC8zTIG|=phI;ETOoTrY7C<1lMqOL7;Ce_Wy1=D>@ms0qzd@q2cZba@{_2tp+Xw`k zmEr5aNi~ZL(JnNStXTfoXf6$v)pzih;^7vdeQNM#qR}=R?%5VDv2{+_^OFYGUP2Wq z9tYx{L1MwWAwjAs)gC+sDbP+>OI1R`bsPH!ZO(h4%edD=de9yCB>Jq$vW_3ceqESw z-`nIUwNi7p0L(NnC654_R_g8cD%N|z2j^oP+OYzeANV*-zz2d&812>Wj#6(RK*RQ- zKdDX`gUpHgJoIPCemgMn(!b56$PAm%5mGK1L3J1+M(b$SKf4th#fgy;$7r(>$s5k}ZVly~nN)peze&}1 z%qY|3AV);kooh!bzB%5~wh!wovUfefGUkjyG+LetlaY&Pp#xiLgo^4^>JA%z*7X zqZX|HKKB2pDpb9;?SmP09r{Ux`W3-S}p*;rW7ioLT_^KC8e*O)!#B} zGRr~Veg|*79zIAbevhqI^t_@)muA|B4+h{Yc|CQ;Ypvwqa2ddi-`H^xK+|fEwtWir z0W|Z_3VIkO`+fu_;FHarFxuy?+OF0hfQG6Q#(T;}rh4Tv^r!LzWQ6W; z6L}?M@^iwYbb%xnN+dWDhm%OQT>}Y);yv`}u{$_vgr(L9r?LR&lD|Q4!@gs90<7X6 zRyaPv`mY7*4p;=94MEUU_<)Il!?zu8r(D2D_Vv7BRJG~TD7*A;($VK>{Tp@)ns*TLVAU(@bp+#A(bYXD}H*i-&e zI3H~@+7Y?5oqB-cck*YrQuPGoYp1q!ifS91P+{S85Tsy+NB9VtYKo5_wYdnO#zRUA zc9WQ_7DHOY50jD}s(2L3ghmoqwi|Grzd>#-%Ay^os+4b~*ZVwfor+ zn6O_dwGm8C0syv=AcmHMd3ZM7VFQl1xkCgt`2MU#IsQzU>GieIbZ_DJ*Hhy1 zS;BqaOsu}G4+*;jAHA(-opD^h^@~pv@BChvN|8HqN5PNxl1Mw$e0iT!@jE>JiI&Fy zh9F&ndGjg62D%u2OX6YOQl?k|Y4;uPiSo{=_~V$b6CP-=Iv$I9VZk(l5)cBI9@cR> zs#1hxh`+INABZput4PX)D&j{-R?bOuWMu+G8GKjr`MMp4L848ETIwXh4BNFR;s1Se zaoI~Iy7lj4nK6zaNdOv3W!A?2XAhjY1!A##_aU83@;Op+$1VA7b-`cTApx+xd2``% z@O(5{m~+p~HT?9VuiC5~n$@H#w?}=rg(|%tW1dq2y*4v(+@chmo`&}V$e8*4_XrrR zEaEA+nf=}IF87hpFo@!xkaLlTFmiNjP6!>ZH(I_$05mN0Tx42y5HM2GaWVQ<;VT5| zU+?FGiH~4YOqwi<^Ntu~6%Gm}IfY~>Qn2zNWuUr%L{|nhq?(}yW%v!30YEbc$4RX1 z$cgVRfdi#EoO}veQ)LxMLWgI?#h(M9r_sLhdA7asf|@Q8s^WlD*kxYA;apQ-%Fae>=y7vc>YoSx`B3B3wK!cz&7 zu9e97wzW~zRUdE+M=dsC56HHIG5MG_2whRkZx7RD0jvQ2*q3Jvw&tt%osu zE-8EETKI}tAuNYzF$C$&P;gRu5yUto8%%&t6dyLOItc#9u~2-Jc-KSVgmN^n>a>9(UK^^RZN;+yg-01R0c)vJ2S1X4SNx%njuYpF&{f*Okh zD}j%Y?wo>3>qu6QmptB6o8OdHE8(nAN{(_RLh7SZjjOqNe4?{^1_-Cc8=~J*NVcCP z+`njc#naPL96h^d+D0ZFhAV&0LiF0ZD)w(*o?ZFm<=yO~Gj>P~0S!YFfMfF}oY{H& z)zGpC0THQ|QdCpTOsVD;7 z114Dd#bMqGfJDhDxlA7Yu<+8vecoUv6n$5KI`{k#`;S?(%m42ukgtu2jy_31d42(n z*Y!(q@AaGnienq(SLWh(!1=u#8r?n8B77K|(XaIcRs^@3Q0_K=?QA08@VqZit~JcT z{f+Kn8#Df~{C%r2j@C1~Ztgo30W{6+!OnAi1kkknvw9vyQXTSlWUlC5gi2~Ww)f#f z^*c~EaX@JKmWNL!uGfazHFM^v4pbaB-ne>sYc#Hf%JeoB7ezWDouUek12-+NIvl{k z1WHe8~Gtnw6utGiVA34COfh%shhgK1XI>JcLEzK8%&*B(_M3sGM4)8#_)RJ}Rf* zqGeAZ!_SDqp^2!Rn)#^w`1xUp3~%rfGIj7Ai^+|68u?B1d7F`1L%lUj=p0a=2=#p5 z^Bi+~cDMd*%r)wL6^BgcEeT84@0^sLY`=TZSlz#OuG6e7XbZRK!ETe!iyRh`t~t5D z%=_VhVM1CPkn;Tkpy7LTVX%gacSUKcHN`>wr4Z1xDLKT?O$cs_*P#-C0D?4N=rNG1G49^h7hy45I07#k3H zu)PJ??@fM}a1M`AwN!&+iX<=C_rdoYAcovdO1Akr^1C}rxWEW@eXv`KNN9rfQ0G4G zROswz$#9K3e`+%)i!63+cL@!YVS8`28N zs;RC=o(xnkMH+(q(8RVi`7+i`$%c=pcn>D%k42%FBzf;!_ecxl-h~tIMen9tALWC% zfhEWck3g|6LC#_9{}$W(abDN}pp`nL384-C*AiDwY$lzqYF6h5)A2WKK7u5x%#Ip> znbz_k+7eyH)i6!!;rjj=-s4IDoAB?o=`9Hu;IQdM{_jc=IW(BRfR?CBl)*av3_u$I zX864*36tFvOo(S%q*6_{kS*R@vXvdGEaFZsjF>&?&7(IEh!A8SffVROl$1%tN7WXk zKfNHmf+~$Y?M<6hNr~p1zG_)R@F!=K54iYn%G!7Anp#}LY6Qge{8qpWC1H3TfGiee zi_CfgSw(V8p{kU*L0TdI{YP-5H?!e}>%09gSYUuQFCfY$?Sk2}iMgUER zdWT!QF%)YGDNTe!(*oTa#7~V292$ZbnupR~4N1Zr9B4{A4Zw!FW5tX_ueHsjn@cdSN$(MIa0Tu5dRq)?*tgcG7IRqEpyBwgrAmj)+YDJxDL>7oD; zsB4GTB02@*M@Le?9uS~m0?E8pFyNx(f+C=`q;tP+Ah1JYzc_V5gsIj10q1nxn0LXf^UR7nUQXi|X7c(c6c0$!uEit!HvR~cn9M!Du6`GC3ud7a( zn=P_#q*-SH)I?=TFVRzUt0qV-D#4wgilI?rXLB1NR6tzyw6wG)2@0AV2q?Qt6J+o! zl(LK&D;?Ts2H5FnaP%(y@H(=>iyL{=TiVR3DU`gUCVNc$7BOwC2F1e z?oqbHe}lArDc+X`eu6~#!4`Zi{T_#UUy<|LrU!)VkNF81pA-GUB)b%&?g`05Vr2Q(AcqvI1rj&E2xWqqse; zwhR1|$aon^GwYmShWC?V?marWw$~YSCfHKXrX|a%(Ukx#$`TwQMxBV+vWlGz5XKN6 zL6Yo@wPui0)1t|W7{8U;qvoR6!w6F${W4AT~KgBs5L#x=wSUaFY-L zH0|)n+)|j004`KJ(Gw{7H6u9&BHx32GmbG%6Rm~bg=4_%r7%$GL8L13p ztg3a^I?wAqT>9sZol>o%5i8#oc>$(EQga;YC&q1RwFD_m8Kg8M%U+Be7NN8$jUtdq zhEydDE|n5N+ki!p10Y7Ll}sEzXlm?}sOaE-T3Q?_Rzh`KwX%;Zaj_2sfK8td_M#^n=x+t;mb9r}j5F62Gt2mIaiU+BD{3qa!{m)!Z+uC~9Ae z^2qG4R6h~D>0nBAb`eO+UC_3eBy+br_tz|aw{P@}CM~!kfTlyeb}il*j#JD+y4>Ow zL<+3m1A#=M04iJrF9gSCDYjHQU5`w&3GxaEaG*<;9>H+|Ze9c!YM{~yCUOnqc`!ao z*nq}0Bq>AEsx)%6HbzxxuTUSZI;OHXta7X_N=}bTbIi$_?3|cB*m&)V_tbmJX-4Zw za-aAt)s|w9$*KMR!2?tUwPx)Hhnh4{!hC!H=T!BsvV&+>U+0MA1kFzc&C>OU*ncE@ zw<@4vI{<2q0@TnQz!YRgM5igONF-wi!M#id zW?QXuMMXiirq{^u6rgfB&AQ?uSlHE6=}(ox1F+VqvIo_Dc{kPpP;)9~&$6zS!>&}x zDy_jD+ZXQyEwvg1EDhx*BY-B9Uh2H(2$v7!|3xG;9pE|A7Z4;e^eW6ukuOzJ=O9xR zMYBmxP7Hkc2b{;rnGUwzME(TVwwO#FYNzc`pU@kvKgV4GdkUa|t8EpeF%`zkmc8K( zTI3!vChPA~}_KGO2R+1Ht7EPh>8SgQ==u8}DTa+EeoeWc1`!VW+(R&}(xfPlt+ z@8JISI|t5!gr!#Z!tQ0d|L(2l^TJ<)VEzpWjU;Q9jz@1eoKZQ@u5%jF<7^p8 z6^0Y7;@Tj}o|LANHHH{lT54+o8W3l8};Npu$ z14w8A0PG++Z7Hmfbfu;v+m6R>YL)lOt~M6~V0BBhWQ{C0 zc1Bo|^}DQ(o590@(MD<-5{H8rQqy3%8%#>4w7 zjK_<-0Zg~b(L)ogJ%;I>(djOgy?Sr*H}BNwiae3y1AQnbqBkB&tLb}E?}+MwJ}^ev z;whDk0Gd`ESvqIoe3>{2(hmZ2tLx-DXE(KNtG&p;>j7Hm#EX7mW+PK_L$gSFCFS#? zj|NUwXCuFfbLroKRsidezd-)MmslL81m_2o!PR=`$>omuXLs2xuTLS_S;E{2;{}IB zvN;|64RuqQ+$Aa<&iBp~o`h|`9y*@tA*>P;pvDgKUy_bPiS{1) zyAk9}#wg+>u63Cdw*d~dtwQIFN=q^K=?_4oM15`PRHG|C1&M?jdDw~AEs#pe%A%lW z`IHGIri1yX6|0ojK{Y0TmL=y;Ulkrn-UD3dea&jrQl8 zbtOju274PEaXkRg%6FxH@qs@n3?w*x0O)2x<*0ZY#Jwh=pQi0e{`yOCAC0xG*mPiB zM%B~pxDxLOo>^P|E;~_)z7v)^ zm?fVJeK5QWl@o(Tai!9mNj`b>f%jWS%3bd z>O1-Z&`>2tl^?x?Gd7Q>ZvbYf=DZTQSq>J%X(P{tg^eArhDJzBFj?j%IHS^IZ5jO` zrC1lPx+0YN^JBK}?^ZR+P98{?ngQ7b(Yx6n010V56D-|F*654&ml%)isnwNM0Q?At zZ~==hjM|fn_xycW{tPtP6SLJWT{JupGdef_R|vtlmlzy}PaQ`siNcVEY(E*hd52wX z@fTJ>f?pO3BqFIhQ$GK&N9DMaY39Du`j^bQV0X$_N}Qwam1mp@uoLZ2JIlIOjl38H zBIEC!niqCxC_pDy5CyH;cN4QliD10kBCsn7Cr0(Gh#FciGuD zK;4v{cR2tNr3SR9BB3-d1PKl$Jp{WAJcIh{Ro(Nu_G-R4 zp68s^y$3)_3ivdjMPOB?QNa^DGJplHlT}5vRr-JI*y1U}q%}!ar&V>*tdRX&!;<4= zgW4eXj>}P1+p7s?gy&%W-?lEY{^^V>ZBLB26lH#P1r8krE%8l2r{6=!r zt=5~EsHUOxEbLWe6YKMP8QznrH~_he6dUbIxf9!Sds!!U2gqUAjX(g8VHMgG%&_rT z;a4-_046$0Ab01*Zd?oV;WI#{O^vs7Pb)PYZWTg2R3wL@ZK;ExUYUW(_HA%JEZfsQ znU8w)XcN^yA-xAs*O)Nr_R5dhwg+mOI$&f^jn_M3qV%qqXpKv&ORpI+15%me zC9eFWQlDRM5y?8!YWnvojyjlY)l><VUhC>M}KLB?pU@R`*7bd5CG6GiOdxg4-sw5m&n{{RN zKpcSBC>}%mOEj`Rrf2!&nY&WHTma6^PMCR*OsnZPxhQJyLH1$2@@1tw2_SXv{-mYL zhZbJe1%%_?=&v&&RXX5xuYTWSfLUij%%0`lDn?w56G)Mum-WBn9S)0=69F_WIl6SP zvgk@0F9lybig+7!3*Nz+{)=snkl?r_H|z%v^2~JDCjqcs02?-8K zqCCbpUPs-&aQ=aJ!7m{aQW`s?G$e}B!5JsUphm3F`;nd9Qd&D&`vA=Up))1(v3M})_x=KzlCaVus=IVd*^HR0~8y)=lk1?dbqT6LCcZJZ#fI0OJQ#^gwX)DaG& zb){7D;M7<+6TJixj zP|Xa0TIqr$OV2}lk{5kS%PVqJAQi#)%f)~!gO9Tc5}LkAwLOPIN|Fi!ZnRTlW=H{P zU(z>AvMR?HK}|OmYN&bO>U@17cC+6gmEQL>u=s)t0h$sl+Hy)fRRkNX7ZRDVaIm+M zV2bCH|H3T**N*_6nFLS0%BN1mIZKBX&CSxd3~_1Z{(WFIw!^!8NQ?HO%x*^#zE{Sn z+=L&O^evrn1HfG(EWdh&!V7}5=uo$c;fP_SNN6aTW*n<}^#prmBY-AY4|V?IBo)%- zbv+l_o&UCenRftSl8-xQUJbCqRS{KC6OjpS$h9FTp>G=!NC&&~eK?oW3tGica`Pzw zlgH`;poXIGHvw#DU7%RZv~<$_YiE4`RO7G{WT>ia|DV0<0Bqy9vSs?_HuuHTDXkmwRuC zr9luNQAtqRNyean-PxJHyEAY8fB%1D!e5Tlv#UdqTbwo;vE&uTTHB8%%yj1@W-E78 zAJ9Iyd9CQ04VQ5Z0g7T<)n4___IC(qrZ`Y{!Z|f(tUFKNPxG~HuSY8~u}?Q6N+A&? z8H*db1~OOpVzlnow3f>wtlVenWg^|s7m1Rwm4e3UZ7mR&f`1aPzzrk=&{G^%URRtSK{ zU&%BN%+td~n!u7aMO-kipZUDYn58&lcG6E(7gDVkF@u0 zT5EZ3w#_+zz*OrWX56j*?yi-p)fJRgG)t^w-UQQEf*3B={3MWFgGxX%8P9{k+w8Q# z{o~O9GZ6=J1Rq5QbI53LBlcn8hM8r=Fc40UdYcu-Ro(Ll$){N0sFf2;I#?(X2Zfpl zpzzia*E>Nn1(;|7NjL*L`IH1_qQ)E0;FuCD^omOT;WOZ(MNJwUDV;(fE`r{ zv(EJhDo2vOyG31n=xo}?wW6toAR*0MG^>phlruWhJm?5D3_Pz+du}VVLyL5d^b);2 zGsT;mV^mi+!rQ2tvN2fm#-MNe+B7uqcJcrk5|*i4G^?5_q4~H-bD7Gm@pjplar`OP z{-wNjVbk;*5jgKvjM*};wTwzhQUcm2nqmMecmTv?nCYjtF z0H*#jz3i;cp22kjoE}>fwP*aB;7NQ4d2bG7uOtE8ZxO+a_#^pCS7e7eZB_!F&m87T z+dj1;kzp+OJd-O(56_^Bq@f8~RDJfq^XNHE6x^*#rH@OXn_N=#g4v3Nj3nV7p_1@R zaxp;+CkdKJ$fqJ_hJO?MkbBbtfJ08eHmGXe!Xo$@2(LVbF4{$&>Ydd%aw#GJo^I0H ze+3}%%U?+N?cvq(I;#aSW?IzG9^GpLKgTsBH6NTBrMwmSXpS{rNcijVgVz6>ezQA6 z(;j#ZuGmThvlGgmO`z zW5r-`+`+RxkNPw!HFwn7y)Pb*z;}})31G+IYT%(<2Q5bdI1k1e-KmrC$SH#7&tiD` z*bw%=o%{)tOFDP@&^8YL_~3o=JjCl3 zG)=jgU2h$L{vI4zn3bUSxW<8A~DHq>4nlu-7K^wIja_Ruc0YFXw zZX?j zJVamu1;%nY1Ay}ve3ENH@2Q(T3mu;af*WdY_{lgpG&enl<68l2xMQUmhy0rV)#tuK z0xY=~)bbE0MIO5(0GQ!WL?ST%hWV&TbpQ6f(TVd`b=WZ?z+Sp*h@q5P9D*Mlk97wV ze1bdyU}u!=sWBHd-`+`A`Dm1&37OHjSb#S8K2uZ2`>nyfugCqP`GGtdh5~2@GyoO^ zIbjuexy(tk0A4m_qL&S{8rz22ZX5{{k1oeFY!tx4$KJvK z0Ld(9nY>KvOxXyH&=kgLp*gB7_0tc$!3<3+JeKDo;%*rM8q8P)h~M%Av>1X{UYX(3 zw{wl-XFwy<$rMC0RD<^XOYm+2pm4ie5~@xB7|w)w=YHNrx<`W-^MMGsV9t60rnD4a z_h($>5H`;Fk@vjt~w31l$iHClxeFP3TJlG%ZY3A&0y6Y-(%}?RQTlG)bcSy7%}= zkfsSNtOq1YCm|-y1ppd8(_E{xc$Vd%#NUztO_Xj#95=&=qMY!!i{-97X3;X^SO(Wj z*ZgU4JZ46bd-EZ*F$6Jm)uwk8c{9}B5YW&ZL6ZP~r}~-EY01T~wqClIrb|xNyAf~Z zlf;EoBheKFCR!dxoR$bB*enY5<5z^uGZhph9O)8>B~U6}VS_>J3x?AP&I1GZ1~A$ZG;y zxItvzBXVZw(#&gJOy0MbppHBg0Jir5>hhr>8ACGrn$hP(v^y@KaD|GGMv{a;Uh8se`#G z2?X4*u8#$NI7~mbveYe`L6GeSU{M1tMs7jV)CtgD>~zX)%^>s^W3ktgV=|(@kj(8q!L<+LjWOH zkb~$haCHnI6Zb1@o;t2PWk(0z6|QfkHiu@d+Qc)0d8Z857*e;mA6=;PnWJXfO50?J3BY2R#otLo<~t5@(Zn< zJToHf%$^9(kJjm%Jq>XY5Y0X`8*pJDn4u=_Q!(mccozi_LBzZ(3-=zHKxeuPm+v%2~LFDp?50v*kj{&OP)(Vq5+aQ2LT$!;|&3d)COBWy@hMqqdjjJZh(~1KmkS0yN!8 zsE_|nJ_Qyis>aEIAV*?VA0N`y-hFZ(sQKtNx@N2dfoFz`46o1n9G)Kn7;0xoBBm=P z-NZ>4=7P!JXzn0*VJ!d&cZv0{vur@oTwDmKHy|M2yXv1GV3&CgpGATp5|2fbNvwtw zi*~ob+|+GU*;riIw@n5f!~LOpo`6O)`>ep<&!W`wjIE-9Neh0M*&w^-7A|tsw~h!@q-ySR7X8 zqjSZV#qX?mcWBb2cj{}SQWvfD~NVKr1qjC z0czAh_%21fB5#UfGz-NsBhX93I0xq`vWKJqpY6_nO(U{L6qaf2n z^1rC>0_4!+ipNlsLvX`InSdv9uc~kc+wmOk90L+PBX2(J7RWcCe7z$8)BH#I=L?=9 z@?7U;_b(Bu*%UT;+n+{5OdCMLEo;~#2;xMVkx>1{Eehgv>5w>*09@45iyLR%04`R6 z7&H(r<}GmF|313;M|Ra0%mmYY3D5*1rM`d6zc7SvqH@vU;t=&L!F^vu(g=c)Kmac) zYGJsTZG*;On+M>KGs6Xzo>bSNQjx z6e?vRNTwC#0sG%W$hAMlp&?Aiilf+=k zxDH7as{v?4jzYYRLF&&nBmt1cCnh=!C1T7RnDlCq2kN`i#^2o@NG}}irvzxOjfaRl z22OgM^cj6o0yNjgeeab~dUjR>0E}aE5CG>zd~&W~{2E4Hor_8?4#~n|9xDDW@^IR` zsbsRR;9Qb5>El3BZf35uRxRQ6GG)6Bko< z|7)`5v44gGV!TBv0h(*z0rL=p8LNQ1Wk!zu$2BnQJ~>1WCxTiuYAjyGz3UJlsNyaoo@!teF^vDz4kg0W{MuuRB3p7c}1m`4s z5->3#BcmG&W>kOx{w)qvi!l*pSXX0(JpI|^11~tTj|IcNT4El*FKY~p$-IW3p~hRc6N7)FBHyY zB~oxWQj6nr{E>p$T`U4W!^cyoblV;a9!<2}SmRhKeWz<4K*Qite@6Wt7HWRBmv{#> z-AOtCXp_~{Ennd9Lz}UMC__xXZ({CaL0<~dMkt7fg z5?C`|{n;?nYlcUhc2;|cO0Z+wu0f0G%@iOAG9e=mGLI>(Kzzlc_@-G1s zl7KB0NdmnofsG=ViAE<;DZ*r}uuO+)_z*a(XaT z0?2eYFVY=jP=ku$L4oE2q(Y$C=`N4VV%P(zX-NWpB|sB2H8UN&)*^l1BtUbOJ#F0p z8hVV7L$e8hX5m#fbZI!(fCPM>Z;vL2V1^4cIbzh}FtRa8vh<7+`8Z+#KW}pt!3!r= znqO(Ap~;2;-Cl;K<70|5(h0V=Z%J440YDAC#BM<)K$J@G5+I+7&y4u|(Co?QilABK zeD%eEk-yFfj3S5u?j8F zUAKDkcWxFax5JQMzCIc*3)jYk&xeUIE4~3h^QT_uLYJ3B|6afWdr_%P zIvr}H$aou%Z-2T0ob=-P73zH$H+M0eN~AA*yvrxj{&hh*=EBVwHuMCdiHZw2!4CN} z4Bp3gfONlpZ0Kb+*CV4oKb|NLfcJbi z7UEALegF7;0_;$W!{?A1L_T{2K6I_;^VgTl33Q&huDD_5`yy@#${{-;Gis#r>rOZl zpy^IRSK03X3=BI@H`$L-mtaB;F9mOm$x5>ofet~AzjO}N0!l$ddEc|-k0tdKn=%8V8cL%p?HLaD)!zyUgSv8WW@W&`A_to6HP|^j*Bwm4xPhd zObwk-BE6s8m;k9gB*>w+A3=_&(eX!M?@bws*S>&1SPAOSLQdvLT1l=4PzhmKi$?pi# zM6DwM9RH?lIREo_0z1l#$5CGV&HEezcJX&H)Ca$-1AuAIVlE1?x1VPT(8Sf_9Q)2N zmlLi+?hIdu?*Y&-hfds-044*zoOIn~5=5G1$cNa6`Z+8Tv}?DQ-hQFtMvziRq9OtB z=Me;CE(S%O=a2cSn74}m=7Pe7#XAg!NIn*|09;f_JSHHgHfIm&+j##vWrL1N$HQzS zz=F#6j~XkEmAi;YV%YF~rIwg;keJSbpo#4gL zW&1tPWJt)h*6JevLb(j+>Q59nZJr^|4yZ+pZ5S790C!NtLecbCJ7Y*2*Db8 zC^T_I%t5(o9vo>PF_C}-XksGP_-_=ThC%j7KKl*;&F|vB$89}CznA0VSybB0XJVo! zSE0T1^aS5m8e;50>Xp{Hhp3qRxKi2M|4A!r8n=H!Ul90DA%lD|N{2!Rf@ z9gLT=9`Ei|7frf%?v!-Zt3d)1pt&0EVi;opFyPK_3Fa6p$ojF;R808d;!3Q}jHAOR^kWfX+iN1J#H z{r){FRpC=n;{wq5$`YO>OsaV+D%JJm5j-9U%=FRwAaz@kK)VD0(&@c(?)z@RlZa&F z-3pm%PljWlKGl)0&#{lpNOzQ^r#TC<^v>)wtvl6_;MQstZYAb&1yGKhb2>RX1V+^K zFyGY|P|bLkXr85K(9Z$|Zj^3?B!Rvx0SVCb<+~R_-=UGQLQBKU#>~^V z?Bla@?8Ez|Ig0w}Tp4L9fE<-uO>GX%Rs=Yl>&ew2hi5s!4NX$y;(UtwM=1?T-+ykT z5p;~3Aj#v}lK?dyBpt?UBud^90-7gK=_1P5AD^K9924>n{h6Guy;~@a_-c{>zzj+6 zjI-2jamwwkX60oIs|V-^=`xa?{WQ?%B<0#BWDl^9&CRqA%GEhDlGQSO5&(|qWyOsQ zD+5?Qj?E1T$0QoBL46hPmfw^P5+|qI+aev%ixQADG`%SNIJmT!?X)Nk`r@|>m{?y0 zc%l0$qXRReGQ*S;*hoc^z*Qvyk7gz)Fw@n*!Mm}tp4SK(SRr0ZhNDzpXq}N=YMoaK zjZPr|PKr{d*2!fGYH+xrAvu|KHtG-X&K<%hV>~hCh+miSt4jFNV6F-YNPs59+vrW= z!vw_L4$UD9OU(dKjC9G$??hKkx??h!7KwW_m+;>t?uofVsP;Yjj9mDxr@a!m3uC|H zHnce=R`Pq^MrBk{PR{>8eI>-(CLJzGAg(2Vxr8RBb~977J6oqZ+lpGYPyeqnfEanc zZBkm1b@qUK+vK7w``|o{J4Fu@7UnTI0S=>x&qAG!`V8Jdrf&ERfDH-8QjsJOw-S&5 zjpx?fS6)W@vKW<;I~IZxF7{%K2=DL2zxm>aQW$hgENq{oJ;tQC5fd6Gi%(uI6!MPr zRN>Bx8jpC+^2&&$ye}-=K@#9lCEimqlCC33Af^()yU%%qAryL~xMePPg?eW_D=v6M z?ba&`t^6TzKy&1rU=?b`+_#56org7+0B$HH++(PLh z0VL4tfQA|mywH4UxC19MpCE!kq^K@soCRt!$ny}j8+K?j0wx$kThxG1bHa8+P$DLi zWBX#|B1vE(YE;Aw&%N=mu+Q8LjRvqigfEVjP=u0Oy7e!W&=RY7Jmmu6VQMN_&>PDcTf+YPJyRGr|hZ0bT*pD zbQ4&Q+OqGVK7`8rF^r@06-=n@05_WQiRQSZwj>GolK?g_e2%{!kJ2$X^G`lewSzpn z`%sw}mXXE9%_8RtrZxCK)Zd943+erf$2)oL^r^=I4S)60f1o)3YzyAT#xGHxGx^{HZ?WeAyQMvBzRJhB+yqSP#otS zpTv2aU=<9W;Uqq#gINv>LY`8Jn4A8?*sYnv&H3{?>putNq8KYc=dNr7Ydg_KT zD|W04J)OuUqDndL3noo!_sFZ^MEVXU+4ewVao>5VgOUU~OMpc8crWuYe+z2`-Zvvd zDd5k!s7$FqlN8PW1*k7TgF1p{<3Kgu2P*ZiZ%d#@NWpj+Xd<}2Z;Pr|dY?@o2$e4r zNXDwHL&MaVEyiT@-_Y9hYRm~gxotR6ejb&{`^dQ>ft=4R1MGc2Rzi{5l_bzZ5+H{r z-U~IN^e${SfdkYuU~@q}+sCNX+|cc?2=%Y{{$~764=Slh66jG0#2nCIK_)|<9x74^ zPXdhO8B0JzPlbn32cgm=$n*j+D_ta?T#Ac6g-Wk8=CPrTo|+>uvMGtbwAXW@WHeJA zD`XUwO6U?;US7s1vD6MwW7@c~u$W0dr4nTcbVYK<+}M}2)tnnTaQaBb2Y6YF?;k;> zJ2yQ?sfqszzW=f0{S@VgNouZJ3B(-Gpa=6%={_BkGTr!

        Q#rSED+9enrOT*D~)( zOfJ-WjpktD%Yl|ACZ-i=WG+E7Q-R?PMO};^>xl`yZ|%>u^&hvZZcXmIDw_md!wTp`~7^Dh?`NAw&3$WR+M6O~by z+Y7#@tc4(ts3(6T7r0fOibVPh?Z$T{FT|X3f)q@-_XS`>ZE+^%p;~VV@Ertr`2gQN zJH9odP>oTNjTuDg?2(_tM zd8t=TCXwBafM?UgAfkn=n|?78DBb7h1Kj+?+YQ?HycjNMw8xXr!*Nnua2b_eR}JWo z0AN_WuOGv{#OOBqZ`MPWpNL;OfDC^}V*zB6PJ#_F(zFqO(@Tw@rx^2@?-(JrD1@6!aKg%GqQp;|1Uwd~DV3#6*QV0okl52&47jELGj=8bP!eKT+YU0!aD6O z&#M)DMEjZX5an+}yU~6J1;E3b!y1emqnK!nWAp|+-eX2v+4zlhG~4BI-*yXHq8ikT z`1j#o$puZ3R6>&g(+M!Hi{J9K$^(xhHG%N{JLL|CLvFTM}B+a?*mIHA}&XL6FWU&NXppHAhI_ao+=^V4A_vwRYjX3ZkhdoY(U zns;atk&c!m5T*p8J(+rUBj8IKW?wsM*2hRqt#xd?I0gYMv-k6v_^WhLvFEe zN&f9oyWA`!os6&qvo1w=31QdGT|Yq$Kbca1eHSau9OSo<+rr-%!-m|OK38D25tE8i zuHFelX|_>d!tOG*4JLJhJCc@JNnoZHgfijx-ZE-HTb)dx-*wAqUWyx{ytkr7{M(Q6 zMF2=Xg*+eDQq(yZm)$KZtAgMem@qKzp(ecz&Jvb89$ zm>V(Q0mP6~)nyrOUWVt`?N+%pOsNv>!i{RXw#MSX001BWNklBfr-|gsy?Y* zLr#a^GQRcx;;F{R=OwyR4Q;Alg@Wo|@n9r?a}BlJIN{IPGZ>yf(&Cq(8EKC zMj1u}flle}*?reDR}kptqcXW{GT-k?IvHwE;pH0rhnnpOX|Ii>5gLE7}Gt2b|wAoc&nm@i)@E-ed90Ylv?La zo!k6v%%V;Q)Upk4r~k)mo=meHj{RcIy1V!2|G9l`^Y?D1n%AVLt3Q(X){d>ozw4xF znb-V-TQ%-v#Ak3*6>PW28ylOIS8D21XRZJ^HB=@Xsy(mS5-t02%wsyh?6e=k_*|$r zEY=ggZ-2xE2#WxgqU-)syX%8Y?c;dEP53G&uw`)HLvYZ3X}$=%aQF-<46*C3?DX10rg_ z_&dL6Q@$FpuD%mBaNg&3_zo8xf(8m$JcM^4cYzf9p)dNjI3Wl;q)?4Lj7U3Ft42YF%BkH>?pf4y9$1b}h5+;XSWDYMz^a=Qtp8;etJhf3SwghoWgod<_L-T2k9 zBh9zYrxXl$6n?yN3eMbRf6!+6G7dfJv=i zn33p8O~v)hNzUx7sm4c_4zVm5^G@0m?^Y!oX^(r-q`G(|(=jkn?p7*Ez|+bM2Di)Q zx}?~1?$hL72h5fo=Iy#>VuX0_m_5%C7eoRTF>Z?J&Kzn&(=bIZofZuV_?Wf0;1cYx za<1rAl0|@2^PIo<+_5sCW2b`W6CkOKi#IC)5a$POKKO5biZ1v3%>n>KZKuDo2Vc(d z$RlELtK3=)NgxRWeMDVD(`nNfpu?fixFR02)IfYlfb%!Zj^3Ry0OZn>Pbg8^00bOt zOaKk87GRF(TIdF69@Ozlp-p_98+%0k<8dg!zR zntSS2+*n|nG8Vfoca7@gsdQ&a5q2&>N@{g~`{*JZ+X2vIIfe=vr4;9Y9Dd!jwL&yQy_9j=8)!dcsO6@C`PRupl3Y32dS_cJt9xxJ+T|iCYgN>>BgW7A;dUp;w23m8T;8B6uQ;JyeFa`rm&Uh#{>8`j!kfTxTDz`_6=tz*rIvZw;LHpxw$2`v=t@t|whtL}UGsmI zj4~}hy(;w^YpWBEQ)M1bIS|fC@p_IQ&H{JB3?`R?hcOM69ulFLhvIdpQoke#_)36U z3sLJc8USZ8R{WDtdE{Wi%njBntvj)5TzZ;%1h1&>jt%4YVA>?;A$X(4Dq3duFuE$8 za;-@qCf+mHaftTrkmN}%%<9x{Z2wF4%opLk^pBH?AAH)XtgeC9Mww+FHu!V(uRi)j z)s8QWHQiezHhfsO@)ULUx;@rYST9!9;YDVCIhc7nk(6j~UjsTXD-W z9Hn`w&H~}3Z*M2@&BHv0KG#8W z0MJtcQ`xvo`{4fI_gHLlqtPXIIhAfzLO=WH;rG!tvij zN(_)jZ^HxlebjpaWR{{5+Dl-jFWf+>kI|3-ID)eASp9Q35px$94fd{5rdCnI4Rd`k z;3K4Qq+CkrQbPlC!!OVvwN@Mo9SeHGp&_I(NC#iN5{Q+Ch7zM|9~tgpmGhcUL8|?9 zv(}ZmZMga7yiw-c#{$%prZ{tR7d8FlZkU3$zmxXZ<_qdw4KD0NU`o;y*=Ce(mHqCx z7`GwKQJnYn%A?<+naL@)TF+^=?##7M7zWc&=7OdlO$V`fLpz{>Hvu#;RZ6%zf(U%d zyVLB;PW@lkPB(sesoJg6&uIDD0=QAW2j0yRMCZ&&0MPLSxAMHl0%Jg=4Y;+??&R4f z<($%f=-1t`3jwVMI1I`&D=Z<$;G{0Rj0hlyqY?}fc%}!VyN*E@r6#W;2|x=v7Ou>e zZApJ%?4*dxW7S(9Jg$9z@5d=W7tBFDQ3z)EE^zn4N_%}IJ5A1E?6(UX#Ax^5iJ3G| zn*cKl@!Mml)Vk6$@&(jrV6=0)R9QZ*>c;p*rHkVqCX+14eT zKDQ?IsaIEI-2WlWNL%?G0MS^OhdM;y{X@>gzy2v_>YoT;dD&sOyyUqAuYo(xi zJ^mP7(-(}ThKB0K4(y;nlEyCU`cy|=-sILtoCGHX1a^6=8Gj>=h1)H-fx7jH04w?g zmmVZw#(YsI(w(IRX^tWtKtmPC!D&o`fIKGpchjDDACpr)G&9Nznw^yu>K*lBfV+=V zp4mUhvS2JUEB$7*d~;@*=9724`-N)gh~o#?1{Jg`jZJD!_2!(co|FJ+%BeXR33Zs zwDzOj@25T~fYzQYG(%1?{>M_CD{~{wragJ>Yx!ExyxO3-ErupHA()_ZUC9byCQ0s= z%adI>nF;PhWt4(qhID(VouT&w%}-*`qmUZF!7w=qDG{)_3f3bjluL9{tOCq1BK%5J zk<`rj>nYDrLTOt%R+2zO5{Ma~VRmRNXeZG-l03UC03rL8dgHx+&%W*z-?kInI$eQv>QJRSVS5-LGNP`+y?-`9HUfZ%F+d_}PWI)h zJ&(MQdBclFWwl@LzQ|g?dd{v&I9gU}xo+xh4S!v+L@ksVx(($OCV-|#&Z$6Mt2KnR;E9+w!dxMj$GS>tZc{7>=b8zfD?lr zyCiL!`=Qf`R01}bag5E%i}jZi4qiExxb|YBvO-XQ9!-4vVugD9Kj3%M=H32E<{c|xx{Sq6JJK%3#ra#4 zf4{rHHf=OK7)L|nS`i8Ng~a8u*2AI!0j7z_`joRiuQLM7~m+{Z3Xpm}aP zv@)0bGLYf;0A?oOV`?;o4PO4R%V#<&9g6B&Mz+8%?xcQgW z`!6trLn!SBd#o7ZI@sgAk7J-uK|>=q#X`H+A7F;aS;~|N8n@hqGzm@@UT%d_rc#0^ zmjLf4Eq2lx#FRunIy^9;^??Ct&cgh0t@oE89Y%*t;E`OnyK~QKHXY5h4=M$x zDwi($VR*E4xWvYkpX>tOGSw20iR3Ae&W%(8F$XlB4!(v@<_Tg}-k6jd8-Fuxgn8K(k)BR4nx?&8Rn{R`UyvOnIAPRJs&)A{Cl3M@lICb<7QqX@ulK~} z@w;>B>j2n5C%;-5FL{v!9#d~@rou>a_RI7~0{tZU*N0$AoJBYJ@uvHx9n`;CM(tma z_cNlyVCpyoFtv!Wie|QaeKyRPZ{XPq+hvt}t;2~cw@+#PkDJimEC3pkE<2QUh9A9- z7)VnVH$F3CbILDw)u~R?Rn~7AZMw67Z^J>|iawbkJ3KPe0Jwsr)1pF^sC#FoLN~`g|P+Px%Ei1av)mI z7Vk}#eP}7POM64%W3AwdZy6 zJ~7Y^u9;8H)@ zbXOsE(V@D_ht)-bmn#W}PUPFBj02ZzAQp_F;CF;&J{3E#Ipr6JC%}x7=@?W@O@wba zfdjf%%UOARwtX0LB6TVNczH07^aICaU^3Er%xZbcd|3DTHke$4dFI2Cg};*^lca@B zPtVS_4=-UBXoNX%ffr}RJ!`I39ly|3dXug?L8pKZQopk^wJtxs&^jX>QM;AUY)!q= zdax2>&P#IU7@C!r8=%EG!eq9=3}}1OpZ0)UJ_Z_}^yT&cSOWPCSD?>V5)L0*oBG{# zj7B~m@oz?$Z<_{CAn->x!5~#j^Y-LtHz3`~dGG5mwhfZrZrQDW?u`F?blXTK;YDmK zKM~A>>2b$n=ov~*AUrKQXsMu?RxNAzK+-F2nkB?*KofgS-gVy6HC)?ncyAmC0usmtog2r$LT(@v6{Nl|NVQeFnR_>!q6;Y3SUZrbQ0Cm>GzWg>tP0n616 zP(po>aQraTm}+O(r$$vp6?fs##triYH2fXlbZ4P;`Z$`V#;ieaJgD0Nz+LCK?}J1hd#^M8JNxE3Hl_WAE905~Qf;jGIcvsqPG zz(M*?M3Bo2n(Bs`m(I2+OeT=}Pj5~7{dSsux@*(>cO;Kp|K+M(BN5U;%kT{V9CvWh z7Rdf`w;O3mX3{hAa>D*oyORF8AIWJ0X0V5YL48%ivD0u;7|lKd7?=(vuGp~A@RPmN z$}qLcXww~YnXm0|;v0Jr!odWPojkGip?M=rw~q1!G%$a)T-W@AJ8;gq*V7+($2Tt> zLQnLkySPzN9ZuXg6HiJA|NE-1I+Fu@RU^@I=sqDD2e;NEk50L55?H9v~D6 zey5LX13=sqy6gZoJMs5-0c3hSJVGdPkdD3fB+#RPhT;V2b6~o&xNxL-d46~9^@!q}Hml_uQ}wQ_)LPZa zOW;jx4MZqLj@3H~#$Qmox8p z6`nI;hkt)R?d$6wtJ*TUzkTdrXbd)m>hUDXhoFw$fX5Txe|=`llf$v&Ub?j5cS~N) zyz`xIKz&r6t3$dKXA!3do;RjeEb1>}gW&`)O-4$R>>T^Z0m#KxsCB2NLNhWR8j%sT zs?%lb4F9!`k-*`-Gy-8AlBkIZ)ERPSOp5vjdbuG9Emmx8B8b{eI}qVp=SoY2=4>D$ zhv%1CubYCPn&Xfg?!uPj-+v+|n`OHU)S2ci$*)!&J4+r4&DH!K=EL3I*T$x48n5-Q z%$wifb3*bkv>219t%3HYldJd2w1-zMYxwix0rqjjAFbZoZ8MjXy&ceiCzuORH$wz7Fx8z$AKr%Bd#4<8(~OS~L6Y5BNiK%cNDzYb zc}T{_%7jDjz^m+WfSGV}(?#WZk{XdD;7zhblypDF9A3{>_Znsi=(L z%Sv0VUsZYxZYOtayHNK6$n*&BA_ilKxJh5qFFYEUgX(TnnhO~~i}!?TcG}&)f{Bf; znk-Sv!2~VB;Blt=rh_ZPX959vJ|h9cd+EZ0<{!6e-6;m-&l<8R<);UI2fbha^3Da# z|5dC&JPz;^#&!j0?yY;{CV-<+AY|HM{%9((UN>Qy@rk-X-YWz%*tL(v0@?}Cupe|6 zA7x&CY=CXTC`O&Vx#9m7{X66C_q)ruPLt6<>w?@p`hT1zz__FSg@xF;=P26v5OO4H zO~ZnFzfoD!fZr`m%8I(GgyS`P_5bWLA~!TyxzH%w!I(|ZVthi=7{`VMzL>xPX1O9< zvy)kFsQJeJ*wNpLfR;K2yS%90eH@GWmQVqecy9>y5ErGDv4Q{q3@*(4;gG(G(OWYq!fTIzeqQ8^M{7-3lX^i_6~txl1AVGw|Nc2 zMaU6X2pYeUAbal;!$k18(#TQ(#>N_uhGjACQ$7f|MwtILZSVkZ?`M+zeJ$gjRR|z@ z8Cse-#g^HV9;@0u1ov*kA>A8gDrlcMGfEnoHXzoP+*>A_-1?<~vzotk3$>Q~ zH#IYFrhoA*Zx1e#o@ci_H4&!Gv5c_Jakq^D5=8{`8r8`&*i>wQ=4`FV2lRdKq<>2i z=xqtedenoy%UetN(DmEG8tf_szOZ;j!p6(A{`ec^eUPZ@6q@tCsZ;Dl)0$;sR)V_~u3d^6jD8N`f8)JB-K%Ak2U<t6m6WM}<%#^?TtYqfJUpz+W=QN8mUFufcE;9BE5&~IHi`Avcknry_eF|7wQSm!nv z{(ECrCYwM{!2Pvv-JENiIJzd`_~}GfhG9+Wx8C+O$zhy|>Bg@NMc_-2RugsPt^70V z`Zu82cp%kLkk4eb$X@@Z?|7HjKR^lm=a0S3%X+PWOVZ0Wez4~K` z@9f!<{JUepkie;Rg!$?EWLLj_!n2{Mt%bXPKlBOtsGeQ5C+Ydqk&=zSd%66FyayW% z|MMDTp@uf@CeJuz&;m7YPx|8;gEP;NWgpT%-BFYa9*yvP(d$!moZx-u{ceC+?MULv zy#VTGJ(|1&05pOpmcJ73>q%s@lXP~xOCaWe#%Fvd7f5ljq`deyH6+}v zh$>Sqp5n3GIq+{Rc$I05%JOVX3h9_!2zu~?3xqgwW~`3SxD)uwQ?S5U&uG?vh!_$d zU(05kXC+`plU-VBsKO*>RG6GT#LCZ;o>hG5(?19I=hr=U>@ zr(h8&p4;->Ti|l9=cJ4LU7NNiJ$wAiRlA>1yOWaMOa00V_)NegoPot4d8qk@*?3gs zNH^Q!j76Mb-3Ib7>fgc3ua6b!LhJ81QPv0Qqm}2w9AY}C zdu_95-tspNf+a-peFA2TbZ^3W+d|Ox81wtKf3&Io#XfKW!@_8Ty1yJIm^~ycKU)3i z1F6pZJd3=g8K#IM@27r^`ND+fp4YRL71P)9+h`se@MWd-LP-k1T^NZ>|m#L8w zQoD}mrSI&Q*W35a$asuYOA#Gqq22PC~ zHYl5o+AH?m^NhBMqV35=r`w{i!_;?dchd6*E+y<~^m)$q0MM)sbk8L~)7={({T@pR zL=0%Uic5lpF%O-85cP3Xnl4yGa3U^1yEda%BQTXmOuh4QZ2OiOxbiAg0z~$eoF{^tO{mn!5ZFA3`k$!O$nco^ z0cbdBhQ*_y2hVK{f4g7p(&_6G&YVLord2dYPy*O({(y@TxG_h-iOJ^z!0+1@6FEtW zPG~@CL7qJaFmedyo)P)BsiO#1sAA`$#XfQo<}Mu?4h!;a)g`+IWWfzLn~PJ8>ckl& z5IwV7|Bn;h@m-cS{(c4)E+fn}1<2e!ieyfJWD6HHdhf7rZMnweSU{DCf5haaa_sQ! zw$s`Vw;f7+;~0YB3F$MK-T=TT?UH)mQ4ml^a!eTa@wd_+S?$XW`g-M&uTt}{HJOX= zul)vdV|$4%g8=~LIdV^)x^m{*0@wX*uzMiqj~ltutdtqR&`Mydn@ z`7<0F`{M#|K);(oKt8)y|Kbst>lkyYQz0K~S;JrM;&a%FM7Gc7O#E{+2+=FFMJativJeJ?h9fB z@Z;T}r{CiByfr#vpLn>xiNhD1d4o4m7GfI&H!c7QUYnJmN0gNasJ#2&t=$sAnfN;w zRss?Nso$gi2xcK+OhHUIkKizaXUtp#32=l+v|>1O+*`(;U{>9qdE~_F(JLh^Kr^@H z+q1b?!{g@M%Nfhx@D7T`U8UTuRAx9!3(u>!9KfQcg-Tu^0>e{h2EAtB4!aSqwj^@P zP9=U=sdJ`(n&KLu9R`oL$;L0;#D#{Yfj810Tv3y75~d%Q`^m~fU#3O}>i74$iuQV6 z?aHOO_K5^80!X2zhgt(B{zIE})HpDn2Nz(Nk?K!t*6lx_fAs`*!T`_;88{guN1K)} z-~yBCD9nZyMpz7Jy3!*M+!@V=o%FzC+aR$v_p^^2_HfPG0lSj^z7Cp$6CU}>zz5ll z;BoU&r%-d{kCOwirz42MBHXT-lEXU%!6p$na_waTipi~C91M5k$xH^z{=>`VAT&P? z$O+dTMNc&VG_z?_@=sTZo>MfXP`>1Q%xL-A=#l1IXCO6+0iYoZ8OCqLJz34)8BYaf zt~{7_Yydv^Ju^k^O4dPR(MW*Vs4BmV@ZC-!+i&j9tIk0RoB=E>_i!c^ND-nfXlbYQ(_>! zt&D*L4wuR-Z?yAw030>7E-+E4@jSW#c)@YH2$0)#Qd*krKwuW;MrfE#-5non|JkMo z$a|k6XvO%FF~LJl+snf^s00|$E}q~m&A0#OAtSm<&wg72c< zfy!JTY@ZViwH2ILsP+~;L%6_-AV4%DiT|cqN{s$3_K^#|FbSfHKtTjb-kKT_#Be7s zs9L?G%HMbnO(txYzl(7g*axv6VtYK6$FcG_!FAEA@_4Zwe$pJnbGV>*117O;-+qeY z^^SBde#dSHGRcX*@zWbrdHz})h3n8^139dw4ZNljqZOUHKw=d&ukz(k(ME@ z(h+cK)^gEYo%+q~Feyzz>W6-C4<3koWSyea0*F}XvW)Zcs0E^@5CIZ{#64McXrl0N zKzqbbfQ*JsDL-3<>+}A}J~aH`t(zKudmm+TMEB-qlCOPl7C{0%yAJE#IK8CtnT1)7 zVFN+LO#;z&Dgn)+rvJGU|JHNSY&%zY^`L!$7DaG=kmj!X-fn)Bueq zh5V}+1U+HIMV9%INFaO8vuK!ola>XcG3ZgbKts~i^}GR05t z86wyb!4?4zzh~v~JeB~A8EXl)cpmSKc$^5_0%>TxHA*~&?NT#FAW1DsD6vp@{BKd2 zRFr+$gL})#o2q<*QUVuxG>JL%cr16YBHspohE`~5;6e)X#4VFsA2DL*+eD8Qy5PbD zVuXpP79`t}4EsQisl7nEvTlCUf8N~&R-PJzMY)3;H4g+?a~&4YyEus>2FC=LPAUin zE~)pN7-GI53mS#7H#GjL!IuvLZAA*aKBfW?l+Zk}CHc2+T~P0=0w_s=xg!bM2R(M` zI+`)SNuYU)yaXjoMYRYW&>_ajn$&NvhN)_q!I76+Xq%QxK*RoU+;I239;*I}Z>D`| zHP!qtWiESjPRn=3z~g5&iNX)ozMuAd)}mKDk%K=SZN763&Y80->ABOsBvf!^4uT7F z9nNKpl*TtQ9(*6%8zV^8gFFOZmsQz9*V{8p>L{9LC?^6i+=EvDD6QS)h9bH6mCQTe zhAVI$v|uC3HCqJ@1~hEv)0{=Q%&7*q=H^yKHOv?n8xilR9-5L`(Ts+CNqYxdmW(G) z2gm0F$gb?d#1Y!V)Q66y2@Ppk1Z^4sk>5a_;S7gd7)$~Rnz5+)!80nD$V9UrO?liX zAYM`m&5n!#)Mh?wY=Q=}0vgYKT|5IFG-2WNPdZ1EK&&JXF^2{KfD1Cs8cc1#MU9JV z73vDqzkw6dt~QU=Ag-o%y#SS{sS&}F$iE@b;nr6)Gl^O-k!vIZ4T_~bu7wCBy91D( z>r=bNd@VPlidrdOF|+Moqy9JA7On$Nr{(w{pbe=Y0pmn0a1*sILkcHao=oo)nu!2f z)`Pg(w4~|hHzH<6Iox~3sxvf~i2yj9p+w~zXr+plH2&;< z^jQgSug!0ze~BEeYpNjj(Qpu^Z^xkJ0F)oUllJ&0(GY+@3I?|eUQR1^>HmI)adN=X z%0S+)BBWTzhc+ye{4&04UYsV6CL6jM@M@?Pr3nXk6L?LM0Lj;JYn5geNHVn4f^ zPogm%sSQa2!Ac++faZQ&?0Hl!L^KQ0^MTx%LtI3q2R_(a5g*5Sd8M&KG$Aqm%yd+m zq6luN_2E5!8Fee}al1(mfQBYVnz%wP%rVo?KH31UoMf18bWN%YEsSz20u=BQXnI0m zwvJp0m^%s=HvRYx@>t-NvC7{Q>x5z&36Kc^a40`wzdEx%4e)2()vXzc&$D zn&I57dLm0Z!6~5@<1Adp57UJ@-KnO+JB6Vc+>%upoqTT-fxJ$&g!fAo6gK z-HZ8QU#waGIk?gfp?mP}bH@HJO=~f~XdGSO{@S;1$+t}!ON|P&hVQLMOeIkj8%Z}s zK(oQ{lNJ8bEx>Cl5pp+_TCOYXZy#L%(40dJ9-{#x?vaq#(z{SYNj?*_ZuKC7KQu7= z`j5olrTIOQJ0+bPZ3#rfuf&sWYuSU|s zYPc&80l`+_%pjJG1=^Y|Akpps&n6L*x{~||xD$KaZbKSE$Om@^W9UP@^(V* zOfQ@OQ2F||uAKe>%^?e#pPtlL`W-D%L9@ubbMVx2y6RQsO;npj1JD4D2#5rHsgB6R z({Tm}Wc6f(-^tAa+`A3nUJXD{!2(279zcMP`=V`&n5;zj0HubxoM7H17poo6L`xP@ zJCX#VA%SQB8ZnLhd35M80GX&nyNt%*q&9k90&vZ0pc=>5wJerB*_86kA=a+0K|sU| z%uuuM@bxC4W}sTpEO~Fl@+SFdoAGvN)_|!ob(s0a>4^HgH(YXU4|hE(mjel!TsfFm z9gbRMIlS+pRN7)K1zq@VF!8A;`RO6L>G!vdF%;Tn^c!FslM9|x4)|ip;Mp`ntH_WJ zQjsJOmlB8updpc!h4D%xFcX)zxko#tr@whmgPLGR7%kV>V6P_~*R=%TPQG)D>8?eH z52GJzx~BwgU!J= zAXuOnk0o(3TS zn)|?Ix{N@1c{FPTaZ21B;)zOLi)WmPFsaq3f+tWXKG!$g!gur>lub52Jdj>@{9C2e z)(?@-ckL0B+;LqxB{7Zb-b$Uj<|Gg;KtsW~B_i-O_x$)9Fmur?LKPB+(zl$IGq)IB z&>y&o27kcQ26HxDL1i#NE|9!5wMLEjJq?vHdiY&?>>eE3%5(4?F&H<{^yCtwG>hl+ zyzaget!>`H8+mOpz$4G+JICV$a|7JNWks@iqf=x9avkUsfWl3&#N*@VY{6LD;2o#CoJ;yo+xHN_4CmwG!X+Kru!X z?-%biA6xROM5PLkVPr)lHb5J*wdH}c350$#nMo`*dk870Ug&p2I->_A5Dh@%otvcxyDnWS9wmUu z-GQAbW5q1??w<&3yk}Z*fx*J?F}~+Q!oYcap6KaB6Xva`p(MO4$MJ8Y5A9i{ePz_0 zn`u|M$#%J4U{FE6Gfk7_5Bd!-7E1eQ4@nPYH-$Jx4k@4}gP;cSX0WU~1dzjZ%?d0* zFvLY4fB?d|aP+iH$R92<$``YA#~DAMKHGXUl#tNF~!vNRTC_Cd$%9 ze9CxKzJ;KcoQpM(mtcy-n8)B_Dyo>+my3GzHFtyaa0^__gDHBspZQ1xi^WNG)x&#p;w(du<8EI)~hDJ)>KHF{%O~ zhXyYfG<(rde2QIbHzh~4uTo=@1fnQ`XaE{f4IjmBNlo>22>_(510bQwel99i_`Zd^ zy$v|-NT9LaD0{l%jO>%cn4L#yfsZuE2$6^^5zq_>CJ1U9jIb;<%PN}($rc??lNBwz zyIe>cL2Uph;KRO}6lzdbmj8&Jc>_@qC0JN^sEuHnj$=5Uz(^=qgb8GroYP!*Nps z_1Rbz9&;1r#)??CP$;E9;dj04NBFnHlN3!3Q<3Y=o66lbeDWD#BYZ{~*_;5Crotjr z_E$7l%1RsN&49dAXVNx)jPI$%;=Dv?kK8+QY+R3A>Rikv;L+6V&6W+G zrkAA`f%lP^D$7+R%d+GeSuz)a88^CxT{{;7k$=L~nr07bL$m`0g@FG;aAS}SKzL$M zP@wIw0NilFXj{Mp0C3}G_b=+4GD{`?wqkdjtdwc{S!IoB2pHz!tEfcYN&$YKjD?#V zpm$K0p$g`KZVIC#vw9cq&T>+M=F6WZC?lxjLcJ7~+L>M}PGD3!;4AK>09L{&9?5dG7xSpG z8ERDuQ6~p#Gr^_J)jCr15UB2;kR3dN0!FKD3EdoDP(Fb$+;w@DzN^Me-cKaw&>Qa?q{>? zvX-G1SxtxJn%?bwrilsTD$zTI8xt<01tEVZ;V4^Jbgy3{S1Wp|Bj$B zcy1~s(5885`y>yDfX^X(7cPkL7EP9ENMXO$k<%_D@7ma?y%6*QZB-f@lWqOR)c!tXprKZfF_!WB-=HY(RXtK_m`ysmJ(ODOa}vN}I1il;tXhfF5s6+hutaFN*mN$0JZ+jCa+ehVJM_jO z@L_Fpf})wIP4mK+f(tP;LNnuZ$X#`7hDETPMP4W`%BoFnpMf7y-lCZ(@+)=SLb|zl zsLq}?cyRrq()z^nTVO&$GDsn2OP8fqcluMlwNI(}2Z%k}PrK68M6N897tSmR;TTqD5WVU{khMX`IRVdCe0?T}as#wP?9~o`%bAk?ofKy}ND%`8(4d zK-&c!O%%0$SK#3kP4iWdW04M%BoLYeq7f;Wsz?GF5+ZxVv=G`5rK5X70?^7ZuEyv4 z3Yf_>4a%QT`T4J5=S{DaxGm5s^jEmK>y}ES5~xVowbw0o+Mu~m+7;%y4Aa0_*{#D! z?(Vi!>W^$;R_uPQBNp@7>Gp&W4oCq73#9fC&Io*{+N~3!4->Z`QE9aBHi_?2kt7iJ z5{Sk`NiP)w8i5!b_al}%7^~ zsA25W9WZcC`wjrQ?{%~NkmwG;>(px!P+>K88@R(BKQ=Jd(pP+06HRl^yOdsRxe zS`V#Db)Iqj68yW{d9X@BTxgM0E=`ioo?epZNE5O|_r+44 zx^+FWTborbbt<(r3Ri+|aKpj{!Hfl_CgEJQQ`c``!*xrLu+guZb}()EJ0?%y&_`BO zZfycIPzc}bazR5AEkJWVvR+ANOA_cA2}BHN;HFJ)0nu%Q!N;U>4M_mn8S-T&#M6+| zEhYIhDUoT^`>{V{|9kvV$^<#JYdY>dJFi#FL5| zXOQ&WCyOzmrm00;Mb~s$q9e7$s%pNNWXlMgFi!_q*Npc#JvO}1~i@#GB_2@PML^B6V+Wy+)GgE zU{ojdXo#~)cNF32qdQq)Q?yoLLCel>o)q~OIT{1-YQrVBo3zf9Tz^`T z{>IUR##G<+AmXHm8SkTf^^VP5O5S$_TCbKQd)9EcKexxFp~;RWzJlf{V>HgBcm#zV z22yU={;5M@ZGibmjr*Pjj*>RZJg6ub;gLjaQNi>Cz?@+&nT2O2Xfr#2Q|hqVo0gKh zHR;Mj-_AA-W&E4=g4j&>UqCBqFx^9fsW$l&&{!1B(csWTH;QpkqmT}gBoLkiqT%Jl zD>I5Dcj{D)4?w*TUU#Ik`jP~oogr^(c)azQ!Oy@SsKEj-Gd^ zViw887<*Z>`f{h|G6^A*S~@4{?yg(yzpLD8ffP(HC#T#RQ4l~+qj8@CJZRxa2VV6O zh!&vP2uV#sWiT~HeqC|ZOHLXfCBXCnyBP~gLk)el>+NINhi<6ydDV&U0FfXCcK?k{uWK7=Y;+~(*G!H66T$+Ijw?eJ6XA}i$ zyQFdU)HF-cRA|duabNA=&>%H}K)eNrkt<+^(?dQcCn|vq`Awx&A=JHDhxX|(gdmzrqD==f?z zA_1DnWhk}KLlTG+?6bVj|?n~c(2<$XT-v2 zv}#9k9?VTG(ApdZC}H;QZi_={vCzY8Slx{SvG`kxnx-#3psjem+Y_UB08L~ijdPc~ zFY!M)5XEO-T~yB!OrF8t%-*WNqD&>!kZ|)kuJW^rBL@ z3&w)Iz@>1s?&fJ7O-TgrB%yuelwkFNxQ`n^s#Ueg{v0t!A2em-6JuJ?5!R#`i zNpo>G%tAY9(%|hXifdEBp_;{SRI+$B9uwnijf|&;G`E6~X^xFyp_F?f{ghji`-(n9iGYPwMp&#JL3`093 zuzNpKZrHj}?M&7|CbwYWO<|U25F!}PUV%j~Md4EEnWl#eJvAI?1OIn9`x!^6nl+a$ zVc~6nsb~KCGfGn#~yEF!B57NvGbuhMprK{f(9q2f9t5B(2^bWy-t4fx)PG1^;%|1X!w`6>>(o|;3%&lcPD0` z?@i??JKpw~=+5C;y-?IN4Zv65FV&tu=#KgqvbH4ucJ*%ka}nf?5?r?<1vJr1G8N3r zBpoA3AVLX51<-if<@VU@m%WW4yGKohqlvb#v$+GNaj1Q>m3=%r493z!E81Xnwx9@j4fRJ zxRAoDs16HoBjW1hBX)`b1lw|Gf!0AY&`NU?HBr8@1-MxPIh;S5`R<$ka=Gscmp$PRB(@A*6Tk3nzPB!njIH`iP#>1 zS{{hmNcJh0olE_6C+`P>1Wv(mwcr<>V!}r*x#O$u{VKs3!3zN;?r|gT5fVsNT*UGD z0J!j;N*(~fkc59v!|@Yv|IQ+g&_}rE&0Rg~c%BLXHg1FLQea+c!gzN;e)|YyL=Z=? z2om!JJ|n2PrH%7$I+pSN8{k6?rv{5`UjV?H>E4fLNYs%b{ zSH4p89pI+FAXMAOYeu4L^XJ4GaVi!X{m{#iNq|5+35~WNpM%yKT5Y7HJpv)EC3#-*qP9O2p*c{r`pwxj*UqL(0oIj;ny!TI8Il<;ZWNIs5!*$(N?v;r z7K8IGeppN(?1W`#1_+4TV{*12dSxrzM+X`l6~{sm4ldFh6WuzD$fAIEd)f1kO{rgc zX|B8U1Y|g#jrRY|=pb$3EpQDlnO1+%9SDma0jr0di(ojM>576oXcAp4+)VL!!ZUL& zLzTI}1FK3}QlJGnhZeHRg0)YBP+kkdWygHF;2LSCWdn1*WJl?X&)~hD2Nr}dubfqT z)pS_S%Hisp)E9H$yd5NMIyES8v*bfm>xA{k2J%piv7Lo+nIM{8!}S-W3wzT}~ovs&{i=XHE?iNjY|IH&Wva~=Ld$1}xuyruU$b z@`)N0gxDhTrF0rYzA=V%aB(!?Y5X*j87yQibopT6n=!fZ9M|R{Pd+%e`i46}YH~mv z-qNe_faRi_(3oAS)`kVHG}rFZS6`S_^9fi9a)*J)xim7v&p8gb$QYF~8D#4`=ym?X zQ0P!NL)iKO#J=ZH+krM718M2CFu^(lfht`RUib9+OKzmAgGBOZ-bb%cu!}{Wwiz=P z<_%b=H%w_b_eNkc8QPZ{X&nN|XyT$w3lSD^xcP>kSkg6aR$oFx0W+@GE3g<{03q&t z_JQ%5a1Bm?pw@ zJ!3Tz>Ul*F+}~A`&yxuOOJQMb+wU|tckAcA|BY{a1utA|_@niYd+xng_20(Yelme2 zV^I|CdJ~IJ-MyGDAw!AvXmKd-n6jWXt7-@IDiw4M3~!&k6eQ#5zT#EO5pgmO){4m% z#oB@}S2e5`BHJ0zQw*=m-n$u=gX3H+5M?f=s|E|}nqbS0cHNpBmHXl5C~$ZS$6ygI zugTrn%ZkI}u((#0c1@TCD^U&>t1=LWy$Iz#hb|&4dhbyGfJJb4mM?E81f6D#w;BXt zEXdiI4qM$mSReY&tzzeAn{0!SFWMfYwx_H!# z$slD&NQgzzR=9_BOZ$}RTVqOPQ;?04_Da+ zkd|I9=a#HvHC?vm3Y?z@{fQOV)4^-R#CC@Y-+LaP*RvgxGhXLV7Omj#9s7mba3|W_ z4=qlv)t^;B%TBJRY(k!UD8z(ZfvR3ch?RcdMbI_%S!F{Pr?z&(OW4904*X=xJ-`pc`j`H{G zz}r7ncF6B{l&Hz!2}Qs(W=w2Z)ej!*{!N9OiJ`R2OTxSbbKr7PpB`gvKcVPI=f@$S zU2p9JB-gtY|L&FXR1a))<3I>|3$+u>?Ex!CHnawHn!ACSai`Z^@)^1);8J*+Px}bl zo&qhyrPP*S@!Nu@`OOfls)PV8g3}NYbY`pl*haXDUJW+}5EUz2Eb~B&O2Zuo3&jGs zP?oX{46(B-rF2kks;35f~H-{N|p$WN;)|JY_bx)%IicoXqhKtzP z^28i>*(i{bYFenY<3QAkFvs&rFhE`^5yiAImLzw~S;ORd{pFzn@j!OniHJHY8xl^( zr03qzj$wOn`Ah)OT}1s0=CU_fH$<(_l!o&@iTpwkS3{HAo&1h^CpRO25tnt~`V2v6W}r9jv>kQ9qBg1k`$)jxE~)z8y92X?6mvFlJz1hRCFrzHT_? zoIwJ=u@GwK<395u2_P+gM=AJb6kIYuQKf8Fwkc1?WhhIVf4N{@`^^_JTk-P3A3nMv z_u-IMJRP0g2SQUXzu!8Ll0%XPfp}_YR6!;xUz6g8B56=gB4;1@Y%4ev@(k?a*`b20tOeu5b7HcmE(lvUB>k3!3j3qSAP zW`VW4P)Mp*7#zzONvtA8ImObpoI7|398*40wkyxZwZj7MNNmgCS6rsHwrbn9h#~C} zI_@RPj_UxWF+pGe5s24r+Z>{nhlYvuV$FXrfK!&H{1RB z1Y$=Zo;NOuj8@~>ZtSy^76u#vkeXe{eepER-2>j2bRY<%C<68SlsA=kmES8zlzyYQ z4NZ~xXLusqq_J38Vma5)xaA~4ARY+B)8(XTX!ulM^vNI|bCNa^gg~w`>VOYhdO4K_ zh^WGDZk?dfNwgxI9k6_(M)8G&bEy;S$P z`o3R@CDEO(VIjSMmmbpY5Ou>ve!mSvCnqKnfq@`2wV05YEE9QE6Wcda?Vn&(auik{ zY&BlwT68Ndc$M2Cv6m)2ddGfA-1#&;gJK?7v%weJb{g9@8{2l$*o|%5R%6??ZCj0f zvwQb{fTNi?V`Q9u+>ZH_`?$KH9fKpD7N8F*SgO>;-OMJ2$XiRN!|;49cgixmXX)KK z?Q9tzV6l?lCzuXn;RQ=o1EoQ2HG1_twHg`Y9UD9y4>0AZS8&@0E2N_U?nw~kgbLCq zO+r*Zo=f)Qt`la=QTFqV#6T=E;$bwEAPiBOPY#_1=+-!IDLwgdVb^iTV$;+Y$UQsE z_XT-tLhpEK_A1qHaBgjjm3Q3#xSW{Y?uqTdZlm~0LZF?W9zr8=5^|eOC|?A!AZuI_Xx{OJRMadjQ5GlSJYfnr!OF#xR^YkGvzsB$;I%1iEqf8TPf*OBNTfhH%k z@yQJr1F?>cnFeS}wurM^%3|`4Vv2@tp+Rw%5}V*HkJVCb5nh+Yq&HnN7nWN-Kk^WT zcirGkvztfIBZdpsd-(Y`EKJD}{tDzq$$lqi=}Ng|Bgaike<{IkTj^>T1eZd3vKvxs zSm>mk@|BiK@E;@!!x3Eaf!K)ZdMOJgR?3h}xG_H0sJcxq;Z_&1DyDl>1U@o9BGZOH z3|ygWG+oC-W^_exaF>>rD$((&cIQdDs$nu?-JFLzLivN8M?x3u5E*b)kl&M1dw%>P zz(A%##^vTfgp!S8Ix>tGluF?!Z{WA@*ToMvS1(sG=RZHoTr(eT-ZhRvd#nzjslkp=8wST?CA*} zdX;~iI9`*Yp#N}=>&gFh)cq39@Ad539q4=a)ka{Iou3)qHUpG8e#L5_mBUcfeVq`@ ze~(Qn;8n@cODb7E5gU2Sfs8oG)DO4C0fDZmss6&byjjc08xlJg^*{K2(bbiD?b9uk%m=<@?2G3f!mXa?35gpJnnBC}XKKBpiN zei+5hCOO_VgcWqvh4#!4k{TR?kM8%H(4QiRP;4X~Ki4HH?id@jY|iim@%%c3OUjgp zb`+SHwjE-sAR$>8T}h{lXZ9sTfP=G^)WTESGTMV@*Rfx#G4WPz(7=i7F7mywQ144T z;!Tp*403=E0VLTEY`XWz!oWrbyXYgnaBLDzL3WTAj=$jA^v>HPcxG7WXIwJ0)~&^J zOr}LwS0PQjC|&$3#{IUlh8e%RFi5#;jIkE`LMhaT2NQ+k5&Ybcv8`Q#yBkI!Vj?Lt zzw3wiu#P9hvO456w%Gp!M9^RW(>>c^&sfdrxKKs@ic)Vl;Vg7yU$yw0Rv42e6jTjS z+!=l zhI*h|L$$kq$nwt2%tVko;gEX5w&sf8bLBH{wvy4@J)Rh{5EtZ@l*RL>3G1tJtiz7U zp6{EDY?*;C!9C+MyN>ieI3&j89#C_L-Xdp>13fOKzW_3!9cLG)_!T4GiNUEIuS31= zFVWn;+E?Wwy$p?P{rPzGjSRmZ7&yBWxtsWIFi`=H=3*Plv$B%W7=XQK0c}W`^*9no zMy5(y65@syIcaQM9>9&TZ087Pz;eMoDI_T#hzrl;W~9O<0&zWL^}DP&c5!xZUy2e6 z1hwwKsB7xE5!wUxW*+w`T{tX7JtD)|@pS~U1K+*+dYMdYJQ1Yt1PvNf0ucr`@cjEw zZI)ink~?ETQGD0VaKlB0x5~YTHw9Bal<)nFVZuZaXcaRnv1~YDtR>_?#EdxtUb-9O zqFwAQwg8Z^DWfb&n#_1z!%GSbo#m^{+7vw+UAl@r2YSP{ivv|;lFr+S;W|WW6vq>87*V~~{SlvR5 zNH5gyiK)qTuMTEmpOwpk?gP-zGGJR1h_8Nb&OxPpmCCB7sCl2wlL4QH_44GtD)!-P}UEiveHCkl$`r|cgZ zIWKL#g|wMTXRJ6szOUjfU#(}}4ftMR44-$FUQWGS9;GK=u1;THdR&sbX7Qu8WxoV% z#R+c|M^8Zfy`d?Y;%a&%)9?Ce=(aRA_%=wGMLNeAH1D2srqc zt)vFaoY_uJk8&xeKBfg6<6n86+rNa_uzs% z@!R$*1B~CNeXOZy_;129$%r z(nmr{&u?a&4B@7#>5pTa>tnu}x8hgwDyqjw0ywKE&?lJYB6*k`)WuE)VpwQ)CFTmw zjX%V*CO8$$8@2xs)g0u2iQ`Wimk?i&`PDlqMgqF%?1SI-4)%pCBLSSxzT;s!Q{so< zjqiW2`=z{d$QZlMfZ@6+8?t?3d0RttA`0jj*GAYielke^MT<&sEmDAAk35 z%85G&-dKDlw;kJ7HD2;O8;@2}bA&KWCw9Q3`_!gJpu8&93i{Z@l-1WSwVexO6t!7o z-c7ixuQ=3{B(|j>JL7J=Bdl|R@j!WZPaoX+9yqaS!K+={cXaJ{cJN>KsltHLg%g}* zYuK5dv&#wIPmAcQ89!>(&?$CA&Zc?lY9@2AU1S}473`Qz+l;!$Z%?O=aU7o(NojgJ zO)XuR-~?<^d*Ku{f_?WUSM|PPS}?FNSI>AlMk6@jt6{&dy*qYF&&c2#bHA?)ves*f zB)zMhJ15{U-0qoZ;{{tD^)#F0vYFusT<)>3u|9kthT7}g^FJ?{-&k3)sIs+c!2gvw zZ~t-H(G-)c`z7CKZAHK5WwQT88@z5#G%~RjGDfd4RLitIxs+*A9@2gsiFcLGydV4V z5ra?J{_1WGgu(uC-S_=DNxCDqw@qwp$eLCx)`$51{L*se*LFE{%mX?K)i*Kn@P-592oBO zaDyd5ZNPu#h)W7%cQNo2jmdpiV~3?b_JTOZxS$rD3t z@;N#EY}>{3!STdta2SI({DzPI)Zq3LIB&oy5y2iWwKCBI-3#nNQcqP~l8BGpX#ec4}U(kIX|g9_m7F9#>lT1U~&ln~4uO&!T>T zqqbY-3UIs!R?@uXY%KG6-6WilhiqeWzid-g-p}|Dw1p&W{kgFbSCwEI0NWx%2u1qK z4=SxCz<&B_h^nkN**ARBX2?Ie1onZ$6HKF|N6|s?tz;@Nwk34Gvi5T0>AG$_Cki_e zl00+cvsKa#OULM8z1}w#;q)@AGI@}Sl&kh6 zzIa899#*icZP??}KoaNu)x@b0PQy3Zp&XNW%gRS`=Ia*jerkX~jYNuWN z(qtj@-92VwQ@byu7z4n^Y)u+}(gm3|IlK0dbxE}&Vz&r% z#&&7PleKsFy9GS(>>MlLtFlVa4|_w5p?22geTnawv)9Yg`i6DIE0+u~uvhg^9#^o_ zEgAgm&233S1x7h6-+B!ti3HZdEeLDaif_-$F7WHoFVPbX&Ic|@!|Pgzm&9%|6z+kD z!0;+_JjHH`*$e#E;=L0j;(c1sv_%bt1~)-6{(Tch+x^ANQtzYh+X2`KUD@AcP6lK> zR_d7H^E+xYC*?RG2%wreB&(!ET?ym)ckpc$a*;L&tnX*M(plPsPN@eVPkThHz1dO1z=^XZr;jE6FB9Qh4R!YEaB!BDWW04EZA4Gp|b+b(^ z=Jva_`Wh^KKJ<>N&FI7HUZKMQ_bV4iFY%C~s`^>QS?FeweNmaOYvqo@_`k{P6OQClaqZqQUCA%!$`NxF!0O)ZVQ+NR{}$j(<;1+9__U!yNXYCCqknt(P!rM3?cixrv=Y=ps)&m0 zLP1CN(s$MW2i;KNJVo{Z<#(sGo~SDe3MLi022a`Y-_snqk0gz2JU901817m()9I5A zL#Pvv!KI8h47s27D*?3n)Qe)iOU}Hz5O@dF7&L^UT zI{hZ}bbH=sEsUceg`}x~Y0eS8-~iFGo~pO$c=J(*u3NL^qES^U5g}-VR<|p%8kouLH0JtlSb(a|upvj%1 zglU<*5Ot}lj~e^S0Zv;k23+g2^yS6&R0aX`n))Zt{_wZL2p8aCC9-WbXJON48=_bH zT-k)eMW5BcZ>2(yJH$Pm8F2n9n7abWhCB%fzt;A&iwI^S|kaY7Wh4KIPN``G>(uFB;eZ0h9#b~ ztGaR09RGvFJzJ~x$^;NebmRW zZvGCtE)f5I7aNFLqOw-FBvqWY4-VDnH-pGqqK>&vyK!C;F-5a}xTi$>DdyrkjuT`T zf)P!fW&KsxngMQmSSa}HIg9{x+#sv)LJC8yORiSTC5#p@&n-C4uiw0hbOAQt>YNLq zRD7)aqb+Lc7WEHy4-Cr{h9Y?rBHgw@XE*OhUuklEiEg z7iB{ggr1Tfw;tNn5?!=3*_b_!;}GtAQYf#pHeI5jv`=Zcne>0@+^erTPYaH$OZ9X0 zv0ejC?6t>Xd^$3XgEh&`!!jExCQdu9Xj+>8xEOca-Jiy<>va^EJ}e8AqQ@gPq*+L|6xRj+T1v#sRn3F)JB6f|D=&&O=0a=6MT?}$ z@#TJMToyv1axM1l8kD?on``&raeX>JC}b(Ol2fjF-lb4C=WPZax4m@z)rjp0&9^)2 zt33t1+4G4?OjD55d#=PvFMHf0ei<9Y5W`uDkXKe6qZ7X<;<`QasHrO8(Up2@>WyCp zb223SkdV1kqSnP4lMPO>KM_V+Qxa}N08Mi?$Im&qyIT?9*YF)r2n^PQ{vQ2Q_!TkO zv>a2C4aSB!sUCx%PU24x8tw5n^6<Q>Bf2U84`88>U6e(EK7?$Hmqq)e!>X~CK?Rb9c zs4kYco$t`ky9m8p$(Sp#bUCQxARA`3hnf0bo}A?QxH`Si^(b0cngc9^60Z%|hld-a z2-lz-svP+pA{Ws)R%Wf2#@79@R9{xM1L2t-%vQLJaN{z3mw`mdY@)av|6*<%Vro5$ zy$1qre}c?EP^RUOTse;}DrVu=Ax-Znm;Ky$Hn|;aD}=`3NHctq(bO$}pQP3Z7NrV) zLh0hiFtKmwYCmr~t)u(gpOkI|VUzu{MQ(?xR+E3s{TJswPrCrBCIks__}wl@%uls# zHZmZ zZ?CiZZ*qh0fsIHIc#dnpZ9eO?y(l+T`w_2ic{5W&5hR&>fCZF zo}!OvDKlqX$1|cg2yUI?B|1pgC)|c=E8oGBxQz4cw#8j~nm~@XCHjpE()R)-PcZM#IicGoldrwYQxeZ?5KdMdOxUSKV8I3@^x;+b1fSosm?i zto?&8s8^%&0-EAI*cRlJMuQl|Z(o0|#u50Fx5b-rpbpQ$_%%@6^2>UFtNB@7-s2?b zvOT0Bo@@Rhhr&rtYm3(#sj3;Mbr9#7U+TgU-+6CeXS~xw7J`B>igOzHl|=Z#5cmun z`OTD)c~*)@$t&V1@8rq&!SK`akaG6R59j@b$U&$5<09!M5y&DXUjrjuZ)Z`(&{U>T z-R{HLE>%-Zv9aB|hJ2~rg>mt7{&UGmdd=+D9hkZ~COBW3kLRDO7i!APLm>!arKk=f z5;fG%1A87cHO~UeVV%(DmAjldxsH`>XXCE8>BWv06PiBwP&3zV)#s08GUqI2=!o+h zqAQf4{nIws2>c3sK7yQA?ujTkgv6XXc1;TZ^{&RN!Saw+GueK_eZQl_9;COBHv=>~ z1Hl|$^IXb>JwhJW{e&Mm-n6O4ncMGo3E!KtW55{tA;>MuER7Xt)#t1NB6|FGM030h zx*-uKDW9mbxGV+L)v`NvZD1Utb++oaNc+;~ZT>r%9x>#f)2Kw;6&5#ZN)e-@n~ z*n~t3u9?_a1dSIhT3DVA3`I8)Pp2C6Aajv=FKtB5+^dw|eGv#hFA8Dobv$O!=h{Fi z7>{pFe|X5T%;~6Tb%O{x^Et^x$vR5m0J;g!$>wpu_`Q$~rt8JpUr4lG=R~D)rQb9}0y)>-HZhuQDBv z(>(Ek_fx*i9gj1mUwG3`E4#jaVo**b8j+DzwNhP$n$Bh@ZmHwwu5YRD$+~3osN=2j zGP|b!g|jpiQYx`7q`c#(slg9O!@8m9P`@_e)I($l7vO<}8+6pJc_DE}hLoYt686#4 zF94NWyz_^Q5mS{gH^0n73rYG~3WbJ3l0?u^Pge=8V)T}E#fT{Z6OO>%kHMZkc2B2{ z*qHMS7-0^C#h79!JgNA~Q=Qfr(|ml4~D& zix;AMbd#d%qs=ek0-bwpf)moI^dxz>}u*Drg$dtz~GR z8wyBqQM+}gfSwOKK9NG^mK%$lTG}?y=rwj5J=OQtWg%K!#K?4L-hw)!E9VF2=6k%a zj_8cxthLue$2(8qu~S9&-1m-VmQ#f3odrkJG#An>Fkj@DpU8N&;AyXyVT4+Sz<(3V?> z;!|-0i6V@lL?(4?Hyv>;P7%6=u1_u~b&g{MaKH%lXd&vhs^G;{U#+O;j!`QEa?^wk zhk(;8UZNzOhpB5n@q@=vz~+Qu7=3V_HxHkDx7~Gzv0LhXvv|}#62OQ#R1q@FKn?`V z$nW=pJvlGj6)g6^-UFB`KY$G8{Hb5X!X6;gchi+}7VLOvMZX8FJMD1A(|nJ;Qd`LJ zow#9W%UtM#1EIHlpXV&lCZ9fwZerXQ-xwXqsruF;sx&ojB4lRuW&HzZE;J&E^H{+_ zcG+k+AlMIiy4=+s$A=v{emv4Ib+}@@`L7@7(56Ul^W|=127|d#v0(QTN>5fbU-3g* zjXrKhtHlhCfAnXvxpC2p8pAgroh$Rgk7HOaZD<}~L5$-lv&^UNDRdbO6`cq0j(-M~3@ zpjjF4=w_p=w&xR~m^=J4#uJa^=M5#(LJlGet_iPcN+tgy{KCG#9XLa}ZvxLt7K?S} zqbn8^ohLpb!#nh(px57czcU(xP8{s@L zg)`=S)A(mnPpD9l68&ba8=mv+`WAg{==WeQ-e_mn=Pb@&PvH=!bCv~(G8+;oXjU{E z@r4a&;zh{IsajTd zpOrrlpl#y%obm#RG@-b4eXJl3ChYy;b6f1d|QPEZkpw>XHjHZbU2=E+!^il0gC$`TAlb=B))wcpt1Pj*74u}uGY-rmREw>J4)eAYr8Pc&EQ1x{TrdkUzO>G` zSF^(P^mh+E5Vu2oU~A=zBht{3D!~+xg)AT+$mv~js9rQ|u!o0+ z5_v}<4O1g15(RQa$y0DtGNJa?+iX^uU@%|7n zSH4ZFVm`<%6acy+GleW34^tpX5ma)dKeJ!LNB3?xxmL~m8n&*dJ>xkI5}q7}7QbF8RJ^50 z#xx&2g`1K0r>cPmg7zpt9Pg11mB%@=KMenHsDJnt$lg$)7-zgC? zeYDz9+2O{>Nf=-{2Q==@$Uohet*+diE;MnQbt*pVj21BpsDZ8vcEHTFAR(C-GJ~1DMO+9=4){0oKDW8x-O!^~v$; zbxL&di`#FOUx|x8^~+_eGvoEB5UaF{xmKrbX6f+58G)K4vnECrzlk2x4~~2|(QSyR zS;oCASxPKw3|d4UiQ49o(pYR2`uylk$du`Joy1WV6{Hps+s3Ih=y}Lld{@Me=p$GR zh<^eC@p7QEwB^NIXe>Fi1fEDiQzg#z-rPprU3YvMolnVAyc;VFg=vN5JQ1DA6x4KZ zVIkHAF;m<4gjP(k-{D}Ga^xWyW9=QDyYGry_4v!hI$aR)(&=%RyPjq(;lNE$05KE} zSU3>;s#q>x>q=>$&l9`-HP~vHjfRsO3Q3=3J}L|sgRR;VV%4ZRe;t%~AwkI6HFo6I zL~%QE#SktDi6g-dl5v@qkXg=*1DwfAkdO!x6AjD{*9?qf zZim9noi2A9!Yg56zqGioCb7-Xcofg6;aQ`BWpMz>9R>h7$X7wAz*@J|#*o}(2B`&y z*RtI$LEC|zR#(bKet3gv;`2>(A*<%-9iX@_1pqH_&Im$i-WIGnl#+^kC$dDxD}MqpgY9Xn<6Q>vuK`htQL z{WI@l|8*+N6aQBwx+cqycuL1>oiuj`BK^b}^L9b<6i)6%z#WoG`Mjr@v4?XeEZwg*_#2DCk9)<(pZ=vzg zYTbrV8Iu<*@%8Y(98~?Vhw=V-oX5krkiacB-RC3y%L-8n>~+rtxkI&qA=dNA-X?$} zxWyUlJ=BAm;edD0{WfX&4^mQ98r%CUSOPfIQzRnZ9sX|^zNRVKp6W8X; zE?NkYviI7({0FMD!Co%7)r^6g#?bLFzw`d47TKJD-|SQvsOs*=BJ_;VFwc)-VMILMMM`N=J+H0E67hvcrSE(z77-;|axe_17Hy@r5?4iiB020xbS1rh<4J327N$twm z?xpGvx(+Gb7Cr=d0YJiub}E7c`2ppTObu*?fOV&olP-a^Uq2k8N<7O;{952skQ_08 z*#%EXp9&nlZ&bBdLPZve%DnAFkK{gR0;`So0U}Hx0|WkMHS$OdmPf_(p}3KnH~ z78*a1iGk`?!4w^#f`>}H`J8QK`V5LEV_SAeI~p{bNSKRJYKINx3=+h z4D4f`TIP>H#zg?Yf`k@G4C(4I`O174@S?m3Fs5^|3`!8eR!r#5SeAGUxxvA58%{`{ zL`sZt?l2(!zTb#0qz4g$g2NDfowu0kBJ$dm>`e3PkrwuXBH0f94MwFC(2)B9`e53U zF_518J4Ho|=9@IW7tSDni0R1M=IW3o=htSmN*v`eX;mfyixDOU3!Nj29GyQuxhhaf z7lB0yO{tW2iyvOCDSls20P!Db*C5gp8$?D3^2v^vM;6f6?@^OFr%Cby7!v3WMInv% zDWxBuIfz)T7XKYRhX>pr2p&P&h$(#}whVsvbAxVg zCvbxfA#WL~bmCml8s*7dGx!XdI3f0&C=2@kAw&uUT!4*jUFtK;-xc=L6@_`>CzdC` zJS{IN(x$ju@P57CEa3na>pg;q_kSzE{nVl0>T{SVG1#4rmJ}%iVt~N9y9G>G=22Fx z-+ro_y6Fg^6LALk_!Wx(2NOT>o|^G6VVD+{hE1FHyQH63zX0AL@IK)`VJ3eq$k=`G z#&8L1`v!PX7V`hMM1%+tC9l_?69m*O-MNkDdmRdEO5_E*0F_VFs1M8o1r>uFtO>~`V!5#SHdP7yqjU9 zOrExq$Z%@G#Q%?RLdXHU?`KU~U?Md#YYQw(Da&kB%dx;!_4HOmx*4LIiRIn4*_{Vm z&a#jW{|5+2kh0)!t#;?i`nD~om!Np_&_crnAT-63Q-X!a=U8|B2fkqeAd>z`#4QH6!_CKq>pq zb;*wkKKzrPIR61+G*o~lF!;sn#MH2ef`jB|4H%hQA0g$2{d*=*T38^M=mMA@7uksb zGTu=nr~l7BVK0>a-7*<2=(_nHqX$hp0o`{(Ml_Bft`aOPdwb*f|F*@7_-9*~dR6JP z_j?3l2Xx=u!S5;nbE51+zu($8Cjka484BAG2X%9@fV5WFuOmLWUn!gxh5s^M*)xwgoS->clhWQyM?tP3ah$Hk3q}?6!ECijn{*Z|JsVJb`LUahCe3WC56~l$a zijcINf}ZmRZs0i=^sl`7zECU!z>tUq3vUsi$cU?U39j6h4qoV_<9+(lg+yZdGI_MM zJZj9;?DZm>W5}kYExnAo=~F@D8AE)Dz0g?tlxs6)4728|jccL&|A-|lLkta?u_I0o zCMzRjoe2O=%X`>g^CM-ZY6%Jw{$Rr)DY^;ib~R2UnDOY;9W>0_3I+t{-3`k(=XFKD zvi+f2LT6&0aSd#s|9|3+HUH;+urNnQArlhZXjKT*=u<5sr=-}ZcsZhdkpIgC_|Wq= zO8wz35aIQZzTB}t6s@p9moj>3Uk(^LzDwJ%X`Wj=WNN*!tnb=(9v$51F2j3v4Mc`J zM?*$9F)pIBYQ_hr#>|8TCKxlsX~ zYq=H6@hvtL_bGWxsm|RB!wFaPl%_`cx)L%WUEHm0-rT~b3y-kg_iSr+>pV3j!8)qi zk}1BMHgZbVw1W-X5>akDfL5SPB%3vH;|iL53y8VqKKi`M>Dm|enYb06oPkt6dbiJw zH)sAE{h^ZI-LJ|2(YWo(^SAl`F(+V2sJ|iv`gaecY*%QggSxf!N9lrfp@&9dAc}S* zV-P8e`i-PEX47|POM^Xw=Jrz09ovwb7cxZOhh9e!9P(Y;DN3 zE}e);S0avpL$=fd`A#T$xUEl0psyA*sgVXa^`xq`zWM;x%K&7l0ywx-{wvuTU;#y5 zQXL{c7SIWjpLeukaC-d-e7ff*D~4yLFVL{k0WP&Le3}WzLR|76#gh_%1kOrL6>tVt{}p^yf{u=O`t#DxU~GW0WwPJ`-@W$7O4uaUgu#4c zr~LfaLK!1$xb+5z;yshZBm`pvNy-1@4i-o)a(WB{f!KBp9&`ZOuh>*$rO0!;lOsqC zPf=0ME&F{j^`}ejUzXNIFk-jI$J`st#d6BH8t~nVrb;xX<=ZyXiocp@0=2c!a<;9` zF3cNkR+}aro*7(e*ma9#iB`i+YT373f0-%XIiN^Pk`S_P{K-@6eS;P621-INaZ8F2 zutX(dz4cdG`&ZTw-a-zXIpjko_)A%mFXd*ZoduHhErFx9d$TV5aHQ4bnD?3sOYtvU zK@2(&3uP58BTH%^G?Sj;Bzw2+J0>{3+1=i3L+$pO!)qE~}nQijQrA`qY!0n0oCCuwpjH6=Q( ziL|~!B0MQ|7(d&S8HEvu{u^g`6hzE~RgmyG+H8~0)E!(VQf5M)=h%v&LiNg3ju4+) zua8mah~6K=#QJ5Cqv7-UGomj0gwuh>WhFh9{pJ-qr34mqHC_9sa{J69`zcrd30V-x zfp0CPo$HP=J*Y4^;&&Tz`V9_`X8UMlS$X+rlfk~#X9W!eWVD8TtM<{-65HUZQyR|* zk#P9_t(%N2`FG?X^>q0FkJmD_x}jl1TT9D&{WhWIU>$8zMF>B{me?{AP&?)Wx4o+GjX5%t^p* zby*%!)6DtKqa&dtmpwj6tr82HPt}^4q(*TD|NZ0p@3<_n?h(SS5Pr@e z&kG$AyW>T*JpTe-KAu%t=qC7(<2Wg$WM~g1dA(&l3^hdLH)kK|`X@u}g9>1>rR*7cQqMYkOM?>e!on+J9NbImotN(bft*xlXf!FWb z>|K}i@)$$^%kc`)KyGVF&C#*Dh6*~3LDX}|Lb1H#h%jHwQ=9nPgl@031C58nCY)q3 zePotbYB63XM^rNbgJ#p|p|uCxA#j~jO7gMr`L|A~!pIv~On`p{&R)bfBtwgH!gTnN zw_67bSarxyLj5*RCJyK+W}H2zd!XaWWA?T|&SZ?}yMBrLP4A|jO^#-V$uM9!Cj$oM ze)&ePUSV_YiMdMJ|A7ho3yNb(2Hf=D<^W*0e=zOb3ccVYtg5GrmlDxuKB%V5A;Jzs z%Is)rR3AEmwA;4c@0a}!0+}jfdIcLK!<0ZgN;HDs+;@}Vxy9B!ns|xNbbzeq;<8dP zK0CqgH#~Hm|HBS>uJK<=I1Th=oD{bOut)((%Cu=%jNNPhQu6S~;{R?vmXo4(<;wAE zWxi~k3aN?#*Mlw|A!C1#yq()$rC4MWb-v{4F$;C@z-9TBHrX&1D`RxO%s<<-#c|-K zC^~$sL`K)vI5XZ5oCu;1aq!1WU0qAA-^}ycq>by!%wBKc!rW{thE0uRYIXm{s>&sE#vQ|yWL2K< zkqI7e@}Ir6XQtU)7-VU6|7w(xapZR|x--dAr*%eW76P(Y%azis^ypW}Gsgh;$|CxI zag7}IjqAyo9)RYpX4=RotiX1giyzDK;v&T-CEuW7le>5nt|h#<`A>^9KOi^XN29-5 zv=alzA%_KF9#U{X_zLV6mDSrvbX3}~LJ8-N#!<~|EERSsNjkf<6zT`nmFuuD(M`@` z3)bW}0G%h%iha;9tdQ@fv2B=1SJIbnV^-r3kXLwOeE^1A#^#DJD73FjvAEP3vLcPd}bywvUInGuTx*VSC)L9g3f~sw2?f%tJ z({xV9o)OqLVV1bFPf*F3rh*e&Z_v-y)x$I2#uJK4Chz(pc}6YVKj)*Cc<_EVs2M9;1UMM0zDYB%fM5BG{{>tLH+kNATJ+4+15$wA} zKyGjE#s1qtV$ya$7<_w|h${EPpvU2IkXU9}cn;M==R>xocOi<~B2ADG9mBGE+mbpc zgND??DJ4nPZ|cZW?IqSqKmr{*D>8khI%6Ug(S8xUu6cWI_BO7u)jg@P?9|uK1p$YH zd`-z_5NhBMYhnE6d&rG3*_znD4qik66V$gQ8&#ZR0cx%_kH~T6?}YZ&_S8(R8-t>W z6v6&%?+#grP~dTgqXQ@A9y@J%KIOOn)V{lCPS)w{GA1?!Tw%k$oxp5xu?D*qiy+8*{V|p3KE&dfk#(;nH;OD#| zb)=tai-#ifUJZL=%0L`{X3S2^mDOVS$=d<$78lT!%r9+`n2bh(I-$R5LAbr!rKHFW z%Kd7z*n8R(XBe%|Qf|564u~+Save@Iry`A=?Nd^+cBtsPGy61SBjE^zNK(~?wA6cW zDTt&nMk6=*!mscz4jXVu#Yp(jBUgcm91+UEfhh|b2Q#vwA_M+x4TgI!X=SAMx4Xad zA*|mfCdYT&qpHWEJ7)IugD%feNl8(IHPj}%8d(b*zsT*j^_u+!ns+*f19p?+*J>M$uo&uXFgUCDTd?;+k63q+3NQ$tQzCoe5M z)wmyqAf6osyqmj6z1O@d8{=_xFwIp0>guPJv@ZfP&O{Jf@RpL3jR=_&-qEc%r)ft+5j9J>Zn$ z2w5!c&H7XbjK2H}4pI={espZuWPkna>5Co@6vk)46J{#lQs?c@j~W5D+>aV}@o3Cq z29g_nG|2c_v`uzC5rj$QN|eyweZ)RwBQTp7yhT5tga76;NiAp}0`P4L|JmaX}8{r^S8t4J=xbK{j;Lk{FYD+IsZ;3|1O7+r(nJ zAOqrIm_ubKY1lCsm2p&4oKe{ex@lbPZ(p+ZhjoCZ5a!=QXhuxx#}1yH zUw=I+OfeQzAE?6MqK{1JS~-r#oy787nL}?8ggBFVKAMRVkxfjj7wm@BPG`@9Zc|&f ziWMO19f^gTH-@Wi&qe>Mag}|8f|`ywMUlV1w<{sg8JEx(fF75N5<2;*+0Lz{{J!cmSJ%( zzu)iz3uS>ti@O(hcXy{P?(S}-xI=MwXQ9R2p?HfdQlJ!fDeh8uw&$GR|9-A{x!=8J zGRY*FJA3#$6Nf#>QOeH1aW0DP@;;+RF_b(zMfC)g=WId%+c2Hvn6u*qhe*{Pk7RJ zYJN?|qy6by<~&m9Kx#hL=oze*Z7lOR12LU^x21kTyLP*`66Zp7tUo}H_ibos3p(|J zGV^>EE(K>OEj+sKwS-ls!Rc)9>Ef2pAC}QsIx=RxEP`Hkw+@&fm6HC=6tnn8CJ`JE zG*lZpB=f9<4Yyc+_nK;|v^IC;8)#6kLBlRGMdrry>Y$UidD0p8c7b1>7Cc(-&oF%( zTsGheFF$X9nTKye>f5hn;1SV*!)u^T!9z_+Ct5I1jA%O9wCd3rI<6a#)2!@CKCL^3C8is-Z5Sk#=Dw+>a&Tl>6{4PDnaOL`}4((p2| z$SV@MdS3+-%U2e;4#e_jlC`uiW|zCdX=oXl*}YI=Tvy@5TD*gvM0mblYuIR-mMxkf|b>RdDV-p z3{%$4wt^)RKktdsW8d|@)nK8o)4V!NNhjJ@UX2v@!NT*$Ru_wkM4eA#QFJ`!O{|4i zGkSjWJ4ysCJrP?c(@onRISTEH^DQRAd-2+tjfn|Ungqf?a&#Hh2dgzp0-nRhj%jpQ zumI&|- zok~xzRA2WLN!8=SU(tK%-dWPS?amt;_Z%?b;^ z69COVQ(+zD-4r690dbSN!^jCKhC9Et6)=d*tBC+Wt&L_HK1$!^p9BPE=e!8*ub z9-`1`NAYJj(Z+^;9Ki$PcKHt|``X|dsfrA;92E{CC zdYKN7w=(7yBsyB{9?9*w?25u`cp#0}w8WpE1Z}092NZW&1cV^9fVOE%bqG$`UR6@+ zit-HCCq;<{D>6}i#sShXP+!1g&FDqGzo{PmjeCWD9nQ z=}`xd=l3XyM0WacT)bg0$DnZ|Z$NN3;qZ+b{#MonXBi`QOur@A zf}}j0CcDliS84*)P@U<_51!E*RAG~DdPTGCL7611S<&>$T?27Z!66#->a_K&|Gh?g z^I#f8Ny6^=(*pVWV_C+yjPJp=%Rf>!^9qL7h(N{1$4SoCj;-SGyDrw#W*(_R_mfM= zni_9k)u4{dRIt&pt9x#YA4a%C?#rAaMWn*(Ftn+J$cVi1vf* z*RMIOBu#5xuMBmZm#owvUW$yi+24L5643kEB}4mKWCznr+hk(k!8okTL4ciq5#gx_ zViUXR;_^LQiURmn!ulA_)Z{f9NG^~SWRwBsH(r@laPB{+VXXQ9{;0w9HsYI1dRWNV z>7k7+Xn`zBV`^1Vm=2MJ)~|>taZB96CaL(QBI8-kg#@#$OyjS0qW){0#w7;muO)t} z2u^2G&y0o2)3fq+_{+#U?MXP^T3cJ+*PWX$p0}F*u|78RD(Oum{2)QcyAB0Y5G!}d zYHEdKlTwh7kh2J;@lUFAtDSuXxk+xik@zMJ@l1P{T>Y0{gW~_?nc6Y4$AENN3GEOY zTvjBjZzeaG2u5CbxsFY|L+A^{>$*gO^1HryRPPmQ(Qa%PG!m{_3~g-q zN?Ualn->*Q(wRf{bz?bCuO=HR2%MujSFD&AybgBpmaR_res;Al)pvyY_3`eXFaq(!&alK>PUq=L%R0Aq+*gxc~7RQ=CFia)7yA zIFg9yeFP{3qF>WyFcvGq(s0QRJh$-s zhfrkrbD6(OSnaF^uOz8vy^D+Sj80qIUI1rJ2XG$yjr#v@ayZ;z9fLR1M+%zc9xHLB z)>RMHoc;S2R4pAR@h-NAiJI%gHtRwVrNZMSq8bj+@jPN9$=@Jei1;^3%<6F2X6{0_ z{!cf{sR;CgL10X98bakembTn0GfWZJnO|-XWZponEu=#FiqqGY{|W^%{01y(p1N<8 zH;Wulf>-UNS+b@_UA+FrnMlX-IaZ5EomSr^b#ZLtA4*`QL({C#CK8K=hzJG5PpMAd z@oqe3d>f)dJmG)r)zyy@Eweh&ny-)P{`)y6j9b~-`S!xYHGCXK>c-@cS;d%$ts~}j z2aB>a4U(KG@$TsY|M(&l$X5yCO|0}R9SV(eS8Gy!q^3bo2mo>-FbyqTn4oC<4-F$v z1}vuKUK-`%aS#%VP!tUEyb_)j^z!@IQ_Rd%(mE{3#;*xlG_Al#3C0eiU>8-A9s=?l&z& zX}*SQ5#f&-(AOZB-M^{zC}Do}U+%aR3_Hx9%8SOhHOeuzD`U+9Yd(tjE$WSD#+^Xdx;%Rk~$MS)rUo#E{+59Ss#&pafXlz+W^ zwyX$C!sSZ*1*w8Wa_7&}(7sv**MHeRO;R}Ou!vZ$DXuyVbHxG6aY>x6m0(@`B3nh< zRBU!19SeD)myiye>tG<7M91s@6b3u|bVshd8FxlXfQ)QOs=32R?VZQ*&K#b( z7@@DA{6uYG**yX`ci!f^Z=?F+bbpse7%$!wM#t|UH0u?{ONY|(i!}JdxbsEZir@*~ z^prH9vYIIVSArD8&Y?-LTyKmU-$4WNZ82x;K1pChzVFJLRYoZdWxc zPt==&$=lA#?xZpTGeJ(nrwdHQcp5IL$lw2-BTQWQSl26?xd#)@*@|!t8X=8l##gBD zAlY?(R24Cza0HXvCJGnVJ+K;|@{<1RMA}TeN&~5dnE9*|d3qgNkLVB?DRX2S0R>C~ zAK+ISFN<$MLv>cam9S8Ue-f|-&hkb`qRnT)Jl!u@)32V*4&QFSFWizgoZIEew&h@W-^{Ua2JRds_IG+q@52c%J-Viv zgLANyuz;FK!8SbHxrgkz&NY_wT<+8QZ(e6co(;!@WWF zxHh7%waqXEAaaBC@>xa>tMBtCDiI~WmaF^v8_W^P+T~5nOdJ@DN?)k}VE#?RWv+oy z*h9Q)ht~htwC-XAE2d4A=!*)s!mz5)B|_6@)kG>f2`0h;UMhbMcM|B`JcrfJ=si9L z%YV2vj4|{ktf3GGiYEAh4<}65P3i`@=h_(n_@MVZhvX7HHjWr?%Qsc9v#A-_$q9=o zprL;a=>wo>102YhuXyr3NS;14#Dv0vcNQPKRXs%tossVNBaO*y{I}CsYPeJmW&qR4 zVDG}_t(jDt0$rtN18-el0io4$?be^4kcE1H&iQetG~Aq9y)q7=UwfLT2zBCni5%gA{PPemU$y9fQ@| zru@3Jyrv++2P3gmgfs)a3`@c!5i@FOCyb5BlOp>&gH{6~u~+qdCkr>-(D8iA&^us% zsK=HPpDETIoaja<%IPmLGdQ+{SMO~0-rH1wVk;wK{o05UdXNgitiPX}(u-J+e~AX* z5bg|;u4bhk35`#sZH8wT>2t6tTx4zHbIwMP^Ay2e(*&*gh*IazbQ91!(WU5qayi^b z+p9$%uAyBCPQ9mPgRf(C>F>cy`}#tx9;;#dHd;f*wLl8V7_r?}9{fpE(Skia&g${) zlygOOL}U>0>;Xx%g7&6Z8cqG-HIS3^uW!oe8&FC3M@q)O17GTq|6VqZ05MfNPNllq zkC}S~-VD~I&kS>2QkfM08i!dq&^R7(IcmP<6z$CyzTX`xXe8Z!Wj|s-oJ#8SVMG}6 z69Yak9&>AS{XUk+A>zZ7CRdR$bc=+L@u{!den>0?&yuhEKljGIp9G+l3shO^3dM zJacMu2q`$gU?{RnQMr>OPVm`n|EF-hgu-qyWx^$Ylx02MCVa1jdkf5oh%DqW6c%Zs)dC^3i zI{{x=yW-AiY&}i7-99{%$B_%mj8ibu zC3FrfL!ss7fZ>PfX_s;mY_tAu0{335G^{sEW>+NnrR3A>a7p*ZPdR2fq8~2_M1yBF zB^DUNzj$<$yszthL33xvwNB8X`5@ z6-azUPg_cF!yPZUf9oVi>sunbtm>>M0w-$fq3(NTRcj7i9dy*gKz{nz)qx1J7 zKGe+Z<BVOGwF1 zoSOUbBd)3fjD^Co)X+%WHU~F-{82*e5Np4x?1G|85f?_B1hQqLRTHod=@`>Yk2Jsq#@okEp2!#`P)~kx5%V6s z5QYuqr(^3e){LAV=JWfUiUkj4`wF*B>B>72#^;1hWxE=&;52WnHASf#O!?D`NtY?T z2bm5nehHr$c1vToo-7E9ulXWY{EWlje*V00b~;8dt3HXE_Kq$Yzj^&*N36U{)7dt@ zg2mahs&>a`tIgBIpEc(JLh+{CbGDEsYB`iV71z&If75AikkA0=uCF?HP)-k2be(pww2(@`sf-|5!%CmEAH&c z5tF1+&#)x=4!2zPUZnVs$gzC2W9E>8kq-+Sr!seZ?op{lDs;H0?WcI6kLdA~5+bN+ z8x#G+PkAA?Z2&DcnPl7=c7b0`b32f@s3L+}r@1wAW|4PA1o)?kAIgX2?RI!+_7Hu9ZcyWH)L<9XK^fy;i@bHqHF z8id)3vF?vwqG>>!3;?oANw%m${W1Y&#O`Zc$IrsxqC$L(1H-v45G*E{XImMY~GD1hk+wXGp zi0nQNmuM=hgp|t2oVNyJ2tVafj+y3oWaUNQ1jN19tMdWh6sy>IEn=+Ly&zu=i4@3F zILnlsW#Sb_m63zvjFfBxS4Q{#%68aa#giM8Zor6xtTM-ce|Z_nZt-jTT5#eA&tXDy zJQXWFDTQsM$$81!@Ff1Y>}U%t&;nyMC_sm0TxVVX{F`B#E!bp!0U!Fj_n>34h|aa| zCdS1&{!5)OT$)M|UJCVsZOoN(#fBqzb$ESk#|jUw~CwFG>a_7$&bY7MLxc$eqLLO|c7 zK+=QFpY=$6?z}0LL2_-$l`QgGC{8Jr%DIE$JwicZdar!um^F;ZLX2Pt{-Jnd6SOXQ zoL~)4e2pMw0|G&e3+T*?O;>Og)F1cs^pk86P{Tr$^KP~!r397Q(=Z;rGZ`_Jz3!@N z_dPot3c1o}{t`D@)V!(tlvBJQ1_b%rhHrd)fl1#<`TJ>RSi=s)V8jHc*Lr7dqySIa z{y|DXpa;n(0d|zw9Qq!zF-rvHD0(SqWnMe-o?(Q5Xu^W&T@GGmAoi;#l?*HpHlL%# zHZF_6>$hC)KGKq*Q>Rj8_NP{xF;yq{VY~{jd&9pa+MuKrNbg+xVx{%+&?Gcrx*oxG z)JUeYhlRZ3(Mus4ej-QlJ^}PhVfth9ObVoqc2pdRFN*TKYfAm25Xo*Rf`6xhe?_n> zCzAOZR+NCnUKKd~h0A{;tUI@uDgcJ>{A^Z#_G;DH$#(j4!3OvZUiN-ZL=$%6DDX(< z!4VFXZ_0d;_xklnyHQ<~i>t}D7Odii`qsQ3I)ekH{n}8m7XOu89OlE(HqAhbxuD@E zM5_ZHmEp{NVN0*=EanSW!xUp@YdKDZ&N?vDXnqSnO^hCW*|qa9cnf5N zQ1C6^JrjGD-tZZ_3ReqzU?kIUDCfm;ut<^+H}lf)sv$A+z1E$QC__ysjsEzA5x-y% zuu(pH`>|t4KJ28=2Rn%`wlvP?V4_z_Q{mi$`;z8e92Az&wqSKVAUxPU&DMYp*eyAgO9ZP8SSDAsHSe!dvM~HJ8{j^XFqc-5}qLPRC2$LcyE6 z*5PkYm@ZJaZ6{ETMKn^7^vSz&u*7oWeND|3mTB=jG+jeP8Ik z_r9u`1x~f57_u}C2T{~JaE}`5mK0=;*j3|MDE>fK7~vhsCgd<0lFex3ZSn$P$_KXwY`Qp<~#xUUB zK^&!bUAW&kM<&P+KHmOPFmad1_DCx|`k`Hf0WJx6Ohf<%d&vCt8qc5xY6me1ytR;J z!qw>#y3b+5N1izeZ)LC}Z-!W^0%k}(NH0r1grwIAA^73{;DojUmkDX8UvIc=ScGAP z*LNomo4QsYXR3|R2sN#$_exZwjiKUuA1d9^jJx44tpv$5XL!-Ky@>bfyDHZX`acmD zOkYd>QIk3IkqTpZK`WS*Y`{(DDTKL`~bgese^b?hwh^Xqfq4xW!d{kMb`{DH#>!)nIJI=RiNyE4fypPEeNpp#Jz*_}u zcjLaH87`*dXyQM!j790|6=#@X!P}uuHCh_I7?P63GO?hNP6*~0!c!YCBHWB~_YmEEuqVQ{_r0uDPuaJhNH%`+a z){e#IEcCjy!JRy%cMVzi5B z6t$aUEO9diqxCOnT}eh5o|B(063q9Me)Fs5>UcRQy({s#$fZ!!IL6$&fL%azP56dn(3D zQ7j5f?Q=n`$NsYygVZb>2JX}*(PwnI-mq_oxmmePl3SYw3d!KTI;`6W zY3M#>Q>#o+%{4bMC{g@Ifr3=ryhr|3C<-5gz(Iq9jb7h~N4dz!- z-v=`v&fL6(JTu280lYjG zk6~klk5yKj`b_u!_kCYbs<>c~l{gB`a4B<2$n|oU$vUeF>Y_b!g)qCC{k?Fg!kt-- zB>ewIG)*F7A%}{p)kVAX-oa_F{sPoz*#oylA!aj8Pj6o_N4efV-$D@AF&r57-$3dB zY9eyW=B6dOeA#6n+HYt&xc7Bh*(mH}bLVfCuXao~`+(-t9|b}IA^$h7>VTR*klA@7 zH>zT?m1&mA@>LT&oyT}Y*gxD@Y`ail$Yu}|r6~BCpc_PE9i%G&2vt0(582e$;&8X5 zef+K#MJNREV2t`ZM$JH_C^q9HfG&Hl$GdVN~z83hJ@xrg4X}zX|`)>qGFa&GEfqA%@<2tgHc@Lf$EtH6e zs@ovTXD*WH^pE$4+T1Y3(GOsvr{LdZG6R|+VVe^?Awp&~@Jj+vdpV9caDbc&qyxip zY0c2}s|9`aIDL8Xe+EVV-(5ljO-UY)n*g}yFW&BKLkAR+;e&bGZ(?@VtxfSq^C{}| zh?O;op#ca0Gz=z5%cezpNeXLp(ZElBn7v{^b?Q5n&3pX+2q$=rEsqOT*Ahop5vro- zkwo^B2$pO8MHpa|k)6$^Xk^UDy13!%ySW-f2}VP>t>--0)GA_svX?51SR%I4#gqAO zW#aNCeM%Iz;-NArvAiO_1nQ?KjO`={-89?+_qB#CqfwY&jXs8|9v3I5;qJ--Pqg#*)#ed!gB4>O^gAV#C5WY8hi5dFD6^(JO2U>D7O zyi^lApFSJ^wHmNc;S<_D*EsT@1<3dlbIkvVcwb?nIAhSRs(eH)wjE9j7=;0GkEnOs zXOs!$!rIO*d1AxjCNCx{#>C1Nc|1|;Qe@6}hzgNDJL1mp|0pUHQ>4HZ=R(A>6c=SX zqz|>&h*LtD7a^m+<8m66%FxrZ*W8{ud#;xiJqf6&9(g~P`O)@a#(r&g>T6D=m}tD& z`2P+>r6NU|d_UT;+A~@+Ccc))xws%}-F~(%bYgL=AnE8x69lo28Q^4C6b3A1sodps zm45)Rg4wD6fApB7z~~vq#m0`VxN;*xqpcZJAmy<$do$2NXWV6Rr&Xbo%qajjz8riB zwR{`_aK%ad|NmW>3j24292)L(cu;EIF)-(~{R#TiM6v`BzFm4M>sH>|}7GMPV}0iO6V z{r^u{mco=0089-`khUB&8I~kO)6Fwa_Pj2POrg2=XR$36W@js*)nr#z)^`OU9M+5Y z@`=g*Vd+QHBqz`#Gu2bP9K(!6{h#7x0@0LUvD4oWK2vx{Y~0|RyB@#CQFX10i&?Jj zTi&iy;B2Ppm^gA&sXsj%_>vp~vRX{nBXqNVhO>f9sk3B#;bd2x4*x`U)vJ7qL17iuEMnC-+S{t|huSVc$1=13k`d@*uZt=CPV>6c*2UKA2r}A$+JX!15w4XV+1o+0t`1;ru*0afi#wEvn6p-VjRr4vr^Ig6G zh4|pxpbk%zK@*lwDy+)}b7K(L2rc!46tTk%GW5>b4=`h<}^&bih{ z4?2+#7fu$2mWQd+qZ<}BvZXCIemPZERCWz-HR}ZQ-KZh7TQ&DCQ!yqkH}Nt#!q}^8 z+}{Z#UgNyB`)SjY6=y!R1$#;Cu0EPA+AsEw^dojx0J^77a^#J)d;A7R+=1uF{tGas44gjEvAO8)j6AP9k?Y3s^xMyq=AtO5 zK-a$b#ae{@+u!cmpg0e9*u-Cw#TA3-xQ7ZhE)&%6C8-%)DKeav@u~~i+oa~3g1R3h z%K<74+pBJIK_*O$67CeniTSz2c-AL}APdOHap`ulkA9;9(FTdy9B>`a_glSg2Op6YL4HGnxm3(`Q zle93^o~Q$V0LX6KU*+~y2djGe(}jGeCG$LO-ACfSBEeWObEE)zFS2P{e;pXxpZqp= zMrHiTD==PBYt~ZRjW-Uy*qT9fxbPxniObG4Ge3kRr}4~z5V9~Dvya^Z=R!gMdp-=D z;w(N15>Vs*5iicO^0|_S9VK9|`Ou@5cY^=!nap2|>0ayR5DSNW(zmVm=4M#;9F4tu zWI=swje6u5z}Wtgtt7vc|5e>^8=o}uBqa^>lqQk05R{eI#y|5bG*-x49>KHzwm(cXoE=dO|p~jQ9MCBQLS15UUC=D})*u6&p&rsZhO~OvIo_|M+el zpEf`gb~0dF654^D#`(L_O)DfGWK(%>ZWv~-XoPYK3MqJ2-xpjh2|^OzmCfB+Q>TwO z2`q<0Zo_N+9~Qt=xLm~t{mKO#2OYkO)R&FZkf(6RmM4UUMfB~r;X>wsE(;3S+v3cI zqaDEljrhMT#+;;)dkj)IzS0A&gJ@89RGNzJHyo!f*@WZ6Phr82z8S@$3RPM>muwIp z{305}9&h)Z$}#S#N=PWYwjUCQ@0(EZ8EGGMcRt}u3e;p-a`8{7NY%)E1C9^GzMcdY zx`YY9JY?D%2j&qx})TFyEaUEQ%@netQbu%mtow=o68fEzVmIlKM?Sm!&7--d;LXRp5?*U^e%P3sj0~)7DuQ5rOJjE-cxg5tb(|RSkh~Z%vJ= zsNmD~t|h-4+AL*G3aJlblL^cMaP8JP!9i@{2~2f9*abksO*b`IZ;*VH)NL9zGSiC- z+ORCRs{8wO7+zg4N{38JzpwNT;2XUlWCe0v0ja%zKT>`6k0@j6z`-VFyi+TGaC~%oh%MpsIwh)0Er6R-KrV-cd8==Rzl1Hn8q&jr zNN)ZrDA5^_py)o1weG+`+V3*)@tjIoW2K2lV>!KDJt--YxPB6@M}pp+3bhf*}*Jj`r>Msvg_+h7w-t#6^V+>S6NPTja2o1zw3MGyhF}ml1)yA@P?W# ztiP4F=$Q|I?kl;SKp-EaUX&fjLxt&{NS$Cxjd)CW?b0~+1qxB9KGW*y8njjH*V4J1|(lgL(L`Vu9l`8MCk6& zMJ^gSbd0aF92d@4YN%&viXLYx-N%JG!mb9T-`~P{nmAvH&sJwDQO-5-VHQx${e3Si zrCKo?(PaeaWUb_(7U=FUGX7hdOt?6|U&B|GKJZ;-FGQ8_9Z`eNKa5MOFlS zDp@qziXwD25;q5Am-)-^)S;R*kKktp#%5(Y{Ln*3zsuC4a75l_ioh-y7`u{&(4UAD zRmTMOR@$W64O!yR5f^SCy@uF$@^S%6@Q5A&%dfXuS_Lrp;S z9HeZl+&5Uu2iQqGV>TmL z62)VJbP#pUmq^f&uxKJ>!&_5Gdj&jOJ9V-+Et|LQ#!_x(D`q!-NdJI_`CeT0v9ODG z4mM9;T!s{uziMYmB@^NBB}3U%N1-I`EY{WX7hm^qF5WbdT6 zrTZc*^?a*vZru4~6vjC!*EiO@e$Cx}+7$|i_MvN?bUMr%c>pmp9^}u2+= zR@Fn=1NHA5^factPSDoURA_R zMJ&&adw{!j1ENx}4(yq@10 zAQxmiWTVm6tO&b^vOP)F1?NUL(>JgL+X;&HjT{CxI4C+OGL220m4-&fNPOpeZo!qN zU}y)S`9X_T)5F(+`fXbO){m#FEYQ9ue6O{V0cBO}=V2R+BnjfXo+)sN*DZmw- zLcfWU_%ls)gR-Rg3{%(O099!qoZN47V>kvGte&!xszsl}BKhOVKHsc(l$7r5++;=! zw_BfLS?H7C?k3Ei;o0WR}vy$AnGz8%^qPV1v)88=2_qD&wY6V*= zAsl9M%!)6rC%@HHT)f<~K0{HUd-rFJsf+f)l7cFNkfLJu^I{MbPU3GMGgyN8FM-kxXsBIs z>k{y^OcM$oFD-CqXQA0d@StRO+hnt{R#dSuN|RO64mGV5sbh4eV07bhApMu}jAX(@ zCL6{MqMw<29Kq^$&QHH)lyvQ!ohK+VZG-GNy9M@Fl_%l=T(4#0LUfq#mqsr*M}k8+ zE|C-_CVuE?oai#Wu?*^>CLGqX;>{ z5TgV7AnPETAo~&U4FiP?)O9L<7TrWzSUjsX6jts~-nD-V2YF3qQ1?=+Z?ZmCMdCE` zdVHt7OWHBXr$G8)Z`;29WPyQjW?4mmDgg^QYO^S!f!@qkBwVxUyAdNVk=dBsbgcQ? zyEm1eb=(j3I@ns8tS*1jDo?AXQdy8yuW8h zVq(}Li=JM0J$;)M96RW!8Jdwqw3^B%$`m~*w>omWzSAF9oxmrP4K)&F>u}yuCgo;Jq_4SCv9G5xj+{c>&aSy{xb44bs32*HL zJ6m|g$cZi1FnrCL?PIeL1rMc>C(;vWnx2tS&E> z_mL`6v&HUh5U;;ZwDZI#dq?yN`aQnhKg~buw-)QQ00HzaFREw8trwT;o4GE%z4xSN zaUF?ea8~Iv?rJra3iM@ibj`HfYFtDDeCYm@xB!Ce6wwU? z9A43%sGK^fwO}xhqGBd_zv;4_Y!|&tT!1}xB8#M#eH@H4qNe$i~2)gV((;i94G( zcuQ0vGXvx0Id@{uxxPSbO{VkfxsQ?mIpWL34(gl&P6pNC+3V8|&jA3EF=zB3bTv-a zc)+o$9KcNr zscAxLqyn(cu~$6Ep<=5#PbNs_L1N4f0oi6AarlnAO=36u+RWSfE2llJB6&k39J0eq zjn*8bVPN17y2|>4n60ZUuA3D4c6U{suG`g*oq}eAXmRzVOKI55g`eR%;A%WbOU#D#Qh&IC0T1y;;K#NH+c$)126dRW@Ys@)G&9A-G_z( zpaNaVv7+k;oV9wP4$5-5J($#fHSAdQM$|7C=1`dl7zlgKkgYkk29OEI6fI|kUY>#Q z+CJX6@71_CJdvVq*;o!=$(#jL2DMw#hVSD?%jeVZlh>u>Vh^^3iRc5;QB+(bET6yaCz-C_o(q=PFhy zF0*?`Uu2jI%0dhj%41TmeZ9Y?QC|F`v&5gG;y zXukxd#3?G%-CrfpzZ_at%f~nNLpQN%7POl)K-xX>IeW%JdShmmu$%tfI z@~yrIzjAG4m|ws$*OXs%gsi;BAG4>){jIrDPSLdgVi$SX1Xn>wcE{E1LLB~r_z@yl zCJ`YG)aaiGwG)DdV-YLW20lN&tL?xmERNe{yG_T)-w7cIP*bX|HX0lfkl+eGjX27{ zhMI5~E1u$7p5*2b?C8|=xB%97nDLrZWDYEx&QlfYM-zwgC;FY9RU2%;>HG>s7Z_5;;DF{QU+y{Yo`m4c(t zcgqjB;oDe$&qS;Tki4`gYcS)zV_aau8J_a~*meyDe6{moF|5UfzxuIIaMg8nfl8O@ zcCr?zNo>?2mBnovuBR(N6tv6Uw@#CJIxnH>3*>ZJdj?#dmrOLv57q0D3VHF~Nu5U8 zdr+NXOntBI0iU^p0JlhOIo@=%Wx`*2$X9B6&xwP?Xvg0QAAU4%7K=R|$3#iz1K>U4 zPW(+}JhTImL<%>qQFq*8JQ-Ge4!C&ZH@>m>c7uMLi+ohG*`X$A9Ep%QRiw#0aC3V5 zBeBcn^Mt84z~3O&@R^kTvw@rA;+BEoPj*qJqMI4+LgtpYOuVJm$YFpug*Nre1 zeB>#nzg}qrSu|S1K|xZU-H)sGJwo#z3IE_ryc8BW_84h$Mg$E8T-hv#YY}t!bE-H2 zaI4wBH}z2;qxeXF0$_gUNSB>bsuiYO_+cr$*)#`rQ6=V$TaeAj(XXQB@tvzl97Izq z`2!_U8T#0aExzkcan$o!a?4T+x4`~ai+87O#A_bp!XgdH$k(>%WU~3i zeyfvQ!zzA2E&&nGSSo(p=VepI8~&~dfq6beN-KOlaKzQH)@oPQm_6`#$oV}#Qu!%+ zjjrpt3xaxauk>xbZ{ENXt!25=TwvVVM5YD<87n%@->^Ld8#9RRJne1$V#05lUoA~H z$`}2ETl)^CzsEJUhh>$>XyZd8MYR~2GWrbuKcdbmEUqS4*8>dh?(VL^We5a!3GOzy zyA2SWpuycGxVyW%YjD>fA&|qr_c_nGSl8=Wy}GNb>U*ndad)-Bllxb)n|vJz8(IOE z{dIZkkwAf(nhFZFk&x91-Q%Rqn+&XZg5`)~^Yb&A5fa|%M!tZyrP#kjli(Y61BDvG z@UF8-!xuRqdq`c%cQ;IX)%_HwI^fG6is5<$6}4rP`o7NlHVA!Gaj^OK9`RQaOYzd? zagv__J6%I(H+u^vqM3-F?_y~r$r>0He7u8f@h0n_+*a8Q1yMiLYgf2(zR%n^%P^3X zU+dlb6#O#B3Fdd07TcS8U@VwXK@&0m61qEcn!CgU)CC;}KU2EA$C?6Z!mp4rgY!B!}@8mIT!rHhzEp!nWda+w=&Rd|##v)ee z(bg1e;)meBE?$TtKn!P{9MLxv7#P$1hk=+9h})T3I6Co!17>`6=Hq7@n~ME{b3NaQ zLIAJQ^_FKAVm(%mHhxAf2Bw>HPU5otR-|E#d)8{tGRJ=dRtb=m8#EQnzNy+u`JlukIUIKDIT%8{T!a(5EuIgOsK>&e^gp}GMn#}C_n|o!u;sMohpo?K-)H0 zOwpcCI|=@^E?JKn}*Du)3)2H!j>HbKStVjjYbSW#aqgL z4@Gu>e{mxdsrIwoy@ZJ)H@gixf^#r*XBLm@ z&!-L#y64`!UCaOR$~AKN{IGycuwxr>&!xl8Mq~k=G1sB;CfqDu+Qq9X@_;3(_9@Tr zCdw$~jxckZf8Y-}I-r6?!LdfCj+E^WvmtpqS}z(yfsC9k{<#sqsGK;mO**g*F0B1p zZ+BO&@XM7+hhh1Z^Eqgk{%NJhUw8=ctt;6Fl9y?I`K{O)`JclR|DVJ2>*whR z)ey>_eyb*!Z+@yQ`#Hv0*Z5fZ$+?~Ad^Uq-lIr`A3)y}KKYBoOh@=Ti1{zq&r8jg8 zrj8%p)%6=hS7>Vv^-}5wbd@4Jo+Wu#K4=*gv{6qCvZm?u3|rS{WBHXBQaz(>C&o1; zJZ;c{KG4;nL&|4aX{ZsSEt&&8psA}4Gd&@5Xl$J-{Ge8v zFX8Pzo>6wS@HmDqa$zn-mJBOVNYX0m5}>f1;nnzE4N^V_Ob|t(GV@|5fidbRmG}MCM)9qsQ8&y+x4KFNjTgT%yN~{u(A*=XkfdF@~qsl{>P^<7g2~82V z`aAyLf_(~c$HS&b=28@x^l8`7&8Nc>DVU;S6^|gX1wByiU-sdkGj&C4BrdG*|1y6c z9NGtl#A3V@v0|EGv0IYy98YF9mu{x71ps4pFP2jRM!``)qVgDw^$1Hz1vVZp&WCS^ z?xyi-tX@M!E=pwk>zyxKvG7;9!+Bvbw%AG!ip|R7LE9p?u`ni2uwF>0Fh-#Xsi^h@ zC!9pWC4Lc6dU0+9pS~7CCE3{z+6BFSnvremv-?rnVW8yWmES|*+y;NIFqFxB&quh< ze&<3&REQOhJ(>oh(}8xbPi5^CnNn0xc{Pe4Qb?k0Sj&-W4R!m2Gx9$PcmN^-$n1@Z zNXX6ByS2(Q!%iN66Eb7wh0sKgb|akx_i@F?qGQoe%3~!88A7B=q-Ka!r4}-C_Dwc( z3>n=#J$jzruQ5`Lz*Q=ph!4`3ym+SjWbTm!ApA6U^VAlO{`M zH{?hAWrZx9lYxja8;2}@#{`O>`rC}%Q-9yl354RpGK8==0+du$_E)wIXIe#MQ9O}*Czol~t%|G}>g@P1mXL29xwr!6BL6#Q zGqNB+#$Y`xBBui5LdzdQVi!0AkU!OJZ3rud*QNW8`-(wLDp%>kflIZ)pjE^fG0;*x zHbN?nST7vkeC7TXD&tXl;?&$P{2-A6klMRo9kIk2;i1C<^#Li-IKKF~Z@OV&a<9U1 zGzdgn(T36eXEYK1cQuq+)>W`1(lY;Oh$VT|Ca}sFPI)`L$^v#k5vya4TODlDiGo7I{FK|1DCdD zT~`JE?@b>9g6)59SZvwvYrj9j_tF86UQQP}=XhD{LykYt#>^ZL{EHIkD9(Gy+~1khm^K9UpS;^e0R;vAh3s8) z%gsah%pMdIBhz6Z+u!AsP=AUO;o^&=lL3P=3}+vgz|NRCoEmCIneStov0otMUZUt1 zGjNZje`~dF*Nyn>3#{O_%R*6hLQKYlpnqmI8!W^8AQqV!(f-3LPdGmg6Sh&K6r8D~ zWifo{bSotSHaT~{U7SHN%Q*pXUiW~MDZEs@S`m=prDeqj>CK#d;DmXaD${E6U#?+9 ztaXz%3~HbJW8$pGWiiY=+l;}$85V;nU2@h3FM~l>hG=}>6`=nASb)tjA7KkH_pf45xs2VWHC>5!(3n>#_^RuB1Y{X6M#$pX5&*?vFf^0RelmIGt`VCSh@c- z9KgFZ`Lj!m+j%(Xzh7l)G*ow_oLB<4)l3*d*Rel4yX28)q;6S7Cw7QjraHy?A(05v zujtDX&~OZ(b9|!I1A2|tYJBn3VTS@FITIYPmbtwtmr$5P?CD~6fGP_cnQ`XB=}q?3 zP;}-x5q*i7Bg)mV`W=(IwVMcrL6z3QyyGBWBh-f>_H5!g3Lx(>aLyvJ-Kv)tDrbJx%4_yMl16^C%nLYN8^&>Wtqp{}jBflzjb) za=#t0p@kVf9Qy!(cg^v>3U!-F+S_k~h=qpc7;;JVJ-69LHJZ5Y75hA)OyY*Y!PH4J z-8z%oC?{l}Cg0-?dtjOAhW6CRJ6}zbH*)^fevqCW&ZZ}vH>#tKDJ}sfWp7BG0sc0PI*Sqfx*sgXE|CL|r?L0FBh~TOAb0)oic`83H!A83n zw*UCYj;A5PoG=apr!v6M*i!h_+{qBAjKX3CwC6@Pmv4G-(GYF@I&Q*4l@=*$_a*m0 zh_f3RvHlimTrEItU90K9Mw4{yb)swD&x9pi^1AwE<91^N7H-np^2 z0-E5J-Z}s91Pc|oEDV8{=<6WTipVivvMC_Ze{e(t$`Zc9lSzLE=4y6JlqKYqtT0ew zac7HJ7GlXrE;wN*WQo%zq+b_Kf2;-?Kn8YmO zd?CAL$hl}!0g!<(7Yabd-x5Rk`1VYre>op5(q&m$m)d&%{AO26@v=mxN%Q7aM`ptF z3Wm<8tPEQ#Wld?;?S_<S&ij?ku( z%pHx{Cfo^qySLbrwjjr6C>@2za;2+nCtI2wrd53`xD+}`8r+;tyhQiIy2t*2DcfZ! zP-guw#poIUrPPYudSxQ3p+hMp?uCF!4i#EHX}_x^#?8O>(#6d_m^NI!5MA=%3}ucK z*@`{B)YJ4wYox(r7y{CxU#BoH>`5=P!>iJblG@X9;%7=eh)FHeEv z7G+Vkmp8xBKlL{z`i?f1TE+`<&OuSXYj*LJ*+E4(Dyd`AR#8jHI82Qu=BbG zUC09kOplL$RSS7(644>3Ms}OUa|-xBok~Yi*GAHOH9B04W_s8iWt^{q*n{GwLZUhN zp!`)m_KSd@V$%GRk5}=j>(*M!*C0c=*RT_?AUiA~?1L zPyvEE0Cr{0Ty4@o7n=RKFhhxkRDolbT;KkeD7eqiTQugo*ph-66&AZx3`M47)< z8L3P(|B9!?^%D0^M8l!Dki=chA+)gs1`aL*5{8*hOu=4na_@MMP}2`fsb5!x+RwTD z{WI}cs>lKK82dtuq<0Q-Fbew=4p(G@t2@1$qxR!}5>eN~>~OF=DKTjY7}Ms!b{_D* za^2GJf+q&LqsG* zTZb;@qetd>FDfWWt8I($VTBmj<%M<^rZ&S~dZZoCy$XoUuKgOLmg(4Dz zfo0jUIF;O?4)BYV`w|pkkyeCo)LWo}HM%U@JZIpSf)A zJGd_q4HXqiG3=^Q34ajfH+?%M7J&j51tfpt4X6P}g&b&k8ajHM=FqIAg6Kj76+y64 z1l3#8QYicMbe<@8GyX1mtT8;(`tZ z91IO2rsBsU($jcGQkUAR+*gdLYnUS!-}^>SEU+e~a;|y5W7;t7`wg-ZxcVb+nZ zBx`j`PI;+N@v>6yWoZibr-2geuC4Cv8bY{I_|gEg8%A8#7!BZ=`$E9{6<}1E{*9+A z;ZX20vq;PxZP_p5<6fK*P#3z|BAeH^69hU>gDECZGe+ z^)h9yn_Lv%baag#%Aw#ypar-a=Ir1xKw}}Wq}X`+-*Kbzq=r35v*Or+<8rXN>E8AJ zz|U$~g7^(ZFG7sNno5J}Kez=!fkbYQA`%p8lOWHIN~S~r(ugFqV`W})ip6X=D&k<7 zfe(7J&;*o0?Wl%v@Zv)x70qlC)^3RjA+v%S`DeX>V`dxKMw5^5tbMaR1WyMkfPO-$ ztBhgCV~@(S^fW~wxX^8cDs~0}`~^U}k^-;irzenLzGtFyePYzV&{4cc&Xs@9%>BS^ zo}#Qh_GA#l*6^8|Xg`?P@dutXSsL2=oTI;!kOUY;0%9ma>Tb0o6c2%2BnZm2ta>Kz z?h!rRk0q=;#wda6?S@1pDi=EFS;?N}tx36Q|JNOq$y`tP%%6vchabv78miz{qU^n9 zyBX$)1T-QKMW^B7;@rXK8}Su|L=DB-&m7{3<%m+N%QV04gq*wJhYf~pl~p9}+_2L_CHc@XXW<@5&OVgvB_jZBl0Xwc7kbb@^?&9a@gZyPNN;D@Ywz^=!d+ zq~K8E26pJx!KG!%%tinYrkePo;Z;TlOh%lT08SeB>sRwl4_oRmZbAGc!VIPY^OQ_)|AupuQKMFm*Fv^9JbQT))R8UQC-JFT{#)TKc3Rg;wIMDjT z{pmw`NbY=0UA=$4K&7R}1#uNr&5~H2;@-z)iBNO+{n5>|o2j#|SlRZou9>nb^SZ_cfG^?E8bl2kT1N9ecPKkol#i2*q>l= zHmJ$%-odRrMb68D3tA98?sgO)s_<7rC--X51iu{PupX3Q2ETeQ| zVm1;JW*GVS3_t@2Q3XY8P{SPg6@EMwt#Rt9W;G<`f4)w)oVIzlf7Lzv>HnL#dVVA) z-oSU>W$r@M$zUZpa^J0(O3Ni{jNiDPfgyth5${A$IdM!nS`G zQ~1>~?MExLzOgBKa;$Et9MF+h4ZRWR>h2xXMyZ!?r(HTh-u`I6+q~{4G?q^!xkw0l zHZH|oaqa~fgWT+oV008$lU6d(_om9w3-9QzmC-Gf$7yX}mzzvW6+Jub6L;WIr*I9J zneJA^ZqtrBcne<~XngIns}B$1b>D*{abDYR4EkR0DHmr7EkjH3dr@9Yc({LC-)gex zT@iPHF&j~wb9b^N9N)+1+yXKcwYu~-#iI;AZrt6@t;mFwJ4f$KX zeu%rLS+yl_qos4%WWy116=k7^vvhJ;5Vh1#GOPrgMP_GHo}LO_hhz`L%y@cg$Ky`> z)~$i5oL!2QOaMjC$Pr!`aqf^K!B*~o@+Q`;EOr>5@PxDPB;JMdgE(JhcMZbZfuD%U zTQy3v=k}o$|G6pV9d76(DX7@{qU3OU1<8r#{(P8FmVXok#0B?*CUUvUz79uGKUrHs zEq~fMgUtw3ZT32g&+YH^Yst5i7&Nf?^x6n{QqBAEwNfoiLA&Y@Jr3E%#OAg`*};3p zeQ!Z4FWI`^o+d=Hhy5-nwAt5mVXAuSqYgRGu1t^8 z^m7Q8HlZBaIw3!c@HmHZGJ}(L!Cu;!PGQr)XOQPAW8|Nc)15c!W42*kyAhwNRX5vf z)#F2n5gH@g=)jADj(ib@g-uv9|3ZAWr>xD+^3suwjW_slE7nHYRpIlDU+uMVm~I{T z<7m+4#*IZIR-U-OR7g9El+emD_{@PkpI>+tPXV)S2pB_l>ucH(I%yNEHa8+r;C7?> zvLa)5KMUA4ZacP?rsXvrRs;0nfb#sv$Now&|Fm!VK0axCx3XcI8oC1CBhfm3@EEQ> z(B)r>S3T4oJcc2 zeoq2?l82cJ^p3t*zZDuYOseMPoDz`l`$4&ix%wb1Ip=j%xz*wlzFv1FSo~I}`M7DN zEc+-=NLaYlbq_f+=#uS8v{dpem^9PQcCizk#=DgG>uF-U1aE97CuKn12TR6_XN3p~ zj1|SWN>L#wPb_FolPi8_Rn-2+VH+9m^`rVBRkw!~z}aGa6PKr!O!g^DWW6(N=N+~8 z=nX~Thr&}UnZkR!)zuudI(WOc-=s4CdB$lKftlGjI1L;8mck@!Z=bmDl}!EQ>3h*O zV@1Vp3RjY{#+Eg-^A76jwC%2rB{_BcJNEmEGB@yp4U=i+Blk!`$=!21Tjz)~7uvdF zdN~R=-1&_R!eUe1ASbzIcy^X*4{}l9-b|Bl*{O?s1zfN#ZAE4x~)xOd!(uU>vmLf!kivDMQHCYtFo`p=m#B@1Du{v zi=BzXpfWmg@@p@jW^mBhXcIN1>=#8;(1gxZj~7}aw1=#N&Ej5){A#12RQ%@kUXid9L71L44V zKATs7U6w=xq3y$)uc7wzuSzY#oA^#-9immDqAx&su}>g#FA@-3gV- zkL{r|OIGW=tV!OPZMiyqy@ftK$IxVcVg9Mbt@CPxqVW28Dj9b=wR=hCO7kwtE z(#&I}y7@n^OD`?5N- z-;zD$J&>9OC?1pvvK9vW9`pu$tZ+HenxD@zhVfgOHE#OCq9ND9R=2rg>|;{_X;e}Y z>fDA}bXxId1uw@_4@+WKp6K2;Q<85_Ej!s?cDBM^6z7*zsgsu-dmkE~qAu3A=}qQo zU%iFdwFBKssb~MTJW=l6A;)$a<^0Ib&0hKIY6-G6i|qaBu_>f${dUGRY5ffqlg+ux zUyz3ri^{NFuIEnAHDLPJwZn~pH!8*I6@-w>t;Tc&`Bx@QQ_IG|gqG7)gU3_2X1&$G z7if^7k&{og8lm^_%EX5PaUE?OUa=HX^CQ~C^MpC%Mq-4>mNvZ$?bJT9*mzRmyg%*V zk9({(;}8h25=q^-D|WV3ekXKQRY!g^+}d-Quy1O5TxND|3TPh)c?EF6Xu;8(zjr2Z z-w(RCJwwlai!A&QO$Zcum)Yn>VMg^iO_3fNK2Iss8;7YYcv32!Y%>d>o8`~-#yRuz zSbV00QjF)2zRo}kjWz)Hy=rLD9lV?c`jX?Z4YH)iTnO=~Gr!#pom9Qta89b%`x?Fu z>O6}6}yJdo!- z>|f^ype4H>;n`xP`psiTFZ}WfolTmXTU;s@w2$r>RuVU;!_qdT_?VU2Qn9Uve|A>8 zSNT31*s-Gdr?}MOI7lHax@~}F^n|q`sjuziyudr^mIZs3plI<&<6=8Ez6&>?l+HI( z9p;NaYXrkFycZ(`-0#v&IDra5Y0ISCl~Pyj)jKZ}Ya%Ua{`0u@^cVBTY-_XKgkp$d z5{9bwU6V$~%;h=*%#E8s@|Fe0L;lv-II25VD(#t&1R$dtOQBI)LNl9FA*npu5bFta zrkJ1o0u>v3grtzj`iZ2@RBv|i7QH-ojh|~T_;}R+P9g8qu}ho9b?MRfNEHSH$g}0? zw7N7wfx6#!)TFUz4P}H~{tt?%X}{SeL(^DP_0vv;b&w^&$bF75+u97FcSUVP2+G?W z*^=)YRwFSf_)lMxQzox)U@PP&>64Z*6#MdT;nCE;9Hpcr)VYcdcXBQU;UdRF6>fm| z`A4ut-V6H`G$sMi9xR1nm|41<%-OeH8EFswumVTzODAl02 zEb45lOF95gT$=|&J5%U&)+FTK_GGtBB;EgClCgC^Rm(kI4V zNjx@5(7PF(T_Y98*d8YnJlEfmN5=r*GLO{vclq5jNq zghH>}(*-?SvX`3zgfS~zz1RhK`=Wexgmgie3->U`9x%ChQoEhux)5 zCtG`0rHPsV8ux~RjrHzJVYbUkIn49!M|KDFP#gpy{%0g@pt*fc*Y#mk$G; z0l&dbz(7~YGst{CmjlD9Llk<>El&xX-wf zyid+dyI&H-A(9M1sP`raLfC=OFNg~>_4%?PqM{x>e$+ZY{x!fNM1(bB*{WJH@^fZsYsa9a15O{HEL+mX;f^x zGt<0=Mo;(mcrRRe*Cgp*Rju72D6&rn2d)98$6&oyW(O>36j;x9ecpb8+v0X92fygI z1ZDzF)fdxZc|XuDX!*nBh%<@>TZLc*XfLuToM%%(m(eU3v{kH!Q4>F}jFrUcKGsX9irt=ha7 z7oU{I5aCJC~YNYho&_h97|K8{h6kA(&1Ury>tS4sIMaxZ8q?$!|BQ(x}1S;HRMjo0q!FD z2McRy4|JoW->4-7XPj=dSpnQ;HyKcVG+mq;$YH7T9b>JT{#E#6FsEtFk5CtX=?UxX zK^|X7l962|4yj{H&X~ZwM6^rzy-&k$lX>pDSqg9h%~{tjZNJB@!5pF=qjV8k3*XG} zL=Pqz14i6ETJ{WgI4_rHtObhIC2n1VXLzEwbYx}$o+qb4`Ph!;)3nlCWA+HZQ9r|S zT-Mp)08Ee*!@&|9hPIsN`6#%rd;D;PX~?W*Xnhgt=ALr8P5Q2dh+?IpDiCPZVc@YKH( z_g3qWd^;>V`DVN?3lQhfrrA1-BJyL8lzlvkW{ETzvLpJgviea$R2G!dE483uF8d^E zMz{a1L%@Yt1=W!ZY)#kyE%+P=uwju40*vPV-c`=3_vLkP$Mt`*);hiJf`8g-HN=y9 zmDq=#3j8Mk38xfS9LN=6?ASS!MW}92WA$Kxn^50tMRgd72e^A2IL{8g1_p zO=e5mTm8{2rVaWI-=t9DD?Akpz;T)h+csimoAZ-TxYU7zI?;cUDa#joyQ0QGl_F{xc=U1o$mA(d5X)G;Dn+<5W1_GkBn7$X6Ay(UX1r}C;Cja}fZK0ZkVv_8=E{fZ z_=Z@yedcQOi((KC_$l2O4*AjVx`?W3f-0_9tj6p8J@DbLz+MQ%`$!nyvAD=Z zz?F#;7lbi6i?ZlLc9ghcu;iQbrM73~Vrogq+(;f5?}m4q5y+>&aGKqER#HTVw@d)K zOiWnrHQW*2#rh3H<5By{4LKHuDCavGmM8XqW-~gcuPAt^2_C*f?$)L z;hO4vj(wKBEg^-Wvr4$)Ik#*|+&W(#)SM=7Cc!=45~TtOIibsT7t8M5T$m=5y%jdoWuL{Q@VZYLkP4(Ms%()VIHQYO1 zm!Wgpf6K$1!@4g^a)D&?j*}glCU7hIORG}NJWiR9BMF_X;Znlue7M{z42NEuKL0h2 z(U!V*b)uMmTl7k*{)+KJR5VlsQrD+zf5d(1Ng|g(r|W~aGwSvbZY)l-b%v^)ei2n| zVA3K6Mm#wTXdAJnzUo#XQniR=DQ1;htFS?9_>YO&iYRmJM0lJjeVif?&szCbdy`_- zDSk4y)ws@mHpUb@&lA|NKYqI(l+ZwE$2}Thp`RHWCWYObCK7D)>sG1tN{O`;ER0jB zIL$o5%WtDh0?+s5R&vHgp*=U23N0oxU~roF4?wQq-SCmssC zH31-C+$4q2GKrMUcLCO+UyW%R`L($s$uXm_%_V$IZ{z05tUcV6E}zHrQ;-$6E+bjP zk38VMH!4wF>pI`c5DdA=yE=#RqX`bUt=eUJl0Bg-GcY(+9Xl$BTehVmnz9rxEiEU= zZr>#*>(j_~_{%vPpz08ynhNzd<|*3qPVxLR5n0cDe`zMy4{aWsNs^Dif7^w#s!~lp zIue1l^BzS_m#BEf!_qp2b1r|SZ}0(yC_S1{eEVZ+h$@ zEu{m(Xc`bS+@Fm6-}#7C zo+4gxz58Nxq~dUzVqcpUpKxDY#Dby+#g62n&c>TUVdFgrb1R0@9a% z_GwC!RBJOlaJt>DaVCkjZ|mQ0{*=dB21I)1bI|dDwt$MHdMMxFC*>q+Z#oP-W{zM! zTA)B-$ zMW#8oYNhtGI1D#%*NH}5fPk(yMNBWG4h25V8oK6)FfGX;*i#SI4AZ-&^EawwoGQ&G z{8j!_H(aVaG#R>=hBk1M3|yU8?)?{2x-ZU6t?evN2qa z5_y{aGcIJ8bIfoHDR$AuseZUY%u5@JAq7D5)(01z7lte$1&v7eqT(O?h|)Fd&naJD zsFAsV)Auc!qYwoO-;w~YCn5IFLP~*v!~ln8DrOFO3vQ=ptT^}lmEhBu5*TZk6BoL7 znuSIyiz!6myweTb@SzzI#$xB0vo`V1a_M^*3cOQ7;*1Cdow0hQ1t2nQ9X^hH-=P$x zI1U+hr#2-(1Dxu%FzPBem%_s#b)$W-!k3EB1~uiEdF700erhW>Yh#$|VM=MJO_dwl zKHfC~BVH>obv~oaT&6SeiOMyMTLvH^@l-4t6f-tbMJYdgupY*>R6WeDz8uh!;-CKU zkTN>sP@$FhauO8Jint|vJ^81=6NQ0#6w`(!+w9$Un~>qT*5-sS|3&SQ1yN|c@qRZM z9L-rACj3b)Z&C=N7QeJB*c07iLl{pHdXe$VoL)F$r8bQ{^IezspIaGsSYy7^F;B>@ zl6d#5M)rDh14M%jmBL1l8|hY^7jR%NN4+jqwL%`ER#}ANJ}1@D>z?>e_4LYA$aJIP zE#D6hd6NBXKCToqf3iDkX8xS@qfTz*Z3SM@;6?;#5;iVuj{g!ZO^_@!<(LFd7)*gt zz8n_OB(vra@A`rTWwIJ0h5TJHAaAd9_u@y&=fXu4$HM8&Axi4L4_ z5k-2M`e0zNHEJFz6zP2_yaL4B^P0c#C3QxctQ51mo!%j+{L23w5Bz?`0w_qHY?0)k zT2s!2;V9!kXrW;X8Qhq29zgAsdW0GoVq!g0j&W^!(|$9Ccg z$5qvC%_iLJNIWi4BXc$#y_XZ=G&6z%cubv&M%vOKkX{jU|h8Mo6tF zIHy!vTiz+jrbrVapyhEiIA8QKqTc{0+KY@|3J1E6qP&+l_RFDH_wlDaU%@zctVR3` zX%zq@rOQ3liKSq`=AAO7uO{$>Tm_^w0#mM5-&al$QC`s12p*Ny`RS@8E(9F)e`EwK zmYl;uEgy~g+h9W`5kxph4`!h++-f-nXomQCn4VdjrVQ+hBx{W-6AZ|yj~C*euylz5VYvq}C-2@S-}LvB2mb+OtGaPr z{oH4c)*Ai57{hV2k+`6Wft;sv&px5khr5Dw1j{1Nqs@OC_N}A~jo>d5_mg&veb8UbxS77u)lQmMH1RZ+{8? zh{0VhYJe;7d~BOPyN=|bR3mN2x&QtMc6$_@dLbSWoZQ%wHbwLdBhzz-(6bP$^~;au zaAxl#c0{9jHtBm?RN@9q9gpOmIPb>9jn3kq_!U2U$K}@6NimP^4eeMQZ_|SajDltQ zvE4<)$aPENtqMy98r`_czSqTWZ1Vg#%+U+ zu6NU)%Sa)qb0#i^yRr@17R%rpLuhJbj34Ut`)SI~u~V|j1UVXhK$NP)i_w8?8iV(u zV#?O(z{zE}MU(Qy|_cWbyoH*Tzsm=!I-V2lh`W5Kfpo`eh zaVXZp(mWiJd`^Hd!Xo@iN%MLLhY0DSL0c$=NXMWAIV%5rftYBiT;@*SxNtDO|#REA{`~tdjYCx1V{P6x(}Cc3?jRryQc^7w4C=5=qmozkT5z z&HdH7qw5pA&sXq0yCba3nz4Wsso*p;PZ~WLL3BvupnIjMck=TG#SyuiuTY3MHtR&N zJ1i3k5tjHegfJzBDCCdv$InoEIHcJhLLT@wLte~?EV+)%k;$_v;+Pdq{2*gc#X=`Q zkb&Tb#$HT^5Pc*L)dB0yjtwaxcbwI}7lh6U=jizgmd6$jy~ zhqN;Gc*W@^kG}L}+VUxA$$-2E2*4cEbhJiZ>}}z~cd^y6+rjt4egf3EeNs*PkJf4E zRChjmYq0E?<+!)j8C^FOXOQ6vLZVWnyy1(hr5o-l<$4;lC+`UBEx0Llr-WG5mBb7*oVesEhEN|T-ve2IqFKxl!+owLD&{Nn z->WH&yfWF=04hU(TFk%H$i{RRomn9wN}^>El!-DugiG_&f}y86A_o>ck{~I)_7c~h z$LH&4S%lJ;W31Yej+CkztORwle9leqkbV2$q?_RgM)iZA+RaL?_|T99AqjK}Er&e2 zJ1?utNN&1+VVpWY5;+@o*VG*j1i0$GZIQ@mGE_C3bWMjTqWBQO5M!I*Xn{#K!A7xi zMgFEjqu4@q+bD15S%oGL z%p;Z4?C%Xb%0Fx2}nL&_g1iCVmHd5VAz+6W0eqipfH8wesvW3V~d(+eP#@$hFVd_jF*S__^+W>q} zC+d39KV0JyvIgQ;B&W@Tze(aFc@k7|eP4J_iov4@3tfM| zK>ZN}m7F)N_*#p3Q4P^9HWGkFnrw5on%;O^fSh(cOdB)e3$-n1(Vk?%n^OP|CZI8R zq`-GN=XFq)n4s}e^+wpM2T^F=fac#308?`n#Xg>~!wt{R z-y^ZFAqV|#AyVHTDN0VMwk+r#%%d!M70lXi(TZ*P3_@D8Vt-zkZWGuJ(q3&rvnp~o z^2n@P+bOj>Gy0hE-27N`1S3a{up9@YHVkFO5}pr-5W50zH9dm&RRO5|3a!k_h{Gv; z(fDiwJO*Xn5?1wpMpzIMB2gFUg$ciJMPtgu5kdLxw;3=YRJ5*<&R)@6QaN;T`&GHy z$Vl{euW31sel!!D;BRG=SnR(W0)lk|bO`lp&dbMwt*wX~^>4t7rxp+q>UD|AaFZz`uHvy+{x3*Y*~k+P&G!@jw7+8Iu0Kis6DF2UO2s=ZHE8?GgFf6&NGftyGD^I}cO(zi#Z>}2Z0<}x znCiX@=({o+qgIrsgSg8!uf8w5RC ztYj^~I33I>3hhpO!e~}`4o^&|C_316w$>T{zwL{2s~6dR`w}!b;qyQzBXL%S(P5Ol z6%WMd3ra5#VbR`W|6Mw-uLIeniY-X4O8Re7(R}SF>nD7BizJg_aU4UKIX6$w=`@7` zw*!IqcQ~WNdfwI$dM)tk$}k3(C~TAwA9$d zTo?)*I%)&-;YC@t>e#@8O&uvF_&b;l;#e3!F%GVv0?kNXx;N!q1{GjRGjfOqNUUg1 zov#aS$@%(hM;?4uT*P)g20vo6v&V5VW?2L1Dc3IfL{R@>{?d*V%U_y{V31_GfH6Q7zXo1zUqnWq zCL}?F4Bdr?!gxJM4Uw+%M&~e|27=4Bm3u4GZ3qJC9m34p2~C4=bp`>A92mUt49}wEia|C-wc8Ny zC9L4YN$j-YoKX6u*L_#s8)ZZp);&4!gc%7yV+8-}hlSUGJP=+3%jUm+I8QS!3Kv## zI;f84cbq>LG=9fVnvPjXcI0nuFezD%bCgALc@JZGps&UQEkT3**v8kuQOQvXN0#H$ z;4;eImPUByT#gJFXShhi0|`wMK1b9pfFzp_0JI#Yt6V*=bh;m2PySJJL#Ywq#@tCE zfVqXK0k{ww0XbD4z|?+nc4!hqGd}_YrW;eMuf*JI=Vht{XwZUYe&m{h*~=gdr%>p< z`2oO;<*3U7&|H;r+=#IV`B6yoq2a~W+L8`iyFb40Qn(jWJ0zM)v2t8zUmu^YI!*V* zYZCR2I5B6TW!Y#`M-(BMAzfAbq%a?nJ@1M4m6mVa&6gy+ldgf;DdCH_PX-(Rq-XH+ zE>u&!y&8YRE#1f%ovsPCFQ!X#5a+@LieSWiE(u;p6eeKd`?1UB1%Rb5#@eIjgr?>Q zv^3;6Ebq}1CFq=*0|dQGiM$)LYY>p#Rol0#P3KM_Al+1WKTQR11n+VL%L8FpmyDP^ zVVhZmDKK(BVIi(Pv6I2!7%|s7@p?q zv&f)?pCtoi%z+C)bM+F&b;kn@!i%KLDU+6F?2QUP1m!dWCZ3J&`p9v2QN3f(x?^9zr=VR~6y20462)2+-3Jns-eJ z$bt4Y5R>b`PiZwH4ugBsjC2Z*8w<0=sK!|{@je&`03af@8=g%koR^Pu^U{nlByJ*} z#C_Pw-$}%miPnz*G*_h(H+rU4Qog4`4WA`$5I9HvMj22e!j~H7%Ssb3$=p1S&nC?fd|&Zz zGX+Mnpo#H($Zgq;c_c*+4WH0J{TqwP>i{*p$B@`H<-%mIj2N9&fX18+yq}n0F+h-# z%nT#l$&)#D@U?|0BhXQUSUQ`M(9Rr(My5X9^+N!ft9M)cJVA^Q94g2mm<}jOm+jr> z&j-K^ITSCUa&fv1^?KB(`Gk6CuvAMj_5n$kG<)#nX?PMPQB0p}e)4)!W5NZJfWfQ; zB>at);KDRb@NZs6{!UP0+KBxiF-J8iwpRaN4(+?Te^E!rg>!2DD2lLqiSa;3-ZPP; z^0@r3BxGU>0hW~eivoBkSChj;5J51PvI#H(FcB0nmI^^FKN%;4wtEu@@p^KBCU1?J zrehdi5*(;xBsVbHVo`ZtfAyc~O|uF$nY>TDwp(z#k+~XuFx|=0fgu$!3#$^Kc@CMr zw>qyJJtq0vlW~4YXHD%Ko&YpguT=a6QDYvDkZMw8l+=_<%8NzHXUzP8w}uuD?&K-A zUQ6Xbucxqb1RhZIexjEKU%p(-7<`TQwQ1Vpg2tCE7c!E}Oic&B=R&Aqk;|CpLaewV z)0bY$VRw>~)7^<={*v~O9wPt~<=KVs9R_%K{aN`^wUqp@e@LL`M+s0u9?L0!lF9gF zyeV!NqHXvH-c7zk7f%-Su>r@I6xwvZ@Z`K)l2p2{l4!P;ifq{5CSLo>B1Ka zAkopU()CIfo0tK=N4YpVa;QvHk#P{Lv2*4t-i@bXS^V7AvgxU6i2M+qp&mo?6E>vc ze1w4J@D!B|I;QY3JDPHUCX!7gdIM-`fFfKWmNzu95(X_1*nF=@;ACRh??wg%&D)u{b=S+gz|iE(!Jj+oRQuF0x!WUtXq9XMDZi#3zXlj zzu&1oJfiQvQieNVYjI!6V%L{T`Wo$?9X{~ZC+^!G)#W4UQ5TW9kT_<1zAZ2X@ zA?}1unL7a8?sb!yVdD_jfoD>RBgGmFQ|TFSoSD`lt68K+001BWNkl$3o>i>_`_TMXCuJ7;ACkm#oQ)a!P2SozFKrGE< z9T3Ai%KPPn;ZR0gQr54D#*a^^IhrUyeJvcIMK+05oe3dSH5$Q7Oi@%GV86dWw6LJPURFp_G4nI3Q&iCBRo+<7@2RlRLl|20q(+w)CWB3 ze%97f;rRKxx9h7|okQt2ffUv)8ND2o_#ynPRa_A4E{vqCzftDjq_Vf@6LWv|YBS*n zu&`#fs2l(`@cav40Z;(5JZFpxypAH-^UaF!1+~HYsF<`)KB7X<){Ok#+!lS^$3L(B zGe!eGSm$vlJkK3Z#X8*r^al$;-T{Cb^_Vwn>MrzfZNFjsP|mwI`vm(69Mb+y4`8lc zt42dWlbgxPY*269k0`FOt4=kusHwUKy}uFSZKs`jK7D*a{e&oTDm>oLutn%EQ@On& zTE8z>TN3XXMMj~-!WZxh^y|0prYXRl=6)#gVJ=xG>fw0N4c_QwD%d<)2dbK`V z{LTaQtL!1&M}IK;1-t-`{$0PJ_zm~wXUd49dMI^Q0Vr^wbf3nLo=#ICU{#xVriOdP zx_GnlNd5LMwOy4WdW=~fzF0ib7{@(%F6-mLu1Vt}v0Gp*@m zZ~vv2gO}!Rp#;iscp%m|>?`UFvC_Ph8ia@`?-CYTc`Ge}57u#7*V5j40|0yu3C78J zQ0t{BGGz+yukHPSH$cP+wFPK4;9ShfC0*yxi2tO=)u(Rsqtdv&>p^X?FR-4`HRC&b z)h;~;XDtid0qV|G_7^X&_bX$a##2*Ha0qB}52dU^uu~!}4h>OVS#r^6wH{D+DKOMCPe~=1q8-{*H<`l%0DKdZLJbTDeQ*A5{5Lfj4m|I7(&yNuPiv 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 Myz13Lxx0b?13Va4;Q#;t literal 0 HcmV?d00001 diff --git a/__pub/standard error of the mean.png b/__pub/standard error of the mean.png new file mode 100644 index 0000000000000000000000000000000000000000..874fbf67db770987a324b2c5a1b4efd37e4b88e6 GIT binary patch literal 65734 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 + + + Untitled 4 + Drawing exported from Concepts: Smarter Sketching + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/_headers b/_headers new file mode 100644 index 0000000000..c269214ab2 --- /dev/null +++ b/_headers @@ -0,0 +1,2 @@ +/* + Access-Control-Allow-Origin: * \ No newline at end of file diff --git a/android-chrome-192x192.png b/android-chrome-192x192.png new file mode 100644 index 0000000000000000000000000000000000000000..71223ab2e212b7d57e7177f2d15a60eba8113469 GIT binary patch literal 8808 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 literal 0 HcmV?d00001 diff --git a/android-chrome-512x512.png b/android-chrome-512x512.png new file mode 100644 index 0000000000000000000000000000000000000000..ece9d2e8b4e4dfc918c92bac61778bc304608986 GIT binary patch literal 25854 zcmZ6z1yoc~+ctdY5)cGY5DDo92>}Taq#L9eI;2HFgn>b%R2u0}B&4O0M!H*K=yqt3 zu7A(-yzlzH|642<2z#G%_8r%K-Phh{!Zg(6i3zC*AqXN?RFKtzAWZNhCWMa*zWsYU zb`HK_+dfl$20^8fM3?3`;Q#cN3Ra!sw( zdg5MChDj2v!7-C20e;5h)o_gSycyAO{0*p*41vF zUGYgl-1JIXAOz0T6{O|^eEG6R7V8y z!_-OtsyU}`TGW=NEQuy4egyiOolQo?z5VtiCneoC19eQMSw=8UOrI~}VsO52L~L-y zFguj{`Fh7h{_GK>5b_lIUVWvUtP z3wi&^;#ywWxTm+EP|Tm^M_4H=1XorpDQ8hR_7T_O<>H0Ee(?)gzC%Xpo`i(PgkV6? zkz#stHz6){D~svDDy^`;c{+dkf4%FumgD)ui z^39mmOEIUoE1ne9PZ3pByDoEFXY*WSXYY|v*i-#-8|CE>j8$3T|M29LP6gO(X#^;n zGDIDEvb3ALcTylfb&s1cw(BP;^sn>W$FKZF4esSWp6Uy^q`t)XT3Y(9r+F!x_Ga~v z?(7Vy3&UdkD1{5jk~rx%9!1Vott~zdpX!iO&ldcCOfLWGmGh5xpUv+jHocvzcByys z`HtFrCcEEZ1j*_e*ZKA$wStdBqlIno3wrL<3TifPH>LV#541uKq;sq)&JJdJD=h!U{_}}8RtJnh-76;I}$L+!bg5>HQK1E zOC)z&x!h)~zj@)e+tk>)&jE7z_&7-%=GU-IWK<%VxgtZRS?Gp?*uczl(%)}3N$PM^ z7fykzCk8fskkyVoY@ve;4U@zFu*YWLUkQ+DGG>7=W+N0!ka9(4iZ)%jvBWkS-Whl} zyU9sV*x;D7IcjLsscs;6fxF#pOE-P@T}l|+9}u9Z>0nCIM(qi0qu({1u>MZTYf1HW z;(zN!3F$sg<5UlS9Wal>=`&9kc%Xb`utpQ?02k|#4i5YyH`n}Nxsc$F&%*GXF*>Zo zZ?$x?6m)$UUu#ExZ47kN=(${(idojjcV|7~KgE*n`N4fRpv5HO4Lqk7bu3L{(O6l2kmqpxE{r!$C)}Eze{D_AO#l59@ zDfN@R!PD90xv=~9A+6|3FUi;<2}mKA_zhR$$#(y)zi3gdlq>}tJV#rt=M;Qb$$Es8 zCYWE>!zkb0uJHPv8EcMe%F|+>fxo+$r?lg6#!S0UD~_Q*?xGXbX1SfTA;#&|dG(W9 z*U-?|iaLNk<#>E`Kaz5)SG1NWz6q@;|8e%&ZTfb5j7HZs!GGCSaVJ%R4>y?q=B@qOfSvV-$ zbd1GkKsEXv^Pz0X7H5`y04JmG9sBZ(x(wdct>3j}_WNkgbhIcYU+{U>I_Eyo3$y(@I!f@XyJ~NTU7mN$ z=3gkv4*xcSC^+?s>b*=@zMQ4Jnbwa<+|ccj#`TBnoSjwroii?&5C-{mU?e$`Sv#Ls zucST~zMNmAUTKx$m!>$fK==Na(_%Q`nd}ll|IU+3RV}+1Im7ue6~SLctCvnH+$FkA(xeCpW8B=BWc#kLk$SqbL3KwDT5r z+puNW*52gplUZf8o(;NA|5IF^f486K zKV3yE@?+;QSzf}V0cHDOWp8!;cI_uRv7w6sEvEhe>ZO zmM}X}_%~1fNaYxp0dx|R?yMK1R&KHXTXx^HUb-6YG{qZU6ZIe|l-$^O znnUSnruVlApQ`GTn!|C4!|TDoP13wZTv-aqIn1vbj{5rx;vN!}*$;R3^&XoqJz+kI zaIpVll&dm>YxWK0AT7JN%ncEab?6#VIT<$`1qBE9HM#Fqi@3>@m(_}kt#O@x8hmkQ zHJJRiBMXbP=}#9UkQls5LwVlTe0%yxRj3Y~skJ*XArV4W)YnSt_Qd(fJFM)FvTF&b zxJ>@+`()g74bB(W(#leh;6f`?!IUQ@Q*Za5msq7FU-$EU&I7~cgCC}aKM6MfYN?4t zW4U;>9r<{`#^t$&V`0Wk^H{K3UXv)cv1Wj{nmat-^9eLULW%YxSKHf|{2;O_!WqhO5JMJj6rU^lw33(ZmIG zlX2;eM^7O5xw{ll|@ z{Ql<1k(=v0+v{Ak_4wYBCcLP5w<@t6+~xZ?mY-*R^y2-=@y#2`wZ5d{+WXc=8NCL) zQcdpv1LaN(jQ;y~Aq?nG;nc{JZ=u}wkFK6YlN;YB>~0HN))o1d*^yKDUqCmLgfxHe zg`^MtLR~kda(x~}qtS!Q)<+D(llNwgpyz9SY5ed*ThFJNz%MJj*OL>a=xiNE{(0(~ z!;d^&&x^D9;jBIzEp2?P&1EpRFP|cLu<~Mjo1XEeZDl>=vcm1GVZy{~|2ZCY@<`-H z?ObN9#F3KSes}4A@Z9cV9gXMjNO|ZP)f2HaumhpsK@WhV^$XTTmLVV1MC`) zz>v;VbZY&Gx6>nN<5M=Z?xPQbU;CI#4b~9NlDW`u`IL`Nbzta>C3O4w|0%SVt=xu6%N%Md;TccVJns0GzG;82?sVS9%cD0-!uUEQ zQ2w)V-BzPlw!q&I;?~6cT5cU00y7!qOVBpZrwO;!i zHU8l_G?CV~ED1)1@5m_G<*jfv_b2juUv?;~Nj5ss%zdxrmR(VK?H539cXf%E;|##e zXUeg)JV_AmhDp()qXW%!fBwzMohv{G;4Lf!J}UJ@WC{??r+-G0@2l*M#yl||6XE75 z!FcmbJ^QC?%a)7pL9CQ&M+0%@2j#gEjlTcT{(n{ltg-#R3d&1tpo=n5Uwd4`qMkm< zSM5C#sS6B}ue?^Gam%Fc)#fg5qQ}*sz~8<)!SJLj#RR7=v-Tdj{1mcK#aPxpQ@-U{ z3EYUWK_5g94%+~t}W7` zLpi*CkySRWVCSaybM%=p$Co9eb5v9udHH(Z?~&|JyuLPfRX5%dY}1zOi16OV!t&lc zTZb7Pwucn^J_F%x$Ak+pO#bxUq`RLqW>T9@T~f=P6>P0&?7L5>k|w-*$@+TF4Y5wV zGGKoGIV^EPNg=x>;&3xAhHGe1OeCV57oLj}$5(z=%iBGM` zc^co!am(pkY7o+AY_`@%+_wwe5BxBYDrzfvGcqR%gP$H)g5~QB#>BpQ5Cigs=Y4av zfW4(IsMGew;2K)bME7v97!uv4wssFa@|lqkZSBsd|b53 z3dI*V6KP5)uRZF*976Mm!}a>zjFJ1xoVCU3k*mDCI7=Tn|5)_Ibr%n~iESW<1&L)g zp1l6|M2kHjxT6rIyf6*QPA*TXN5k8LsgUYCaJ7adwwH3O!kZTD6-@(H0vW?vzRGkB z?6KVo`2~Mk`i)W??w@WG#dT2*n73q3@qK=KwK?U_W7}|fIiL%ByV8@OQyui|HZYkzah6~6$WDUyQs933iV5GJ+@IP@+({>m8iC{awG3rz2Ns5 zV5<1+^738U%xV8&iA34iP9>f0EJ^0OR>&-om~#jA{cnfm{Z{?ooX@}8%d}E%^2%9S zuHrCIV%@mLS7>mo{xlnQ%+eZGKjiPvoVotzQgX2=Uwj<~LTvmFiTk<}V5+%)KM!}? zo(|n3w|n*K_v+?^4Cmpl{9fR-S-?TRe__5x*Eefl+{dG=r`Han!va@|_ zoN*_Hd@5gZdW6un|CR7J0+MUNU}omE%E9(?PToq|OXi-L`4gwTgw|^*FYDYK8^>e&2W9bkOdt(-T+--Vg6z*4xfWAC#aA^g4@zEd&V!1P`A+jhd#-o7siG(5;LK6@ zkzvQ7eWRd)`rn#^9_8qP`m;8P@ss1Ls9sXDgE$tIw7dQCgc)KUEH@*Z7dC!p(MP$! z!EAp~emKoB2kH=hc^4&+!@}a@-6mbPb*XS~_TtY1*?g>GAOFSum(H{JC7~{AFy&fL z>-(QS`$>PbJ8$&SD|z-$`vcY+10)raxee>~P*$9sqa$<(p%SbWxeTAu^(JtKS!rdg z8@~9${Q;4#v^>^b{=}z>>JCeVEUG2GsOXLjSEBdxzw1c4cUmA`VhW4(Af@CQ+NI0Z zC?*ZAcpZ^2o#^J(gc3O;M$Y*g@9yE}`?5QQB+A6h7D4iBfuAQUOAv94auO#I!!qw&I zH{bhk_)E*PdCMtkM8$CEta#+&LcsTHk)c5E?eev&_S}pHw6|k8WW26_m)oqZy)YNt z4Qvk8tGOQ>5mt0ZMIZ+}q4LvpCTDbm!GWMAhqgDpg!aktw^aFzK=D>X%J=L8)(t)||eIM)8nJK@MnW&4KWfugkL4FCGXMq;Zy z=#A0;^;$HZ%Vg`h{k{T<=2gMyl%J3cru}z)zLEQ3))N;-?4Hbe#WtoCMqXHq2@yDGS6Y6wiMB^5(g%QK*{DCJ z7PNYtPDJ3IB-NGG_^S8P*;*ic<1f#`mxSX?4gB3Hj8D9;nwCJ~j`e@jRfse5C@0=4 zi>Ui!7=Kh4YiY!)`k{E@NIS+-RVgeYLbxwuesOh6qiT=1YBWKM!|#E@p*-cQyF^{W z_!Wa0l(J5i|I+_*HeOGsd*7_L9EHf_MFCsc;52g>WVpX`jONAt$ju%glY=4G{pjE;a^#sV#ST;gn}Y<-fzQ`sSe(9WiROk2*IYWm+$4p1vEBd*4EYWmwG%9 zgn1fGraW=G%xW)pxpz`-OJ|`5Maz4XV$xTR(7KXs?Tt6{KMLrMH5#7sro7ea`bI{_ zv}?I0P}2Iau2?JLvYc8KKT8(Nv+*^42+4z!I^9Rc6^_^3)&BpwzXZILi8Biu#LySL z`J_F{JdE?T<*#URj`=~{%W+j!ysV0!cEgMnmHnQt-+X>JT;Nx=TTF8-zt)e@mm-4G zzx>`iYi}{IvsOJ$EXQe%tMDrifu}h?=7j#@x;;WDnhtOugdv8Rm~Hw}gB^+uNN0t+ zxiHGF4q;~vUh~CEL-^nyfsU*Q@2(H~etYh}bff3SUbNKl`dxRWG9x@Tx;GSS2JrFATesvV4P`y5Nke`j&sf#>rN z5~epe(u4}$%G}IxN_V+Fg&{QgP6_7=f^n<}^w%QowP3$^yst7^6hxNV_8*w~*}L@f zE{zBhe~Pb^I_;#pIui8fVbUyP7J&3eJ=euC3X3ZrtYQ3M&TiY9Dj#V2t+yBSl&9d< z%3R|cxQ%Wy_N^i^m-=@U7qt;%I)6_0RXYmvxYfrdnKEmmx{RQ5md0%c>Ar%>R2?OG zvF()>ffW(<0A(K2pkMB`L5EqAupYgpzTM&ovxKwR_#%7uIF*3bkhIOxX+wn);$`#icK0ZyUm3aofb1~XaN6^c*Xh?erBt$NoNQPf4n4Q;TuIqmB6>%1 zZti7Q)%7odf&N(uXRYw7oy1q$H*fqhKRx&T8&VLCO)fJ^AJy)_OV{=-aEFe4W-@Mk zZ6I~P2t$^V33a#GnidA6&z&H3P8uyGK|vb^*`>QmjPhvajx6<^ikT+j)RQ;1z4%Ue z>`?`4P;RWOJD;#5{UbMdCgXt^3d?yUD@G%b<||*4$9$snJF8EmKymhJ!Av2nJC=13RWNZOcIv*{c=+7c=fnF}6fN!6*R6_Zxxp|@ zkYA(+-sP{zMsw6(4I@9^XgP?4#jucxLV7&c1#a0fr!1KG5K}WN=DCVeSoo~8)o4j9fA7T6{^WF@8{l~rJh}*bo=^Jt|7#&O1%ekV*_9Lf3w4?J^J-nVzf16;) zt}|QUeAO6o!Q^8IEmO{pDe#HVnXUD3;I|zpOztIcucEUO_P?i&3M_vt0pqzSamd)# z6X*IOpwX4Rw?yPK?4Dn}C7P#0NJLdF;n^$ix4PAcp-CGGhkn}h-+iv+%kqPO6jhY{aH1_ARs&eU0Jnn3fu``R5> zKjM|2#W9sO;qZx0QJrrGhF;n*`;{MG*jE3LQxiLA7F5-<}rE)#cZu~ zI%UJ%tT_ErU-mWcnI$S@!^Ja_b8C{rB07GWQ~8Xzkv9|v&CwtTC*vOO&llguTxJz? zG3Gnk_CG0@e>%N9!TjjsqjmN1(67qK-OE9(kJis7T8*GNe1@NXSJrlRt_iaLeMIZ3 z-8^1OH9jrkCqJvHl83|FKdsBy1s15I<)0*XTM3M>4LJ@kDBMd2FrwloDPBm(m1EzZ z!E`%N_?nkTkTzku{c4X?FmLx#55TCNLZTwP_+0DgLkpH5u{3))m46*+XT%%Wsi$e@ zmiNu_sQSFg=IW!5<&%>5c1{;23C|4GLv&#do7fvK3aM0N%oW3qy`A)bHlMA0?7b|m zTXv``@TYCC_RGb)b)!t!%t35+{X5Cdu8T2)w`<++u;;wVZy_J%V^63#)9!^MZRk&K zM;_d@4n9=AJ`-{bxFAv!O(x~bp0P}80$a2>R&6dui7>1faMj)V6qos_?Yf? z6i<-Sr>TAVRc>>AvDPop*c2!$6uR1U>VUj?#gFg`G05!}!FrjM`^I?Go7s?6weanO zjIs54LaLNlYx%HqxosxJ8spgkCfi)<3b2O`AH|< z_t88P1}^=f)elv+K$bNlbP%KEtc+ug>KG6#HvU|Pow;wSHF z=zflf_#U^a&n@I6$tvEiOPO|f#WaoEd7#^w{|um{pPOH_GW9v0otzbU zxK#ncqoU$7&7o-Qxv>|h$a+#Aux{++%J)(e*6y?$6k;Mgh<2RWDTze#^PBX!1fb>x zPTvWbhv=K_{yILzr0u%R7ZrHdrzGb>6?4l$m4w+&a|28tOZ0J|Y>UNZ{EciWHHv=5 zC}Q|NgFseXqL>Ha%VJ~Ut;aB>;#0SZ_%jEZ`=WbzV+Yhcj*3cIf`_?t%Jd&|C$S-i zKaTva2V1$iRo~Jx@Y%SD&=vgi{ZZfKZ9TRRAW(=1EQd~J67WebTh%vrHwT@rcIwU> zzQ|I*N(mrYuU$InP*Dz~M#&)N(1&0TJ=5Ue4%`fZvtIvpYd^0b*D9D#`RiZT%X7-$ zaT6V};$#Tj3Q#Zg<8cbCfX?=Vnwr|RUr3KcawNg$q~PK2hKq5v16!hu1eP!2LK(bU zo-hv0%XSMKv+a8EdE(IQd?dy#$=htPO4lhE*>QjZ<$}Ll$i!sm&4~l0leZ4B6k|x$}NuYu{oZdmfI_(!C z2L$}Hu|CdVNPBP`U^FL3h?l$%I?6}#GyM%i7;*%0mef18iI1gOYGuI2ALsERc#sdQ z6p8NdKwrfu&md|2(7r7?Nab-}BzC-=y?x7cWkQW)$%vlunwOq}md!;miomT(>ipBS z`+5x)0`)Qr3n6s4Q;*;5uQeO7$ff+djLXhY<$#qoD!#4$7!dZ|OUlNul_6`ZvDrw%*)PFw2eM1!gokQj~(YtvcE^JkU;rf(L~T)t{U-2AA?eK ztG`p1>&uGKW;{gz{gSg-AJ0i;DCTE?)M7bY9Zv8XAoa8Kl-1hbO7bNC+`+A@yKta8 z%4bqhw;$_Ne^1W59}7tSd>SV^rr+7!Qe?Yfi~{-F8w+tHjZF zl%i0@%yN*&zoxKljGgNVE}yJ^D(_fe^+vf@I16P};x0ew<9|4Z++lt^je%ehEUfe8 zrlv0cAt+&^l~E_NB#tckcI1|}t#?+|MhoezGg3nOGBe+5iPgS*WL98jko`xFQ9gxh z>~=+RyN(=t=Ht9jYn>KkMFRsAn zjTH=iEeliR11|j`^LaCD!9DjXm^N0@7}cetf5r9n^;0iMqX9UYo~$V0`iZ8Xax?)1 zqS5L|sX~qVNC5`)6`l{}SJEk~d0KQI@0ovXx~VyNc!&8p6DC4=y0IR+>>tVawksz` z3GN?lcJPpf_mcV+@KU#ZI6|?S26M-sAWPo93BS>zAY9v-R-*sdq<{^vYo4cmo{9K? zQdz}l9^&-neRv+L2-;`{^v2>$7 zOTw#UL!gDpaR6~ETMYj`OBDC=#7;O%8e9KGM+R<;c4=VpHj=WP7Lp~yhm@GN??TbO zf7OM^$+IoUYRL|)N#d8?KkEAo9@Pcj=Yf(dme@~m1 z&BG#pG~!qCJtu)~wKh{Gz=Gq_3D>?!tp1l$#|Z3&@Nd-Rhm>EHl`7td?m+aI6nIc( zmOmk5Er2b?3R!7(e(wXTLj7NT>#sSl|6a;ch4AGK&SDIwZ`T#*bT{+LUq{m{kU)&m z=Fm^Gmf8ChL>VvP7_TT_KtKulbeH#cp@C#0BSSHkzXjeEwIRrFJXPPrNZ-b0usn@> zkP2He9q#S3glipbLFK?EZVYBjLVVzeY@oaCEjzi848#ZCZZA?3<+wJ8BaS=?&dnDh7{QO-PdjzzZuS?Cdxm}J-lP` z;P+HxT_9s=AKk>%btq|?u9afg+?pgX)cZ_GT4CnyWTOX8pBCADD_{2BGNzY>`XBSO zbKi2(cRg$BGY8<}C0${AvBMFL67Uzjy1F{+q`Q&M@GpAwv1AAfQF+)n$sW+F>oub; zmtjiG^`ZF-kobi+84?#9n{se#ca)<5N)R8+a7|FY;LaNipJ|4`^3!t7aHQLIvZcny z9zY6a#=TFB%Z@Eh2A?0t{XfvKER3vf1$K5J6aw9(+XSKhAEd6=v`c&(+ZQE;?3r~8 z1$*!|%h1U4XRZTY&K`49CL)z?{TpD?ipHs&^h(46oT=itZ+@W%%?4X03o zT-&$m3{~ynfPo)HD@U7&2kS#|I;C7cWarM4`xtIq}Fs-_~+%aVwTr+S?OVJiEzdrgZbzASL zSTR;p>(W8cCC|+}1q%NFJSgo@*!CjpG7A+E{LL;tYTz?5IthV5|BR0IL7T^d`quw} z3&Y+^4$$p&r39_R9k4Yqu^&RI?KL+n^tlB)cK7-+!`|5FCkMtQN?MA=a~V86_}{!( z67c8Fe1fdz{;pwxNk7aNfD7$*R%`jJUK_>w?)uj(mf%)#g{}6+n@#`A3#0>_NE-`O zNLK4A7b6{6JU;}m?iMyR^rmw6!bG7|+Jm)KpyG}+e!!8Q@kc0kjT$@&)_!3S^Nw%ZJOX=rHSUT5_kb3Qc5 zEr*K(a2I@OhS8ku-c+F}0}gGq{LFsb5ww2RY4ble0ND36Y?$seWQ9ny5es1#x9}1Y z^bSD{V6S#|>ULeBJjqL--w)y#-O;?P@jFYslThLB zmW@4^Q|r#5V7~~&uc9~D55nt(LlkXoeK?TU|LFo}w59UX1rH!SkGJ(dBWfLe5Qm?1 z_q&pBf_`X>g_2(8ZOE`oR{5yVYMGuk5oJ*R0*_N6{SwmBx=8&{7&~(l%|-C<-@mUq zTnyQy{-U=N&Ng2qNfno0ke&I;lzIY<%vBY+$;e~hGaLi@(?tP$PT z8!`Nb_q)a^IP8V|sH>xiXZ~hyeOHED5_vL~KyQ1IPQCKWpqLZvOZ19m9sYJl19{o< zCSfyW`R*&6y?GrkrR;BXEZ+#~k5QY#c+JNl{PyMW2`u-a@+)ea%bnh1x2oM%dX!@o z%t+3>?-)ZTZ5zo>aR5AL)j9z+kFDC$$6SqMyec%8QtOPM3#{PER)kB}U^V4d;SIlL zIbs&e8ze^GblnK_AV=t7yCsNS*L}l0oj%x`*bpp&&gI%sfNyF3$bMt>3Ya7E~8n2ri;Lu zKDwi+YrFrQHRpXXM{3pxW(8OqSW1fjy!l%Fn^6#Hs|EXKb1`y^l@SYsmwC7Z2Jz+d zw61*+@z!T=h@=a8JFllpulVmYH(ucxQ@roGb-5!3+s?9LIns4Bow2>(*I%pNMm)H@ zSw)*pN39>Dc^Xg}tQF>badOI4zp>-(S-n+R@O;)<8RF&x$AJ${LF^Y}eJ=^M2fR~L zw6X-!pUkSgqp7unrzW$s_wA7i3iE!R@`HLW6%_%E z$C?MmNLq)QN7|f@E=Mwyvie^(Gh}NKu&Sqnm{pEYv($o}F=BmX1SJkIy4$)d>`;y4 zA1an-ORf1dbhEtl#s}92t{oCBC=!UZz6S)qN3A7nmlJo#Mzfhh(sf!4xBX3j7!t(5h}9G###oPTFA_XH{Op5)YU=c@UB=CbPcM+| zzA+x;VB_peL7t&AyT|5!@aSxfL;9D@?W8P8s(y2z*k&e<=~dnFBRPM5V{3r+ZTJNx z;?1Z$1D}CM>vzY0L;+hXhu*0YUIS}Zvd&d>D*{a?fH^1u?`B4XvK)!la8O;lef3A@ zbiOMkR8KdrL=c*yD3`JU!95Fp(cJymYISyI!1<9yS{7-8fI z|FXHtH*#s7K@f}MH9bqauaGxB3(EfaWe>0+XlPyvaea*;C@iS+bYL_x`}^>?C9Tlq zyE;d}CE;wp;k0E-)s^F9Ly5lMPQT(_nLC}7;M!kAe!l_zN+!y<2vP_@>WDlcNxl9` z$gqbhDEY#Rr-J%4;y7RRBXRI}Ic`kPnV_YZ1f+QWz&>F!^Wn}VEksq|?E0YQOj80m z5mIl@Xn8Mi{ayah)w5z;c*#V|A%+b0U?!%A@Gq+`InJx0t9kzGddw(H*!gnY zDm{T~C=0f!_t`kY_F`nM#IV;>>pQaSds4p(tZLA!Y&m&Mr0~u&mZK?O?b0SR_0wIo z16|2~Hk&+(P#qmXpZ4jXA*2s(j{WZ^O@tc1T;;i4{XgagI=qVCBy2?!7|PL$iz5Lf zT@gBVAGlRu(sO?*_oqsAMB6=J!W3zct${6tBxOu#a-14Y-Bw0|GQftw!M=Ehva51o zMcX_=#{{G1%}#UuTjV#ps0*k zw+F!`WUf>K(4^Xy0~g|4_jk+xaQYMVq9c5QZsiWEnsht|4yg*N00#|Ij6EO$@)!SS za8l;!Ed*|e^{{s!7UCj9NcGNJ_(bt*=J>N-Ma!qhEu+r{t@YG&6U@Gk@pnV7#-IDfw>9M@j*WZeGA^zsn zRnX?bniTMVa+`|)uEWTyj%rUm>eCRkaowvh5KlagPoRoCXXDgyzU$}s0q~1sy*w!0 z-z2uG&jse`8*`3W;Xb@D37_rsJW7-U5&XL6`YxiaD4*u8m#I4x{NRb}SCy8~EdeP2 zu79HUs1C-of?}r{(=b7}i3+no`pDyKFHHTST64Gc&dBp`fp~*d!O3{n`FL$s=u8Lm z@{K9Mwz4w{?K7{AVhA6Qmlw6`x%+gtn`!EdpWb8Z0w`zkV4Mu#xKlJn=(;0JRSWi|B$d`A=bK#b zc@l3z=npl!W&l;tK3+aeEK{X3)`Malj?DFc_m33e-+*hh+2>8l8!fjLpRn(3UCyBKq@mg7oCE=gftd z5|E4JIV+6l#{-#nSa2BWbA7^XqX_@M3VJD+?xPyR2lOE(DRcwsZ2#hA9f9xP$X#DL zF6^J~>zk?Dkvz<6y_coRr~-||c}4h_0cyCy002tHYC(pTTpba{u**J-dojE#L-X@e zI#{4G_|!RVhORnFWo1bQfow#vC1tN)ZLnxc3`0-9*ODnR4G!*HGSTm$1}1I;ZStZl zX-uT{j`3QFX;p$)pO#w+%!DPMDmljrRd)b#nO0ScrB>2FO5PwJ50?79 zFsxSYLRdm^a^FvnWa!0ZMt>e2O~7gHCjvDds}xxW+V95JSk-Q@VpC&$$g|$hN94n4 z4hol95wR=k*Bn+!xn zJ|6WK+Y4zkEPu!%V~n-aciE`Uvbt|~iSe_94kJ1e)9t@YMaj4-e^r04g82Y!k9+RU z8Z{ET3LsDHlcbubByUexUzbiWu`9xbj@nxt=XdU)P2j8o{eH3vs+ zuao?@gv^0_c&DN7c$?&Y*Q(lEdk!*U4jSlb^~E0(=-R{sYniL?0b()Yf#_00!=8jm z^KmkWo<>3t*_?G6068-a?Y=Zp+^xp`BcpVGY~@#B@zupl^_|phB#cZ*5w6?#+Vf3Y z{2A>8Dsw9n9XORg?mH>cgrK4RF%kNfPN#PiD>N9r>|c~NL_JWy=RxFaeC-z^uuRGTqA|7bxhrsE zzR5VWkQZ1@qQLM_Yj&t6CVNj0qDPq2oiMTF@kRwmbxrvN{f+@5U#7XFUqiAT^;C$w+ETZyrMnPBq0FL|AsQPx3Z})VC+UDYm8h`)g!;p3| z&HE9Uh;>rm9X^ChfwSX-pd(30yl#GS)xjH`lb}KZ>iJ8Qob9gCp!Z(^vW9L=aG$$1 z%tJ)FoZzLTWI%9{>&kRXv120j=nB#4QMJ3Y!WVOHoF=d(jb2OIGPLlk80km6U_VYA zLGuLz`p{f#;xaaNeA<8f+;EK-R(JCLw*sobKB?)r%p}8tstsNGc^}|`L*d!=MjnC7 zEPYg%Q{Ah0d{Mo>?093(IjUx-I>&htpJY%TNlh~WfPJr!>R~`E)lW&#xJ1kPQqk#3 z27k*JZacmV(D+yKYuGQ&E(5eL^*qm>k24+p`uk5h9a!#ifdiT>U1qs+8=Mn@3p*0Sl!JIy#bG5h8RqeGpIwUi1)nR1MwJnBA+< zNW$c^a;022GIv@c^6t?k1D*Uc26L`Mc~JnL-9a*oIJ^mAp)X$3LR)XIj-B!MRmX`V zKd}`;kTh)GATdbhmhAV`*QE-M>4VLsWC{c8838AXp#${#* z@OeoR9k3x=@wfp%@OjjidoQ#y9vp_dY};tToQMy_^Gaq2Jaa+Y8SP(R1RTvocWVU^ zlZkpm_wE@sht8Q~EA796q(@c&OE91VMg4$<2+$#pc8x1_9rU zJ%{M<0Qou_;rjy6t!E8b%YU2#IE0;f2jg}T8IMI~Jcz>12wF`6BL`ee5tXrU{*RVbDAwHAz)>rlK{s4GiSJ&nY3f$ldzrt1S{=&k1H8$=5MDVAWAM=>^Ebe~V*c9JvfLM;kr@g&$0k_`; zXKH7jjl?{ORl506_2>4mT>v(eICJoXDb}1D;M;tE$&(GG{r=Znj zYL)b;$@~ax(yciHEtBmYm?Q2vW2HoFq~pcIk=aOOR#TrOe;I;hCRmd@GguGXy%vBKhyXl{TR(QpD7wC#Y;_fY@=j4w5PPDWa>d5&{bP9 z<9yNbK!zb>UfYN>tV<0Dtq~J0ySRHN`QrB|Um7z)&@W$-U&hz{q#TzoSe=sQ-HO~) zQSL)RB0}#tkp@`75dxpq4l66;fe>5`x?1)#>o%Jmn!+cuxVJGUD>pqruYxx9`%kH2 zgO^GucaQr_W@xdB9;m?oi#1*XgqfFsxUJ(3Ft|kc{;&kJ1xzwZNhq5oK7T!i2NH-P z)eQZK0ls{6nTiR@F426(m6*QAu`#ryX)c|TG zP%StxMr`n+Q!P^w9#O2<7k@UJ`ce=O8Za7c%d=>|yC-eJyWH*u;!5o#Jy+U4WpUY%WsE^sj;}WoTGge4uKQQpu(EkfDA-Z8m;pRm_)#nq}#R@?1nrH#d)+SEKjpZ3QrGg9c z1BbH$ShPat%9-G^14(n#omtkN6JieAi?RcPXMM*K9%2!_mpqXN-)37^3DGym(!fI4 zp3LlHBj)pWDhSF?ZjprhPy^x{nC8_cf6CF=)P8YgJmn4yq z8v_0#G3Qq8Ea8_H^#ADzF|^4+>alD(DSuVz<3N0nJ?VA^bz{uAQ?BhPDDSy_G64W9 zF>|<}w>I;%>KJcd9O2+=gNK18o0b_M z`m^FT|GuqdTKQuL(<+8EWO8wAdiof21Aq=YNZ;$d^aDg%4M+l+3+%*@=T=R39Ca1g z`ZZS^0VdUdNoMe^SR^dM=!Jdai!A0Lp3c`+x@^^n#vwLwlFSDWGQMpgcb?*aL>B z!9nR-ylb39(t7mv_6se#)KuznYdb(e(;748bv#vkBt-rE`S>BG6HtP z!h22RHCzloa~&qS1{o#M)wiiCOLCo7rOlDf1swlLLdWh$u=S4gn%^f!wAo&MN&4(S z3Fz6^*OX*A^9D0OwISxeIQL(2*$wSdv%*Bsn!s;xo6r8gy1qOf>Mj2J%nZqpEnT`{ ztVOb>Y%$WvmYqa|Y`MuUTbLGV>QGyXU>8&e#g3Dg$$>JMfMg{& zjv+Gh987BYrahieC%A;>EFxcOdusHNlW}M8OXQ$4J^}(Nh3I`MO5#5XoQDD^QK+5E z-ikZNF;5lL9=6kL+?M}30iAfS0>eEZ%wuBQEyhPL;g1r|5bPvkAyXfWX%!=ROYUKS zzkdbaD=m3u_tb?Kdb5@K&W|AJFz;Nrb%p^R-5`no7?{r8;3PJDJ;=7D434QDmUEk~ z%h$7P-541s&c171%8F!hpt$ah^}bE{^qt|nu?}GaPWr!chCAp*BJ6M@*AeKP|HDnG z-xTsi6$)yrpCnnjK(oy1?SVDO6T%Ln-~UJ%K~k{6025wlc~Si@Y=RX=Xgjjtn3cTFXtjM>^^AtZ1l}#wa3cPD)7{5qUck2wyrQWc(%)5 zd|6agRUEbB>rl4 zM*4&7TD z46VgqJ**wo6y27h+h-7kmqUOFjtiAbzVs?Dew>U~pO*G8A{~H0v_SZQ9=yU$f2dWGEN5TmM%8WPO-A%rroQ|iOHXwo_Tr)7} z8uDs}CldZcBRRgX;86vR^@EWQ0@3 z2M+Nj%*|M!IAx-j)CXm5)oOo{4pxHUDbaxC4@nNcw|K=5v6^r|htG`C(?Mb#*`)j< z!vSy)VzuI%kHvNC-%hsQ!>+SKq^MEQO9%A0tGrcI&b_SQ zc9EoadwJT?|6K7S8s&anNdK<$5F!K$;=}e`IXtm-wMY`11?sg=Vcxcw&6H*!^!EBD zpNn4zeCz7N_TN}U09-E>itYysPAPSnAL*QHwapE!Qpt;n1wBWQhnA2+)s<3QV6f5A zxcno%GWK27;-W3bp1f25nRVD1KVMBL>+#$hzax%&(O{V+sC5YvqiPte*RQ8vL<{TP zK&wacFo_jJ1(4M_#;MLjMW8e(YDu&@oQ>ZAMeP2$6U8Q%Q^DOWNtf~OSQB&N*70jC zJJ5PDEm_EBXP9)|c`rv8H_3u}5&Cuc8vg2D$bTRY;^}pUH^Z~1sK~QL{UfY641H9p zm&|sO@f_h{Ra(aXi~moKpjEupqqtR5|MS`t8M-0JkMRg+0BJ+stMnikCRxU7$jeyk z%d3JsT|Zw#XC#;o(J_>k)F~2T396kR{U4TZ1htaP85I}QnG}>0Gy^BTTt3%dF8>m7 z=f^}h18d5n;x+U*?44i`eo6}DYnjV=PI}#6O73#B3fhF4ib(`PRf2-jaFaUx-FvDDc^QQiOt_+HkEs-tbUjJ+Z6m_W$E>? zE?+$iwQ2r9*$=6Il4~OjW8igU@&AU}T7yrZ93k5QQFafw$qD8#Se5q(O5apr)P9UD zBBBC%>E{R51Q0%Na$^L)4y#&I_o{7cA+$$^rk=HZ{eo@Z+%xV{1Cqk#SJAMe&axe^ z57TqQ&$r*URa3rU58i}uULU!%gbI3KH!^Pv_~S^ew7^wHC*$UjwKyOzDoXI?=hS$t z_agB3M!{2H-8Axb7d>jzy}-#YRs?*zhl2l7dvQ>F)l`CaI;UpD+gS0J3_}1nyE=gn z4o7tSJ38n}HkO#$*^}_=PG%jwY{Jj27<#=mJ877B z<~@SYaode)BR1_mO3TcM$-x)mbliLM0^R#o z9KkSsbx{lEgCTF9QNaX>>HWHzigH0=Pz`H4UKOL8rZBP-B3&BD>j$l$x0Sy{;(IP( zw~+J^HGNA2BWnr=NJhWm1e-I{B`1$5UW69(o%;$f^?22J$c6gcY@haMx&uM`+v0^G zFmGTWYYKLRLK;1&2n><96tvh1i{c@?Oo$+q|brbLP(;V~sZ@Lspr-xD7SB&5xETKyyB;yqvDk zk)jDT*y=pW!#>nOmHXs%4VJe{L>@!5)_^j}(-EQ7gvcv1 zMsP9apsTiZvg7w?z1HhITX(-w()iEzGY2o#)Ryjgp;>xbIAZ?3W>WP z;gwT8$R*c%W>eiFZu{Ib77N4lr*kI4h}stZzzH7xJGML-1foJraI4^MyaZ$2sgxs8 z;a-MT5TUk|DWINJ!A25oEBD0`3;w zb){hpJubtg@TR!696G+d-{Q^dPbCcvAnF4dh3->W#0k0yw=2L}NEyerXAihauyr}g zcRzw1Cl-QyO{yE6k9=LL4;@&x?G+3-#tlVF2n}X0G9V6iK=fVkVhEsOM6Xn6Imro)+ z;IC*chS*=H?^En&$R?iv25@)@?6MHA;ai><_G~=WNu$@v%A2~QibR2UpfkZC2Ku@q zPzQkcx$3#eYX{Fw2Gn1oF`n!V7l?tWze-9CIm)KbwUFn5U|IZm$hrxrDe7OnuY#oy z9~|US5AC`6Cuxx##|SL^{o8V7!A^UdwEW%+0l+0cIZ?0T4wbSGOg2hyd$y7%$dCOS z1DH>3Rto7W`0I$#Uc4gbvp63X1rhBliCm|}^HdnErPQ24yypn{@7|hJR zSB$-^-0$P1vL1KOVp8I2D&lOBvjM~5(QKnGwOY1JME?X6RchUPn{;8V*@yMg)UeTu z@wX6vuCpXqE^H?Y1FJOO#wOH@6EtqqZX7V6R*m@J3|0SU%nd}n0-oR5rw)J){n+Cx zTdS@?uoxuJ{Rk3O$?~-U`j~^4P9$LyTmB3S;7LNJev z8m1!!{3HKN6m(?K9}10%w4e>^XYk{a?G7d35P>9j9Sq+iHP!^vxOL5K{gntauy}uj z#+n%7`^kR8D*x~=G17Nu#_9!!6)sX@%jT4QEwj$qjs_rJ-391 zZ+wRuIF#Id%h0M%zhz0&e}Cmz zkvo;SW5Dwh@ecfM0CkR0V;CX6hFzDoxWC|W=j2bz)IZ)}@cVVPc}6-|NUgLP4wPyD zydbxW=K&%8sV5|%m|Q3HKwe~z4rGx(oF;GppnNmu5;_e(X1jc|VNzLpcFueLE1oU2 zYYIu{_;eUUBu;{QqM^D>%Zgek(zx2sGR~P8=NUO#Aj27WpHI#q7vG*DQYA!lTDu=tfS66F21s z1KYcQBj73op-3njGeVxUFS>i=P@2BRDzF6xIu>%VerNDgh1mxp=98}7U6%-D*8$6$ z4}HZLIkN>xanKM3^XJN~Xf-`LCOg5H`a#mirj5QkagQK6 zK$u~W6NKEz_&tvY!qiiJNlY~BMORuguSm0!p$&x$*nn9vX*ync|F+vNTvV-*BOis6a~bAD z!6{-T?D3-QG`*;79&n!3PIHcq^Q`|u_QS^s2x=qqKTv)V<*3*^N*8Ol&T=SCD~Uucs5nX( zXFdQ}OAv^raqa`)C4~@Nmz=s^<@Y5IrVT_eKYI85)%wlWmQ}izOObUzwPmPa;kYNC0B<~9B(u)`n6GCGTp~mr z{R1}6ZQPri++XCOfM)A{&*~={!PkD2%{_jie5gu?MHDUard-TmfN@IDZN7QWM{+Al z*iX*Cq1Rixrs8$dx51*DKPivibQD%789xhYm_N!8qv>cO`-%12UU)1NCaM;t+cnxo z((5NGT%5bsjUUc#==+J-WZYW3-u*Q{vNSl0U<;yEOp9w=tHq7VPjiMH7ZI9lH4k|c zV=(X}0`_k!BbVT6UR{81F3iaY*cQdKaaDsF53hc&aECq1N8i(lk=Be4csfcL4?J2C zbQ@o;r>-qn4K6En>+oe+Lq#lbp`Ms|Y|cpJtNuWmzk_D@TX}8k9ItMjl23hjgB9pT zF?!arMAg^&;i`A6;E1aBZ$B0+=S9q9>m%zRZbvG?n}kw%HrL=_S(F--UF0O2>m7Js z!-?^L>UFcfeol$0X%TK78E#EBvW(hYzO?|`Q4#8|0~L;{;J)(jO-6ajg?WbQy2l#T z?&@)2EzS;vB%kJ&>G9amGnU=N=)LWERayC*FK;N5VeFp&&l^8D8EHQJE2!`@@xsIA ziHZ62{2;=ZX(<1KPlD2~lphS`(;qf7VtN!eWBG&6*j<&h{b|wtbr=r&ww#!1@!o$c z(9=+4x6RwKa%xqU~t(_;I(!PG4g0)}w zga-)b1kp=H=6*{RZ`$!q>a3NW-+x7Xj&pc$O#Nu7JBw2ypXXRESzgxn)WX= z@D9j&X{UM0_%+rom%LWf6tvvqS4hz#jKC|)90{N=d@AXJHNX0?<<&THcG!DYX!9C6 z;CpNmZuBHTzWNXaM4HHKkGg(JA3A(om%fSz(%S4X*kzfqCeb?D9>wr8k?xw_QgSB+ zw>xsR-;sV^&v2{{)n zck>O;c^B=i&@{K+s*qH^!RcSw9*bkt5RnWX{I~AQ)O>mv8})+LXG7T~q3F7<&z>E> z=Bc*qa+DMNL=^bcTc*8uE6!<5FOG5zeTe&(cA!KV*|}{`y*7BCm?BX?=tEh{QksNO zvW{keMEzR9tsBmqQ&;^`cMo?&+wEwv9V)f?w0kooch^jsM=e!Vy`ODJYYZ;?U>b^# z@$&SVO_=jH$RIdeP4jOU=@-$OO*J{uNPvBF9Mp`-2yC_MJ8<*h}$bVK@VL06fG zQoO+cPo7Ms?clG6|A^<6mrvDY0)ctqQeT|0Mb6;feV$2+u& zo$Yu4{i7rNLQm*gD$?qInK4+V|L70c9?r)5&T(}woXEOi15}JZQ4#}12X3YAIAgbU zE}FZVu3tm9#NJ4+WG^uO((OkVxfDRHb)gId8+JJGM~K7z_u~0M66b&3XqZptj*LQ{ z?F;%ES*J(YD4_Wp+V-pAg{f0MEN=*PHqkJwnPx;_#HBFz_X@_q~rt9wp zOC6b%w|5`I*NG8B{(Efe8rn8xh#GGu#K6rhnqeZcIbCuAx0#o2NqvX(((h;hL}8Wl z)rlEW{dZ?NzqrmJix-Z>fpE0UPBqOl(WP38!#|JX?~-cvPDdxuX7(-V&Mz&E)dcew zhKT|K)}nH}{)O5_N>$o-*<3HNh3AhZbHkGq{Cbkw0@~8#*QUv`-!2cR^GBS88;bA? zlpvY>`#QsRBB{-9DLpI|5<5HJ{%6gOphau!BMqhBQ zS_Iea{ijObnQRpGXj^Pi@RO*YIep^d&cM)+&%;?|7K3w;JcLIFYv-@dj1?H+y3Z^$ zzR4_R`PtlBOFx#E>HUFyZ6i&2XPS9Xq2;C$!PtruqPOM>Z=Z6R@ij#+n>+e?#}-nE z(SJ$S!d9hlVNv+&4A%>hCcb6PtLaW6yBM)CbIRV-y8*25nD0n(Dv(qfWQVv=&klJW|YrxhgSMI|K_Bqf9C2$uiPgj=q5 zP7Z$m{|QXyJ0ozyQDg-pR|hX28xMQnEgM+;UH6g<11c< zHa@&=9PHtYd0QjbktuP*Rzbq{LMX#k*bHWf{1Q^6^84e2^){bMx z9OfkuWj@+r1WJv0TY9^i8(JH<8t7Vx8W~#RV3vc`Yen@;JX`{3s_7DnRITs+AAKTu Awg3PC literal 0 HcmV?d00001 diff --git a/android/ADB over TCP inside WSL2/index.html b/android/ADB over TCP inside WSL2/index.html new file mode 100644 index 0000000000..b467690ec6 --- /dev/null +++ b/android/ADB over TCP inside WSL2/index.html @@ -0,0 +1,102 @@ +ADB over TCP inside WSL2 | philip's notes

        ADB over TCP inside WSL2

        2021-12-11 · 2 min read

          Problem #

          There are two problems with WSL2 that make connecting to an Android device over adb challenging. First, the network interface inside WSL2 is behind a NAT and not exposed to the LAN. This means we can't directly connect to any devices (like our phone) on the LAN. Second, any connected USB devices aren't visible inside WSL2.

          Possible Approaches #

          1. (Chosen) Create a socat tunnel inside Windows pointing at the phone.

          2. Change the WSL2 virtual network from NAT to Bridge mode (looks sketchy)

            https://develmonk.com/2021/06/05/easiest-wsl2-bridge-network-without-hyper-v-virtual-network-manager/

          3. Hack some stuff to make USB devices forward to WSL2? (looks sketchy)

            https://devblogs.microsoft.com/commandline/connecting-usb-devices-to-wsl/

          Overview #

          Since we can't connect directly from WSL2 to our device, we're going to set up a TCP tunnel running on the Windows side, pointing to the device. We'll then run all our adb operations over this tunnel.

          Process #

          1. Install socat inside MSYS2 in Windows.

            msys$ pacman -S socat
            +
          2. On the Android device, enable "Wireless debugging" inside the Developer options.

          3. In the "Wireless debugging" menu, hit "Pair device with pairing code". This will generate a random code and bind the phone adb daemon to a random port. This port is only used temporarily for the pairing process.

          4. Inside MSYS2, setup a temporary tunnel pointing to the device IP and port for the WSL2 adb to pair on.

            msys$ socat tcp4-listen:2205,reuseaddr,fork,nodelay tcp4-connect:192.168.2.242:43148,nodelay
            +
          5. Inside WSL2, pair with the android device over our temporary socat tunnel.

            wsl2$ ifconfig
            +eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
            +    inet 172.19.160.252  netmask 255.255.240.0  broadcast 172.19.175.255
            +
            +wsl2$ adb pair 172.19.160.1:2205
            +
          6. Close the temporary socat tunnel.

          7. Note the long-term wireless debugging port, in this case 38654.

          8. Inside MSYS2, setup a new tunnel pointing at the device IP and long-term port. Keep in mind that we'll always need this tunnel running whenever we want to use adb inside WSL2.

            msys$ socat tcp4-listen:2205,reuseaddr,fork,nodelay tcp4-connect:192.168.2.242:38654,nodelay
            +
          9. Inside WSL2, connect to the android device over our tunnel.

            wsl2$ adb connect 172.19.160.1.:2205
            +
          10. Make sure it works.

            wsl2$ adb shell
            +walleye:/ $
            +
          \ No newline at end of file diff --git a/android/OTA updates for rooted android phone/index.html b/android/OTA updates for rooted android phone/index.html new file mode 100644 index 0000000000..27e7f8765a --- /dev/null +++ b/android/OTA updates for rooted android phone/index.html @@ -0,0 +1,93 @@ +OTA updates for rooted android phone | philip's notes

          OTA updates for rooted android phone

          2021-12-10 · 2 min read

          EDIT(2022-04-06): clearly needs updating b/c it didn't work...

          Make sure automatic OTA updates are set OFF in the developer settings. We need to do the right steps in order to update successfully.

          When you finally get an OTA update, make sure you don't run it yet. Instead:

          1. Make sure Magisk is up-to-date. That means update the (1) App and (2) Magisk install. To update the Magisk install, open the updated app and hit Update next to "Magisk". Of the available install methods, choose Direct Install, wait for it to complete, then hit the Reboot button.
          2. Next, we want to temporarily uninstall Magisk. In Magisk Manager, hit the red "Uninstall Magisk" button. There are two options, Complete Uninstall and something called "Restore Images". Choose the restore images one.
          3. Plug in your device and actually run the OTA update. DO NOT REBOOT YET.
          4. Go back into Magisk Manager and hit Install > Install to inactive slot. It should automatically detect the updated images in the inactive slot and patch magisk into it.
          5. Finally, reboot the phone. You should now have a successfully updated phone that still has root and Magisk Manager in it.

          Unrooting? #

          Download latest OTA update image: https://developers.google.com/android/ota#barbet

          Reboot into recovery + sideload

          $ adb reboot sideload
          +

          Sideload OTA update

          $ adb sideload ota.zip
          +

          Select Reboot

          \ No newline at end of file diff --git a/android/android cli setup/index.html b/android/android cli setup/index.html new file mode 100644 index 0000000000..168bac6461 --- /dev/null +++ b/android/android cli setup/index.html @@ -0,0 +1,229 @@ +android cli setup | philip's notes

          android cli setup

          2022-12-02 · 4 min read

          install java (via sdkman) #

          • when you run sdk list java, there's a bunch of different options; I just installed whatever https://whichjdk.com/ recommended (11.0.17-tem) and it seems to work.
          # ensure `.bashrc` contains these lines:
          +#
          +# ```
          +# export SDKMAN_DIR="$HOME/.local/sdkman"
          +#
          +# [[ -s "$SDKMAN_DIR/bin/sdkman-init.sh" ]] \
          +# 	&& source "$SDKMAN_DIR/bin/sdkman-init.sh"
          +# ```
          +
          +# download the sdkman install script
          +$ cd ~/.local/
          +$ curl --proto '=https' --tlsv1.3 -sSf "https://get.sdkman.io?rcupdate=false" > sdkman-install.sh
          +$ sha256sum sdkman-install.sh
          +419762944a301418a6c68021c5c864f54a3ce3e013571bd38da448439695f582
          +
          +# install sdkman
          +$ chmod a+x ./sdkman-install.sh
          +$ ./sdkman-install.sh
          +$ rm sdkman-install.sh
          +
          +# reload $PATH
          +$ source ~/.bashrc
          +
          +# install JDK
          +$ sdk list java
          +$ sdk install java 11.0.17-tem
          +
          +# sanity check
          +$ which javac
          +/home/phlip9/.local/sdkman/candidates/java/current/bin/javac
          +$ javac --version
          +javac 11.0.17
          +

          install android cmdline-tools #

          $ cd ~/.local/
          +
          +# (linux) download
          +$ wget https://dl.google.com/android/repository/commandlinetools-linux-9123335_latest.zip -O commandlinetools.zip
          +$ sha256sum commandlinetools.zip
          +0bebf59339eaa534f4217f8aa0972d14dc49e7207be225511073c661ae01da0a
          +
          +# (macOS) download
          +$ wget https://dl.google.com/android/repository/commandlinetools-mac-9123335_latest.zip -O commandlinetools.zip
          +$ sha256sum commandlinetools.zip
          +d0192807f7e1cd4a001d13bb1e5904fc287b691211648877258aa44d1fa88275
          +
          +# see zip file structure
          +$ unzip -l commandlinetools.zip
          +cmdline-tools/bin/...
          +cmdline-tools/lib/...
          +cmdline-tools/...
          +
          +# install into ~/.local/android/cmdline-tools/latest
          +$ mkdir -p android/cmdline-tools/latest
          +$ unzip commandlinetools.zip -d android/cmdline-tools/latest
          +$ mv android/cmdline-tools/latest/cmdline-tools/* android/cmdline-tools/latest/
          +$ rmdir android/cmdline-tools/latest/cmdline-tools
          +$ rm commandlinetools.zip
          +
          +# ensure .bashrc contains these lines:
          +#
          +# ```
          +# # Android
          +# export ANDROID_HOME=$HOME/.local/android
          +# ANDROID_SDK_VERSION=33.0.1
          +# ANDROID_PATH=$ANDROID_HOME/cmdline-tools/latest/bin
          +# ANDROID_PATH=$ANDROID_PATH:$ANDROID_HOME/build-tools/$ANDROID_SDK_VERSION
          +# ANDROID_PATH=$ANDROID_PATH:$ANDROID_HOME/platform-tools
          +#
          +# export PATH=$PATH:$ANDROID_PATH
          +# ```
          +
          +# sanity check
          +$ which sdkmanager
          +/home/phlip9/.local/android/cmdline-tools/latest/bin/sdkmanager
          +$ sdkmanager --version
          +8.0
          +

          install android SDK via sdkmanager #

          # let's blindly accept all licenses : )
          +$ yes | sdkmanager --licenses
          +
          +# check out the available SDK packages
          +$ sdkmanager --list
          +add-ons;addon-google_apis-google-24
          +build-tools;33.0.1
          +cmake;3.22.1
          +cmdline-tools;latest
          +emulator
          +extras;android;m2repository
          +extras;google;auto
          +extras;google;google_play_services
          +extras;google;instantapps
          +extras;google;m2repository
          +extras;google;market_apk_expansion
          +extras;google;market_licensing
          +extras;google;simulators
          +extras;google;webdriver
          +extras;m2repository;com;android;support;constraint;constraint-layout-solver;1.0.0
          +extras;m2repository;com;android;support;constraint;constraint-layout-extras;m2repository;com;android;support;constraint;constraint-layout-solver;1.0.2
          +extras;m2repository;com;android;support;constraint;constraint-layout;1.0.2
          +ndk-bundle
          +ndk;25.1.8937393
          +patcher;v4
          +platform-tools
          +platforms;android-33
          +platforms;android-TiramisuPrivacySandbox
          +skiaparser;3
          +sources;android-33
          +system-images;android-33;google_apis;arm64-v8a
          +system-images;android-33;google_apis;x86_64
          +system-images;android-33;google_apis_playstore;arm64-v8a
          +system-images;android-33;google_apis_playstore;x86_64
          +system-images;android-TiramisuPrivacySandbox;google_apis_playstore;arm64-v8a
          +system-images;android-TiramisuPrivacySandbox;google_apis_playstore;x86_64
          +
          +# .. this goes on for a while
          +
          +# install these. probably use the most recent versions?
          +$ sdkmanager --install \
          +	"build-tools;33.0.1" \
          +	"platform-tools" \
          +	"platforms;android-33" \
          +	"sources;android-33" \
          +	"ndk;25.1.8937393"
          +
          +# sanity check
          +$ adb version
          +Android Debug Bridge version 1.0.41
          +Version 33.0.3-8952118
          +Installed as /home/phlip9/.local/android/platform-tools/adb
          +

          (optional) setup wireless debugging on device #

          Connecting to your device via USB sucks. Here's how to develop for any local wifi-connected Android device.

          1. Device > Settings > Developer options > Wireless debugging > enable
          2. Device > Settings > Developer options > Wireless debugging (tap on the text, not the toggle button) > Pair device with pairing code
            • The device will then generate a pairing code and bind to a temporary port just for pairing. You should see a modal window pop up with the pairing info:
          Wi-Fi pairing code
          +772405
          +
          +IP address & Port
          +10.69.69.129:37269
          +
          1. Host > run adb pair to pair with the device:
          $ adb pair 10.69.69.129:37269 772405
          +

          You should see the host user@hostname under the "Paired Devices" section.

          1. Host > connect to the device:

          To connect use the fixed device adb port:

          $ adb connect phlipphone.lan:42835
          +connected to phlipphone.lan:42835
          +
          1. Verify the device is actually attached:
          $ adb devices
          +List of devices attached
          +phlipphone.lan:42835    device
          +
          \ No newline at end of file diff --git a/android/building signal-android in WSL2/index.html b/android/building signal-android in WSL2/index.html new file mode 100644 index 0000000000..2e202cf32e --- /dev/null +++ b/android/building signal-android in WSL2/index.html @@ -0,0 +1,228 @@ +building signal-android in WSL2 | philip's notes

          building signal-android in WSL2

          2021-12-15 · 8 min read

            Be warned, these instructions are more devlog, less polished tutorial.

            Build #

            1. swtich from non-existant motherboard-connected TPM to integrated Intel CPU TPM + restart > BIOS > Advanced\PCH > TPM -> Firmware TPM

            2. Windows PC Health Check says machine meets all requirements, but windows update incorrectly refuses to upgrade + Manually run Windows11 Installation Assistant (https://www.microsoft.com/software-download/windows11)

            3. Windows11 Installation Assistant errors with cryptic error code 0x8007007f + Need to explicitly run as administrator

            4. Update Nvidia GeForce drivers to 510 (https://developer.nvidia.com/cuda/wsl)

            5. Update wsl

              # In Powershell/cmd (run as admin)
              +$ wsl --update
              +$ wsl --shutdown
              +
            6. test GUI apps (in WSL)

              $ sudo apt-get install x11-apps
              +$ xcalc
              +

              This should run an x11 calculator GUI app in windows.

            7. Install android sdks (https://developer.android.com/studio) + Download android studio and extract into ~/android-studio.

              Probably copy these snippets that I have in my ~/.bashrc

              # file: ~/.bashrc
              +
              +# ..
              +
              +# Java SDKMAN
              +export SDKMAN_DIR="$HOME/.sdkman"
              +
              +# Android
              +export ANDROID_SDK_ROOT=$HOME/android
              +ANDROID_STUDIO=$HOME/android-studio
              +ANDROID_SDK_VERSION=31.0.0
              +ANDROID_PATH=$ANDROID_SDK_ROOT/cmdline-tools/latest/bin
              +ANDROID_PATH=$ANDROID_PATH:$ANDROID_SDK_ROOT/build-tools/$ANDROID_SDK_VERSION
              +ANDROID_PATH=$ANDROID_PATH:$ANDROID_SDK_ROOT/tools
              +ANDROID_PATH=$ANDROID_PATH:$ANDROID_SDK_ROOT/tools/bin
              +ANDROID_PATH=$ANDROID_PATH:$ANDROID_SDK_ROOT/platform-tools
              +
              +# ..
              +
              +# PATH
              +export PATH=$PATH:$ANDROID_PATH
              +
              +# ..
              +
              +# Java SDKMAN
              +[[ -s "$HOME/.sdkman/bin/sdkman-init.sh" ]] && source "$HOME/.sdkman/bin/sdkman-init.sh"
              +
            8. Install some missing x11 lib needed to run android studio.

              $ sudo apt-get install libxtst6
              +
            9. Install JDK 1.8 (version required by Signal) and JDK 11 (version required by gradle)

              $ curl --proto '=https' --tlsv1.2 -sSf "https://get.sdkman.io?rcupdate=false" | bash
              +$ source ~/.bashrc
              +$ sdk install java 8.0.302-open
              +$ sdk install java 11.0.12-open
              +
            10. Open android studio

              $ ~/android-studio/bin/studio.sh
              +

              Ensure you choose the newly installed JDK1.8 when following initial setup.

              Download generic SDK, SDK v31, and device emulator into $HOME/android directory. My bashrc should already have $PATHs setup for this.

            11. Update android studio plugins. Try building a sample app (I chose Sunflower)

            12. Install additional SDK libs

              $ sdkmanager --sdk_root="${ANDROID_HOME}" --update
              +$ sdkmanager --sdk_root="${ANDROID_HOME}" --install \
              +	"cmdline-tools;latest" \
              +	"extras;google;m2repository" \
              +	"extras;android;m2repository" \
              +	"extras;google;google_play_services"
              +
            13. Try building Signal-Android

              $ git clone ..
              +$ cd Signal-Android
              +$ ./gradlew clean assemblePlayProdRelease
              +
              +$ cd app/build/outputs/apk/playProd/release/
              +$ ls
              +Signal-Android-play-prod-arm64-v8a-release-unsigned-5.27.13.apk    Signal-Android-play-prod-x86-release-unsigned-5.27.13.apk
              +Signal-Android-play-prod-armeabi-v7a-release-unsigned-5.27.13.apk  Signal-Android-play-prod-x86_64-release-unsigned-5.27.13.apk
              +Signal-Android-play-prod-universal-release-unsigned-5.27.13.apk    output-metadata.json
              +# Sign apk so we can install
              +# Since I already built/installed a sample app, there's already debug
              +# keys generated from android studio in `~/.android/debug.keystore`.
              +# Note: the default password is "android"
              +# EDIT: doesn't work $ jarsigner -verbose -keystore ~/.android/debug.keystore Signal-Android-play-prod-x86_64-release-unsigned-5.27.13.apk androiddebugkey
              +$ apksigner sign \
              +	--verbose \
              +	--v4-signing-enabled \
              +	--ks ~/.android/debug.keystore \
              +	--ks-pass pass:android \
              +	--in Signal-Android-play-prod-x86_64-release-unsigned-5.27.13.apk \
              +	--out Signal-Android-play-prod-x86_64-release-signed-5.27.13.apk
              +
            14. Setting up virtual device

              $ sudo adduser $USER kvm
              +
              +# in WSL2 need to do this every restart...
              +$ sudo chgrp kvm /dev/kvm && sudo chmod g+rw /dev/kvm
              +
              +# verify
              +$ ls -la /dev/kvm
              +crw------- 1 root kvm 10, 232 Dec  8 11:46 /dev/kvm
              +

              In the IDE AVD Manager, choose an image to download. IDK what is good lmao

              +If avdmanager list returns Exception .. NoClassDefFoundError .. XmlSchema + Default platform-tools fail when run with java 11 but not java 8 + Works with the cmdline-tools/latest versions. Those are now set higher prio in my $PATH

              Installing random missing dependencies

              $ sudo apt-get install libnss3 libxcomposite1
              +

              can verify kvm should work

              $ sudo apt-get install cpu-checker
              +$ kvm-ok
              +INFO: /dev/kvm exists
              +KVM acceleration can be used
              +

              Testing emulator on cli

              # Why does it fail when run outside of this directory?????
              +$ cd ~/android/emulator
              +$ ./emulator -avd Pixel_2_API_31
              +

              Holy shit it actually worked lmao. It complains a bit about "nested emulation" not supported well.

              It's not clear that this made any sort of difference?

              # file: /mnt/c/Users/phlip9/.wslconfig
              +# Settings apply across all Linux distros running on WSL 2
              +[wsl2]
              +# Enable nested virtualization
              +# I believe this will improve perf when running an Android emulator inside WSL2?
              +nestedVirtualization=true
              +

              Reporting error connecting to adb daemon on some port 5XXX. Dunno if this is important or not.

              Successfully ran "Sunflower" sample app on emulator!! :D

            15. Testing Signal-Android on emulator

              Check that device is visible from adb and we can connect

              $ adb devices
              +List of devices attached
              +emulator-5554	device
              +
              +$ adb -s emulator-5554 shell
              +emulator64_x86_64_arm64:/ $ uname -a
              +Linux localhost 5.10.43-android12-9-00031-g02d62d5cece1-ab7792588 #1 SMP PREEMPT Mon Oct 4 21:48:11 UTC 2021 x86_64
              +
              +$ adb -s emulator-5554 install -r Signal-Android-play-prod-x86_64-release-signed-5.27.13.apk
              +

              Run the Signal app

              It works!! Need working phone SIM I think to get past setup screen...

            16. Setup google voice (https://voice.google.com) number and use it to get past setup screen

            17. Android Studio / IDEA setup for Signal Android

              $ cd Signal-Android
              +# generates .idea project files
              +$ ./gradlew idea
              +

              Then start Android Studio and open ~/dev/Signal-Android project directory.

              Hit > Load Gradle Project and then > Trust Project

              Gradle will complain about some partially supported distributionSha256Sum option in gradle-wrapper.properties. Tell it to STFU and keep going (first option).

              Everything should finish first build successfully.

            18. Understanding Signal build variants

              In the base build.gradle you can see they define a bunch of different build variants, which end up generating a billion different gradle tasks and really complicating my life.

              TLDR; target PlayStagingDebug

              AFAICT, there's effectively { Play, Website, Nightly, Study } x { Prod, Staging } x { Debug, Release, Flipper, Perf, Mock } targets +/- some cases.

              For developing, I think we want Debug, which uses the debug.keystore for signing (vs actual keys for pushing to Play store).

              I'm not sure what Study is, maybe a mock UI or something. Probably target Play or Website.

              It looks like Flipper refers to https://fbflipper.com/ which is some nice app UI/UX debug/development thing. IDK how to use it yet tho.

              During development, we probably target Staging so don't accidentally fuck up Signal's prod services. You can also see the MobileCoin config switches to testnet on Staging vs Prod. Need to see if hitting Staging works with a real phone #.

              Building PlayStagingDebug and then installing onto device/emulator:

              In CLI:

              ./gradlew installPlayStagingDebug
              +

              In IDE:

              (gradle tasks must be synced) Gradle Tab > Signal > Tasks > install > installPlayStagingDebug

            19. Understanding Android x Gradle

              • When you make changes to any build.gradle or w/e you need to re-sync Gradle in the IDE.
              • I also enabled "update Gradle tasks during sync option" Default project structure:

              Signal-Android/app/src/test: local unit tests. these are actually run on your local machine and must have no dependency on the Android framework (or only mocks).

              Signal-Android/app/src/androidTest: on-device instrumented tests. these tests must run on a device or emulator. they also have an app Context and access to the Instrumentation API for manipulating UIs etc...

              I'm having a lot of trouble building + deploying to the emulator via the IDE. Dunno if this is some local config/setup issue but for now going to try just doing all build+deploy from the cli.

              Run local unit tests

              $ ./gradlew testPlayStagingDebugUnitTest
              +

              Run specific test (more filter rules: https://docs.gradle.org/current/userguide/java_testing.html#test_filtering)

              $ ./gradlew testPlayStagingDebugUnitTest --tests *.myTestMethod
              +

              Continuously run tests (or any task)

              $ ./gradlew --continuous testPlayStagingDebugUnitTest
              +
            20. Actually running the unit tests

              $ ./gradlew testPlayStagingDebugUnitTest
              +

              Unfortunately I got like 33 errors initially, claiming the following:

              org.thoughtcrime.securesms.database.model.GroupsV2UpdateMessageProducerTest > you_requested_to_join_the_group FAILED
              +
              +		java.lang.UnsatisfiedLinkError:
              +			/tmp/resource8597950725831998403.so: /lib/x86_64-linux-gnu/libm.so.6: version 'GLIBC_2.29' not found (required by /tmp/resource8597950725831998403.so)
              +

              This means the installed libc version is too outdated compared to the compiled library's requirements. In this case, I needed to update Ubuntu from a fairly old version (18.04) to the next LTS (20.04).

              # Confirm that we're on ubuntu 18.04 right now
              +$ lsb_release -a
              +No LSB modules are available.
              +Distributor ID: Ubuntu
              +Description:    Ubuntu 18.04.6 LTS
              +Release:        18.04
              +Codename:       bionic
              +
              +# For some reason need to do this o/w upgrade silently aborts
              +$ sudo apt purge snapd
              +
              +# Upgrade and clean up everything before upgrading
              +$ sudo apt update
              +$ sudo apt list --upgradable
              +$ sudo apt upgrade
              +$ sudo apt --purge autoremove
              +
              +# Begin the upgrade
              +$ sudo apt install update-manager-core
              +$ sudo do-release-upgrade
              +
              +# also needed to rebuild tmux after this????
              +

              After finishing that, all local unit tests completed successfully :^)

              $ ./gradlew testPlayStagingDebugUnitTest
              +# ..
              +BUILD SUCCESSFUL in 2m 20s
              +194 actionable tasks: 186 executed, 8 up-to-date
              +
            21. Deploying to real device

              First setup ADB over TCP inside WSL2, then simply

              $ ./gradlew installPlayStagingDebug
              +

            TODO #

            • look into "Configure hardware acceleration for the Android Emulator" (https://developer.android.com/studio/run/emulator-acceleration)
            \ No newline at end of file diff --git a/android/index.html b/android/index.html new file mode 100644 index 0000000000..0dab873b26 --- /dev/null +++ b/android/index.html @@ -0,0 +1,73 @@ +android | philip's notes

            android

            ADB over TCP inside WSL2 →

            2021-12-11 · 2 min read

            android cli setup →

            2022-12-02 · 4 min read

            linux ADB udev setup →

            2021-01-15 · 1 min read

            root phone with magisk →

            2022-01-15 · 4 min read

            \ No newline at end of file diff --git a/android/linux ADB udev setup/index.html b/android/linux ADB udev setup/index.html new file mode 100644 index 0000000000..fe18ead110 --- /dev/null +++ b/android/linux ADB udev setup/index.html @@ -0,0 +1,99 @@ +linux ADB udev setup | philip's notes

            linux ADB udev setup

            2021-01-15 · 1 min read

              If you connect the device over USB and adb doesn't see it, this may be necessary. Make sure you try a few different USB cables first before reaching for this step.

              $ git clone --depth=1 https://github.com/M0Rf30/android-udev-rules.git
              +$ sudo cp -v 51-android.rules /etc/udev/rules.d/
              +$ sudo cp -v android-udev.conf /usr/lib/sysusers.d/
              +$ sudo systemd-sysusers
              +$ sudo gpasswd -a phlip9 adbusers
              +$ sudo udevadm control --reload-rules
              +$ sudo systemctl restart systemd-udevd.service
              +$ adb kill-server
              +
              \ No newline at end of file diff --git a/android/root phone with magisk/index.html b/android/root phone with magisk/index.html new file mode 100644 index 0000000000..169bed4758 --- /dev/null +++ b/android/root phone with magisk/index.html @@ -0,0 +1,102 @@ +root phone with magisk | philip's notes

              root phone with magisk

              2022-01-15 · 4 min read

              We'll be rooting our device with Magisk Manager by patching a stock boot.img and then reflashing that image onto the device. Once completed, we should have a fully rooted device that can install adblock, use f.lux, run busybox cli tools, and so on.

              Note: this assumes we've already unlocked our bootloader, since we need to flash a patched boot partition.

              Caveats #

              We can't automatically install OTA updates, otherwise we'll lose root. To preserve root, follow OTA updates for rooted android phone.

              Install #

              1. (Windows) Download the Google Windows USB driver and extract somewhere. Right click -> Install.

              2. (Windows) Follow the instructions https://developer.android.com/studio/run/oem-usb#InstallingDriver to install the driver software or upgrade it.

              3. Download the basic sdk platform-tools and extract somewhere https://developer.android.com/studio/releases/platform-tools.

                Make sure we can see our device:

                $ adb devices
                +List of devices attached
                +FA7AL1A02016    device
                +
              4. (Linux) If adb doesn't detect the device, try linux ADB udev setup.

              5. Find our device (Pixel 2 - walleye) and the factory image corresponding with our current build (RP1A.201005.004.A1, Dec 2020) here (https://developers.google.com/android/images#walleye). Download the zip file under "Link". The file's pretty big, but we really only need the boot.img (inside another inner zip lol). Put that somewhere.

              6. Now we need to push the boot.img onto our device so Magisk Manager can patch it.

                (Windows) For some weird reason this command fails when run inside Git bash shell, so we need to run it in good ol' CMD lmao.

                $ adb push images/pixel2-walleye-rp1a.201005.004.a1/boot.img /sdcard/Download
                +
              7. Back on our device, open up Magisk Manager, hit Magisk -> Install -> Select and Patch a File, and choose our /sdcard/Download/boot.img. This step should patch the boot.img and produce a file like magisk_patched-23000_Oin7Q.img.

              8. (Pixel 5a - 2022/01/15) Didn't work the first time with stable Magisk; needed to install the latest canary from https://github.com/topjohnwu/magisk-files/blob/master/canary.json

              9. Pull the patched boot.img off our device.

                $ adb pull /sdcard/Download/magisk_patched-23000_Oin7Q.img images/pixel2-walleye-rp1a.201005.004.a1/
                +
              10. Now we want to flash our patched boot.img onto our phone. Reboot the phone into fastboot mode (Restart -> Hold Volume Down or adb reboot bootloader). fastboot should detect the device now:

                $ fastboot devices
                +FA7AL1A02016    fastboot
                +

                Finally, flash the patched boot.img.

                $ fastboot flash boot images/pixel2-walleye-rp1a.201005.004.a1/magisk_patched-23000_Oin7Q.img
                +Sending 'boot_b' (32768 KB)                        OKAY [  0.733s]
                +Writing 'boot_b'                                   OKAY [  0.533s]
                +Finished. Total time: 1.396s
                +

                Restart the phone normally. Opening Magisk Manager should now detect the device as fully rooted!

              Post-Install #

              1. Make sure automatic OTA updates are set OFF in the developer settings so it doesn't silently update and clobber our root.
              2. In order for our device to run certain apps that disallow root, we'll need to pass Google SafetyNet. To see our current status, hit "Check SafetyNet" in Magisk Manager. By default, our device will probably fail to pass Attestation. Unfortunately, this is even trickier for more recent devices which will run attestations inside a secure enclave. I believe there are some more sophisticated work-arounds to circumvent this.
              3. To pass SafetyNet, let's first enable "MagiskHide" in the settings.
              4. Also enable "Hide the Magisk app" and give it a different name. I called it "M A G I S K M A N A G E R" lmao.
              5. Unfortunately, my phone still doesn't pass the ctsProfile check even after the above. I don't need to hide right now, so maybe figure this out later...
              6. AdBlocking: Install AdAway from F-Droid. Enable "Systemless hosts" in Magisk Manager and then Reboot. Inside AdAway, use the Root-based AdBlock and then Reboot again.
              \ No newline at end of file diff --git a/apple-touch-icon.png b/apple-touch-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..983be58204bb32f636bfc468cb4b6aa3417d23df GIT binary patch literal 8210 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 z zBLCcQyJsj5zm^liKcd9$5lK;~!4=rG+^F>uC>m7yLAIC>>>UzLsdv>&j_s?C*nIK4 zIHt0)E%Og9-i=+z#Wz{Bv6hiCo|y=><(Bo62FyRf1kuoV5Po3&QkBey_cIon!_(4o zNV(F~_R!gt&ac>Cp0XxLLFIDor?_y0KYA;;ii6|m&96-V%QtEwNRo7dvvmKA34!PeT zFtAqAtY6b7{9f=Y(YRKjghp%on4EGEC*?*{#bAe{@SKq3b<~6^Kk#*0n(r&@0>3JP zlZuLHOF)$kKCov0kX{^dGO<+7d=#Lp?atEf@?(Q2#P(m|fA)_C69Hhs*H``>j=N0c zju5edv~xYdnVKGTvTsWTjIy?osH&snV5Dl)1D+q7`njCslP~CVY0dyu^8jau02di2 zKNoZZhzg5}J`omqA`CVbmX;9~lMxo-7Z#Qg7S`S&l=*)cynUQKTtol=4DzilacBnm z|0EdsxCR6}__+YV!NGzaFP{55IY3H_kB1~>sgNa4omBYa;|9-cA1@$VXc4AIz1Bs;klnv5)>g9W7G7 literal 0 HcmV?d00001 diff --git a/b i g m o n e y l a w r e g u l a t i o n/financial instituion/index.html b/b i g m o n e y l a w r e g u l a t i o n/financial instituion/index.html new file mode 100644 index 0000000000..79112e36fc --- /dev/null +++ b/b i g m o n e y l a w r e g u l a t i o n/financial instituion/index.html @@ -0,0 +1,91 @@ +financial instituion | philip's notes

              financial instituion

              2022-04-05 · 1 min read

              The following are considered financial institutions by FinCEN

              1. Banks (except bank credit card systems)
              2. Brokers or dealers in securities
              3. money services business (MSB)
              4. Telegraph companies
              5. Casinos (with gross gaming revenue >$1M)
              6. Card club, gaming club, card room, gaming room, etc... (with gross gaming revenue >$1M)
              7. Anyone subject to supervision by any bank supervisory authority, whether state or federal
              8. Futures commision merchants
              9. Introduction brokers in commodities
              10. Mutual funds
              \ No newline at end of file diff --git a/b i g m o n e y l a w r e g u l a t i o n/foreign bank account report (FBAR)/index.html b/b i g m o n e y l a w r e g u l a t i o n/foreign bank account report (FBAR)/index.html new file mode 100644 index 0000000000..f71ce800f3 --- /dev/null +++ b/b i g m o n e y l a w r e g u l a t i o n/foreign bank account report (FBAR)/index.html @@ -0,0 +1,91 @@ +foreign bank account report (FBAR) | philip's notes

              foreign bank account report (FBAR)

              2022-04-05 · 4 min read

              The FBAR is a form you must submit to the IRS for your calendar year tax returns if

              1. You're a US person.
              2. During the calendar year you had a financial interest or signature authority over a non-US financial account with an aggregate maximum account value over $10,000.

              An FBAR is a disclosure form. It doesn't affect the amount of tax you must pay.

              My guess is that it's a tool used by FinCEN, who receives the data from the IRS, to track money laundering (AML) and sanctions violations (speculation).

              Who is a US "person"? #

              US person #
              • a US citizen
              • a US resident
              • an entity (read. corporation, partnership, or LLC) created or organized in the US
              • a trust or estate formed in the US

              What is "financial interest" in a financial account? #

              financial interest #
              • You are the owner of record or holder of legal title. This applies regardless of whether the account is maintained for your benefit or the benefit of another.
              • You also have financial interest in a financial account owned by either (1) an entity that you control >50% ownership or (2) a trust where you are a >50% beneficiary.

              What is a "financial account"? #

              financial account #
              • A securities, brokerage, savings, checking, deposit, etc... account maintained at a financial instituion.
              • A commodity futures or options account, an insurance policy with cash value (like life insurance), an annuity policy with a cash value, or shares in a mutual fund.
              • A retirement savings account or other types of government retiree or pensioner programs.

              Do "virtual currency" accounts need to be reported? #

              TL;DR: No, but probably Yes soon.

              No: (2019-06) The Tax Adviser - Virtual currency not FBAR reportable (at least for now)

              No: (2020-02) FinCEN - Report of Foreign Bank and Financial Accounts (FBAR) Filing Requirement for Virtual Currency

              However, FinCEN intends to propose to amend the regulations implementing the Bank Secrecy Act (BSA) regarding reports of foreign financial accounts (FBAR) to include virtual currency as a type of reportable account under 31 CFR 1010.350.

              No: (2022-01) RicheyMay - Virtual Currency FBAR Filings in 2022

              At the time of this article, the current guidance does not reflect this change; however, there is no doubt FinCEN is attempting to amplify the reach of the FBAR requirements with the objective of finding fraud, money laundering, and other financial crimes the forms are intended to detect.

              What is "signature authority" over a financial account? #

              signature authority #
              • You (alone or in conjuction with another) have authority to control the assets in an account by direct communication with the holding financial instituion that maintains the account.

              How does one determine the aggregate maximum account value? #

              aggregate maximum account value #
              1. Determine the max currency held in the account during the year, called the "high-water mark".
              2. Convert the high-water mark currency value to USD if necessary.
              3. If the USD high-water mark is >$10k, then you must file an FBAR.

              When is the FBAR due? #

              April 15 for residents. June 15 for expats. Either can ask for a deadline extension to October 15.

              What is the penalty for failing to file? #

              Willful violations: $100k or 50% of the total balance of the foreign account. Non-willful violations: $10k per violation.

              Wilfull violations may also face prison terms of up to 10 yr and criminal penalties up to $500k.

              What information is needed for the FBAR? #

              For each foreign account, you need:

              1. the account number
              2. the name and address of the foreign financial instituion
              3. the high-water mark account value in USD
              4. (if the account is jointly owned) the joint owner's identity
              5. (if the account is one you have signature authority) the account owner's identity

              References #

              \ No newline at end of file diff --git a/b i g m o n e y l a w r e g u l a t i o n/index.html b/b i g m o n e y l a w r e g u l a t i o n/index.html new file mode 100644 index 0000000000..d5873d70a2 --- /dev/null +++ b/b i g m o n e y l a w r e g u l a t i o n/index.html @@ -0,0 +1,73 @@ +b i g m o n e y l a w r e g u l a t i o n | philip's notes

              b i g m o n e y l a w r e g u l a t i o n

              financial instituion →

              2022-04-05 · 1 min read

              monetary instruments →

              2022-04-05 · 1 min read

              money services business (MSB) →

              2022-04-05 · 4 min read

              \ No newline at end of file diff --git a/b i g m o n e y l a w r e g u l a t i o n/monetary instruments/index.html b/b i g m o n e y l a w r e g u l a t i o n/monetary instruments/index.html new file mode 100644 index 0000000000..fbedbd06d4 --- /dev/null +++ b/b i g m o n e y l a w r e g u l a t i o n/monetary instruments/index.html @@ -0,0 +1,91 @@ +monetary instruments | philip's notes

              monetary instruments

              2022-04-05 · 1 min read

                These are instruments where an intermediate bearer or holder can yoink the cash money.

                1. Currency
                2. Travelers checks in any form
                3. All negotiable instruments
                  1. Personal checks, business checks, official bank checks, caashier's checks, third-party checks, promissory notes, and money orders.
                  2. Must be in bearer form or endorsed without restriction or in such a form that title passes upon delivery.
                4. Incomplete instruments
                  1. Same as (3.) but signed with the payee's name omitted.
                5. Securities or stock in bearer form
                \ No newline at end of file diff --git a/b i g m o n e y l a w r e g u l a t i o n/money services business (MSB)/index.html b/b i g m o n e y l a w r e g u l a t i o n/money services business (MSB)/index.html new file mode 100644 index 0000000000..40802dbfc3 --- /dev/null +++ b/b i g m o n e y l a w r e g u l a t i o n/money services business (MSB)/index.html @@ -0,0 +1,91 @@ +money services business (MSB) | philip's notes

                money services business (MSB)

                2022-04-05 · 4 min read

                MSBs are considered financial instituions. Businesses in the following areas are MSBs:

                1. Currency dealer or exchanger
                2. Check casher
                3. Issuer of traveler's checks, money orders, or stored value
                4. Seller or redeemer of traveler's checkes, money orders, or stored value
                5. Provider of prepaid access
                6. Money transmitter
                7. U.S. Postal Service

                My very likely inaccurate summary of this list: MSBs are (1) currency exchangers and (2) money transmission intermediaries who hold custodial, depository, or bearer privileges.

                Currency dealer or exchanger #

                Businesses that accept monetary instruments in exchange for monetary instruments.

                Check casher #

                A person that accepts checks or other monetary instruments in exchange for currency or monetary instruments.

                Money transmitter #

                A person that provides "money transmission services". These are services where a business accepts currency, funds, or other monetary instruments from one person and transmits the currency, funds, or other monetary instruments to another by any means.

                "Any means" includes, but is not limited to transmission through

                1. a financial agency or financial instituion
                2. a Federal Reserve bank
                3. an electric funds transfer network
                4. an informal value transfer system
                5. any other person who is a Money transmitter

                Money transmitter exclusions #

                There are specific cases where a business is not considered a Money transmitter, despite otherwise handling currency, funds, or other monetary instruments. These are businesses that only

                1. Provide delivery, communication, or network access services used to support money transmission services.
                2. Act as a payment processor through a clearance and settlement system by agreement with the creditor or seller.
                3. Operate a clearance and settlement system or otherwise acts as an intermediary soley between BSA regulated institutions. This includes, but is not limited to
                  1. the Fedwire system
                  2. electronic funds transfer networks
                  3. registered clearning agencies regulated by the SEC
                  4. derivatives clearing orgs or clearing house arrangements
                4. Physically transport currency, other monetary instruments, commercial paper, or other value that substitutes for currency as a person primarily engaged in such business, like an armored car. This transport is only between the same person from one physical location to another.
                5. Provides pre-paid access
                6. Accepts and transmits funds only integral to the sale of goods or services (other than monetary transmission services) by the person who is accepting and transmitting the funds.

                Activity Threshold #

                There is an activity threshold under which a business is not an MSB. Engaging in one of the above activities in amounts greater than $1000 per person per day in any number of transactions, qualifies that business as an MSB.

                Note that each activity is considered separately, so you can simulataneously not be an MSB for cashing checks if you're under the threshold, but be an MSB for currency exchange if you're over the threshold.

                No activity threshold applies to the definition of money transmitter. Thus, a person who engages as a business in the transfer of funds is an MSB as a money transmitter, regardless of the amount of money transmission activity.

                Not an MSB #

                The following are not included as MSBs:

                1. Banks
                2. Persons or entities regulated by the SEC or CFTC
                \ No newline at end of file diff --git a/b l o c k c h a i n/aptos/index.html b/b l o c k c h a i n/aptos/index.html new file mode 100644 index 0000000000..1809eaf6bb --- /dev/null +++ b/b l o c k c h a i n/aptos/index.html @@ -0,0 +1,91 @@ +aptos | philip's notes

                aptos

                2022-04-06 · 1 min read

                Summary #

                Aptos = Permission-less Diem = Diem - DiemAssociation - PoA + PoS + on-chain governance contracts

                \ No newline at end of file diff --git a/b l o c k c h a i n/bip158 - compact block filters/index.html b/b l o c k c h a i n/bip158 - compact block filters/index.html new file mode 100644 index 0000000000..d8d5132c03 --- /dev/null +++ b/b l o c k c h a i n/bip158 - compact block filters/index.html @@ -0,0 +1,94 @@ +bip158 - compact block filters | philip's notes

                bip158 - compact block filters

                2022-09-16 · 1 min read

                \ No newline at end of file diff --git a/b l o c k c h a i n/btc utreexo - utxo accumulator/index.html b/b l o c k c h a i n/btc utreexo - utxo accumulator/index.html new file mode 100644 index 0000000000..d151f2518e --- /dev/null +++ b/b l o c k c h a i n/btc utreexo - utxo accumulator/index.html @@ -0,0 +1,94 @@ +btc utreexo - utxo accumulator | philip's notes

                btc utreexo - utxo accumulator

                2022-09-16 · 2 min read

                • paper: https://eprint.iacr.org/2019/611.pdf
                • github: https://github.com/mit-dci/utreexo
                • related (2016 - delayed txo commitments): https://petertodd.org/2016/delayed-txo-commitments
                • current compressed UTXO set size ~4 GiB
                • btc full nodes would like to verify txns w/o storing full history + UTXO set (need to actually download more data though).
                • instead, build UTXO set accumulator and have transactors present inclusion proofs for their txn inputs in the UTXO set, so you (the full node) can verify the txn.
                • utreexo: use a dynamic accumulator to commit to the current UTXO set.
                • log(n): forest of perfect merkle trees. log n trees, where n is # UTXOs
                • dynamic: efficient batch removal
                • different than merkle accumulator we used for txn history in diem (a merkle mountain range (MMR)), which was append-only with efficient inclusion, non-inclusion, and batch update proofs but no removals (used jellyfish sparse merkle tree for that).
                • accumulator isn't commited to in consensus / block header / block. have to sync the whole thing from scratch lol.
                • optimizes for min. persisted space vs max. bandwidth usage.
                • per Tadge's words: "not a commitment", though you can certainly (ab)use it as one.
                • new block producer (or bridge node) can add aggregated UTXO accumulator insert/remove ops to get utreexo nodes to verify block.
                • transactors (or the full node they use to propagate) need to store the partial UTXO set accumulator, containing their UTXOs, so they can produce inclusion proofs.
                \ No newline at end of file diff --git a/b l o c k c h a i n/fastpay/index.html b/b l o c k c h a i n/fastpay/index.html new file mode 100644 index 0000000000..7d777cab03 --- /dev/null +++ b/b l o c k c h a i n/fastpay/index.html @@ -0,0 +1,91 @@ +fastpay | philip's notes

                fastpay

                2022-04-06 · 4 min read

                • Date: 2020-11-03

                • Paper: https://arxiv.org/pdf/2003.11506.pdf

                • Authors: Mathieu, George, and Alberto (prev. colleagues)

                • can be used standalone or as a sidechain (well, secondary system since FP is not a blockchain)

                • when used as a secondary, assume there is some nice, consistent primary system (like a blockchain, probably distributed, but maybe slow).

                • unlike standard blockchains which use BFT Consensus, FP uses BFT Consistent Broadcast which is faster and simpler to implement (but obv. doesn't provide the full range of benefits as BFT Consensus).

                state #

                authorities #

                • name
                • keys
                • comittee information
                • accounts information
                • last primary tx index. See: user funding FP account.
                  • For tailing funding txns on the primary system FP smart contract.

                accounts #

                • verification key
                • balance
                • sequence number
                • last transfer order
                • list of certificates and synchronization orders

                clients #

                Clients need some persistent state:

                • account address
                • secret key
                • comittee information
                • last sequence number
                • last signed transfer order

                payment flow #

                Three entities:

                1. Sender
                2. Receiver
                3. Comittee

                Flow:

                1. Sender -> broadcast -> Committee: signed transfer order to Receiver
                2. Committee: verify statement (balance exists, sig checks, seqnum checks, etc...)
                3. Each Committee Member -> respond -> Sender: counter-signed transfer order certificate
                4. Sender: now have at least 2f+1 signed transfer order certificates.
                5. At least one of:
                  1. Sender -> broadcast -> Committee: aggregate STO certificate
                  2. Sender -> Receiver -> broadcast -> Committee: aggregate STO certificates
                6. Committee: observe and verify aggregate STO certificate, update account balances, increment sender seqnum, etc...

                sharding #

                • The last update-account step, (6.), can be implemented in a sharded way for horizontal scalability.
                • A single FastPay committee member can shard its user accounts across multiple machines (all in the same trust boundary).
                • (1.) Sender connects to shard responsible for their account (how?)
                • (6.) When Receiver account lives on a separate shard, we need a single cross-shard txn that just says payment is finalized and Receiver needs balance increased.

                interfacing with primary system #

                • When we're in the primary/secondary system model, Committee runs a smart contract on the primary system for users:
                  1. to get money into/out of the FP secondary
                  2. obtain recent Committee info (pubkeys, network addrs)
                  3. read total funds in system
                  4. read last primary tx index (?)
                  5. read redeem log (?)

                user funding FP account (primary -> secondary) #

                1. User sends funding txn to FP Smart Contract on primary system (totally ordered).
                2. Committee members read all funding txns made to FP Smart Contract since last_primary_txn_index (so we don't accidentally replay or forget some funding txns).
                  1. For each funding txn: add money to corresponding user balance in FP system.

                user redeem FP account (secondary -> primary) #

                Sender user needs to execute a redeem operation in FP, which is similar to transfer op:

                1. Sender -> broadcast -> Committee: redeem balance request to address on primary system. This locks the account.
                2. Committee: verify statement (balance exists, sig checks, seqnum checks, etc...)
                3. Each Committee Member -> respond -> Sender: counter-signed transfer order certificate
                4. Sender: now have at least 2f+1 signed redeem order certificates.
                5. Sender -> broadcast -> Committee: aggregate SRO certificate
                6. Committee: observe and verify aggregate SRO certificate, update account balance, increment seqnum, etc.... Then unlock the account.
                7. Sender -> primary system -> FP Smart Contract: post aggregate SRO certificate
                8. FP Smart Contract: verify certificate and send some of FP Smart Contract balance to user address.
                • What if Sender only posts primary on-chain redeem txn w/o notifying Committee?
                  • FP account is locked until they notify.
                  • If they only notify subset of Committee, they still won't be able to spend in the future unless they notify Quorum majority (2f+1) members.
                • What if Sender posts primary on-chain redeem txn multiple times?
                  • Redeem log tracks every FP users' last redeemed seqnum to prevent double spend.
                  • Requires O(N) smart contract state where N is number of FP users : (

                implementation #

                Original: novifinancial/fastpay

                • Rust
                • Tokio + UDP
                  • UDP for min. latency
                  • All messages are idempotent so can always safely retry
                  • All messages designed to fit in one UDP frame

                issues / further work #

                • checkpointing?
                  • not clear how to accomplish without some kind of agreement.
                • reconfiguration / changing committee?
                  • not clear how to accomplish with just BFT Consistent Broadcast.
                  • probably need to use FP Smart Contract.
                • privacy?
                  • Is it possible to have sender/receiver privacy?
                  • Is it possible to have value privacy?
                  • See: zef ZK payments protocol (todo: link)
                \ No newline at end of file diff --git a/b l o c k c h a i n/index.html b/b l o c k c h a i n/index.html new file mode 100644 index 0000000000..722e0af631 --- /dev/null +++ b/b l o c k c h a i n/index.html @@ -0,0 +1,73 @@ +b l o c k c h a i n | philip's notes

                b l o c k c h a i n

                aptos →

                2022-04-06 · 1 min read

                bip158 - compact block filters →

                2022-09-16 · 1 min read

                btc utreexo - utxo accumulator →

                2022-09-16 · 2 min read

                fastpay →

                2022-04-06 · 4 min read

                oasis →

                2022-04-14 · 13 min read

                sui →

                2022-04-06 · 1 min read

                \ No newline at end of file diff --git a/b l o c k c h a i n/oasis/index.html b/b l o c k c h a i n/oasis/index.html new file mode 100644 index 0000000000..f3f473e0fe --- /dev/null +++ b/b l o c k c h a i n/oasis/index.html @@ -0,0 +1,456 @@ +oasis | philip's notes

                oasis

                2022-04-14 · 13 min read

                Site: https://oasisprotocol.org/

                Github: https://github.com/oasisprotocol/, oasis-sdk, oasis-core

                Lots of interesting/useful SGX-related stuff

                Oasis Run a Node Process (Setting up SGX)

                Run an Intel Attestation Service (IAS) proxy

                TODO: enclave rpc

                Core Oasis Runtime Model #

                Oasis Core Compute Nodes run user executables inside SGX enclaves.

                               ____________________
                +			  |  ________________  |
                +              | | Runtime Loader | |
                +			  | '----------------' |
                +			  |      Enclave	   |
                + ______       |  ________________  |
                +| Node |<------>|  Runtime Bin   | |
                +'______'      | '----------------' |
                +              '--------------------'
                +
                • The Rust oasis-core/runtime is the in-enclave runtime. This is "Runtime Loader" and "Runtime Bin" in the above diagram.
                • The Go oasis-core/go/runtime/host is responsible for provisioning enclaves and then communicating with them. This is part of "Node" in the above diagram.
                • The Node and Runtime communicate via
                  • Node <-> Unix Socket <-> Enclave Runner <-> Fortanix shared-memory FIFO queue <-> Enclave Runtime Binary

                oasis-core Runtime Loader #

                https://github.com/oasisprotocol/oasis-core/tree/master/runtime-loader

                Inputs:

                1. Runtime Filename
                2. Signature
                3. host-socket

                SgxsLoader

                1. Opens the SGX kernel devices for loading enclaves.
                2. Opens client connection to AESM service for the EINITTOKEN provider.
                3. Build enclave from file, SIGSTRUCT signature, and their custom adapter, which just routes connect syscalls from the enclave to a local Unix Domain Socket (UDS). This connection is the bidirectional arrow between Node and Runtime Bin in the above diagram.
                /// SGX runtime loader.
                +pub struct SgxsLoader;
                +
                +impl Loader for SgxsLoader {
                +    fn run(
                +        &self,
                +        filename: String,
                +        signature_filename: Option<&str>,
                +        host_socket: String,
                +    ) -> Fallible<()> {
                +        let sig = match signature_filename {
                +            Some(f) => f,
                +            None => {
                +                return Err(format_err!("signature file is required"));
                +            }
                +        };
                +
                +        // Spawn the SGX enclave.
                +        let mut device = IsgxDevice::new()?
                +            .einittoken_provider(AesmClient::new())
                +            .build();
                +
                +        let mut enclave_builder = EnclaveBuilder::new(filename.as_ref());
                +        enclave_builder.signature(sig)?;
                +        enclave_builder.usercall_extension(HostService::new(host_socket));
                +        let enclave = enclave_builder.build(&mut device)?;
                +
                +        enclave.run()
                +    }
                +}
                +

                oasis-core Host #

                // Manifest is a deserialized runtime bundle manifest.
                +type Manifest struct {
                +	// Name is the optional human readable runtime name.
                +	Name string `json:"name,omitempty"`
                +
                +	// ID is the runtime ID.
                +	ID common.Namespace `json:"id"`
                +
                +	// Version is the runtime version.
                +	Version version.Version `json:"version,omitempty"`
                +
                +	// Executable is the name of the runtime ELF executable file.
                +	Executable string `json:"executable"`
                +
                +	// SGX is the SGX specific manifest metadata if any.
                +	SGX *SGXMetadata `json:"sgx,omitempty"`
                +
                +	// Digests is the cryptographic digests of the bundle contents,
                +	// excluding the manifest.
                +	Digests map[string]hash.Hash `json:"digests"`
                +}
                +
                +// SGXMetadata is the SGX specific manifest metadata.
                +type SGXMetadata struct {
                +	// Executable is the name of the SGX enclave executable file.
                +	Executable string `json:"executable"`
                +
                +	// Signature is the name of the SGX enclave signature file.
                +	Signature string `json:"signature"`
                +}
                +
                +// Bundle is a runtime bundle instance.
                +type Bundle struct {
                +	Manifest *Manifest
                +	Data     map[string][]byte
                +}
                +
                +
                +// RuntimeBundle is a exploded runtime bundle ready for execution.
                +type RuntimeBundle struct {
                +	*bundle.Bundle
                +
                +	// Exeuctable is the path to the extracted ELF or TEE executable.
                +	Path string
                +}
                +
                +// Config contains common configuration for the provisioned runtime.
                +type Config struct {
                +	// Bundle is the runtime bundle.
                +	Bundle *RuntimeBundle
                +
                +	// Extra is an optional provisioner-specific configuration.
                +	Extra interface{}
                +
                +	// MessageHandler is the message handler for the Runtime Host Protocol messages.
                +	MessageHandler protocol.Handler
                +
                +	// LocalConfig is the node-local runtime configuration.
                +	LocalConfig map[string]interface{}
                +}
                +

                Runtime Host Protocol #

                This is the core API layer available for executables running inside an SGX enclave. Nodes communicate bidirectionalyl with the running user binary via a bespoke length-prefixed CBOR message stream protocol.

                Connection Lifecycle #
                • Uninitialized - Newly created connection. Must be initialized before use.
                • Inititalizing - Parties exchange version and feature info.
                • Ready - The versions and features are negotiated; however, we first need to perform remote attestation before running stuff in the enclave.
                • Closed - Connection is closed.
                Remote Attestation #

                Host attestation flow - oasis-core/go/runtime/host/sgx/sgx.go

                1. (Host) get the Quoting Enclave (QE)'s QuoteInfo from the AESM.
                2. (Host) get the Service Provider ID (SPID) from the Intel Attestation Services (IAS) cache.
                3. (Host) send a RuntimeCapabilityTEERakInitRequest { QuoteInfo.TargetInfo } request to the enclave.
                4. (Enclave) receive the request. initialize the Runtime Attestation Key (RAK) with the TargetInfo and then generate a new ephemeral RAK keypair (if one doesn't exist already).
                5. (Host) ask the IAS cache for the latest EPID revocation list (since Oasis uses EPID).
                6. (Host) send a RuntimeCapabilityTEERakReportRequest {} to the enclave.
                7. (Enclave) receive the request.
                  1. Sample a random nonce.
                  2. Generate report_body = H(RAK_pub). This binds the RAK pubkey to the report.
                  3. Set report_data = report_body || nonce.
                  4. Generate report = Report::for_target(target_info, report_data) from the enclave EREPORT instruction. See: Report (EREPORT).
                  5. Return the RAK public key, report, and nonce to the host.
                8. (Host) Request a Quote from the AESM using the report, SPID, and sigRL revocation list. For some reason the nonce is empty here? Not sure what the nonce here is for...
                9. (Host) Verify that the quote.Report contains a MRENCLAVE and MRSIGNER that we expect. This ensures we're talking to the right application enclave.
                10. (Host) Verify that the Quote.Report.Attributes.is_debug == config.is_debug. That way we don't trust debug enclaves in production and don't use production enclaves in testing.
                11. (Host) Ask the IAS to Verify Evidence { quote, nonce }. IAS will return an Attestation Verification Report (AVR) to us.
                12. (Host) send a RuntimeCapabilityTEERakAvrRequest { avr } request to the enclave, to pass it the AVR.
                  1. (Q: why does the enclave need to verify the AVR? shouldn't the client do this? I suppose we already checked that the enclave is the one we expect; in which case, we trust it to verify the AVR correctly.)
                13. (Enclave) receive the AVR in the request.
                  1. Expect the nonce in the AVR to match the one we generated above in step (7.1).
                  2. See Enclave Attestation Verification Report AVR handling.
                  3. Verify the current measured Report's enclave identity matches the enclave identity in the AVR.
                  4. Verify that the RAK pubkey matches the one in the AVR.report_data.
                  5. Verify that the nonce also matches the one in the AVR.report_data.
                  6. Ratchet our internal timestamp from the one we've observed.
                14. (Host) we've now fully verified the enclave. package up the RAK pubkey and AVR into a capabilityTEE.

                Other nodes can also verify the capabilityTEE by

                1. checking the AVR against the Intel Trust Root CA
                2. checking the MRENCLAVE/MRSIGNER are what we expect
                3. checking that the AVR.Quote.Report.ReportData includes the expected RAK pubkey
                type SPIDInfo struct {
                +	SPID               ias.SPID
                +	QuoteSignatureType ias.SignatureType
                +}
                +
                +// A deserialized AVRBundle from IAS.
                +type AttestationVerificationReport struct {
                +	ID                    string                `json:"id"`
                +	Timestamp             string                `json:"timestamp"`
                +	Version               int                   `json:"version"`
                +	ISVEnclaveQuoteStatus ISVEnclaveQuoteStatus `json:"isvEnclaveQuoteStatus"`
                +	ISVEnclaveQuoteBody   []byte                `json:"isvEnclaveQuoteBody"`
                +	RevocationReason      *CRLReason            `json:"revocationReason"`
                +	PSEManifestStatus     *PSEManifestStatus    `json:"pseManifestStatus"`
                +	PSEManifestHash       string                `json:"pseManifestHash"`
                +	PlatformInfoBlob      string                `json:"platformInfoBlob"`
                +	Nonce                 string                `json:"nonce"`
                +	EPIDPseudonym         []byte                `json:"epidPseudonym"`
                +	AdvisoryURL           string                `json:"advisoryURL"`
                +	AdvisoryIDs           []string              `json:"advisoryIDs"`
                +}
                +

                See: Quoting Enclave's QuoteInfo

                Enclave Attestation Verification Report (AVR) handling #

                https://github.com/oasisprotocol/oasis-core/blob/master/runtime/src/common/sgx/avr.rs

                // AVR signature validation constants.
                +const IAS_TRUST_ANCHOR_PEM: Vec<u8> = parse_x509_pem(
                +	r#"-----BEGIN CERTIFICATE-----
                +	MIIFSzCCA7OgAwIBAgIJANEHdl0yo7CUMA0GCSqGSIb3DQEBCwUAMH4xCzAJBgNV
                +	..
                +	DD+gT9sSpssq0ascmvH49MOgjt1yoysLtdCtJW/9FZpoOypaHx0R+mJTLwPXVMrv
                +	DaVzWh5aiEx+idkSGMnX
                +	-----END CERTIFICATE-----"#
                +).unwrap();
                +const PEM_CERTIFICATE_LABEL: &str = "CERTIFICATE";
                +const IAS_TS_FMT: &str = "%FT%T%.6f";
                +
                +/// Attestation verification report.
                +#[derive(Debug, Clone, cbor::Encode, cbor::Decode)]
                +pub struct AVR {
                +	// json blob
                +	//
                +	// { "isvEnclaveQuoteStatues": __
                +	// , "isvEnclaveQuoteBody": __
                +	// , "timestamp": __
                +	// , "nonce": __
                +    // }
                +    pub body: Vec<u8>,
                +    pub signature: Vec<u8>,
                +    pub certificate_chain: Vec<u8>,
                +}
                +
                +/// Enclave identity.
                +#[derive(Debug, Clone, Hash, Eq, PartialEq, cbor::Encode, cbor::Decode)]
                +pub struct EnclaveIdentity {
                +    pub mr_enclave: MrEnclave,
                +    pub mr_signer: MrSigner,
                +}
                +
                +/// Authenticated information obtained from validating an AVR.
                +#[derive(Debug, Clone)]
                +pub struct AuthenticatedAVR {
                +    pub report_data: Vec<u8>,
                +    // TODO: add other av report/quote body/report fields we want to give
                +	//       the consumer
                +    pub identity: EnclaveIdentity,
                +    pub timestamp: i64,
                +    pub nonce: String,
                +}
                +
                +/// Decoded quote body.
                +#[derive(Default, Debug)]
                +struct QuoteBody {
                +    version: u16,
                +    signature_type: u16,
                +    gid: u32,
                +    isv_svn_qe: u16,
                +    isv_svn_pce: u16,
                +    basename: [u8; 32],
                +    report_body: Report,
                +}
                +
                +impl AVR {
                +	pub fn verify(&self) -> Result<AuthenticatedAVR> {
                +		// 1. read configs if we should skip verification during
                +		//    fuzzing/testing.
                +		// 2. validate_avr_signature(self.cert_chain, self.body,
                +		//    self.sig. time::now())
                +		// 3. check if timestamp in AVR is too old
                +		// 4. verify ISV Enclave Quote Status == OK | SW_HARDENING_NEEDED
                +		//    if lax verification enabled, also allow some other errors
                +		// 5. base64 decode ISV Enclave Quote Body, then decode to `QuoteBody`
                +		// 6. Possibly allow debug enclaves if appropriate config.
                +		// 7. They appear to use the IAS timestamp as a semi-trusted source
                +		//    and ratchet their local clock forward if the IAS timestamp is
                +		//    farther ahead.
                +	}
                +}
                +
                +fn validate_avr_signature(
                +	cert_chain: &[u8],
                +	message: &[u8],
                +	signature: &[u8],
                +	unix_timestamp: u64,
                +) -> Result<()> {
                +	// * They note that they're doing some funky process that barely resembles
                +	//   the standard cert verification process.
                +	// * Don't do cert revocation checks.
                +	// * Intel Docs: The AVR is signed by the Report Signing Key using
                +	//   RSA-SHA256
                +	// * Intel Docs: The Report Signing pubkey is distributed via an x509
                +	//   cert. This cert is a leaf cert issued by the "Attestation Report
                +	//   Signing CA".
                +	// * A PEM-encoded cert chain is (1) the Report Signing Key Cert and (2)
                +	//   the Report Signing CA.
                +
                +	// 1. PEM decode the cert chain to DER. Check that each cert has the
                +	//    "CERTIFICATE" label.
                +	// 2. Check that only two certs were returned.
                +	// 3. Ensure the last cert is the Report Signing CA (IAS_TRUST_ANCHOR).
                +	// 4. Ensure the CA cert is not expired, is a CA cert, is self-signed.
                +	// 5. Parse the leaf cert, verify the usual stuff, check CA sig.
                +	// 6. Pull out the leaf pubkey. Verify `signature` on `message`. The
                +	//    pubkey should be an RSA PKCS1 DER-encoded pubkey. The sig should be
                +	//    RSA-SHA256 PKCS1v15.
                +}
                +
                Runtime Attestation Key (RAK) #

                RAK is the identity of the enclave, used to sign remote attestations.

                /// The runtime attestation key (RAK) represents the identity of the enclave
                +/// and can be used to sign remote attestations. Its purpose is to avoid
                +/// round trips to IAS for each verification as the verifier can instead
                +/// verify the RAK signature and the signature on the provided AVR which
                +/// RAK to the enclave.
                +pub struct RAK {
                +    inner: RwLock<Inner>,
                +}
                +
                +struct Inner {
                +    private_key: Option<PrivateKey>,
                +    avr: Option<Arc<avr::AVR>>,
                +    avr_timestamp: Option<i64>,
                +    #[allow(unused)]
                +    enclave_identity: Option<avr::EnclaveIdentity>,
                +    #[allow(unused)]
                +    target_info: Option<Targetinfo>,
                +    #[allow(unused)]
                +    nonce: Option<String>,
                +}
                +
                EGETKEY #

                https://github.com/oasisprotocol/oasis-core/blob/master/runtime/src/common/sgx/egetkey.rs

                • KMac: SHA3-256 Keccak MAC
                /// egetkey returns a 256 bit key suitable for sealing secrets to the
                +/// enclave in cold storage, derived from the results of the `EGETKEY`
                +/// instruction.  The `context` field is a domain separation tag.
                +///
                +/// Note: The key can also be used for other things (eg: as an X25519
                +/// private key).
                +pub fn egetkey(key_policy: Keypolicy, context: &[u8]) -> [u8; 32] {
                +    let mut k = [0u8; 32];
                +
                +    // Obtain the per-CPU package SGX sealing key, with the requested
                +    // policy.
                +    let master_secret = egetkey_impl(key_policy, context);
                +
                +    // Expand the 128 bit EGETKEY result into a 256 bit key, suitable
                +    // for use with our MRAE primitives.
                +    let mut kdf = KMac::new_kmac256(
                +		&master_secret,
                +		b"Ekiden Expand SGX Seal Key",
                +	);
                +    kdf.update(context);
                +    kdf.finalize(&mut k);
                +
                +    k
                +}
                +
                +/// The SGX impl
                +fn egetkey_impl(
                +	// MRSIGNER or MRENCLAVE
                +	key_policy: Keypolicy,
                +	// the domain separation value
                +	context: &[u8],
                +) -> [u8; 16] {
                +	// As we can see, using the Keyrequest::default() means oasis-core doesn't
                +	// bind the key
                +    let mut req = Keyrequest::default();
                +    req.keyname = Keyname::Seal as u16;
                +    req.keypolicy = key_policy;
                +
                +    let mut sha3 = Sha3::v256();
                +    sha3.update(context);
                +    let mut k = [0; 32];
                +    sha3.finalize(&mut k);
                +    req.keyid = k;
                +
                +    // Fucking sgx_isa::Attributes doesn't have a -> [u64;2].
                +	// SGX_FLAGS_INITTED | SGX_FLAGS_DEBUG | SGX_FLAGS_MODE64BIT
                +    req.attributemask[0] = 1 | 2 | 4;
                +	// SGX_XFRM_LEGACY
                +    req.attributemask[1] = 3;
                +
                +    match req.egetkey() {
                +        Err(e) => panic!("EGETKEY failed: {:?}", e),
                +        Ok(k) => k,
                +    }
                +}
                +
                Sealing #

                https://github.com/oasisprotocol/oasis-core/blob/master/runtime/src/common/sgx/seal.rs

                • DeoxysII - Some new symmetric key AEAD cipher that uses AESNI. Not sure why they use this and not just like AES-GCM or AES-SIV. Maybe safer nonce reuse protection?
                /// Query the enclave for sealing key material with the current context and
                +/// key policy, then generate a DeoxysII symmetric key using the key material.
                +fn new_d2(key_policy: Keypolicy, context: &[u8]) -> DeoxysII {
                +    let mut seal_key = egetkey(key_policy, context);
                +    let d2 = DeoxysII::new(&seal_key);
                +    seal_key.zeroize();
                +
                +    d2
                +}
                +
                +/// Seal a secret to the enclave.
                +pub fn seal(
                +	/// MRSIGNER or MRENCLAVE
                +	key_policy: Keypolicy,
                +	/// The domain separation value
                +	context: &[u8],
                +	/// The plaintext data we want to seal
                +	data: &[u8],
                +) -> Vec<u8> {
                +    let mut rng = OsRng {};
                +
                +    let mut nonce = [0u8; NONCE_SIZE];
                +    rng.fill(&mut nonce);
                +    let d2 = new_d2(key_policy, context);
                +    let mut ciphertext = d2.seal(&nonce, data.to_vec(), vec![]);
                +    ciphertext.extend_from_slice(&nonce);
                +
                +	// ciphertext = [ E_k[data] || MAC tag || nonce ]
                +    ciphertext
                +}
                +
                +
                +
                +/// Unseal a previously sealed secret to the enclave.
                +///
                +/// # Panics
                +///
                +/// All parsing and authentication errors of the ciphertext are fatal and
                +/// will result in a panic.
                +pub fn unseal(
                +	/// MRSIGNER or MRENCLAVE
                +	key_policy: Keypolicy,
                +	/// The domain separation value
                +	context: &[u8],
                +	/// Previously sealed data
                +	ciphertext: &[u8],
                +) -> Option<Vec<u8>> {
                +    let ct_len = ciphertext.len();
                +    if ct_len == 0 {
                +        return None;
                +    }
                +    assert!(
                +        ct_len >= TAG_SIZE + NONCE_SIZE,
                +        "ciphertext is corrupted, invalid size"
                +    );
                +    let ct_len = ct_len - NONCE_SIZE;
                +
                +    // split: ciphertext = [ E_k[data] || MAC tag || nonce ]
                +    let mut nonce = [0u8; NONCE_SIZE];
                +    nonce.copy_from_slice(&ciphertext[ct_len..]);
                +    let ciphertext = &ciphertext[..ct_len];
                +
                +    let d2 = new_d2(key_policy, context);
                +    let plaintext = d2
                +        .open(&nonce, ciphertext.to_vec(), vec![])
                +        .expect("ciphertext is corrupted");
                +
                +    Some(plaintext)
                +}
                +
                Key Manager Enclaves #

                They have some keymanager enclave, which appears to manually handle delegating access to individual enclave seal keys.

                • They use MRENCLAVE for each indiviual enclave (so the key is bound to the machine) then the enclave can register the actual key with the keymanager along with a policy to mediate access more granularly.
                • Their current policy format allows you to explicitly enumerate which enclaves (MRENCLAVE + MRSIGNER) may query private key material and which enclaves may replicate the "master secret" (something consensus related?).
                \ No newline at end of file diff --git a/b l o c k c h a i n/sui/index.html b/b l o c k c h a i n/sui/index.html new file mode 100644 index 0000000000..b1b0b8dee0 --- /dev/null +++ b/b l o c k c h a i n/sui/index.html @@ -0,0 +1,91 @@ +sui | philip's notes

                sui

                2022-04-06 · 1 min read

                Summary #

                sui = fastpay x { Move - accounts + fine-grained objects } : )

                \ No newline at end of file diff --git a/bootstrap/scss/bootstrap-grid.css b/bootstrap/scss/bootstrap-grid.css new file mode 100644 index 0000000000..8bba6824eb --- /dev/null +++ b/bootstrap/scss/bootstrap-grid.css @@ -0,0 +1,6 @@ +/*! + * Bootstrap Grid v5.0.0-beta3 (https://getbootstrap.com/) + * Copyright 2011-2021 The Bootstrap Authors + * Copyright 2011-2021 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) + */.container,.container-fluid,.container-xxl,.container-xl,.container-lg,.container-md,.container-sm{width:100%;padding-right:var(--bs-gutter-x, .75rem);padding-left:var(--bs-gutter-x, .75rem);margin-right:auto;margin-left:auto}@media (min-width: 576px){.container-sm,.container{max-width:540px}}@media (min-width: 768px){.container-md,.container-sm,.container{max-width:720px}}@media (min-width: 992px){.container-lg,.container-md,.container-sm,.container{max-width:960px}}@media (min-width: 1200px){.container-xl,.container-lg,.container-md,.container-sm,.container{max-width:1140px}}@media (min-width: 1400px){.container-xxl,.container-xl,.container-lg,.container-md,.container-sm,.container{max-width:1320px}}.row{--bs-gutter-x: 1.5rem;--bs-gutter-y: 0;display:flex;flex-wrap:wrap;margin-top:calc(var(--bs-gutter-y) * -1);margin-right:calc(var(--bs-gutter-x) / -2);margin-left:calc(var(--bs-gutter-x) / -2)}.row>*{box-sizing:border-box;flex-shrink:0;width:100%;max-width:100%;padding-right:calc(var(--bs-gutter-x) / 2);padding-left:calc(var(--bs-gutter-x) / 2);margin-top:var(--bs-gutter-y)}.col{flex:1 0 0%}.row-cols-auto>*{flex:0 0 auto;width:auto}.row-cols-1>*{flex:0 0 auto;width:100%}.row-cols-2>*{flex:0 0 auto;width:50%}.row-cols-3>*{flex:0 0 auto;width:33.33333%}.row-cols-4>*{flex:0 0 auto;width:25%}.row-cols-5>*{flex:0 0 auto;width:20%}.row-cols-6>*{flex:0 0 auto;width:16.66667%}.col-auto{flex:0 0 auto;width:auto}.col-1{flex:0 0 auto;width:8.33333%}.col-2{flex:0 0 auto;width:16.66667%}.col-3{flex:0 0 auto;width:25%}.col-4{flex:0 0 auto;width:33.33333%}.col-5{flex:0 0 auto;width:41.66667%}.col-6{flex:0 0 auto;width:50%}.col-7{flex:0 0 auto;width:58.33333%}.col-8{flex:0 0 auto;width:66.66667%}.col-9{flex:0 0 auto;width:75%}.col-10{flex:0 0 auto;width:83.33333%}.col-11{flex:0 0 auto;width:91.66667%}.col-12{flex:0 0 auto;width:100%}.offset-1{margin-left:8.33333%}.offset-2{margin-left:16.66667%}.offset-3{margin-left:25%}.offset-4{margin-left:33.33333%}.offset-5{margin-left:41.66667%}.offset-6{margin-left:50%}.offset-7{margin-left:58.33333%}.offset-8{margin-left:66.66667%}.offset-9{margin-left:75%}.offset-10{margin-left:83.33333%}.offset-11{margin-left:91.66667%}.g-0,.gx-0{--bs-gutter-x: 0}.g-0,.gy-0{--bs-gutter-y: 0}.g-1,.gx-1{--bs-gutter-x: .25rem}.g-1,.gy-1{--bs-gutter-y: .25rem}.g-2,.gx-2{--bs-gutter-x: .5rem}.g-2,.gy-2{--bs-gutter-y: .5rem}.g-3,.gx-3{--bs-gutter-x: 1rem}.g-3,.gy-3{--bs-gutter-y: 1rem}.g-4,.gx-4{--bs-gutter-x: 1.5rem}.g-4,.gy-4{--bs-gutter-y: 1.5rem}.g-5,.gx-5{--bs-gutter-x: 3rem}.g-5,.gy-5{--bs-gutter-y: 3rem}@media (min-width: 576px){.col-sm{flex:1 0 0%}.row-cols-sm-auto>*{flex:0 0 auto;width:auto}.row-cols-sm-1>*{flex:0 0 auto;width:100%}.row-cols-sm-2>*{flex:0 0 auto;width:50%}.row-cols-sm-3>*{flex:0 0 auto;width:33.33333%}.row-cols-sm-4>*{flex:0 0 auto;width:25%}.row-cols-sm-5>*{flex:0 0 auto;width:20%}.row-cols-sm-6>*{flex:0 0 auto;width:16.66667%}.col-sm-auto{flex:0 0 auto;width:auto}.col-sm-1{flex:0 0 auto;width:8.33333%}.col-sm-2{flex:0 0 auto;width:16.66667%}.col-sm-3{flex:0 0 auto;width:25%}.col-sm-4{flex:0 0 auto;width:33.33333%}.col-sm-5{flex:0 0 auto;width:41.66667%}.col-sm-6{flex:0 0 auto;width:50%}.col-sm-7{flex:0 0 auto;width:58.33333%}.col-sm-8{flex:0 0 auto;width:66.66667%}.col-sm-9{flex:0 0 auto;width:75%}.col-sm-10{flex:0 0 auto;width:83.33333%}.col-sm-11{flex:0 0 auto;width:91.66667%}.col-sm-12{flex:0 0 auto;width:100%}.offset-sm-0{margin-left:0}.offset-sm-1{margin-left:8.33333%}.offset-sm-2{margin-left:16.66667%}.offset-sm-3{margin-left:25%}.offset-sm-4{margin-left:33.33333%}.offset-sm-5{margin-left:41.66667%}.offset-sm-6{margin-left:50%}.offset-sm-7{margin-left:58.33333%}.offset-sm-8{margin-left:66.66667%}.offset-sm-9{margin-left:75%}.offset-sm-10{margin-left:83.33333%}.offset-sm-11{margin-left:91.66667%}.g-sm-0,.gx-sm-0{--bs-gutter-x: 0}.g-sm-0,.gy-sm-0{--bs-gutter-y: 0}.g-sm-1,.gx-sm-1{--bs-gutter-x: .25rem}.g-sm-1,.gy-sm-1{--bs-gutter-y: .25rem}.g-sm-2,.gx-sm-2{--bs-gutter-x: .5rem}.g-sm-2,.gy-sm-2{--bs-gutter-y: .5rem}.g-sm-3,.gx-sm-3{--bs-gutter-x: 1rem}.g-sm-3,.gy-sm-3{--bs-gutter-y: 1rem}.g-sm-4,.gx-sm-4{--bs-gutter-x: 1.5rem}.g-sm-4,.gy-sm-4{--bs-gutter-y: 1.5rem}.g-sm-5,.gx-sm-5{--bs-gutter-x: 3rem}.g-sm-5,.gy-sm-5{--bs-gutter-y: 3rem}}@media (min-width: 768px){.col-md{flex:1 0 0%}.row-cols-md-auto>*{flex:0 0 auto;width:auto}.row-cols-md-1>*{flex:0 0 auto;width:100%}.row-cols-md-2>*{flex:0 0 auto;width:50%}.row-cols-md-3>*{flex:0 0 auto;width:33.33333%}.row-cols-md-4>*{flex:0 0 auto;width:25%}.row-cols-md-5>*{flex:0 0 auto;width:20%}.row-cols-md-6>*{flex:0 0 auto;width:16.66667%}.col-md-auto{flex:0 0 auto;width:auto}.col-md-1{flex:0 0 auto;width:8.33333%}.col-md-2{flex:0 0 auto;width:16.66667%}.col-md-3{flex:0 0 auto;width:25%}.col-md-4{flex:0 0 auto;width:33.33333%}.col-md-5{flex:0 0 auto;width:41.66667%}.col-md-6{flex:0 0 auto;width:50%}.col-md-7{flex:0 0 auto;width:58.33333%}.col-md-8{flex:0 0 auto;width:66.66667%}.col-md-9{flex:0 0 auto;width:75%}.col-md-10{flex:0 0 auto;width:83.33333%}.col-md-11{flex:0 0 auto;width:91.66667%}.col-md-12{flex:0 0 auto;width:100%}.offset-md-0{margin-left:0}.offset-md-1{margin-left:8.33333%}.offset-md-2{margin-left:16.66667%}.offset-md-3{margin-left:25%}.offset-md-4{margin-left:33.33333%}.offset-md-5{margin-left:41.66667%}.offset-md-6{margin-left:50%}.offset-md-7{margin-left:58.33333%}.offset-md-8{margin-left:66.66667%}.offset-md-9{margin-left:75%}.offset-md-10{margin-left:83.33333%}.offset-md-11{margin-left:91.66667%}.g-md-0,.gx-md-0{--bs-gutter-x: 0}.g-md-0,.gy-md-0{--bs-gutter-y: 0}.g-md-1,.gx-md-1{--bs-gutter-x: .25rem}.g-md-1,.gy-md-1{--bs-gutter-y: .25rem}.g-md-2,.gx-md-2{--bs-gutter-x: .5rem}.g-md-2,.gy-md-2{--bs-gutter-y: .5rem}.g-md-3,.gx-md-3{--bs-gutter-x: 1rem}.g-md-3,.gy-md-3{--bs-gutter-y: 1rem}.g-md-4,.gx-md-4{--bs-gutter-x: 1.5rem}.g-md-4,.gy-md-4{--bs-gutter-y: 1.5rem}.g-md-5,.gx-md-5{--bs-gutter-x: 3rem}.g-md-5,.gy-md-5{--bs-gutter-y: 3rem}}@media (min-width: 992px){.col-lg{flex:1 0 0%}.row-cols-lg-auto>*{flex:0 0 auto;width:auto}.row-cols-lg-1>*{flex:0 0 auto;width:100%}.row-cols-lg-2>*{flex:0 0 auto;width:50%}.row-cols-lg-3>*{flex:0 0 auto;width:33.33333%}.row-cols-lg-4>*{flex:0 0 auto;width:25%}.row-cols-lg-5>*{flex:0 0 auto;width:20%}.row-cols-lg-6>*{flex:0 0 auto;width:16.66667%}.col-lg-auto{flex:0 0 auto;width:auto}.col-lg-1{flex:0 0 auto;width:8.33333%}.col-lg-2{flex:0 0 auto;width:16.66667%}.col-lg-3{flex:0 0 auto;width:25%}.col-lg-4{flex:0 0 auto;width:33.33333%}.col-lg-5{flex:0 0 auto;width:41.66667%}.col-lg-6{flex:0 0 auto;width:50%}.col-lg-7{flex:0 0 auto;width:58.33333%}.col-lg-8{flex:0 0 auto;width:66.66667%}.col-lg-9{flex:0 0 auto;width:75%}.col-lg-10{flex:0 0 auto;width:83.33333%}.col-lg-11{flex:0 0 auto;width:91.66667%}.col-lg-12{flex:0 0 auto;width:100%}.offset-lg-0{margin-left:0}.offset-lg-1{margin-left:8.33333%}.offset-lg-2{margin-left:16.66667%}.offset-lg-3{margin-left:25%}.offset-lg-4{margin-left:33.33333%}.offset-lg-5{margin-left:41.66667%}.offset-lg-6{margin-left:50%}.offset-lg-7{margin-left:58.33333%}.offset-lg-8{margin-left:66.66667%}.offset-lg-9{margin-left:75%}.offset-lg-10{margin-left:83.33333%}.offset-lg-11{margin-left:91.66667%}.g-lg-0,.gx-lg-0{--bs-gutter-x: 0}.g-lg-0,.gy-lg-0{--bs-gutter-y: 0}.g-lg-1,.gx-lg-1{--bs-gutter-x: .25rem}.g-lg-1,.gy-lg-1{--bs-gutter-y: .25rem}.g-lg-2,.gx-lg-2{--bs-gutter-x: .5rem}.g-lg-2,.gy-lg-2{--bs-gutter-y: .5rem}.g-lg-3,.gx-lg-3{--bs-gutter-x: 1rem}.g-lg-3,.gy-lg-3{--bs-gutter-y: 1rem}.g-lg-4,.gx-lg-4{--bs-gutter-x: 1.5rem}.g-lg-4,.gy-lg-4{--bs-gutter-y: 1.5rem}.g-lg-5,.gx-lg-5{--bs-gutter-x: 3rem}.g-lg-5,.gy-lg-5{--bs-gutter-y: 3rem}}@media (min-width: 1200px){.col-xl{flex:1 0 0%}.row-cols-xl-auto>*{flex:0 0 auto;width:auto}.row-cols-xl-1>*{flex:0 0 auto;width:100%}.row-cols-xl-2>*{flex:0 0 auto;width:50%}.row-cols-xl-3>*{flex:0 0 auto;width:33.33333%}.row-cols-xl-4>*{flex:0 0 auto;width:25%}.row-cols-xl-5>*{flex:0 0 auto;width:20%}.row-cols-xl-6>*{flex:0 0 auto;width:16.66667%}.col-xl-auto{flex:0 0 auto;width:auto}.col-xl-1{flex:0 0 auto;width:8.33333%}.col-xl-2{flex:0 0 auto;width:16.66667%}.col-xl-3{flex:0 0 auto;width:25%}.col-xl-4{flex:0 0 auto;width:33.33333%}.col-xl-5{flex:0 0 auto;width:41.66667%}.col-xl-6{flex:0 0 auto;width:50%}.col-xl-7{flex:0 0 auto;width:58.33333%}.col-xl-8{flex:0 0 auto;width:66.66667%}.col-xl-9{flex:0 0 auto;width:75%}.col-xl-10{flex:0 0 auto;width:83.33333%}.col-xl-11{flex:0 0 auto;width:91.66667%}.col-xl-12{flex:0 0 auto;width:100%}.offset-xl-0{margin-left:0}.offset-xl-1{margin-left:8.33333%}.offset-xl-2{margin-left:16.66667%}.offset-xl-3{margin-left:25%}.offset-xl-4{margin-left:33.33333%}.offset-xl-5{margin-left:41.66667%}.offset-xl-6{margin-left:50%}.offset-xl-7{margin-left:58.33333%}.offset-xl-8{margin-left:66.66667%}.offset-xl-9{margin-left:75%}.offset-xl-10{margin-left:83.33333%}.offset-xl-11{margin-left:91.66667%}.g-xl-0,.gx-xl-0{--bs-gutter-x: 0}.g-xl-0,.gy-xl-0{--bs-gutter-y: 0}.g-xl-1,.gx-xl-1{--bs-gutter-x: .25rem}.g-xl-1,.gy-xl-1{--bs-gutter-y: .25rem}.g-xl-2,.gx-xl-2{--bs-gutter-x: .5rem}.g-xl-2,.gy-xl-2{--bs-gutter-y: .5rem}.g-xl-3,.gx-xl-3{--bs-gutter-x: 1rem}.g-xl-3,.gy-xl-3{--bs-gutter-y: 1rem}.g-xl-4,.gx-xl-4{--bs-gutter-x: 1.5rem}.g-xl-4,.gy-xl-4{--bs-gutter-y: 1.5rem}.g-xl-5,.gx-xl-5{--bs-gutter-x: 3rem}.g-xl-5,.gy-xl-5{--bs-gutter-y: 3rem}}@media (min-width: 1400px){.col-xxl{flex:1 0 0%}.row-cols-xxl-auto>*{flex:0 0 auto;width:auto}.row-cols-xxl-1>*{flex:0 0 auto;width:100%}.row-cols-xxl-2>*{flex:0 0 auto;width:50%}.row-cols-xxl-3>*{flex:0 0 auto;width:33.33333%}.row-cols-xxl-4>*{flex:0 0 auto;width:25%}.row-cols-xxl-5>*{flex:0 0 auto;width:20%}.row-cols-xxl-6>*{flex:0 0 auto;width:16.66667%}.col-xxl-auto{flex:0 0 auto;width:auto}.col-xxl-1{flex:0 0 auto;width:8.33333%}.col-xxl-2{flex:0 0 auto;width:16.66667%}.col-xxl-3{flex:0 0 auto;width:25%}.col-xxl-4{flex:0 0 auto;width:33.33333%}.col-xxl-5{flex:0 0 auto;width:41.66667%}.col-xxl-6{flex:0 0 auto;width:50%}.col-xxl-7{flex:0 0 auto;width:58.33333%}.col-xxl-8{flex:0 0 auto;width:66.66667%}.col-xxl-9{flex:0 0 auto;width:75%}.col-xxl-10{flex:0 0 auto;width:83.33333%}.col-xxl-11{flex:0 0 auto;width:91.66667%}.col-xxl-12{flex:0 0 auto;width:100%}.offset-xxl-0{margin-left:0}.offset-xxl-1{margin-left:8.33333%}.offset-xxl-2{margin-left:16.66667%}.offset-xxl-3{margin-left:25%}.offset-xxl-4{margin-left:33.33333%}.offset-xxl-5{margin-left:41.66667%}.offset-xxl-6{margin-left:50%}.offset-xxl-7{margin-left:58.33333%}.offset-xxl-8{margin-left:66.66667%}.offset-xxl-9{margin-left:75%}.offset-xxl-10{margin-left:83.33333%}.offset-xxl-11{margin-left:91.66667%}.g-xxl-0,.gx-xxl-0{--bs-gutter-x: 0}.g-xxl-0,.gy-xxl-0{--bs-gutter-y: 0}.g-xxl-1,.gx-xxl-1{--bs-gutter-x: .25rem}.g-xxl-1,.gy-xxl-1{--bs-gutter-y: .25rem}.g-xxl-2,.gx-xxl-2{--bs-gutter-x: .5rem}.g-xxl-2,.gy-xxl-2{--bs-gutter-y: .5rem}.g-xxl-3,.gx-xxl-3{--bs-gutter-x: 1rem}.g-xxl-3,.gy-xxl-3{--bs-gutter-y: 1rem}.g-xxl-4,.gx-xxl-4{--bs-gutter-x: 1.5rem}.g-xxl-4,.gy-xxl-4{--bs-gutter-y: 1.5rem}.g-xxl-5,.gx-xxl-5{--bs-gutter-x: 3rem}.g-xxl-5,.gy-xxl-5{--bs-gutter-y: 3rem}}.d-inline{display:inline !important}.d-inline-block{display:inline-block !important}.d-block{display:block !important}.d-grid{display:grid !important}.d-table{display:table !important}.d-table-row{display:table-row !important}.d-table-cell{display:table-cell !important}.d-flex{display:flex !important}.d-inline-flex{display:inline-flex !important}.d-none{display:none !important}.flex-fill{flex:1 1 auto !important}.flex-row{flex-direction:row !important}.flex-column{flex-direction:column !important}.flex-row-reverse{flex-direction:row-reverse !important}.flex-column-reverse{flex-direction:column-reverse !important}.flex-grow-0{flex-grow:0 !important}.flex-grow-1{flex-grow:1 !important}.flex-shrink-0{flex-shrink:0 !important}.flex-shrink-1{flex-shrink:1 !important}.flex-wrap{flex-wrap:wrap !important}.flex-nowrap{flex-wrap:nowrap !important}.flex-wrap-reverse{flex-wrap:wrap-reverse !important}.justify-content-start{justify-content:flex-start !important}.justify-content-end{justify-content:flex-end !important}.justify-content-center{justify-content:center !important}.justify-content-between{justify-content:space-between !important}.justify-content-around{justify-content:space-around !important}.justify-content-evenly{justify-content:space-evenly !important}.align-items-start{align-items:flex-start !important}.align-items-end{align-items:flex-end !important}.align-items-center{align-items:center !important}.align-items-baseline{align-items:baseline !important}.align-items-stretch{align-items:stretch !important}.align-content-start{align-content:flex-start !important}.align-content-end{align-content:flex-end !important}.align-content-center{align-content:center !important}.align-content-between{align-content:space-between !important}.align-content-around{align-content:space-around !important}.align-content-stretch{align-content:stretch !important}.align-self-auto{align-self:auto !important}.align-self-start{align-self:flex-start !important}.align-self-end{align-self:flex-end !important}.align-self-center{align-self:center !important}.align-self-baseline{align-self:baseline !important}.align-self-stretch{align-self:stretch !important}.order-first{order:-1 !important}.order-0{order:0 !important}.order-1{order:1 !important}.order-2{order:2 !important}.order-3{order:3 !important}.order-4{order:4 !important}.order-5{order:5 !important}.order-last{order:6 !important}.m-0{margin:0 !important}.m-1{margin:.25rem !important}.m-2{margin:.5rem !important}.m-3{margin:1rem !important}.m-4{margin:1.5rem !important}.m-5{margin:3rem !important}.m-auto{margin:auto !important}.mx-0{margin-right:0 !important;margin-left:0 !important}.mx-1{margin-right:.25rem !important;margin-left:.25rem !important}.mx-2{margin-right:.5rem !important;margin-left:.5rem !important}.mx-3{margin-right:1rem !important;margin-left:1rem !important}.mx-4{margin-right:1.5rem !important;margin-left:1.5rem !important}.mx-5{margin-right:3rem !important;margin-left:3rem !important}.mx-auto{margin-right:auto !important;margin-left:auto !important}.my-0{margin-top:0 !important;margin-bottom:0 !important}.my-1{margin-top:.25rem !important;margin-bottom:.25rem !important}.my-2{margin-top:.5rem !important;margin-bottom:.5rem !important}.my-3{margin-top:1rem !important;margin-bottom:1rem !important}.my-4{margin-top:1.5rem !important;margin-bottom:1.5rem !important}.my-5{margin-top:3rem !important;margin-bottom:3rem !important}.my-auto{margin-top:auto !important;margin-bottom:auto !important}.mt-0{margin-top:0 !important}.mt-1{margin-top:.25rem !important}.mt-2{margin-top:.5rem !important}.mt-3{margin-top:1rem !important}.mt-4{margin-top:1.5rem !important}.mt-5{margin-top:3rem !important}.mt-auto{margin-top:auto !important}.me-0{margin-right:0 !important}.me-1{margin-right:.25rem !important}.me-2{margin-right:.5rem !important}.me-3{margin-right:1rem !important}.me-4{margin-right:1.5rem !important}.me-5{margin-right:3rem !important}.me-auto{margin-right:auto !important}.mb-0{margin-bottom:0 !important}.mb-1{margin-bottom:.25rem !important}.mb-2{margin-bottom:.5rem !important}.mb-3{margin-bottom:1rem !important}.mb-4{margin-bottom:1.5rem !important}.mb-5{margin-bottom:3rem !important}.mb-auto{margin-bottom:auto !important}.ms-0{margin-left:0 !important}.ms-1{margin-left:.25rem !important}.ms-2{margin-left:.5rem !important}.ms-3{margin-left:1rem !important}.ms-4{margin-left:1.5rem !important}.ms-5{margin-left:3rem !important}.ms-auto{margin-left:auto !important}.p-0{padding:0 !important}.p-1{padding:.25rem !important}.p-2{padding:.5rem !important}.p-3{padding:1rem !important}.p-4{padding:1.5rem !important}.p-5{padding:3rem !important}.px-0{padding-right:0 !important;padding-left:0 !important}.px-1{padding-right:.25rem !important;padding-left:.25rem !important}.px-2{padding-right:.5rem !important;padding-left:.5rem !important}.px-3{padding-right:1rem !important;padding-left:1rem !important}.px-4{padding-right:1.5rem !important;padding-left:1.5rem !important}.px-5{padding-right:3rem !important;padding-left:3rem !important}.py-0{padding-top:0 !important;padding-bottom:0 !important}.py-1{padding-top:.25rem !important;padding-bottom:.25rem !important}.py-2{padding-top:.5rem !important;padding-bottom:.5rem !important}.py-3{padding-top:1rem !important;padding-bottom:1rem !important}.py-4{padding-top:1.5rem !important;padding-bottom:1.5rem !important}.py-5{padding-top:3rem !important;padding-bottom:3rem !important}.pt-0{padding-top:0 !important}.pt-1{padding-top:.25rem !important}.pt-2{padding-top:.5rem !important}.pt-3{padding-top:1rem !important}.pt-4{padding-top:1.5rem !important}.pt-5{padding-top:3rem !important}.pe-0{padding-right:0 !important}.pe-1{padding-right:.25rem !important}.pe-2{padding-right:.5rem !important}.pe-3{padding-right:1rem !important}.pe-4{padding-right:1.5rem !important}.pe-5{padding-right:3rem !important}.pb-0{padding-bottom:0 !important}.pb-1{padding-bottom:.25rem !important}.pb-2{padding-bottom:.5rem !important}.pb-3{padding-bottom:1rem !important}.pb-4{padding-bottom:1.5rem !important}.pb-5{padding-bottom:3rem !important}.ps-0{padding-left:0 !important}.ps-1{padding-left:.25rem !important}.ps-2{padding-left:.5rem !important}.ps-3{padding-left:1rem !important}.ps-4{padding-left:1.5rem !important}.ps-5{padding-left:3rem !important}@media (min-width: 576px){.d-sm-inline{display:inline !important}.d-sm-inline-block{display:inline-block !important}.d-sm-block{display:block !important}.d-sm-grid{display:grid !important}.d-sm-table{display:table !important}.d-sm-table-row{display:table-row !important}.d-sm-table-cell{display:table-cell !important}.d-sm-flex{display:flex !important}.d-sm-inline-flex{display:inline-flex !important}.d-sm-none{display:none !important}.flex-sm-fill{flex:1 1 auto !important}.flex-sm-row{flex-direction:row !important}.flex-sm-column{flex-direction:column !important}.flex-sm-row-reverse{flex-direction:row-reverse !important}.flex-sm-column-reverse{flex-direction:column-reverse !important}.flex-sm-grow-0{flex-grow:0 !important}.flex-sm-grow-1{flex-grow:1 !important}.flex-sm-shrink-0{flex-shrink:0 !important}.flex-sm-shrink-1{flex-shrink:1 !important}.flex-sm-wrap{flex-wrap:wrap !important}.flex-sm-nowrap{flex-wrap:nowrap !important}.flex-sm-wrap-reverse{flex-wrap:wrap-reverse !important}.justify-content-sm-start{justify-content:flex-start !important}.justify-content-sm-end{justify-content:flex-end !important}.justify-content-sm-center{justify-content:center !important}.justify-content-sm-between{justify-content:space-between !important}.justify-content-sm-around{justify-content:space-around !important}.justify-content-sm-evenly{justify-content:space-evenly !important}.align-items-sm-start{align-items:flex-start !important}.align-items-sm-end{align-items:flex-end !important}.align-items-sm-center{align-items:center !important}.align-items-sm-baseline{align-items:baseline !important}.align-items-sm-stretch{align-items:stretch !important}.align-content-sm-start{align-content:flex-start !important}.align-content-sm-end{align-content:flex-end !important}.align-content-sm-center{align-content:center !important}.align-content-sm-between{align-content:space-between !important}.align-content-sm-around{align-content:space-around !important}.align-content-sm-stretch{align-content:stretch !important}.align-self-sm-auto{align-self:auto !important}.align-self-sm-start{align-self:flex-start !important}.align-self-sm-end{align-self:flex-end !important}.align-self-sm-center{align-self:center !important}.align-self-sm-baseline{align-self:baseline !important}.align-self-sm-stretch{align-self:stretch !important}.order-sm-first{order:-1 !important}.order-sm-0{order:0 !important}.order-sm-1{order:1 !important}.order-sm-2{order:2 !important}.order-sm-3{order:3 !important}.order-sm-4{order:4 !important}.order-sm-5{order:5 !important}.order-sm-last{order:6 !important}.m-sm-0{margin:0 !important}.m-sm-1{margin:.25rem !important}.m-sm-2{margin:.5rem !important}.m-sm-3{margin:1rem !important}.m-sm-4{margin:1.5rem !important}.m-sm-5{margin:3rem !important}.m-sm-auto{margin:auto !important}.mx-sm-0{margin-right:0 !important;margin-left:0 !important}.mx-sm-1{margin-right:.25rem !important;margin-left:.25rem !important}.mx-sm-2{margin-right:.5rem !important;margin-left:.5rem !important}.mx-sm-3{margin-right:1rem !important;margin-left:1rem !important}.mx-sm-4{margin-right:1.5rem !important;margin-left:1.5rem !important}.mx-sm-5{margin-right:3rem !important;margin-left:3rem !important}.mx-sm-auto{margin-right:auto !important;margin-left:auto !important}.my-sm-0{margin-top:0 !important;margin-bottom:0 !important}.my-sm-1{margin-top:.25rem !important;margin-bottom:.25rem !important}.my-sm-2{margin-top:.5rem !important;margin-bottom:.5rem !important}.my-sm-3{margin-top:1rem !important;margin-bottom:1rem !important}.my-sm-4{margin-top:1.5rem !important;margin-bottom:1.5rem !important}.my-sm-5{margin-top:3rem !important;margin-bottom:3rem !important}.my-sm-auto{margin-top:auto !important;margin-bottom:auto !important}.mt-sm-0{margin-top:0 !important}.mt-sm-1{margin-top:.25rem !important}.mt-sm-2{margin-top:.5rem !important}.mt-sm-3{margin-top:1rem !important}.mt-sm-4{margin-top:1.5rem !important}.mt-sm-5{margin-top:3rem !important}.mt-sm-auto{margin-top:auto !important}.me-sm-0{margin-right:0 !important}.me-sm-1{margin-right:.25rem !important}.me-sm-2{margin-right:.5rem !important}.me-sm-3{margin-right:1rem !important}.me-sm-4{margin-right:1.5rem !important}.me-sm-5{margin-right:3rem !important}.me-sm-auto{margin-right:auto !important}.mb-sm-0{margin-bottom:0 !important}.mb-sm-1{margin-bottom:.25rem !important}.mb-sm-2{margin-bottom:.5rem !important}.mb-sm-3{margin-bottom:1rem !important}.mb-sm-4{margin-bottom:1.5rem !important}.mb-sm-5{margin-bottom:3rem !important}.mb-sm-auto{margin-bottom:auto !important}.ms-sm-0{margin-left:0 !important}.ms-sm-1{margin-left:.25rem !important}.ms-sm-2{margin-left:.5rem !important}.ms-sm-3{margin-left:1rem !important}.ms-sm-4{margin-left:1.5rem !important}.ms-sm-5{margin-left:3rem !important}.ms-sm-auto{margin-left:auto !important}.p-sm-0{padding:0 !important}.p-sm-1{padding:.25rem !important}.p-sm-2{padding:.5rem !important}.p-sm-3{padding:1rem !important}.p-sm-4{padding:1.5rem !important}.p-sm-5{padding:3rem !important}.px-sm-0{padding-right:0 !important;padding-left:0 !important}.px-sm-1{padding-right:.25rem !important;padding-left:.25rem !important}.px-sm-2{padding-right:.5rem !important;padding-left:.5rem !important}.px-sm-3{padding-right:1rem !important;padding-left:1rem !important}.px-sm-4{padding-right:1.5rem !important;padding-left:1.5rem !important}.px-sm-5{padding-right:3rem !important;padding-left:3rem !important}.py-sm-0{padding-top:0 !important;padding-bottom:0 !important}.py-sm-1{padding-top:.25rem !important;padding-bottom:.25rem !important}.py-sm-2{padding-top:.5rem !important;padding-bottom:.5rem !important}.py-sm-3{padding-top:1rem !important;padding-bottom:1rem !important}.py-sm-4{padding-top:1.5rem !important;padding-bottom:1.5rem !important}.py-sm-5{padding-top:3rem !important;padding-bottom:3rem !important}.pt-sm-0{padding-top:0 !important}.pt-sm-1{padding-top:.25rem !important}.pt-sm-2{padding-top:.5rem !important}.pt-sm-3{padding-top:1rem !important}.pt-sm-4{padding-top:1.5rem !important}.pt-sm-5{padding-top:3rem !important}.pe-sm-0{padding-right:0 !important}.pe-sm-1{padding-right:.25rem !important}.pe-sm-2{padding-right:.5rem !important}.pe-sm-3{padding-right:1rem !important}.pe-sm-4{padding-right:1.5rem !important}.pe-sm-5{padding-right:3rem !important}.pb-sm-0{padding-bottom:0 !important}.pb-sm-1{padding-bottom:.25rem !important}.pb-sm-2{padding-bottom:.5rem !important}.pb-sm-3{padding-bottom:1rem !important}.pb-sm-4{padding-bottom:1.5rem !important}.pb-sm-5{padding-bottom:3rem !important}.ps-sm-0{padding-left:0 !important}.ps-sm-1{padding-left:.25rem !important}.ps-sm-2{padding-left:.5rem !important}.ps-sm-3{padding-left:1rem !important}.ps-sm-4{padding-left:1.5rem !important}.ps-sm-5{padding-left:3rem !important}}@media (min-width: 768px){.d-md-inline{display:inline !important}.d-md-inline-block{display:inline-block !important}.d-md-block{display:block !important}.d-md-grid{display:grid !important}.d-md-table{display:table !important}.d-md-table-row{display:table-row !important}.d-md-table-cell{display:table-cell !important}.d-md-flex{display:flex !important}.d-md-inline-flex{display:inline-flex !important}.d-md-none{display:none !important}.flex-md-fill{flex:1 1 auto !important}.flex-md-row{flex-direction:row !important}.flex-md-column{flex-direction:column !important}.flex-md-row-reverse{flex-direction:row-reverse !important}.flex-md-column-reverse{flex-direction:column-reverse !important}.flex-md-grow-0{flex-grow:0 !important}.flex-md-grow-1{flex-grow:1 !important}.flex-md-shrink-0{flex-shrink:0 !important}.flex-md-shrink-1{flex-shrink:1 !important}.flex-md-wrap{flex-wrap:wrap !important}.flex-md-nowrap{flex-wrap:nowrap !important}.flex-md-wrap-reverse{flex-wrap:wrap-reverse !important}.justify-content-md-start{justify-content:flex-start !important}.justify-content-md-end{justify-content:flex-end !important}.justify-content-md-center{justify-content:center !important}.justify-content-md-between{justify-content:space-between !important}.justify-content-md-around{justify-content:space-around !important}.justify-content-md-evenly{justify-content:space-evenly !important}.align-items-md-start{align-items:flex-start !important}.align-items-md-end{align-items:flex-end !important}.align-items-md-center{align-items:center !important}.align-items-md-baseline{align-items:baseline !important}.align-items-md-stretch{align-items:stretch !important}.align-content-md-start{align-content:flex-start !important}.align-content-md-end{align-content:flex-end !important}.align-content-md-center{align-content:center !important}.align-content-md-between{align-content:space-between !important}.align-content-md-around{align-content:space-around !important}.align-content-md-stretch{align-content:stretch !important}.align-self-md-auto{align-self:auto !important}.align-self-md-start{align-self:flex-start !important}.align-self-md-end{align-self:flex-end !important}.align-self-md-center{align-self:center !important}.align-self-md-baseline{align-self:baseline !important}.align-self-md-stretch{align-self:stretch !important}.order-md-first{order:-1 !important}.order-md-0{order:0 !important}.order-md-1{order:1 !important}.order-md-2{order:2 !important}.order-md-3{order:3 !important}.order-md-4{order:4 !important}.order-md-5{order:5 !important}.order-md-last{order:6 !important}.m-md-0{margin:0 !important}.m-md-1{margin:.25rem !important}.m-md-2{margin:.5rem !important}.m-md-3{margin:1rem !important}.m-md-4{margin:1.5rem !important}.m-md-5{margin:3rem !important}.m-md-auto{margin:auto !important}.mx-md-0{margin-right:0 !important;margin-left:0 !important}.mx-md-1{margin-right:.25rem !important;margin-left:.25rem !important}.mx-md-2{margin-right:.5rem !important;margin-left:.5rem !important}.mx-md-3{margin-right:1rem !important;margin-left:1rem !important}.mx-md-4{margin-right:1.5rem !important;margin-left:1.5rem !important}.mx-md-5{margin-right:3rem !important;margin-left:3rem !important}.mx-md-auto{margin-right:auto !important;margin-left:auto !important}.my-md-0{margin-top:0 !important;margin-bottom:0 !important}.my-md-1{margin-top:.25rem !important;margin-bottom:.25rem !important}.my-md-2{margin-top:.5rem !important;margin-bottom:.5rem !important}.my-md-3{margin-top:1rem !important;margin-bottom:1rem !important}.my-md-4{margin-top:1.5rem !important;margin-bottom:1.5rem !important}.my-md-5{margin-top:3rem !important;margin-bottom:3rem !important}.my-md-auto{margin-top:auto !important;margin-bottom:auto !important}.mt-md-0{margin-top:0 !important}.mt-md-1{margin-top:.25rem !important}.mt-md-2{margin-top:.5rem !important}.mt-md-3{margin-top:1rem !important}.mt-md-4{margin-top:1.5rem !important}.mt-md-5{margin-top:3rem !important}.mt-md-auto{margin-top:auto !important}.me-md-0{margin-right:0 !important}.me-md-1{margin-right:.25rem !important}.me-md-2{margin-right:.5rem !important}.me-md-3{margin-right:1rem !important}.me-md-4{margin-right:1.5rem !important}.me-md-5{margin-right:3rem !important}.me-md-auto{margin-right:auto !important}.mb-md-0{margin-bottom:0 !important}.mb-md-1{margin-bottom:.25rem !important}.mb-md-2{margin-bottom:.5rem !important}.mb-md-3{margin-bottom:1rem !important}.mb-md-4{margin-bottom:1.5rem !important}.mb-md-5{margin-bottom:3rem !important}.mb-md-auto{margin-bottom:auto !important}.ms-md-0{margin-left:0 !important}.ms-md-1{margin-left:.25rem !important}.ms-md-2{margin-left:.5rem !important}.ms-md-3{margin-left:1rem !important}.ms-md-4{margin-left:1.5rem !important}.ms-md-5{margin-left:3rem !important}.ms-md-auto{margin-left:auto !important}.p-md-0{padding:0 !important}.p-md-1{padding:.25rem !important}.p-md-2{padding:.5rem !important}.p-md-3{padding:1rem !important}.p-md-4{padding:1.5rem !important}.p-md-5{padding:3rem !important}.px-md-0{padding-right:0 !important;padding-left:0 !important}.px-md-1{padding-right:.25rem !important;padding-left:.25rem !important}.px-md-2{padding-right:.5rem !important;padding-left:.5rem !important}.px-md-3{padding-right:1rem !important;padding-left:1rem !important}.px-md-4{padding-right:1.5rem !important;padding-left:1.5rem !important}.px-md-5{padding-right:3rem !important;padding-left:3rem !important}.py-md-0{padding-top:0 !important;padding-bottom:0 !important}.py-md-1{padding-top:.25rem !important;padding-bottom:.25rem !important}.py-md-2{padding-top:.5rem !important;padding-bottom:.5rem !important}.py-md-3{padding-top:1rem !important;padding-bottom:1rem !important}.py-md-4{padding-top:1.5rem !important;padding-bottom:1.5rem !important}.py-md-5{padding-top:3rem !important;padding-bottom:3rem !important}.pt-md-0{padding-top:0 !important}.pt-md-1{padding-top:.25rem !important}.pt-md-2{padding-top:.5rem !important}.pt-md-3{padding-top:1rem !important}.pt-md-4{padding-top:1.5rem !important}.pt-md-5{padding-top:3rem !important}.pe-md-0{padding-right:0 !important}.pe-md-1{padding-right:.25rem !important}.pe-md-2{padding-right:.5rem !important}.pe-md-3{padding-right:1rem !important}.pe-md-4{padding-right:1.5rem !important}.pe-md-5{padding-right:3rem !important}.pb-md-0{padding-bottom:0 !important}.pb-md-1{padding-bottom:.25rem !important}.pb-md-2{padding-bottom:.5rem !important}.pb-md-3{padding-bottom:1rem !important}.pb-md-4{padding-bottom:1.5rem !important}.pb-md-5{padding-bottom:3rem !important}.ps-md-0{padding-left:0 !important}.ps-md-1{padding-left:.25rem !important}.ps-md-2{padding-left:.5rem !important}.ps-md-3{padding-left:1rem !important}.ps-md-4{padding-left:1.5rem !important}.ps-md-5{padding-left:3rem !important}}@media (min-width: 992px){.d-lg-inline{display:inline !important}.d-lg-inline-block{display:inline-block !important}.d-lg-block{display:block !important}.d-lg-grid{display:grid !important}.d-lg-table{display:table !important}.d-lg-table-row{display:table-row !important}.d-lg-table-cell{display:table-cell !important}.d-lg-flex{display:flex !important}.d-lg-inline-flex{display:inline-flex !important}.d-lg-none{display:none !important}.flex-lg-fill{flex:1 1 auto !important}.flex-lg-row{flex-direction:row !important}.flex-lg-column{flex-direction:column !important}.flex-lg-row-reverse{flex-direction:row-reverse !important}.flex-lg-column-reverse{flex-direction:column-reverse !important}.flex-lg-grow-0{flex-grow:0 !important}.flex-lg-grow-1{flex-grow:1 !important}.flex-lg-shrink-0{flex-shrink:0 !important}.flex-lg-shrink-1{flex-shrink:1 !important}.flex-lg-wrap{flex-wrap:wrap !important}.flex-lg-nowrap{flex-wrap:nowrap !important}.flex-lg-wrap-reverse{flex-wrap:wrap-reverse !important}.justify-content-lg-start{justify-content:flex-start !important}.justify-content-lg-end{justify-content:flex-end !important}.justify-content-lg-center{justify-content:center !important}.justify-content-lg-between{justify-content:space-between !important}.justify-content-lg-around{justify-content:space-around !important}.justify-content-lg-evenly{justify-content:space-evenly !important}.align-items-lg-start{align-items:flex-start !important}.align-items-lg-end{align-items:flex-end !important}.align-items-lg-center{align-items:center !important}.align-items-lg-baseline{align-items:baseline !important}.align-items-lg-stretch{align-items:stretch !important}.align-content-lg-start{align-content:flex-start !important}.align-content-lg-end{align-content:flex-end !important}.align-content-lg-center{align-content:center !important}.align-content-lg-between{align-content:space-between !important}.align-content-lg-around{align-content:space-around !important}.align-content-lg-stretch{align-content:stretch !important}.align-self-lg-auto{align-self:auto !important}.align-self-lg-start{align-self:flex-start !important}.align-self-lg-end{align-self:flex-end !important}.align-self-lg-center{align-self:center !important}.align-self-lg-baseline{align-self:baseline !important}.align-self-lg-stretch{align-self:stretch !important}.order-lg-first{order:-1 !important}.order-lg-0{order:0 !important}.order-lg-1{order:1 !important}.order-lg-2{order:2 !important}.order-lg-3{order:3 !important}.order-lg-4{order:4 !important}.order-lg-5{order:5 !important}.order-lg-last{order:6 !important}.m-lg-0{margin:0 !important}.m-lg-1{margin:.25rem !important}.m-lg-2{margin:.5rem !important}.m-lg-3{margin:1rem !important}.m-lg-4{margin:1.5rem !important}.m-lg-5{margin:3rem !important}.m-lg-auto{margin:auto !important}.mx-lg-0{margin-right:0 !important;margin-left:0 !important}.mx-lg-1{margin-right:.25rem !important;margin-left:.25rem !important}.mx-lg-2{margin-right:.5rem !important;margin-left:.5rem !important}.mx-lg-3{margin-right:1rem !important;margin-left:1rem !important}.mx-lg-4{margin-right:1.5rem !important;margin-left:1.5rem !important}.mx-lg-5{margin-right:3rem !important;margin-left:3rem !important}.mx-lg-auto{margin-right:auto !important;margin-left:auto !important}.my-lg-0{margin-top:0 !important;margin-bottom:0 !important}.my-lg-1{margin-top:.25rem !important;margin-bottom:.25rem !important}.my-lg-2{margin-top:.5rem !important;margin-bottom:.5rem !important}.my-lg-3{margin-top:1rem !important;margin-bottom:1rem !important}.my-lg-4{margin-top:1.5rem !important;margin-bottom:1.5rem !important}.my-lg-5{margin-top:3rem !important;margin-bottom:3rem !important}.my-lg-auto{margin-top:auto !important;margin-bottom:auto !important}.mt-lg-0{margin-top:0 !important}.mt-lg-1{margin-top:.25rem !important}.mt-lg-2{margin-top:.5rem !important}.mt-lg-3{margin-top:1rem !important}.mt-lg-4{margin-top:1.5rem !important}.mt-lg-5{margin-top:3rem !important}.mt-lg-auto{margin-top:auto !important}.me-lg-0{margin-right:0 !important}.me-lg-1{margin-right:.25rem !important}.me-lg-2{margin-right:.5rem !important}.me-lg-3{margin-right:1rem !important}.me-lg-4{margin-right:1.5rem !important}.me-lg-5{margin-right:3rem !important}.me-lg-auto{margin-right:auto !important}.mb-lg-0{margin-bottom:0 !important}.mb-lg-1{margin-bottom:.25rem !important}.mb-lg-2{margin-bottom:.5rem !important}.mb-lg-3{margin-bottom:1rem !important}.mb-lg-4{margin-bottom:1.5rem !important}.mb-lg-5{margin-bottom:3rem !important}.mb-lg-auto{margin-bottom:auto !important}.ms-lg-0{margin-left:0 !important}.ms-lg-1{margin-left:.25rem !important}.ms-lg-2{margin-left:.5rem !important}.ms-lg-3{margin-left:1rem !important}.ms-lg-4{margin-left:1.5rem !important}.ms-lg-5{margin-left:3rem !important}.ms-lg-auto{margin-left:auto !important}.p-lg-0{padding:0 !important}.p-lg-1{padding:.25rem !important}.p-lg-2{padding:.5rem !important}.p-lg-3{padding:1rem !important}.p-lg-4{padding:1.5rem !important}.p-lg-5{padding:3rem !important}.px-lg-0{padding-right:0 !important;padding-left:0 !important}.px-lg-1{padding-right:.25rem !important;padding-left:.25rem !important}.px-lg-2{padding-right:.5rem !important;padding-left:.5rem !important}.px-lg-3{padding-right:1rem !important;padding-left:1rem !important}.px-lg-4{padding-right:1.5rem !important;padding-left:1.5rem !important}.px-lg-5{padding-right:3rem !important;padding-left:3rem !important}.py-lg-0{padding-top:0 !important;padding-bottom:0 !important}.py-lg-1{padding-top:.25rem !important;padding-bottom:.25rem !important}.py-lg-2{padding-top:.5rem !important;padding-bottom:.5rem !important}.py-lg-3{padding-top:1rem !important;padding-bottom:1rem !important}.py-lg-4{padding-top:1.5rem !important;padding-bottom:1.5rem !important}.py-lg-5{padding-top:3rem !important;padding-bottom:3rem !important}.pt-lg-0{padding-top:0 !important}.pt-lg-1{padding-top:.25rem !important}.pt-lg-2{padding-top:.5rem !important}.pt-lg-3{padding-top:1rem !important}.pt-lg-4{padding-top:1.5rem !important}.pt-lg-5{padding-top:3rem !important}.pe-lg-0{padding-right:0 !important}.pe-lg-1{padding-right:.25rem !important}.pe-lg-2{padding-right:.5rem !important}.pe-lg-3{padding-right:1rem !important}.pe-lg-4{padding-right:1.5rem !important}.pe-lg-5{padding-right:3rem !important}.pb-lg-0{padding-bottom:0 !important}.pb-lg-1{padding-bottom:.25rem !important}.pb-lg-2{padding-bottom:.5rem !important}.pb-lg-3{padding-bottom:1rem !important}.pb-lg-4{padding-bottom:1.5rem !important}.pb-lg-5{padding-bottom:3rem !important}.ps-lg-0{padding-left:0 !important}.ps-lg-1{padding-left:.25rem !important}.ps-lg-2{padding-left:.5rem !important}.ps-lg-3{padding-left:1rem !important}.ps-lg-4{padding-left:1.5rem !important}.ps-lg-5{padding-left:3rem !important}}@media (min-width: 1200px){.d-xl-inline{display:inline !important}.d-xl-inline-block{display:inline-block !important}.d-xl-block{display:block !important}.d-xl-grid{display:grid !important}.d-xl-table{display:table !important}.d-xl-table-row{display:table-row !important}.d-xl-table-cell{display:table-cell !important}.d-xl-flex{display:flex !important}.d-xl-inline-flex{display:inline-flex !important}.d-xl-none{display:none !important}.flex-xl-fill{flex:1 1 auto !important}.flex-xl-row{flex-direction:row !important}.flex-xl-column{flex-direction:column !important}.flex-xl-row-reverse{flex-direction:row-reverse !important}.flex-xl-column-reverse{flex-direction:column-reverse !important}.flex-xl-grow-0{flex-grow:0 !important}.flex-xl-grow-1{flex-grow:1 !important}.flex-xl-shrink-0{flex-shrink:0 !important}.flex-xl-shrink-1{flex-shrink:1 !important}.flex-xl-wrap{flex-wrap:wrap !important}.flex-xl-nowrap{flex-wrap:nowrap !important}.flex-xl-wrap-reverse{flex-wrap:wrap-reverse !important}.justify-content-xl-start{justify-content:flex-start !important}.justify-content-xl-end{justify-content:flex-end !important}.justify-content-xl-center{justify-content:center !important}.justify-content-xl-between{justify-content:space-between !important}.justify-content-xl-around{justify-content:space-around !important}.justify-content-xl-evenly{justify-content:space-evenly !important}.align-items-xl-start{align-items:flex-start !important}.align-items-xl-end{align-items:flex-end !important}.align-items-xl-center{align-items:center !important}.align-items-xl-baseline{align-items:baseline !important}.align-items-xl-stretch{align-items:stretch !important}.align-content-xl-start{align-content:flex-start !important}.align-content-xl-end{align-content:flex-end !important}.align-content-xl-center{align-content:center !important}.align-content-xl-between{align-content:space-between !important}.align-content-xl-around{align-content:space-around !important}.align-content-xl-stretch{align-content:stretch !important}.align-self-xl-auto{align-self:auto !important}.align-self-xl-start{align-self:flex-start !important}.align-self-xl-end{align-self:flex-end !important}.align-self-xl-center{align-self:center !important}.align-self-xl-baseline{align-self:baseline !important}.align-self-xl-stretch{align-self:stretch !important}.order-xl-first{order:-1 !important}.order-xl-0{order:0 !important}.order-xl-1{order:1 !important}.order-xl-2{order:2 !important}.order-xl-3{order:3 !important}.order-xl-4{order:4 !important}.order-xl-5{order:5 !important}.order-xl-last{order:6 !important}.m-xl-0{margin:0 !important}.m-xl-1{margin:.25rem !important}.m-xl-2{margin:.5rem !important}.m-xl-3{margin:1rem !important}.m-xl-4{margin:1.5rem !important}.m-xl-5{margin:3rem !important}.m-xl-auto{margin:auto !important}.mx-xl-0{margin-right:0 !important;margin-left:0 !important}.mx-xl-1{margin-right:.25rem !important;margin-left:.25rem !important}.mx-xl-2{margin-right:.5rem !important;margin-left:.5rem !important}.mx-xl-3{margin-right:1rem !important;margin-left:1rem !important}.mx-xl-4{margin-right:1.5rem !important;margin-left:1.5rem !important}.mx-xl-5{margin-right:3rem !important;margin-left:3rem !important}.mx-xl-auto{margin-right:auto !important;margin-left:auto !important}.my-xl-0{margin-top:0 !important;margin-bottom:0 !important}.my-xl-1{margin-top:.25rem !important;margin-bottom:.25rem !important}.my-xl-2{margin-top:.5rem !important;margin-bottom:.5rem !important}.my-xl-3{margin-top:1rem !important;margin-bottom:1rem !important}.my-xl-4{margin-top:1.5rem !important;margin-bottom:1.5rem !important}.my-xl-5{margin-top:3rem !important;margin-bottom:3rem !important}.my-xl-auto{margin-top:auto !important;margin-bottom:auto !important}.mt-xl-0{margin-top:0 !important}.mt-xl-1{margin-top:.25rem !important}.mt-xl-2{margin-top:.5rem !important}.mt-xl-3{margin-top:1rem !important}.mt-xl-4{margin-top:1.5rem !important}.mt-xl-5{margin-top:3rem !important}.mt-xl-auto{margin-top:auto !important}.me-xl-0{margin-right:0 !important}.me-xl-1{margin-right:.25rem !important}.me-xl-2{margin-right:.5rem !important}.me-xl-3{margin-right:1rem !important}.me-xl-4{margin-right:1.5rem !important}.me-xl-5{margin-right:3rem !important}.me-xl-auto{margin-right:auto !important}.mb-xl-0{margin-bottom:0 !important}.mb-xl-1{margin-bottom:.25rem !important}.mb-xl-2{margin-bottom:.5rem !important}.mb-xl-3{margin-bottom:1rem !important}.mb-xl-4{margin-bottom:1.5rem !important}.mb-xl-5{margin-bottom:3rem !important}.mb-xl-auto{margin-bottom:auto !important}.ms-xl-0{margin-left:0 !important}.ms-xl-1{margin-left:.25rem !important}.ms-xl-2{margin-left:.5rem !important}.ms-xl-3{margin-left:1rem !important}.ms-xl-4{margin-left:1.5rem !important}.ms-xl-5{margin-left:3rem !important}.ms-xl-auto{margin-left:auto !important}.p-xl-0{padding:0 !important}.p-xl-1{padding:.25rem !important}.p-xl-2{padding:.5rem !important}.p-xl-3{padding:1rem !important}.p-xl-4{padding:1.5rem !important}.p-xl-5{padding:3rem !important}.px-xl-0{padding-right:0 !important;padding-left:0 !important}.px-xl-1{padding-right:.25rem !important;padding-left:.25rem !important}.px-xl-2{padding-right:.5rem !important;padding-left:.5rem !important}.px-xl-3{padding-right:1rem !important;padding-left:1rem !important}.px-xl-4{padding-right:1.5rem !important;padding-left:1.5rem !important}.px-xl-5{padding-right:3rem !important;padding-left:3rem !important}.py-xl-0{padding-top:0 !important;padding-bottom:0 !important}.py-xl-1{padding-top:.25rem !important;padding-bottom:.25rem !important}.py-xl-2{padding-top:.5rem !important;padding-bottom:.5rem !important}.py-xl-3{padding-top:1rem !important;padding-bottom:1rem !important}.py-xl-4{padding-top:1.5rem !important;padding-bottom:1.5rem !important}.py-xl-5{padding-top:3rem !important;padding-bottom:3rem !important}.pt-xl-0{padding-top:0 !important}.pt-xl-1{padding-top:.25rem !important}.pt-xl-2{padding-top:.5rem !important}.pt-xl-3{padding-top:1rem !important}.pt-xl-4{padding-top:1.5rem !important}.pt-xl-5{padding-top:3rem !important}.pe-xl-0{padding-right:0 !important}.pe-xl-1{padding-right:.25rem !important}.pe-xl-2{padding-right:.5rem !important}.pe-xl-3{padding-right:1rem !important}.pe-xl-4{padding-right:1.5rem !important}.pe-xl-5{padding-right:3rem !important}.pb-xl-0{padding-bottom:0 !important}.pb-xl-1{padding-bottom:.25rem !important}.pb-xl-2{padding-bottom:.5rem !important}.pb-xl-3{padding-bottom:1rem !important}.pb-xl-4{padding-bottom:1.5rem !important}.pb-xl-5{padding-bottom:3rem !important}.ps-xl-0{padding-left:0 !important}.ps-xl-1{padding-left:.25rem !important}.ps-xl-2{padding-left:.5rem !important}.ps-xl-3{padding-left:1rem !important}.ps-xl-4{padding-left:1.5rem !important}.ps-xl-5{padding-left:3rem !important}}@media (min-width: 1400px){.d-xxl-inline{display:inline !important}.d-xxl-inline-block{display:inline-block !important}.d-xxl-block{display:block !important}.d-xxl-grid{display:grid !important}.d-xxl-table{display:table !important}.d-xxl-table-row{display:table-row !important}.d-xxl-table-cell{display:table-cell !important}.d-xxl-flex{display:flex !important}.d-xxl-inline-flex{display:inline-flex !important}.d-xxl-none{display:none !important}.flex-xxl-fill{flex:1 1 auto !important}.flex-xxl-row{flex-direction:row !important}.flex-xxl-column{flex-direction:column !important}.flex-xxl-row-reverse{flex-direction:row-reverse !important}.flex-xxl-column-reverse{flex-direction:column-reverse !important}.flex-xxl-grow-0{flex-grow:0 !important}.flex-xxl-grow-1{flex-grow:1 !important}.flex-xxl-shrink-0{flex-shrink:0 !important}.flex-xxl-shrink-1{flex-shrink:1 !important}.flex-xxl-wrap{flex-wrap:wrap !important}.flex-xxl-nowrap{flex-wrap:nowrap !important}.flex-xxl-wrap-reverse{flex-wrap:wrap-reverse !important}.justify-content-xxl-start{justify-content:flex-start !important}.justify-content-xxl-end{justify-content:flex-end !important}.justify-content-xxl-center{justify-content:center !important}.justify-content-xxl-between{justify-content:space-between !important}.justify-content-xxl-around{justify-content:space-around !important}.justify-content-xxl-evenly{justify-content:space-evenly !important}.align-items-xxl-start{align-items:flex-start !important}.align-items-xxl-end{align-items:flex-end !important}.align-items-xxl-center{align-items:center !important}.align-items-xxl-baseline{align-items:baseline !important}.align-items-xxl-stretch{align-items:stretch !important}.align-content-xxl-start{align-content:flex-start !important}.align-content-xxl-end{align-content:flex-end !important}.align-content-xxl-center{align-content:center !important}.align-content-xxl-between{align-content:space-between !important}.align-content-xxl-around{align-content:space-around !important}.align-content-xxl-stretch{align-content:stretch !important}.align-self-xxl-auto{align-self:auto !important}.align-self-xxl-start{align-self:flex-start !important}.align-self-xxl-end{align-self:flex-end !important}.align-self-xxl-center{align-self:center !important}.align-self-xxl-baseline{align-self:baseline !important}.align-self-xxl-stretch{align-self:stretch !important}.order-xxl-first{order:-1 !important}.order-xxl-0{order:0 !important}.order-xxl-1{order:1 !important}.order-xxl-2{order:2 !important}.order-xxl-3{order:3 !important}.order-xxl-4{order:4 !important}.order-xxl-5{order:5 !important}.order-xxl-last{order:6 !important}.m-xxl-0{margin:0 !important}.m-xxl-1{margin:.25rem !important}.m-xxl-2{margin:.5rem !important}.m-xxl-3{margin:1rem !important}.m-xxl-4{margin:1.5rem !important}.m-xxl-5{margin:3rem !important}.m-xxl-auto{margin:auto !important}.mx-xxl-0{margin-right:0 !important;margin-left:0 !important}.mx-xxl-1{margin-right:.25rem !important;margin-left:.25rem !important}.mx-xxl-2{margin-right:.5rem !important;margin-left:.5rem !important}.mx-xxl-3{margin-right:1rem !important;margin-left:1rem !important}.mx-xxl-4{margin-right:1.5rem !important;margin-left:1.5rem !important}.mx-xxl-5{margin-right:3rem !important;margin-left:3rem !important}.mx-xxl-auto{margin-right:auto !important;margin-left:auto !important}.my-xxl-0{margin-top:0 !important;margin-bottom:0 !important}.my-xxl-1{margin-top:.25rem !important;margin-bottom:.25rem !important}.my-xxl-2{margin-top:.5rem !important;margin-bottom:.5rem !important}.my-xxl-3{margin-top:1rem !important;margin-bottom:1rem !important}.my-xxl-4{margin-top:1.5rem !important;margin-bottom:1.5rem !important}.my-xxl-5{margin-top:3rem !important;margin-bottom:3rem !important}.my-xxl-auto{margin-top:auto !important;margin-bottom:auto !important}.mt-xxl-0{margin-top:0 !important}.mt-xxl-1{margin-top:.25rem !important}.mt-xxl-2{margin-top:.5rem !important}.mt-xxl-3{margin-top:1rem !important}.mt-xxl-4{margin-top:1.5rem !important}.mt-xxl-5{margin-top:3rem !important}.mt-xxl-auto{margin-top:auto !important}.me-xxl-0{margin-right:0 !important}.me-xxl-1{margin-right:.25rem !important}.me-xxl-2{margin-right:.5rem !important}.me-xxl-3{margin-right:1rem !important}.me-xxl-4{margin-right:1.5rem !important}.me-xxl-5{margin-right:3rem !important}.me-xxl-auto{margin-right:auto !important}.mb-xxl-0{margin-bottom:0 !important}.mb-xxl-1{margin-bottom:.25rem !important}.mb-xxl-2{margin-bottom:.5rem !important}.mb-xxl-3{margin-bottom:1rem !important}.mb-xxl-4{margin-bottom:1.5rem !important}.mb-xxl-5{margin-bottom:3rem !important}.mb-xxl-auto{margin-bottom:auto !important}.ms-xxl-0{margin-left:0 !important}.ms-xxl-1{margin-left:.25rem !important}.ms-xxl-2{margin-left:.5rem !important}.ms-xxl-3{margin-left:1rem !important}.ms-xxl-4{margin-left:1.5rem !important}.ms-xxl-5{margin-left:3rem !important}.ms-xxl-auto{margin-left:auto !important}.p-xxl-0{padding:0 !important}.p-xxl-1{padding:.25rem !important}.p-xxl-2{padding:.5rem !important}.p-xxl-3{padding:1rem !important}.p-xxl-4{padding:1.5rem !important}.p-xxl-5{padding:3rem !important}.px-xxl-0{padding-right:0 !important;padding-left:0 !important}.px-xxl-1{padding-right:.25rem !important;padding-left:.25rem !important}.px-xxl-2{padding-right:.5rem !important;padding-left:.5rem !important}.px-xxl-3{padding-right:1rem !important;padding-left:1rem !important}.px-xxl-4{padding-right:1.5rem !important;padding-left:1.5rem !important}.px-xxl-5{padding-right:3rem !important;padding-left:3rem !important}.py-xxl-0{padding-top:0 !important;padding-bottom:0 !important}.py-xxl-1{padding-top:.25rem !important;padding-bottom:.25rem !important}.py-xxl-2{padding-top:.5rem !important;padding-bottom:.5rem !important}.py-xxl-3{padding-top:1rem !important;padding-bottom:1rem !important}.py-xxl-4{padding-top:1.5rem !important;padding-bottom:1.5rem !important}.py-xxl-5{padding-top:3rem !important;padding-bottom:3rem !important}.pt-xxl-0{padding-top:0 !important}.pt-xxl-1{padding-top:.25rem !important}.pt-xxl-2{padding-top:.5rem !important}.pt-xxl-3{padding-top:1rem !important}.pt-xxl-4{padding-top:1.5rem !important}.pt-xxl-5{padding-top:3rem !important}.pe-xxl-0{padding-right:0 !important}.pe-xxl-1{padding-right:.25rem !important}.pe-xxl-2{padding-right:.5rem !important}.pe-xxl-3{padding-right:1rem !important}.pe-xxl-4{padding-right:1.5rem !important}.pe-xxl-5{padding-right:3rem !important}.pb-xxl-0{padding-bottom:0 !important}.pb-xxl-1{padding-bottom:.25rem !important}.pb-xxl-2{padding-bottom:.5rem !important}.pb-xxl-3{padding-bottom:1rem !important}.pb-xxl-4{padding-bottom:1.5rem !important}.pb-xxl-5{padding-bottom:3rem !important}.ps-xxl-0{padding-left:0 !important}.ps-xxl-1{padding-left:.25rem !important}.ps-xxl-2{padding-left:.5rem !important}.ps-xxl-3{padding-left:1rem !important}.ps-xxl-4{padding-left:1.5rem !important}.ps-xxl-5{padding-left:3rem !important}}@media print{.d-print-inline{display:inline !important}.d-print-inline-block{display:inline-block !important}.d-print-block{display:block !important}.d-print-grid{display:grid !important}.d-print-table{display:table !important}.d-print-table-row{display:table-row !important}.d-print-table-cell{display:table-cell !important}.d-print-flex{display:flex !important}.d-print-inline-flex{display:inline-flex !important}.d-print-none{display:none !important}} diff --git a/bootstrap/scss/bootstrap-reboot.css b/bootstrap/scss/bootstrap-reboot.css new file mode 100644 index 0000000000..545cc0a557 --- /dev/null +++ b/bootstrap/scss/bootstrap-reboot.css @@ -0,0 +1,7 @@ +/*! + * Bootstrap Reboot v5.0.0-beta3 (https://getbootstrap.com/) + * Copyright 2011-2021 The Bootstrap Authors + * Copyright 2011-2021 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) + * Forked from Normalize.css, licensed MIT (https://github.com/necolas/normalize.css/blob/master/LICENSE.md) + */*,*::before,*::after{box-sizing:border-box}@media (prefers-reduced-motion: no-preference){:root{scroll-behavior:smooth}}body{margin:0;font-family:system-ui,-apple-system,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans","Liberation Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-size:1rem;font-weight:400;line-height:1.5;color:#212529;background-color:#fff;-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:rgba(0,0,0,0)}hr{margin:1rem 0;color:inherit;background-color:currentColor;border:0;opacity:.25}hr:not([size]){height:1px}h6,h5,h4,h3,h2,h1{margin-top:0;margin-bottom:.5rem;font-weight:500;line-height:1.2}h1{font-size:calc(1.375rem + 1.5vw)}@media (min-width: 1200px){h1{font-size:2.5rem}}h2{font-size:calc(1.325rem + .9vw)}@media (min-width: 1200px){h2{font-size:2rem}}h3{font-size:calc(1.3rem + .6vw)}@media (min-width: 1200px){h3{font-size:1.75rem}}h4{font-size:calc(1.275rem + .3vw)}@media (min-width: 1200px){h4{font-size:1.5rem}}h5{font-size:1.25rem}h6{font-size:1rem}p{margin-top:0;margin-bottom:1rem}abbr[title],abbr[data-bs-original-title]{text-decoration:underline dotted;cursor:help;text-decoration-skip-ink:none}address{margin-bottom:1rem;font-style:normal;line-height:inherit}ol,ul{padding-left:2rem}ol,ul,dl{margin-top:0;margin-bottom:1rem}ol ol,ul ul,ol ul,ul ol{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}b,strong{font-weight:bolder}small{font-size:.875em}mark{padding:.2em;background-color:#fcf8e3}sub,sup{position:relative;font-size:.75em;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:#0d6efd;text-decoration:underline}a:hover{color:#0a58ca}a:not([href]):not([class]),a:not([href]):not([class]):hover{color:inherit;text-decoration:none}pre,code,kbd,samp{font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;font-size:1em;direction:ltr /* rtl:ignore */;unicode-bidi:bidi-override}pre{display:block;margin-top:0;margin-bottom:1rem;overflow:auto;font-size:.875em}pre code{font-size:inherit;color:inherit;word-break:normal}code{font-size:.875em;color:#d63384;word-wrap:break-word}a>code{color:inherit}kbd{padding:.2rem .4rem;font-size:.875em;color:#fff;background-color:#212529;border-radius:.2rem}kbd kbd{padding:0;font-size:1em;font-weight:700}figure{margin:0 0 1rem}img,svg{vertical-align:middle}table{caption-side:bottom;border-collapse:collapse}caption{padding-top:.5rem;padding-bottom:.5rem;color:#6c757d;text-align:left}th{text-align:inherit;text-align:-webkit-match-parent}thead,tbody,tfoot,tr,td,th{border-color:inherit;border-style:solid;border-width:0}label{display:inline-block}button{border-radius:0}button:focus:not(:focus-visible){outline:0}input,button,select,optgroup,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,select{text-transform:none}[role="button"]{cursor:pointer}select{word-wrap:normal}select:disabled{opacity:1}[list]::-webkit-calendar-picker-indicator{display:none}button,[type="button"],[type="reset"],[type="submit"]{-webkit-appearance:button}button:not(:disabled),[type="button"]:not(:disabled),[type="reset"]:not(:disabled),[type="submit"]:not(:disabled){cursor:pointer}::-moz-focus-inner{padding:0;border-style:none}textarea{resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{float:left;width:100%;padding:0;margin-bottom:.5rem;font-size:calc(1.275rem + .3vw);line-height:inherit}@media (min-width: 1200px){legend{font-size:1.5rem}}legend+*{clear:left}::-webkit-datetime-edit-fields-wrapper,::-webkit-datetime-edit-text,::-webkit-datetime-edit-minute,::-webkit-datetime-edit-hour-field,::-webkit-datetime-edit-day-field,::-webkit-datetime-edit-month-field,::-webkit-datetime-edit-year-field{padding:0}::-webkit-inner-spin-button{height:auto}[type="search"]{outline-offset:-2px;-webkit-appearance:textfield}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-color-swatch-wrapper{padding:0}::file-selector-button{font:inherit}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}output{display:inline-block}iframe{border:0}summary{display:list-item;cursor:pointer}progress{vertical-align:baseline}[hidden]{display:none !important} diff --git a/bootstrap/scss/bootstrap-utilities.css b/bootstrap/scss/bootstrap-utilities.css new file mode 100644 index 0000000000..4f03a15152 --- /dev/null +++ b/bootstrap/scss/bootstrap-utilities.css @@ -0,0 +1,6 @@ +/*! + * Bootstrap Utilities v5.0.0-beta3 (https://getbootstrap.com/) + * Copyright 2011-2021 The Bootstrap Authors + * Copyright 2011-2021 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) + */.clearfix::after{display:block;clear:both;content:""}.link-primary{color:#0d6efd}.link-primary:hover,.link-primary:focus{color:#0a58ca}.link-secondary{color:#6c757d}.link-secondary:hover,.link-secondary:focus{color:#565e64}.link-success{color:#198754}.link-success:hover,.link-success:focus{color:#146c43}.link-info{color:#0dcaf0}.link-info:hover,.link-info:focus{color:#3dd5f3}.link-warning{color:#ffc107}.link-warning:hover,.link-warning:focus{color:#ffcd39}.link-danger{color:#dc3545}.link-danger:hover,.link-danger:focus{color:#b02a37}.link-light{color:#f8f9fa}.link-light:hover,.link-light:focus{color:#f9fafb}.link-dark{color:#212529}.link-dark:hover,.link-dark:focus{color:#1a1e21}.ratio{position:relative;width:100%}.ratio::before{display:block;padding-top:var(--bs-aspect-ratio);content:""}.ratio>*{position:absolute;top:0;left:0;width:100%;height:100%}.ratio-1x1{--bs-aspect-ratio: 100%}.ratio-4x3{--bs-aspect-ratio: calc(3 / 4 * 100%)}.ratio-16x9{--bs-aspect-ratio: calc(9 / 16 * 100%)}.ratio-21x9{--bs-aspect-ratio: calc(9 / 21 * 100%)}.fixed-top{position:fixed;top:0;right:0;left:0;z-index:1030}.fixed-bottom{position:fixed;right:0;bottom:0;left:0;z-index:1030}.sticky-top{position:sticky;top:0;z-index:1020}@media (min-width: 576px){.sticky-sm-top{position:sticky;top:0;z-index:1020}}@media (min-width: 768px){.sticky-md-top{position:sticky;top:0;z-index:1020}}@media (min-width: 992px){.sticky-lg-top{position:sticky;top:0;z-index:1020}}@media (min-width: 1200px){.sticky-xl-top{position:sticky;top:0;z-index:1020}}@media (min-width: 1400px){.sticky-xxl-top{position:sticky;top:0;z-index:1020}}.visually-hidden,.visually-hidden-focusable:not(:focus):not(:focus-within){position:absolute !important;width:1px !important;height:1px !important;padding:0 !important;margin:-1px !important;overflow:hidden !important;clip:rect(0, 0, 0, 0) !important;white-space:nowrap !important;border:0 !important}.stretched-link::after{position:absolute;top:0;right:0;bottom:0;left:0;z-index:1;content:""}.text-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.align-baseline{vertical-align:baseline !important}.align-top{vertical-align:top !important}.align-middle{vertical-align:middle !important}.align-bottom{vertical-align:bottom !important}.align-text-bottom{vertical-align:text-bottom !important}.align-text-top{vertical-align:text-top !important}.float-start{float:left !important}.float-end{float:right !important}.float-none{float:none !important}.overflow-auto{overflow:auto !important}.overflow-hidden{overflow:hidden !important}.overflow-visible{overflow:visible !important}.overflow-scroll{overflow:scroll !important}.d-inline{display:inline !important}.d-inline-block{display:inline-block !important}.d-block{display:block !important}.d-grid{display:grid !important}.d-table{display:table !important}.d-table-row{display:table-row !important}.d-table-cell{display:table-cell !important}.d-flex{display:flex !important}.d-inline-flex{display:inline-flex !important}.d-none{display:none !important}.shadow{box-shadow:0 0.5rem 1rem rgba(0,0,0,0.15) !important}.shadow-sm{box-shadow:0 0.125rem 0.25rem rgba(0,0,0,0.075) !important}.shadow-lg{box-shadow:0 1rem 3rem rgba(0,0,0,0.175) !important}.shadow-none{box-shadow:none !important}.position-static{position:static !important}.position-relative{position:relative !important}.position-absolute{position:absolute !important}.position-fixed{position:fixed !important}.position-sticky{position:sticky !important}.top-0{top:0 !important}.top-50{top:50% !important}.top-100{top:100% !important}.bottom-0{bottom:0 !important}.bottom-50{bottom:50% !important}.bottom-100{bottom:100% !important}.start-0{left:0 !important}.start-50{left:50% !important}.start-100{left:100% !important}.end-0{right:0 !important}.end-50{right:50% !important}.end-100{right:100% !important}.translate-middle{transform:translate(-50%, -50%) !important}.translate-middle-x{transform:translateX(-50%) !important}.translate-middle-y{transform:translateY(-50%) !important}.border{border:1px solid #dee2e6 !important}.border-0{border:0 !important}.border-top{border-top:1px solid #dee2e6 !important}.border-top-0{border-top:0 !important}.border-end{border-right:1px solid #dee2e6 !important}.border-end-0{border-right:0 !important}.border-bottom{border-bottom:1px solid #dee2e6 !important}.border-bottom-0{border-bottom:0 !important}.border-start{border-left:1px solid #dee2e6 !important}.border-start-0{border-left:0 !important}.border-primary{border-color:#0d6efd !important}.border-secondary{border-color:#6c757d !important}.border-success{border-color:#198754 !important}.border-info{border-color:#0dcaf0 !important}.border-warning{border-color:#ffc107 !important}.border-danger{border-color:#dc3545 !important}.border-light{border-color:#f8f9fa !important}.border-dark{border-color:#212529 !important}.border-white{border-color:#fff !important}.border-1{border-width:1px !important}.border-2{border-width:2px !important}.border-3{border-width:3px !important}.border-4{border-width:4px !important}.border-5{border-width:5px !important}.w-25{width:25% !important}.w-50{width:50% !important}.w-75{width:75% !important}.w-100{width:100% !important}.w-auto{width:auto !important}.mw-100{max-width:100% !important}.vw-100{width:100vw !important}.min-vw-100{min-width:100vw !important}.h-25{height:25% !important}.h-50{height:50% !important}.h-75{height:75% !important}.h-100{height:100% !important}.h-auto{height:auto !important}.mh-100{max-height:100% !important}.vh-100{height:100vh !important}.min-vh-100{min-height:100vh !important}.flex-fill{flex:1 1 auto !important}.flex-row{flex-direction:row !important}.flex-column{flex-direction:column !important}.flex-row-reverse{flex-direction:row-reverse !important}.flex-column-reverse{flex-direction:column-reverse !important}.flex-grow-0{flex-grow:0 !important}.flex-grow-1{flex-grow:1 !important}.flex-shrink-0{flex-shrink:0 !important}.flex-shrink-1{flex-shrink:1 !important}.flex-wrap{flex-wrap:wrap !important}.flex-nowrap{flex-wrap:nowrap !important}.flex-wrap-reverse{flex-wrap:wrap-reverse !important}.gap-0{gap:0 !important}.gap-1{gap:.25rem !important}.gap-2{gap:.5rem !important}.gap-3{gap:1rem !important}.gap-4{gap:1.5rem !important}.gap-5{gap:3rem !important}.justify-content-start{justify-content:flex-start !important}.justify-content-end{justify-content:flex-end !important}.justify-content-center{justify-content:center !important}.justify-content-between{justify-content:space-between !important}.justify-content-around{justify-content:space-around !important}.justify-content-evenly{justify-content:space-evenly !important}.align-items-start{align-items:flex-start !important}.align-items-end{align-items:flex-end !important}.align-items-center{align-items:center !important}.align-items-baseline{align-items:baseline !important}.align-items-stretch{align-items:stretch !important}.align-content-start{align-content:flex-start !important}.align-content-end{align-content:flex-end !important}.align-content-center{align-content:center !important}.align-content-between{align-content:space-between !important}.align-content-around{align-content:space-around !important}.align-content-stretch{align-content:stretch !important}.align-self-auto{align-self:auto !important}.align-self-start{align-self:flex-start !important}.align-self-end{align-self:flex-end !important}.align-self-center{align-self:center !important}.align-self-baseline{align-self:baseline !important}.align-self-stretch{align-self:stretch !important}.order-first{order:-1 !important}.order-0{order:0 !important}.order-1{order:1 !important}.order-2{order:2 !important}.order-3{order:3 !important}.order-4{order:4 !important}.order-5{order:5 !important}.order-last{order:6 !important}.m-0{margin:0 !important}.m-1{margin:.25rem !important}.m-2{margin:.5rem !important}.m-3{margin:1rem !important}.m-4{margin:1.5rem !important}.m-5{margin:3rem !important}.m-auto{margin:auto !important}.mx-0{margin-right:0 !important;margin-left:0 !important}.mx-1{margin-right:.25rem !important;margin-left:.25rem !important}.mx-2{margin-right:.5rem !important;margin-left:.5rem !important}.mx-3{margin-right:1rem !important;margin-left:1rem !important}.mx-4{margin-right:1.5rem !important;margin-left:1.5rem !important}.mx-5{margin-right:3rem !important;margin-left:3rem !important}.mx-auto{margin-right:auto !important;margin-left:auto !important}.my-0{margin-top:0 !important;margin-bottom:0 !important}.my-1{margin-top:.25rem !important;margin-bottom:.25rem !important}.my-2{margin-top:.5rem !important;margin-bottom:.5rem !important}.my-3{margin-top:1rem !important;margin-bottom:1rem !important}.my-4{margin-top:1.5rem !important;margin-bottom:1.5rem !important}.my-5{margin-top:3rem !important;margin-bottom:3rem !important}.my-auto{margin-top:auto !important;margin-bottom:auto !important}.mt-0{margin-top:0 !important}.mt-1{margin-top:.25rem !important}.mt-2{margin-top:.5rem !important}.mt-3{margin-top:1rem !important}.mt-4{margin-top:1.5rem !important}.mt-5{margin-top:3rem !important}.mt-auto{margin-top:auto !important}.me-0{margin-right:0 !important}.me-1{margin-right:.25rem !important}.me-2{margin-right:.5rem !important}.me-3{margin-right:1rem !important}.me-4{margin-right:1.5rem !important}.me-5{margin-right:3rem !important}.me-auto{margin-right:auto !important}.mb-0{margin-bottom:0 !important}.mb-1{margin-bottom:.25rem !important}.mb-2{margin-bottom:.5rem !important}.mb-3{margin-bottom:1rem !important}.mb-4{margin-bottom:1.5rem !important}.mb-5{margin-bottom:3rem !important}.mb-auto{margin-bottom:auto !important}.ms-0{margin-left:0 !important}.ms-1{margin-left:.25rem !important}.ms-2{margin-left:.5rem !important}.ms-3{margin-left:1rem !important}.ms-4{margin-left:1.5rem !important}.ms-5{margin-left:3rem !important}.ms-auto{margin-left:auto !important}.p-0{padding:0 !important}.p-1{padding:.25rem !important}.p-2{padding:.5rem !important}.p-3{padding:1rem !important}.p-4{padding:1.5rem !important}.p-5{padding:3rem !important}.px-0{padding-right:0 !important;padding-left:0 !important}.px-1{padding-right:.25rem !important;padding-left:.25rem !important}.px-2{padding-right:.5rem !important;padding-left:.5rem !important}.px-3{padding-right:1rem !important;padding-left:1rem !important}.px-4{padding-right:1.5rem !important;padding-left:1.5rem !important}.px-5{padding-right:3rem !important;padding-left:3rem !important}.py-0{padding-top:0 !important;padding-bottom:0 !important}.py-1{padding-top:.25rem !important;padding-bottom:.25rem !important}.py-2{padding-top:.5rem !important;padding-bottom:.5rem !important}.py-3{padding-top:1rem !important;padding-bottom:1rem !important}.py-4{padding-top:1.5rem !important;padding-bottom:1.5rem !important}.py-5{padding-top:3rem !important;padding-bottom:3rem !important}.pt-0{padding-top:0 !important}.pt-1{padding-top:.25rem !important}.pt-2{padding-top:.5rem !important}.pt-3{padding-top:1rem !important}.pt-4{padding-top:1.5rem !important}.pt-5{padding-top:3rem !important}.pe-0{padding-right:0 !important}.pe-1{padding-right:.25rem !important}.pe-2{padding-right:.5rem !important}.pe-3{padding-right:1rem !important}.pe-4{padding-right:1.5rem !important}.pe-5{padding-right:3rem !important}.pb-0{padding-bottom:0 !important}.pb-1{padding-bottom:.25rem !important}.pb-2{padding-bottom:.5rem !important}.pb-3{padding-bottom:1rem !important}.pb-4{padding-bottom:1.5rem !important}.pb-5{padding-bottom:3rem !important}.ps-0{padding-left:0 !important}.ps-1{padding-left:.25rem !important}.ps-2{padding-left:.5rem !important}.ps-3{padding-left:1rem !important}.ps-4{padding-left:1.5rem !important}.ps-5{padding-left:3rem !important}.font-monospace{font-family:var(--bs-font-monospace) !important}.fs-1{font-size:calc(1.375rem + 1.5vw) !important}.fs-2{font-size:calc(1.325rem + .9vw) !important}.fs-3{font-size:calc(1.3rem + .6vw) !important}.fs-4{font-size:calc(1.275rem + .3vw) !important}.fs-5{font-size:1.25rem !important}.fs-6{font-size:1rem !important}.fst-italic{font-style:italic !important}.fst-normal{font-style:normal !important}.fw-light{font-weight:300 !important}.fw-lighter{font-weight:lighter !important}.fw-normal{font-weight:400 !important}.fw-bold{font-weight:700 !important}.fw-bolder{font-weight:bolder !important}.lh-1{line-height:1 !important}.lh-sm{line-height:1.25 !important}.lh-base{line-height:1.5 !important}.lh-lg{line-height:2 !important}.text-start{text-align:left !important}.text-end{text-align:right !important}.text-center{text-align:center !important}.text-decoration-none{text-decoration:none !important}.text-decoration-underline{text-decoration:underline !important}.text-decoration-line-through{text-decoration:line-through !important}.text-lowercase{text-transform:lowercase !important}.text-uppercase{text-transform:uppercase !important}.text-capitalize{text-transform:capitalize !important}.text-wrap{white-space:normal !important}.text-nowrap{white-space:nowrap !important}.text-break{word-wrap:break-word !important;word-break:break-word !important}.text-primary{color:#0d6efd !important}.text-secondary{color:#6c757d !important}.text-success{color:#198754 !important}.text-info{color:#0dcaf0 !important}.text-warning{color:#ffc107 !important}.text-danger{color:#dc3545 !important}.text-light{color:#f8f9fa !important}.text-dark{color:#212529 !important}.text-white{color:#fff !important}.text-body{color:#212529 !important}.text-muted{color:#6c757d !important}.text-black-50{color:rgba(0,0,0,0.5) !important}.text-white-50{color:rgba(255,255,255,0.5) !important}.text-reset{color:inherit !important}.bg-primary{background-color:#0d6efd !important}.bg-secondary{background-color:#6c757d !important}.bg-success{background-color:#198754 !important}.bg-info{background-color:#0dcaf0 !important}.bg-warning{background-color:#ffc107 !important}.bg-danger{background-color:#dc3545 !important}.bg-light{background-color:#f8f9fa !important}.bg-dark{background-color:#212529 !important}.bg-body{background-color:#fff !important}.bg-white{background-color:#fff !important}.bg-transparent{background-color:rgba(0,0,0,0) !important}.bg-gradient{background-image:var(--bs-gradient) !important}.user-select-all{user-select:all !important}.user-select-auto{user-select:auto !important}.user-select-none{user-select:none !important}.pe-none{pointer-events:none !important}.pe-auto{pointer-events:auto !important}.rounded{border-radius:.25rem !important}.rounded-0{border-radius:0 !important}.rounded-1{border-radius:.2rem !important}.rounded-2{border-radius:.25rem !important}.rounded-3{border-radius:.3rem !important}.rounded-circle{border-radius:50% !important}.rounded-pill{border-radius:50rem !important}.rounded-top{border-top-left-radius:.25rem !important;border-top-right-radius:.25rem !important}.rounded-end{border-top-right-radius:.25rem !important;border-bottom-right-radius:.25rem !important}.rounded-bottom{border-bottom-right-radius:.25rem !important;border-bottom-left-radius:.25rem !important}.rounded-start{border-bottom-left-radius:.25rem !important;border-top-left-radius:.25rem !important}.visible{visibility:visible !important}.invisible{visibility:hidden !important}@media (min-width: 576px){.float-sm-start{float:left !important}.float-sm-end{float:right !important}.float-sm-none{float:none !important}.d-sm-inline{display:inline !important}.d-sm-inline-block{display:inline-block !important}.d-sm-block{display:block !important}.d-sm-grid{display:grid !important}.d-sm-table{display:table !important}.d-sm-table-row{display:table-row !important}.d-sm-table-cell{display:table-cell !important}.d-sm-flex{display:flex !important}.d-sm-inline-flex{display:inline-flex !important}.d-sm-none{display:none !important}.flex-sm-fill{flex:1 1 auto !important}.flex-sm-row{flex-direction:row !important}.flex-sm-column{flex-direction:column !important}.flex-sm-row-reverse{flex-direction:row-reverse !important}.flex-sm-column-reverse{flex-direction:column-reverse !important}.flex-sm-grow-0{flex-grow:0 !important}.flex-sm-grow-1{flex-grow:1 !important}.flex-sm-shrink-0{flex-shrink:0 !important}.flex-sm-shrink-1{flex-shrink:1 !important}.flex-sm-wrap{flex-wrap:wrap !important}.flex-sm-nowrap{flex-wrap:nowrap !important}.flex-sm-wrap-reverse{flex-wrap:wrap-reverse !important}.gap-sm-0{gap:0 !important}.gap-sm-1{gap:.25rem !important}.gap-sm-2{gap:.5rem !important}.gap-sm-3{gap:1rem !important}.gap-sm-4{gap:1.5rem !important}.gap-sm-5{gap:3rem !important}.justify-content-sm-start{justify-content:flex-start !important}.justify-content-sm-end{justify-content:flex-end !important}.justify-content-sm-center{justify-content:center !important}.justify-content-sm-between{justify-content:space-between !important}.justify-content-sm-around{justify-content:space-around !important}.justify-content-sm-evenly{justify-content:space-evenly !important}.align-items-sm-start{align-items:flex-start !important}.align-items-sm-end{align-items:flex-end !important}.align-items-sm-center{align-items:center !important}.align-items-sm-baseline{align-items:baseline !important}.align-items-sm-stretch{align-items:stretch !important}.align-content-sm-start{align-content:flex-start !important}.align-content-sm-end{align-content:flex-end !important}.align-content-sm-center{align-content:center !important}.align-content-sm-between{align-content:space-between !important}.align-content-sm-around{align-content:space-around !important}.align-content-sm-stretch{align-content:stretch !important}.align-self-sm-auto{align-self:auto !important}.align-self-sm-start{align-self:flex-start !important}.align-self-sm-end{align-self:flex-end !important}.align-self-sm-center{align-self:center !important}.align-self-sm-baseline{align-self:baseline !important}.align-self-sm-stretch{align-self:stretch !important}.order-sm-first{order:-1 !important}.order-sm-0{order:0 !important}.order-sm-1{order:1 !important}.order-sm-2{order:2 !important}.order-sm-3{order:3 !important}.order-sm-4{order:4 !important}.order-sm-5{order:5 !important}.order-sm-last{order:6 !important}.m-sm-0{margin:0 !important}.m-sm-1{margin:.25rem !important}.m-sm-2{margin:.5rem !important}.m-sm-3{margin:1rem !important}.m-sm-4{margin:1.5rem !important}.m-sm-5{margin:3rem !important}.m-sm-auto{margin:auto !important}.mx-sm-0{margin-right:0 !important;margin-left:0 !important}.mx-sm-1{margin-right:.25rem !important;margin-left:.25rem !important}.mx-sm-2{margin-right:.5rem !important;margin-left:.5rem !important}.mx-sm-3{margin-right:1rem !important;margin-left:1rem !important}.mx-sm-4{margin-right:1.5rem !important;margin-left:1.5rem !important}.mx-sm-5{margin-right:3rem !important;margin-left:3rem !important}.mx-sm-auto{margin-right:auto !important;margin-left:auto !important}.my-sm-0{margin-top:0 !important;margin-bottom:0 !important}.my-sm-1{margin-top:.25rem !important;margin-bottom:.25rem !important}.my-sm-2{margin-top:.5rem !important;margin-bottom:.5rem !important}.my-sm-3{margin-top:1rem !important;margin-bottom:1rem !important}.my-sm-4{margin-top:1.5rem !important;margin-bottom:1.5rem !important}.my-sm-5{margin-top:3rem !important;margin-bottom:3rem !important}.my-sm-auto{margin-top:auto !important;margin-bottom:auto !important}.mt-sm-0{margin-top:0 !important}.mt-sm-1{margin-top:.25rem !important}.mt-sm-2{margin-top:.5rem !important}.mt-sm-3{margin-top:1rem !important}.mt-sm-4{margin-top:1.5rem !important}.mt-sm-5{margin-top:3rem !important}.mt-sm-auto{margin-top:auto !important}.me-sm-0{margin-right:0 !important}.me-sm-1{margin-right:.25rem !important}.me-sm-2{margin-right:.5rem !important}.me-sm-3{margin-right:1rem !important}.me-sm-4{margin-right:1.5rem !important}.me-sm-5{margin-right:3rem !important}.me-sm-auto{margin-right:auto !important}.mb-sm-0{margin-bottom:0 !important}.mb-sm-1{margin-bottom:.25rem !important}.mb-sm-2{margin-bottom:.5rem !important}.mb-sm-3{margin-bottom:1rem !important}.mb-sm-4{margin-bottom:1.5rem !important}.mb-sm-5{margin-bottom:3rem !important}.mb-sm-auto{margin-bottom:auto !important}.ms-sm-0{margin-left:0 !important}.ms-sm-1{margin-left:.25rem !important}.ms-sm-2{margin-left:.5rem !important}.ms-sm-3{margin-left:1rem !important}.ms-sm-4{margin-left:1.5rem !important}.ms-sm-5{margin-left:3rem !important}.ms-sm-auto{margin-left:auto !important}.p-sm-0{padding:0 !important}.p-sm-1{padding:.25rem !important}.p-sm-2{padding:.5rem !important}.p-sm-3{padding:1rem !important}.p-sm-4{padding:1.5rem !important}.p-sm-5{padding:3rem !important}.px-sm-0{padding-right:0 !important;padding-left:0 !important}.px-sm-1{padding-right:.25rem !important;padding-left:.25rem !important}.px-sm-2{padding-right:.5rem !important;padding-left:.5rem !important}.px-sm-3{padding-right:1rem !important;padding-left:1rem !important}.px-sm-4{padding-right:1.5rem !important;padding-left:1.5rem !important}.px-sm-5{padding-right:3rem !important;padding-left:3rem !important}.py-sm-0{padding-top:0 !important;padding-bottom:0 !important}.py-sm-1{padding-top:.25rem !important;padding-bottom:.25rem !important}.py-sm-2{padding-top:.5rem !important;padding-bottom:.5rem !important}.py-sm-3{padding-top:1rem !important;padding-bottom:1rem !important}.py-sm-4{padding-top:1.5rem !important;padding-bottom:1.5rem !important}.py-sm-5{padding-top:3rem !important;padding-bottom:3rem !important}.pt-sm-0{padding-top:0 !important}.pt-sm-1{padding-top:.25rem !important}.pt-sm-2{padding-top:.5rem !important}.pt-sm-3{padding-top:1rem !important}.pt-sm-4{padding-top:1.5rem !important}.pt-sm-5{padding-top:3rem !important}.pe-sm-0{padding-right:0 !important}.pe-sm-1{padding-right:.25rem !important}.pe-sm-2{padding-right:.5rem !important}.pe-sm-3{padding-right:1rem !important}.pe-sm-4{padding-right:1.5rem !important}.pe-sm-5{padding-right:3rem !important}.pb-sm-0{padding-bottom:0 !important}.pb-sm-1{padding-bottom:.25rem !important}.pb-sm-2{padding-bottom:.5rem !important}.pb-sm-3{padding-bottom:1rem !important}.pb-sm-4{padding-bottom:1.5rem !important}.pb-sm-5{padding-bottom:3rem !important}.ps-sm-0{padding-left:0 !important}.ps-sm-1{padding-left:.25rem !important}.ps-sm-2{padding-left:.5rem !important}.ps-sm-3{padding-left:1rem !important}.ps-sm-4{padding-left:1.5rem !important}.ps-sm-5{padding-left:3rem !important}.text-sm-start{text-align:left !important}.text-sm-end{text-align:right !important}.text-sm-center{text-align:center !important}}@media (min-width: 768px){.float-md-start{float:left !important}.float-md-end{float:right !important}.float-md-none{float:none !important}.d-md-inline{display:inline !important}.d-md-inline-block{display:inline-block !important}.d-md-block{display:block !important}.d-md-grid{display:grid !important}.d-md-table{display:table !important}.d-md-table-row{display:table-row !important}.d-md-table-cell{display:table-cell !important}.d-md-flex{display:flex !important}.d-md-inline-flex{display:inline-flex !important}.d-md-none{display:none !important}.flex-md-fill{flex:1 1 auto !important}.flex-md-row{flex-direction:row !important}.flex-md-column{flex-direction:column !important}.flex-md-row-reverse{flex-direction:row-reverse !important}.flex-md-column-reverse{flex-direction:column-reverse !important}.flex-md-grow-0{flex-grow:0 !important}.flex-md-grow-1{flex-grow:1 !important}.flex-md-shrink-0{flex-shrink:0 !important}.flex-md-shrink-1{flex-shrink:1 !important}.flex-md-wrap{flex-wrap:wrap !important}.flex-md-nowrap{flex-wrap:nowrap !important}.flex-md-wrap-reverse{flex-wrap:wrap-reverse !important}.gap-md-0{gap:0 !important}.gap-md-1{gap:.25rem !important}.gap-md-2{gap:.5rem !important}.gap-md-3{gap:1rem !important}.gap-md-4{gap:1.5rem !important}.gap-md-5{gap:3rem !important}.justify-content-md-start{justify-content:flex-start !important}.justify-content-md-end{justify-content:flex-end !important}.justify-content-md-center{justify-content:center !important}.justify-content-md-between{justify-content:space-between !important}.justify-content-md-around{justify-content:space-around !important}.justify-content-md-evenly{justify-content:space-evenly !important}.align-items-md-start{align-items:flex-start !important}.align-items-md-end{align-items:flex-end !important}.align-items-md-center{align-items:center !important}.align-items-md-baseline{align-items:baseline !important}.align-items-md-stretch{align-items:stretch !important}.align-content-md-start{align-content:flex-start !important}.align-content-md-end{align-content:flex-end !important}.align-content-md-center{align-content:center !important}.align-content-md-between{align-content:space-between !important}.align-content-md-around{align-content:space-around !important}.align-content-md-stretch{align-content:stretch !important}.align-self-md-auto{align-self:auto !important}.align-self-md-start{align-self:flex-start !important}.align-self-md-end{align-self:flex-end !important}.align-self-md-center{align-self:center !important}.align-self-md-baseline{align-self:baseline !important}.align-self-md-stretch{align-self:stretch !important}.order-md-first{order:-1 !important}.order-md-0{order:0 !important}.order-md-1{order:1 !important}.order-md-2{order:2 !important}.order-md-3{order:3 !important}.order-md-4{order:4 !important}.order-md-5{order:5 !important}.order-md-last{order:6 !important}.m-md-0{margin:0 !important}.m-md-1{margin:.25rem !important}.m-md-2{margin:.5rem !important}.m-md-3{margin:1rem !important}.m-md-4{margin:1.5rem !important}.m-md-5{margin:3rem !important}.m-md-auto{margin:auto !important}.mx-md-0{margin-right:0 !important;margin-left:0 !important}.mx-md-1{margin-right:.25rem !important;margin-left:.25rem !important}.mx-md-2{margin-right:.5rem !important;margin-left:.5rem !important}.mx-md-3{margin-right:1rem !important;margin-left:1rem !important}.mx-md-4{margin-right:1.5rem !important;margin-left:1.5rem !important}.mx-md-5{margin-right:3rem !important;margin-left:3rem !important}.mx-md-auto{margin-right:auto !important;margin-left:auto !important}.my-md-0{margin-top:0 !important;margin-bottom:0 !important}.my-md-1{margin-top:.25rem !important;margin-bottom:.25rem !important}.my-md-2{margin-top:.5rem !important;margin-bottom:.5rem !important}.my-md-3{margin-top:1rem !important;margin-bottom:1rem !important}.my-md-4{margin-top:1.5rem !important;margin-bottom:1.5rem !important}.my-md-5{margin-top:3rem !important;margin-bottom:3rem !important}.my-md-auto{margin-top:auto !important;margin-bottom:auto !important}.mt-md-0{margin-top:0 !important}.mt-md-1{margin-top:.25rem !important}.mt-md-2{margin-top:.5rem !important}.mt-md-3{margin-top:1rem !important}.mt-md-4{margin-top:1.5rem !important}.mt-md-5{margin-top:3rem !important}.mt-md-auto{margin-top:auto !important}.me-md-0{margin-right:0 !important}.me-md-1{margin-right:.25rem !important}.me-md-2{margin-right:.5rem !important}.me-md-3{margin-right:1rem !important}.me-md-4{margin-right:1.5rem !important}.me-md-5{margin-right:3rem !important}.me-md-auto{margin-right:auto !important}.mb-md-0{margin-bottom:0 !important}.mb-md-1{margin-bottom:.25rem !important}.mb-md-2{margin-bottom:.5rem !important}.mb-md-3{margin-bottom:1rem !important}.mb-md-4{margin-bottom:1.5rem !important}.mb-md-5{margin-bottom:3rem !important}.mb-md-auto{margin-bottom:auto !important}.ms-md-0{margin-left:0 !important}.ms-md-1{margin-left:.25rem !important}.ms-md-2{margin-left:.5rem !important}.ms-md-3{margin-left:1rem !important}.ms-md-4{margin-left:1.5rem !important}.ms-md-5{margin-left:3rem !important}.ms-md-auto{margin-left:auto !important}.p-md-0{padding:0 !important}.p-md-1{padding:.25rem !important}.p-md-2{padding:.5rem !important}.p-md-3{padding:1rem !important}.p-md-4{padding:1.5rem !important}.p-md-5{padding:3rem !important}.px-md-0{padding-right:0 !important;padding-left:0 !important}.px-md-1{padding-right:.25rem !important;padding-left:.25rem !important}.px-md-2{padding-right:.5rem !important;padding-left:.5rem !important}.px-md-3{padding-right:1rem !important;padding-left:1rem !important}.px-md-4{padding-right:1.5rem !important;padding-left:1.5rem !important}.px-md-5{padding-right:3rem !important;padding-left:3rem !important}.py-md-0{padding-top:0 !important;padding-bottom:0 !important}.py-md-1{padding-top:.25rem !important;padding-bottom:.25rem !important}.py-md-2{padding-top:.5rem !important;padding-bottom:.5rem !important}.py-md-3{padding-top:1rem !important;padding-bottom:1rem !important}.py-md-4{padding-top:1.5rem !important;padding-bottom:1.5rem !important}.py-md-5{padding-top:3rem !important;padding-bottom:3rem !important}.pt-md-0{padding-top:0 !important}.pt-md-1{padding-top:.25rem !important}.pt-md-2{padding-top:.5rem !important}.pt-md-3{padding-top:1rem !important}.pt-md-4{padding-top:1.5rem !important}.pt-md-5{padding-top:3rem !important}.pe-md-0{padding-right:0 !important}.pe-md-1{padding-right:.25rem !important}.pe-md-2{padding-right:.5rem !important}.pe-md-3{padding-right:1rem !important}.pe-md-4{padding-right:1.5rem !important}.pe-md-5{padding-right:3rem !important}.pb-md-0{padding-bottom:0 !important}.pb-md-1{padding-bottom:.25rem !important}.pb-md-2{padding-bottom:.5rem !important}.pb-md-3{padding-bottom:1rem !important}.pb-md-4{padding-bottom:1.5rem !important}.pb-md-5{padding-bottom:3rem !important}.ps-md-0{padding-left:0 !important}.ps-md-1{padding-left:.25rem !important}.ps-md-2{padding-left:.5rem !important}.ps-md-3{padding-left:1rem !important}.ps-md-4{padding-left:1.5rem !important}.ps-md-5{padding-left:3rem !important}.text-md-start{text-align:left !important}.text-md-end{text-align:right !important}.text-md-center{text-align:center !important}}@media (min-width: 992px){.float-lg-start{float:left !important}.float-lg-end{float:right !important}.float-lg-none{float:none !important}.d-lg-inline{display:inline !important}.d-lg-inline-block{display:inline-block !important}.d-lg-block{display:block !important}.d-lg-grid{display:grid !important}.d-lg-table{display:table !important}.d-lg-table-row{display:table-row !important}.d-lg-table-cell{display:table-cell !important}.d-lg-flex{display:flex !important}.d-lg-inline-flex{display:inline-flex !important}.d-lg-none{display:none !important}.flex-lg-fill{flex:1 1 auto !important}.flex-lg-row{flex-direction:row !important}.flex-lg-column{flex-direction:column !important}.flex-lg-row-reverse{flex-direction:row-reverse !important}.flex-lg-column-reverse{flex-direction:column-reverse !important}.flex-lg-grow-0{flex-grow:0 !important}.flex-lg-grow-1{flex-grow:1 !important}.flex-lg-shrink-0{flex-shrink:0 !important}.flex-lg-shrink-1{flex-shrink:1 !important}.flex-lg-wrap{flex-wrap:wrap !important}.flex-lg-nowrap{flex-wrap:nowrap !important}.flex-lg-wrap-reverse{flex-wrap:wrap-reverse !important}.gap-lg-0{gap:0 !important}.gap-lg-1{gap:.25rem !important}.gap-lg-2{gap:.5rem !important}.gap-lg-3{gap:1rem !important}.gap-lg-4{gap:1.5rem !important}.gap-lg-5{gap:3rem !important}.justify-content-lg-start{justify-content:flex-start !important}.justify-content-lg-end{justify-content:flex-end !important}.justify-content-lg-center{justify-content:center !important}.justify-content-lg-between{justify-content:space-between !important}.justify-content-lg-around{justify-content:space-around !important}.justify-content-lg-evenly{justify-content:space-evenly !important}.align-items-lg-start{align-items:flex-start !important}.align-items-lg-end{align-items:flex-end !important}.align-items-lg-center{align-items:center !important}.align-items-lg-baseline{align-items:baseline !important}.align-items-lg-stretch{align-items:stretch !important}.align-content-lg-start{align-content:flex-start !important}.align-content-lg-end{align-content:flex-end !important}.align-content-lg-center{align-content:center !important}.align-content-lg-between{align-content:space-between !important}.align-content-lg-around{align-content:space-around !important}.align-content-lg-stretch{align-content:stretch !important}.align-self-lg-auto{align-self:auto !important}.align-self-lg-start{align-self:flex-start !important}.align-self-lg-end{align-self:flex-end !important}.align-self-lg-center{align-self:center !important}.align-self-lg-baseline{align-self:baseline !important}.align-self-lg-stretch{align-self:stretch !important}.order-lg-first{order:-1 !important}.order-lg-0{order:0 !important}.order-lg-1{order:1 !important}.order-lg-2{order:2 !important}.order-lg-3{order:3 !important}.order-lg-4{order:4 !important}.order-lg-5{order:5 !important}.order-lg-last{order:6 !important}.m-lg-0{margin:0 !important}.m-lg-1{margin:.25rem !important}.m-lg-2{margin:.5rem !important}.m-lg-3{margin:1rem !important}.m-lg-4{margin:1.5rem !important}.m-lg-5{margin:3rem !important}.m-lg-auto{margin:auto !important}.mx-lg-0{margin-right:0 !important;margin-left:0 !important}.mx-lg-1{margin-right:.25rem !important;margin-left:.25rem !important}.mx-lg-2{margin-right:.5rem !important;margin-left:.5rem !important}.mx-lg-3{margin-right:1rem !important;margin-left:1rem !important}.mx-lg-4{margin-right:1.5rem !important;margin-left:1.5rem !important}.mx-lg-5{margin-right:3rem !important;margin-left:3rem !important}.mx-lg-auto{margin-right:auto !important;margin-left:auto !important}.my-lg-0{margin-top:0 !important;margin-bottom:0 !important}.my-lg-1{margin-top:.25rem !important;margin-bottom:.25rem !important}.my-lg-2{margin-top:.5rem !important;margin-bottom:.5rem !important}.my-lg-3{margin-top:1rem !important;margin-bottom:1rem !important}.my-lg-4{margin-top:1.5rem !important;margin-bottom:1.5rem !important}.my-lg-5{margin-top:3rem !important;margin-bottom:3rem !important}.my-lg-auto{margin-top:auto !important;margin-bottom:auto !important}.mt-lg-0{margin-top:0 !important}.mt-lg-1{margin-top:.25rem !important}.mt-lg-2{margin-top:.5rem !important}.mt-lg-3{margin-top:1rem !important}.mt-lg-4{margin-top:1.5rem !important}.mt-lg-5{margin-top:3rem !important}.mt-lg-auto{margin-top:auto !important}.me-lg-0{margin-right:0 !important}.me-lg-1{margin-right:.25rem !important}.me-lg-2{margin-right:.5rem !important}.me-lg-3{margin-right:1rem !important}.me-lg-4{margin-right:1.5rem !important}.me-lg-5{margin-right:3rem !important}.me-lg-auto{margin-right:auto !important}.mb-lg-0{margin-bottom:0 !important}.mb-lg-1{margin-bottom:.25rem !important}.mb-lg-2{margin-bottom:.5rem !important}.mb-lg-3{margin-bottom:1rem !important}.mb-lg-4{margin-bottom:1.5rem !important}.mb-lg-5{margin-bottom:3rem !important}.mb-lg-auto{margin-bottom:auto !important}.ms-lg-0{margin-left:0 !important}.ms-lg-1{margin-left:.25rem !important}.ms-lg-2{margin-left:.5rem !important}.ms-lg-3{margin-left:1rem !important}.ms-lg-4{margin-left:1.5rem !important}.ms-lg-5{margin-left:3rem !important}.ms-lg-auto{margin-left:auto !important}.p-lg-0{padding:0 !important}.p-lg-1{padding:.25rem !important}.p-lg-2{padding:.5rem !important}.p-lg-3{padding:1rem !important}.p-lg-4{padding:1.5rem !important}.p-lg-5{padding:3rem !important}.px-lg-0{padding-right:0 !important;padding-left:0 !important}.px-lg-1{padding-right:.25rem !important;padding-left:.25rem !important}.px-lg-2{padding-right:.5rem !important;padding-left:.5rem !important}.px-lg-3{padding-right:1rem !important;padding-left:1rem !important}.px-lg-4{padding-right:1.5rem !important;padding-left:1.5rem !important}.px-lg-5{padding-right:3rem !important;padding-left:3rem !important}.py-lg-0{padding-top:0 !important;padding-bottom:0 !important}.py-lg-1{padding-top:.25rem !important;padding-bottom:.25rem !important}.py-lg-2{padding-top:.5rem !important;padding-bottom:.5rem !important}.py-lg-3{padding-top:1rem !important;padding-bottom:1rem !important}.py-lg-4{padding-top:1.5rem !important;padding-bottom:1.5rem !important}.py-lg-5{padding-top:3rem !important;padding-bottom:3rem !important}.pt-lg-0{padding-top:0 !important}.pt-lg-1{padding-top:.25rem !important}.pt-lg-2{padding-top:.5rem !important}.pt-lg-3{padding-top:1rem !important}.pt-lg-4{padding-top:1.5rem !important}.pt-lg-5{padding-top:3rem !important}.pe-lg-0{padding-right:0 !important}.pe-lg-1{padding-right:.25rem !important}.pe-lg-2{padding-right:.5rem !important}.pe-lg-3{padding-right:1rem !important}.pe-lg-4{padding-right:1.5rem !important}.pe-lg-5{padding-right:3rem !important}.pb-lg-0{padding-bottom:0 !important}.pb-lg-1{padding-bottom:.25rem !important}.pb-lg-2{padding-bottom:.5rem !important}.pb-lg-3{padding-bottom:1rem !important}.pb-lg-4{padding-bottom:1.5rem !important}.pb-lg-5{padding-bottom:3rem !important}.ps-lg-0{padding-left:0 !important}.ps-lg-1{padding-left:.25rem !important}.ps-lg-2{padding-left:.5rem !important}.ps-lg-3{padding-left:1rem !important}.ps-lg-4{padding-left:1.5rem !important}.ps-lg-5{padding-left:3rem !important}.text-lg-start{text-align:left !important}.text-lg-end{text-align:right !important}.text-lg-center{text-align:center !important}}@media (min-width: 1200px){.float-xl-start{float:left !important}.float-xl-end{float:right !important}.float-xl-none{float:none !important}.d-xl-inline{display:inline !important}.d-xl-inline-block{display:inline-block !important}.d-xl-block{display:block !important}.d-xl-grid{display:grid !important}.d-xl-table{display:table !important}.d-xl-table-row{display:table-row !important}.d-xl-table-cell{display:table-cell !important}.d-xl-flex{display:flex !important}.d-xl-inline-flex{display:inline-flex !important}.d-xl-none{display:none !important}.flex-xl-fill{flex:1 1 auto !important}.flex-xl-row{flex-direction:row !important}.flex-xl-column{flex-direction:column !important}.flex-xl-row-reverse{flex-direction:row-reverse !important}.flex-xl-column-reverse{flex-direction:column-reverse !important}.flex-xl-grow-0{flex-grow:0 !important}.flex-xl-grow-1{flex-grow:1 !important}.flex-xl-shrink-0{flex-shrink:0 !important}.flex-xl-shrink-1{flex-shrink:1 !important}.flex-xl-wrap{flex-wrap:wrap !important}.flex-xl-nowrap{flex-wrap:nowrap !important}.flex-xl-wrap-reverse{flex-wrap:wrap-reverse !important}.gap-xl-0{gap:0 !important}.gap-xl-1{gap:.25rem !important}.gap-xl-2{gap:.5rem !important}.gap-xl-3{gap:1rem !important}.gap-xl-4{gap:1.5rem !important}.gap-xl-5{gap:3rem !important}.justify-content-xl-start{justify-content:flex-start !important}.justify-content-xl-end{justify-content:flex-end !important}.justify-content-xl-center{justify-content:center !important}.justify-content-xl-between{justify-content:space-between !important}.justify-content-xl-around{justify-content:space-around !important}.justify-content-xl-evenly{justify-content:space-evenly !important}.align-items-xl-start{align-items:flex-start !important}.align-items-xl-end{align-items:flex-end !important}.align-items-xl-center{align-items:center !important}.align-items-xl-baseline{align-items:baseline !important}.align-items-xl-stretch{align-items:stretch !important}.align-content-xl-start{align-content:flex-start !important}.align-content-xl-end{align-content:flex-end !important}.align-content-xl-center{align-content:center !important}.align-content-xl-between{align-content:space-between !important}.align-content-xl-around{align-content:space-around !important}.align-content-xl-stretch{align-content:stretch !important}.align-self-xl-auto{align-self:auto !important}.align-self-xl-start{align-self:flex-start !important}.align-self-xl-end{align-self:flex-end !important}.align-self-xl-center{align-self:center !important}.align-self-xl-baseline{align-self:baseline !important}.align-self-xl-stretch{align-self:stretch !important}.order-xl-first{order:-1 !important}.order-xl-0{order:0 !important}.order-xl-1{order:1 !important}.order-xl-2{order:2 !important}.order-xl-3{order:3 !important}.order-xl-4{order:4 !important}.order-xl-5{order:5 !important}.order-xl-last{order:6 !important}.m-xl-0{margin:0 !important}.m-xl-1{margin:.25rem !important}.m-xl-2{margin:.5rem !important}.m-xl-3{margin:1rem !important}.m-xl-4{margin:1.5rem !important}.m-xl-5{margin:3rem !important}.m-xl-auto{margin:auto !important}.mx-xl-0{margin-right:0 !important;margin-left:0 !important}.mx-xl-1{margin-right:.25rem !important;margin-left:.25rem !important}.mx-xl-2{margin-right:.5rem !important;margin-left:.5rem !important}.mx-xl-3{margin-right:1rem !important;margin-left:1rem !important}.mx-xl-4{margin-right:1.5rem !important;margin-left:1.5rem !important}.mx-xl-5{margin-right:3rem !important;margin-left:3rem !important}.mx-xl-auto{margin-right:auto !important;margin-left:auto !important}.my-xl-0{margin-top:0 !important;margin-bottom:0 !important}.my-xl-1{margin-top:.25rem !important;margin-bottom:.25rem !important}.my-xl-2{margin-top:.5rem !important;margin-bottom:.5rem !important}.my-xl-3{margin-top:1rem !important;margin-bottom:1rem !important}.my-xl-4{margin-top:1.5rem !important;margin-bottom:1.5rem !important}.my-xl-5{margin-top:3rem !important;margin-bottom:3rem !important}.my-xl-auto{margin-top:auto !important;margin-bottom:auto !important}.mt-xl-0{margin-top:0 !important}.mt-xl-1{margin-top:.25rem !important}.mt-xl-2{margin-top:.5rem !important}.mt-xl-3{margin-top:1rem !important}.mt-xl-4{margin-top:1.5rem !important}.mt-xl-5{margin-top:3rem !important}.mt-xl-auto{margin-top:auto !important}.me-xl-0{margin-right:0 !important}.me-xl-1{margin-right:.25rem !important}.me-xl-2{margin-right:.5rem !important}.me-xl-3{margin-right:1rem !important}.me-xl-4{margin-right:1.5rem !important}.me-xl-5{margin-right:3rem !important}.me-xl-auto{margin-right:auto !important}.mb-xl-0{margin-bottom:0 !important}.mb-xl-1{margin-bottom:.25rem !important}.mb-xl-2{margin-bottom:.5rem !important}.mb-xl-3{margin-bottom:1rem !important}.mb-xl-4{margin-bottom:1.5rem !important}.mb-xl-5{margin-bottom:3rem !important}.mb-xl-auto{margin-bottom:auto !important}.ms-xl-0{margin-left:0 !important}.ms-xl-1{margin-left:.25rem !important}.ms-xl-2{margin-left:.5rem !important}.ms-xl-3{margin-left:1rem !important}.ms-xl-4{margin-left:1.5rem !important}.ms-xl-5{margin-left:3rem !important}.ms-xl-auto{margin-left:auto !important}.p-xl-0{padding:0 !important}.p-xl-1{padding:.25rem !important}.p-xl-2{padding:.5rem !important}.p-xl-3{padding:1rem !important}.p-xl-4{padding:1.5rem !important}.p-xl-5{padding:3rem !important}.px-xl-0{padding-right:0 !important;padding-left:0 !important}.px-xl-1{padding-right:.25rem !important;padding-left:.25rem !important}.px-xl-2{padding-right:.5rem !important;padding-left:.5rem !important}.px-xl-3{padding-right:1rem !important;padding-left:1rem !important}.px-xl-4{padding-right:1.5rem !important;padding-left:1.5rem !important}.px-xl-5{padding-right:3rem !important;padding-left:3rem !important}.py-xl-0{padding-top:0 !important;padding-bottom:0 !important}.py-xl-1{padding-top:.25rem !important;padding-bottom:.25rem !important}.py-xl-2{padding-top:.5rem !important;padding-bottom:.5rem !important}.py-xl-3{padding-top:1rem !important;padding-bottom:1rem !important}.py-xl-4{padding-top:1.5rem !important;padding-bottom:1.5rem !important}.py-xl-5{padding-top:3rem !important;padding-bottom:3rem !important}.pt-xl-0{padding-top:0 !important}.pt-xl-1{padding-top:.25rem !important}.pt-xl-2{padding-top:.5rem !important}.pt-xl-3{padding-top:1rem !important}.pt-xl-4{padding-top:1.5rem !important}.pt-xl-5{padding-top:3rem !important}.pe-xl-0{padding-right:0 !important}.pe-xl-1{padding-right:.25rem !important}.pe-xl-2{padding-right:.5rem !important}.pe-xl-3{padding-right:1rem !important}.pe-xl-4{padding-right:1.5rem !important}.pe-xl-5{padding-right:3rem !important}.pb-xl-0{padding-bottom:0 !important}.pb-xl-1{padding-bottom:.25rem !important}.pb-xl-2{padding-bottom:.5rem !important}.pb-xl-3{padding-bottom:1rem !important}.pb-xl-4{padding-bottom:1.5rem !important}.pb-xl-5{padding-bottom:3rem !important}.ps-xl-0{padding-left:0 !important}.ps-xl-1{padding-left:.25rem !important}.ps-xl-2{padding-left:.5rem !important}.ps-xl-3{padding-left:1rem !important}.ps-xl-4{padding-left:1.5rem !important}.ps-xl-5{padding-left:3rem !important}.text-xl-start{text-align:left !important}.text-xl-end{text-align:right !important}.text-xl-center{text-align:center !important}}@media (min-width: 1400px){.float-xxl-start{float:left !important}.float-xxl-end{float:right !important}.float-xxl-none{float:none !important}.d-xxl-inline{display:inline !important}.d-xxl-inline-block{display:inline-block !important}.d-xxl-block{display:block !important}.d-xxl-grid{display:grid !important}.d-xxl-table{display:table !important}.d-xxl-table-row{display:table-row !important}.d-xxl-table-cell{display:table-cell !important}.d-xxl-flex{display:flex !important}.d-xxl-inline-flex{display:inline-flex !important}.d-xxl-none{display:none !important}.flex-xxl-fill{flex:1 1 auto !important}.flex-xxl-row{flex-direction:row !important}.flex-xxl-column{flex-direction:column !important}.flex-xxl-row-reverse{flex-direction:row-reverse !important}.flex-xxl-column-reverse{flex-direction:column-reverse !important}.flex-xxl-grow-0{flex-grow:0 !important}.flex-xxl-grow-1{flex-grow:1 !important}.flex-xxl-shrink-0{flex-shrink:0 !important}.flex-xxl-shrink-1{flex-shrink:1 !important}.flex-xxl-wrap{flex-wrap:wrap !important}.flex-xxl-nowrap{flex-wrap:nowrap !important}.flex-xxl-wrap-reverse{flex-wrap:wrap-reverse !important}.gap-xxl-0{gap:0 !important}.gap-xxl-1{gap:.25rem !important}.gap-xxl-2{gap:.5rem !important}.gap-xxl-3{gap:1rem !important}.gap-xxl-4{gap:1.5rem !important}.gap-xxl-5{gap:3rem !important}.justify-content-xxl-start{justify-content:flex-start !important}.justify-content-xxl-end{justify-content:flex-end !important}.justify-content-xxl-center{justify-content:center !important}.justify-content-xxl-between{justify-content:space-between !important}.justify-content-xxl-around{justify-content:space-around !important}.justify-content-xxl-evenly{justify-content:space-evenly !important}.align-items-xxl-start{align-items:flex-start !important}.align-items-xxl-end{align-items:flex-end !important}.align-items-xxl-center{align-items:center !important}.align-items-xxl-baseline{align-items:baseline !important}.align-items-xxl-stretch{align-items:stretch !important}.align-content-xxl-start{align-content:flex-start !important}.align-content-xxl-end{align-content:flex-end !important}.align-content-xxl-center{align-content:center !important}.align-content-xxl-between{align-content:space-between !important}.align-content-xxl-around{align-content:space-around !important}.align-content-xxl-stretch{align-content:stretch !important}.align-self-xxl-auto{align-self:auto !important}.align-self-xxl-start{align-self:flex-start !important}.align-self-xxl-end{align-self:flex-end !important}.align-self-xxl-center{align-self:center !important}.align-self-xxl-baseline{align-self:baseline !important}.align-self-xxl-stretch{align-self:stretch !important}.order-xxl-first{order:-1 !important}.order-xxl-0{order:0 !important}.order-xxl-1{order:1 !important}.order-xxl-2{order:2 !important}.order-xxl-3{order:3 !important}.order-xxl-4{order:4 !important}.order-xxl-5{order:5 !important}.order-xxl-last{order:6 !important}.m-xxl-0{margin:0 !important}.m-xxl-1{margin:.25rem !important}.m-xxl-2{margin:.5rem !important}.m-xxl-3{margin:1rem !important}.m-xxl-4{margin:1.5rem !important}.m-xxl-5{margin:3rem !important}.m-xxl-auto{margin:auto !important}.mx-xxl-0{margin-right:0 !important;margin-left:0 !important}.mx-xxl-1{margin-right:.25rem !important;margin-left:.25rem !important}.mx-xxl-2{margin-right:.5rem !important;margin-left:.5rem !important}.mx-xxl-3{margin-right:1rem !important;margin-left:1rem !important}.mx-xxl-4{margin-right:1.5rem !important;margin-left:1.5rem !important}.mx-xxl-5{margin-right:3rem !important;margin-left:3rem !important}.mx-xxl-auto{margin-right:auto !important;margin-left:auto !important}.my-xxl-0{margin-top:0 !important;margin-bottom:0 !important}.my-xxl-1{margin-top:.25rem !important;margin-bottom:.25rem !important}.my-xxl-2{margin-top:.5rem !important;margin-bottom:.5rem !important}.my-xxl-3{margin-top:1rem !important;margin-bottom:1rem !important}.my-xxl-4{margin-top:1.5rem !important;margin-bottom:1.5rem !important}.my-xxl-5{margin-top:3rem !important;margin-bottom:3rem !important}.my-xxl-auto{margin-top:auto !important;margin-bottom:auto !important}.mt-xxl-0{margin-top:0 !important}.mt-xxl-1{margin-top:.25rem !important}.mt-xxl-2{margin-top:.5rem !important}.mt-xxl-3{margin-top:1rem !important}.mt-xxl-4{margin-top:1.5rem !important}.mt-xxl-5{margin-top:3rem !important}.mt-xxl-auto{margin-top:auto !important}.me-xxl-0{margin-right:0 !important}.me-xxl-1{margin-right:.25rem !important}.me-xxl-2{margin-right:.5rem !important}.me-xxl-3{margin-right:1rem !important}.me-xxl-4{margin-right:1.5rem !important}.me-xxl-5{margin-right:3rem !important}.me-xxl-auto{margin-right:auto !important}.mb-xxl-0{margin-bottom:0 !important}.mb-xxl-1{margin-bottom:.25rem !important}.mb-xxl-2{margin-bottom:.5rem !important}.mb-xxl-3{margin-bottom:1rem !important}.mb-xxl-4{margin-bottom:1.5rem !important}.mb-xxl-5{margin-bottom:3rem !important}.mb-xxl-auto{margin-bottom:auto !important}.ms-xxl-0{margin-left:0 !important}.ms-xxl-1{margin-left:.25rem !important}.ms-xxl-2{margin-left:.5rem !important}.ms-xxl-3{margin-left:1rem !important}.ms-xxl-4{margin-left:1.5rem !important}.ms-xxl-5{margin-left:3rem !important}.ms-xxl-auto{margin-left:auto !important}.p-xxl-0{padding:0 !important}.p-xxl-1{padding:.25rem !important}.p-xxl-2{padding:.5rem !important}.p-xxl-3{padding:1rem !important}.p-xxl-4{padding:1.5rem !important}.p-xxl-5{padding:3rem !important}.px-xxl-0{padding-right:0 !important;padding-left:0 !important}.px-xxl-1{padding-right:.25rem !important;padding-left:.25rem !important}.px-xxl-2{padding-right:.5rem !important;padding-left:.5rem !important}.px-xxl-3{padding-right:1rem !important;padding-left:1rem !important}.px-xxl-4{padding-right:1.5rem !important;padding-left:1.5rem !important}.px-xxl-5{padding-right:3rem !important;padding-left:3rem !important}.py-xxl-0{padding-top:0 !important;padding-bottom:0 !important}.py-xxl-1{padding-top:.25rem !important;padding-bottom:.25rem !important}.py-xxl-2{padding-top:.5rem !important;padding-bottom:.5rem !important}.py-xxl-3{padding-top:1rem !important;padding-bottom:1rem !important}.py-xxl-4{padding-top:1.5rem !important;padding-bottom:1.5rem !important}.py-xxl-5{padding-top:3rem !important;padding-bottom:3rem !important}.pt-xxl-0{padding-top:0 !important}.pt-xxl-1{padding-top:.25rem !important}.pt-xxl-2{padding-top:.5rem !important}.pt-xxl-3{padding-top:1rem !important}.pt-xxl-4{padding-top:1.5rem !important}.pt-xxl-5{padding-top:3rem !important}.pe-xxl-0{padding-right:0 !important}.pe-xxl-1{padding-right:.25rem !important}.pe-xxl-2{padding-right:.5rem !important}.pe-xxl-3{padding-right:1rem !important}.pe-xxl-4{padding-right:1.5rem !important}.pe-xxl-5{padding-right:3rem !important}.pb-xxl-0{padding-bottom:0 !important}.pb-xxl-1{padding-bottom:.25rem !important}.pb-xxl-2{padding-bottom:.5rem !important}.pb-xxl-3{padding-bottom:1rem !important}.pb-xxl-4{padding-bottom:1.5rem !important}.pb-xxl-5{padding-bottom:3rem !important}.ps-xxl-0{padding-left:0 !important}.ps-xxl-1{padding-left:.25rem !important}.ps-xxl-2{padding-left:.5rem !important}.ps-xxl-3{padding-left:1rem !important}.ps-xxl-4{padding-left:1.5rem !important}.ps-xxl-5{padding-left:3rem !important}.text-xxl-start{text-align:left !important}.text-xxl-end{text-align:right !important}.text-xxl-center{text-align:center !important}}@media (min-width: 1200px){.fs-1{font-size:2.5rem !important}.fs-2{font-size:2rem !important}.fs-3{font-size:1.75rem !important}.fs-4{font-size:1.5rem !important}}@media print{.d-print-inline{display:inline !important}.d-print-inline-block{display:inline-block !important}.d-print-block{display:block !important}.d-print-grid{display:grid !important}.d-print-table{display:table !important}.d-print-table-row{display:table-row !important}.d-print-table-cell{display:table-cell !important}.d-print-flex{display:flex !important}.d-print-inline-flex{display:inline-flex !important}.d-print-none{display:none !important}} diff --git a/bootstrap/scss/bootstrap.css b/bootstrap/scss/bootstrap.css new file mode 100644 index 0000000000..2f1dd5f90a --- /dev/null +++ b/bootstrap/scss/bootstrap.css @@ -0,0 +1,6 @@ +/*! + * Bootstrap v5.0.0-beta3 (https://getbootstrap.com/) + * Copyright 2011-2021 The Bootstrap Authors + * Copyright 2011-2021 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) + */:root{--bs-blue: #0d6efd;--bs-indigo: #6610f2;--bs-purple: #6f42c1;--bs-pink: #d63384;--bs-red: #dc3545;--bs-orange: #fd7e14;--bs-yellow: #ffc107;--bs-green: #198754;--bs-teal: #20c997;--bs-cyan: #0dcaf0;--bs-white: #fff;--bs-gray: #6c757d;--bs-gray-dark: #343a40;--bs-primary: #0d6efd;--bs-secondary: #6c757d;--bs-success: #198754;--bs-info: #0dcaf0;--bs-warning: #ffc107;--bs-danger: #dc3545;--bs-light: #f8f9fa;--bs-dark: #212529;--bs-font-sans-serif: system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", "Liberation Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--bs-font-monospace: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;--bs-gradient: linear-gradient(180deg, rgba(255,255,255,0.15), rgba(255,255,255,0))}*,*::before,*::after{box-sizing:border-box}@media (prefers-reduced-motion: no-preference){:root{scroll-behavior:smooth}}body{margin:0;font-family:var(--bs-font-sans-serif);font-size:1rem;font-weight:400;line-height:1.5;color:#212529;background-color:#fff;-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:rgba(0,0,0,0)}hr{margin:1rem 0;color:inherit;background-color:currentColor;border:0;opacity:.25}hr:not([size]){height:1px}h6,.h6,h5,.h5,h4,.h4,h3,.h3,h2,.h2,h1,.h1{margin-top:0;margin-bottom:.5rem;font-weight:500;line-height:1.2}h1,.h1{font-size:calc(1.375rem + 1.5vw)}@media (min-width: 1200px){h1,.h1{font-size:2.5rem}}h2,.h2{font-size:calc(1.325rem + .9vw)}@media (min-width: 1200px){h2,.h2{font-size:2rem}}h3,.h3{font-size:calc(1.3rem + .6vw)}@media (min-width: 1200px){h3,.h3{font-size:1.75rem}}h4,.h4{font-size:calc(1.275rem + .3vw)}@media (min-width: 1200px){h4,.h4{font-size:1.5rem}}h5,.h5{font-size:1.25rem}h6,.h6{font-size:1rem}p{margin-top:0;margin-bottom:1rem}abbr[title],abbr[data-bs-original-title]{text-decoration:underline dotted;cursor:help;text-decoration-skip-ink:none}address{margin-bottom:1rem;font-style:normal;line-height:inherit}ol,ul{padding-left:2rem}ol,ul,dl{margin-top:0;margin-bottom:1rem}ol ol,ul ul,ol ul,ul ol{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}b,strong{font-weight:bolder}small,.small{font-size:.875em}mark,.mark{padding:.2em;background-color:#fcf8e3}sub,sup{position:relative;font-size:.75em;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:#0d6efd;text-decoration:underline}a:hover{color:#0a58ca}a:not([href]):not([class]),a:not([href]):not([class]):hover{color:inherit;text-decoration:none}pre,code,kbd,samp{font-family:var(--bs-font-monospace);font-size:1em;direction:ltr /* rtl:ignore */;unicode-bidi:bidi-override}pre{display:block;margin-top:0;margin-bottom:1rem;overflow:auto;font-size:.875em}pre code{font-size:inherit;color:inherit;word-break:normal}code{font-size:.875em;color:#d63384;word-wrap:break-word}a>code{color:inherit}kbd{padding:.2rem .4rem;font-size:.875em;color:#fff;background-color:#212529;border-radius:.2rem}kbd kbd{padding:0;font-size:1em;font-weight:700}figure{margin:0 0 1rem}img,svg{vertical-align:middle}table{caption-side:bottom;border-collapse:collapse}caption{padding-top:.5rem;padding-bottom:.5rem;color:#6c757d;text-align:left}th{text-align:inherit;text-align:-webkit-match-parent}thead,tbody,tfoot,tr,td,th{border-color:inherit;border-style:solid;border-width:0}label{display:inline-block}button{border-radius:0}button:focus:not(:focus-visible){outline:0}input,button,select,optgroup,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,select{text-transform:none}[role="button"]{cursor:pointer}select{word-wrap:normal}select:disabled{opacity:1}[list]::-webkit-calendar-picker-indicator{display:none}button,[type="button"],[type="reset"],[type="submit"]{-webkit-appearance:button}button:not(:disabled),[type="button"]:not(:disabled),[type="reset"]:not(:disabled),[type="submit"]:not(:disabled){cursor:pointer}::-moz-focus-inner{padding:0;border-style:none}textarea{resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{float:left;width:100%;padding:0;margin-bottom:.5rem;font-size:calc(1.275rem + .3vw);line-height:inherit}@media (min-width: 1200px){legend{font-size:1.5rem}}legend+*{clear:left}::-webkit-datetime-edit-fields-wrapper,::-webkit-datetime-edit-text,::-webkit-datetime-edit-minute,::-webkit-datetime-edit-hour-field,::-webkit-datetime-edit-day-field,::-webkit-datetime-edit-month-field,::-webkit-datetime-edit-year-field{padding:0}::-webkit-inner-spin-button{height:auto}[type="search"]{outline-offset:-2px;-webkit-appearance:textfield}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-color-swatch-wrapper{padding:0}::file-selector-button{font:inherit}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}output{display:inline-block}iframe{border:0}summary{display:list-item;cursor:pointer}progress{vertical-align:baseline}[hidden]{display:none !important}.lead{font-size:1.25rem;font-weight:300}.display-1{font-size:calc(1.625rem + 4.5vw);font-weight:300;line-height:1.2}@media (min-width: 1200px){.display-1{font-size:5rem}}.display-2{font-size:calc(1.575rem + 3.9vw);font-weight:300;line-height:1.2}@media (min-width: 1200px){.display-2{font-size:4.5rem}}.display-3{font-size:calc(1.525rem + 3.3vw);font-weight:300;line-height:1.2}@media (min-width: 1200px){.display-3{font-size:4rem}}.display-4{font-size:calc(1.475rem + 2.7vw);font-weight:300;line-height:1.2}@media (min-width: 1200px){.display-4{font-size:3.5rem}}.display-5{font-size:calc(1.425rem + 2.1vw);font-weight:300;line-height:1.2}@media (min-width: 1200px){.display-5{font-size:3rem}}.display-6{font-size:calc(1.375rem + 1.5vw);font-weight:300;line-height:1.2}@media (min-width: 1200px){.display-6{font-size:2.5rem}}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;list-style:none}.list-inline-item{display:inline-block}.list-inline-item:not(:last-child){margin-right:.5rem}.initialism{font-size:.875em;text-transform:uppercase}.blockquote{margin-bottom:1rem;font-size:1.25rem}.blockquote>:last-child{margin-bottom:0}.blockquote-footer{margin-top:-1rem;margin-bottom:1rem;font-size:.875em;color:#6c757d}.blockquote-footer::before{content:"\2014\00A0"}.img-fluid{max-width:100%;height:auto}img{max-width:100%;height:auto}.img-thumbnail{padding:.25rem;background-color:#fff;border:1px solid #dee2e6;border-radius:.25rem;max-width:100%;height:auto}.figure{display:inline-block}.figure-img{margin-bottom:.5rem;line-height:1}.figure-caption{font-size:.875em;color:#6c757d}.container,.container-fluid,.container-xxl,.container-xl,.container-lg,.container-md,.container-sm{width:100%;padding-right:var(--bs-gutter-x, .75rem);padding-left:var(--bs-gutter-x, .75rem);margin-right:auto;margin-left:auto}@media (min-width: 576px){.container-sm,.container{max-width:540px}}@media (min-width: 768px){.container-md,.container-sm,.container{max-width:720px}}@media (min-width: 992px){.container-lg,.container-md,.container-sm,.container{max-width:960px}}@media (min-width: 1200px){.container-xl,.container-lg,.container-md,.container-sm,.container{max-width:1140px}}@media (min-width: 1400px){.container-xxl,.container-xl,.container-lg,.container-md,.container-sm,.container{max-width:1320px}}.row{--bs-gutter-x: 1.5rem;--bs-gutter-y: 0;display:flex;flex-wrap:wrap;margin-top:calc(var(--bs-gutter-y) * -1);margin-right:calc(var(--bs-gutter-x) / -2);margin-left:calc(var(--bs-gutter-x) / -2)}.row>*{flex-shrink:0;width:100%;max-width:100%;padding-right:calc(var(--bs-gutter-x) / 2);padding-left:calc(var(--bs-gutter-x) / 2);margin-top:var(--bs-gutter-y)}.col{flex:1 0 0%}.row-cols-auto>*{flex:0 0 auto;width:auto}.row-cols-1>*{flex:0 0 auto;width:100%}.row-cols-2>*{flex:0 0 auto;width:50%}.row-cols-3>*{flex:0 0 auto;width:33.33333%}.row-cols-4>*{flex:0 0 auto;width:25%}.row-cols-5>*{flex:0 0 auto;width:20%}.row-cols-6>*{flex:0 0 auto;width:16.66667%}.col-auto{flex:0 0 auto;width:auto}.col-1{flex:0 0 auto;width:8.33333%}.col-2{flex:0 0 auto;width:16.66667%}.col-3{flex:0 0 auto;width:25%}.col-4{flex:0 0 auto;width:33.33333%}.col-5{flex:0 0 auto;width:41.66667%}.col-6{flex:0 0 auto;width:50%}.col-7{flex:0 0 auto;width:58.33333%}.col-8{flex:0 0 auto;width:66.66667%}.col-9{flex:0 0 auto;width:75%}.col-10{flex:0 0 auto;width:83.33333%}.col-11{flex:0 0 auto;width:91.66667%}.col-12{flex:0 0 auto;width:100%}.offset-1{margin-left:8.33333%}.offset-2{margin-left:16.66667%}.offset-3{margin-left:25%}.offset-4{margin-left:33.33333%}.offset-5{margin-left:41.66667%}.offset-6{margin-left:50%}.offset-7{margin-left:58.33333%}.offset-8{margin-left:66.66667%}.offset-9{margin-left:75%}.offset-10{margin-left:83.33333%}.offset-11{margin-left:91.66667%}.g-0,.gx-0{--bs-gutter-x: 0}.g-0,.gy-0{--bs-gutter-y: 0}.g-1,.gx-1{--bs-gutter-x: .25rem}.g-1,.gy-1{--bs-gutter-y: .25rem}.g-2,.gx-2{--bs-gutter-x: .5rem}.g-2,.gy-2{--bs-gutter-y: .5rem}.g-3,.gx-3{--bs-gutter-x: 1rem}.g-3,.gy-3{--bs-gutter-y: 1rem}.g-4,.gx-4{--bs-gutter-x: 1.5rem}.g-4,.gy-4{--bs-gutter-y: 1.5rem}.g-5,.gx-5{--bs-gutter-x: 3rem}.g-5,.gy-5{--bs-gutter-y: 3rem}@media (min-width: 576px){.col-sm{flex:1 0 0%}.row-cols-sm-auto>*{flex:0 0 auto;width:auto}.row-cols-sm-1>*{flex:0 0 auto;width:100%}.row-cols-sm-2>*{flex:0 0 auto;width:50%}.row-cols-sm-3>*{flex:0 0 auto;width:33.33333%}.row-cols-sm-4>*{flex:0 0 auto;width:25%}.row-cols-sm-5>*{flex:0 0 auto;width:20%}.row-cols-sm-6>*{flex:0 0 auto;width:16.66667%}.col-sm-auto{flex:0 0 auto;width:auto}.col-sm-1{flex:0 0 auto;width:8.33333%}.col-sm-2{flex:0 0 auto;width:16.66667%}.col-sm-3{flex:0 0 auto;width:25%}.col-sm-4{flex:0 0 auto;width:33.33333%}.col-sm-5{flex:0 0 auto;width:41.66667%}.col-sm-6{flex:0 0 auto;width:50%}.col-sm-7{flex:0 0 auto;width:58.33333%}.col-sm-8{flex:0 0 auto;width:66.66667%}.col-sm-9{flex:0 0 auto;width:75%}.col-sm-10{flex:0 0 auto;width:83.33333%}.col-sm-11{flex:0 0 auto;width:91.66667%}.col-sm-12{flex:0 0 auto;width:100%}.offset-sm-0{margin-left:0}.offset-sm-1{margin-left:8.33333%}.offset-sm-2{margin-left:16.66667%}.offset-sm-3{margin-left:25%}.offset-sm-4{margin-left:33.33333%}.offset-sm-5{margin-left:41.66667%}.offset-sm-6{margin-left:50%}.offset-sm-7{margin-left:58.33333%}.offset-sm-8{margin-left:66.66667%}.offset-sm-9{margin-left:75%}.offset-sm-10{margin-left:83.33333%}.offset-sm-11{margin-left:91.66667%}.g-sm-0,.gx-sm-0{--bs-gutter-x: 0}.g-sm-0,.gy-sm-0{--bs-gutter-y: 0}.g-sm-1,.gx-sm-1{--bs-gutter-x: .25rem}.g-sm-1,.gy-sm-1{--bs-gutter-y: .25rem}.g-sm-2,.gx-sm-2{--bs-gutter-x: .5rem}.g-sm-2,.gy-sm-2{--bs-gutter-y: .5rem}.g-sm-3,.gx-sm-3{--bs-gutter-x: 1rem}.g-sm-3,.gy-sm-3{--bs-gutter-y: 1rem}.g-sm-4,.gx-sm-4{--bs-gutter-x: 1.5rem}.g-sm-4,.gy-sm-4{--bs-gutter-y: 1.5rem}.g-sm-5,.gx-sm-5{--bs-gutter-x: 3rem}.g-sm-5,.gy-sm-5{--bs-gutter-y: 3rem}}@media (min-width: 768px){.col-md{flex:1 0 0%}.row-cols-md-auto>*{flex:0 0 auto;width:auto}.row-cols-md-1>*{flex:0 0 auto;width:100%}.row-cols-md-2>*{flex:0 0 auto;width:50%}.row-cols-md-3>*{flex:0 0 auto;width:33.33333%}.row-cols-md-4>*{flex:0 0 auto;width:25%}.row-cols-md-5>*{flex:0 0 auto;width:20%}.row-cols-md-6>*{flex:0 0 auto;width:16.66667%}.col-md-auto{flex:0 0 auto;width:auto}.col-md-1{flex:0 0 auto;width:8.33333%}.col-md-2{flex:0 0 auto;width:16.66667%}.col-md-3{flex:0 0 auto;width:25%}.col-md-4{flex:0 0 auto;width:33.33333%}.col-md-5{flex:0 0 auto;width:41.66667%}.col-md-6{flex:0 0 auto;width:50%}.col-md-7{flex:0 0 auto;width:58.33333%}.col-md-8{flex:0 0 auto;width:66.66667%}.col-md-9{flex:0 0 auto;width:75%}.col-md-10{flex:0 0 auto;width:83.33333%}.col-md-11{flex:0 0 auto;width:91.66667%}.col-md-12{flex:0 0 auto;width:100%}.offset-md-0{margin-left:0}.offset-md-1{margin-left:8.33333%}.offset-md-2{margin-left:16.66667%}.offset-md-3{margin-left:25%}.offset-md-4{margin-left:33.33333%}.offset-md-5{margin-left:41.66667%}.offset-md-6{margin-left:50%}.offset-md-7{margin-left:58.33333%}.offset-md-8{margin-left:66.66667%}.offset-md-9{margin-left:75%}.offset-md-10{margin-left:83.33333%}.offset-md-11{margin-left:91.66667%}.g-md-0,.gx-md-0{--bs-gutter-x: 0}.g-md-0,.gy-md-0{--bs-gutter-y: 0}.g-md-1,.gx-md-1{--bs-gutter-x: .25rem}.g-md-1,.gy-md-1{--bs-gutter-y: .25rem}.g-md-2,.gx-md-2{--bs-gutter-x: .5rem}.g-md-2,.gy-md-2{--bs-gutter-y: .5rem}.g-md-3,.gx-md-3{--bs-gutter-x: 1rem}.g-md-3,.gy-md-3{--bs-gutter-y: 1rem}.g-md-4,.gx-md-4{--bs-gutter-x: 1.5rem}.g-md-4,.gy-md-4{--bs-gutter-y: 1.5rem}.g-md-5,.gx-md-5{--bs-gutter-x: 3rem}.g-md-5,.gy-md-5{--bs-gutter-y: 3rem}}@media (min-width: 992px){.col-lg{flex:1 0 0%}.row-cols-lg-auto>*{flex:0 0 auto;width:auto}.row-cols-lg-1>*{flex:0 0 auto;width:100%}.row-cols-lg-2>*{flex:0 0 auto;width:50%}.row-cols-lg-3>*{flex:0 0 auto;width:33.33333%}.row-cols-lg-4>*{flex:0 0 auto;width:25%}.row-cols-lg-5>*{flex:0 0 auto;width:20%}.row-cols-lg-6>*{flex:0 0 auto;width:16.66667%}.col-lg-auto{flex:0 0 auto;width:auto}.col-lg-1{flex:0 0 auto;width:8.33333%}.col-lg-2{flex:0 0 auto;width:16.66667%}.col-lg-3{flex:0 0 auto;width:25%}.col-lg-4{flex:0 0 auto;width:33.33333%}.col-lg-5{flex:0 0 auto;width:41.66667%}.col-lg-6{flex:0 0 auto;width:50%}.col-lg-7{flex:0 0 auto;width:58.33333%}.col-lg-8{flex:0 0 auto;width:66.66667%}.col-lg-9{flex:0 0 auto;width:75%}.col-lg-10{flex:0 0 auto;width:83.33333%}.col-lg-11{flex:0 0 auto;width:91.66667%}.col-lg-12{flex:0 0 auto;width:100%}.offset-lg-0{margin-left:0}.offset-lg-1{margin-left:8.33333%}.offset-lg-2{margin-left:16.66667%}.offset-lg-3{margin-left:25%}.offset-lg-4{margin-left:33.33333%}.offset-lg-5{margin-left:41.66667%}.offset-lg-6{margin-left:50%}.offset-lg-7{margin-left:58.33333%}.offset-lg-8{margin-left:66.66667%}.offset-lg-9{margin-left:75%}.offset-lg-10{margin-left:83.33333%}.offset-lg-11{margin-left:91.66667%}.g-lg-0,.gx-lg-0{--bs-gutter-x: 0}.g-lg-0,.gy-lg-0{--bs-gutter-y: 0}.g-lg-1,.gx-lg-1{--bs-gutter-x: .25rem}.g-lg-1,.gy-lg-1{--bs-gutter-y: .25rem}.g-lg-2,.gx-lg-2{--bs-gutter-x: .5rem}.g-lg-2,.gy-lg-2{--bs-gutter-y: .5rem}.g-lg-3,.gx-lg-3{--bs-gutter-x: 1rem}.g-lg-3,.gy-lg-3{--bs-gutter-y: 1rem}.g-lg-4,.gx-lg-4{--bs-gutter-x: 1.5rem}.g-lg-4,.gy-lg-4{--bs-gutter-y: 1.5rem}.g-lg-5,.gx-lg-5{--bs-gutter-x: 3rem}.g-lg-5,.gy-lg-5{--bs-gutter-y: 3rem}}@media (min-width: 1200px){.col-xl{flex:1 0 0%}.row-cols-xl-auto>*{flex:0 0 auto;width:auto}.row-cols-xl-1>*{flex:0 0 auto;width:100%}.row-cols-xl-2>*{flex:0 0 auto;width:50%}.row-cols-xl-3>*{flex:0 0 auto;width:33.33333%}.row-cols-xl-4>*{flex:0 0 auto;width:25%}.row-cols-xl-5>*{flex:0 0 auto;width:20%}.row-cols-xl-6>*{flex:0 0 auto;width:16.66667%}.col-xl-auto{flex:0 0 auto;width:auto}.col-xl-1{flex:0 0 auto;width:8.33333%}.col-xl-2{flex:0 0 auto;width:16.66667%}.col-xl-3{flex:0 0 auto;width:25%}.col-xl-4{flex:0 0 auto;width:33.33333%}.col-xl-5{flex:0 0 auto;width:41.66667%}.col-xl-6{flex:0 0 auto;width:50%}.col-xl-7{flex:0 0 auto;width:58.33333%}.col-xl-8{flex:0 0 auto;width:66.66667%}.col-xl-9{flex:0 0 auto;width:75%}.col-xl-10{flex:0 0 auto;width:83.33333%}.col-xl-11{flex:0 0 auto;width:91.66667%}.col-xl-12{flex:0 0 auto;width:100%}.offset-xl-0{margin-left:0}.offset-xl-1{margin-left:8.33333%}.offset-xl-2{margin-left:16.66667%}.offset-xl-3{margin-left:25%}.offset-xl-4{margin-left:33.33333%}.offset-xl-5{margin-left:41.66667%}.offset-xl-6{margin-left:50%}.offset-xl-7{margin-left:58.33333%}.offset-xl-8{margin-left:66.66667%}.offset-xl-9{margin-left:75%}.offset-xl-10{margin-left:83.33333%}.offset-xl-11{margin-left:91.66667%}.g-xl-0,.gx-xl-0{--bs-gutter-x: 0}.g-xl-0,.gy-xl-0{--bs-gutter-y: 0}.g-xl-1,.gx-xl-1{--bs-gutter-x: .25rem}.g-xl-1,.gy-xl-1{--bs-gutter-y: .25rem}.g-xl-2,.gx-xl-2{--bs-gutter-x: .5rem}.g-xl-2,.gy-xl-2{--bs-gutter-y: .5rem}.g-xl-3,.gx-xl-3{--bs-gutter-x: 1rem}.g-xl-3,.gy-xl-3{--bs-gutter-y: 1rem}.g-xl-4,.gx-xl-4{--bs-gutter-x: 1.5rem}.g-xl-4,.gy-xl-4{--bs-gutter-y: 1.5rem}.g-xl-5,.gx-xl-5{--bs-gutter-x: 3rem}.g-xl-5,.gy-xl-5{--bs-gutter-y: 3rem}}@media (min-width: 1400px){.col-xxl{flex:1 0 0%}.row-cols-xxl-auto>*{flex:0 0 auto;width:auto}.row-cols-xxl-1>*{flex:0 0 auto;width:100%}.row-cols-xxl-2>*{flex:0 0 auto;width:50%}.row-cols-xxl-3>*{flex:0 0 auto;width:33.33333%}.row-cols-xxl-4>*{flex:0 0 auto;width:25%}.row-cols-xxl-5>*{flex:0 0 auto;width:20%}.row-cols-xxl-6>*{flex:0 0 auto;width:16.66667%}.col-xxl-auto{flex:0 0 auto;width:auto}.col-xxl-1{flex:0 0 auto;width:8.33333%}.col-xxl-2{flex:0 0 auto;width:16.66667%}.col-xxl-3{flex:0 0 auto;width:25%}.col-xxl-4{flex:0 0 auto;width:33.33333%}.col-xxl-5{flex:0 0 auto;width:41.66667%}.col-xxl-6{flex:0 0 auto;width:50%}.col-xxl-7{flex:0 0 auto;width:58.33333%}.col-xxl-8{flex:0 0 auto;width:66.66667%}.col-xxl-9{flex:0 0 auto;width:75%}.col-xxl-10{flex:0 0 auto;width:83.33333%}.col-xxl-11{flex:0 0 auto;width:91.66667%}.col-xxl-12{flex:0 0 auto;width:100%}.offset-xxl-0{margin-left:0}.offset-xxl-1{margin-left:8.33333%}.offset-xxl-2{margin-left:16.66667%}.offset-xxl-3{margin-left:25%}.offset-xxl-4{margin-left:33.33333%}.offset-xxl-5{margin-left:41.66667%}.offset-xxl-6{margin-left:50%}.offset-xxl-7{margin-left:58.33333%}.offset-xxl-8{margin-left:66.66667%}.offset-xxl-9{margin-left:75%}.offset-xxl-10{margin-left:83.33333%}.offset-xxl-11{margin-left:91.66667%}.g-xxl-0,.gx-xxl-0{--bs-gutter-x: 0}.g-xxl-0,.gy-xxl-0{--bs-gutter-y: 0}.g-xxl-1,.gx-xxl-1{--bs-gutter-x: .25rem}.g-xxl-1,.gy-xxl-1{--bs-gutter-y: .25rem}.g-xxl-2,.gx-xxl-2{--bs-gutter-x: .5rem}.g-xxl-2,.gy-xxl-2{--bs-gutter-y: .5rem}.g-xxl-3,.gx-xxl-3{--bs-gutter-x: 1rem}.g-xxl-3,.gy-xxl-3{--bs-gutter-y: 1rem}.g-xxl-4,.gx-xxl-4{--bs-gutter-x: 1.5rem}.g-xxl-4,.gy-xxl-4{--bs-gutter-y: 1.5rem}.g-xxl-5,.gx-xxl-5{--bs-gutter-x: 3rem}.g-xxl-5,.gy-xxl-5{--bs-gutter-y: 3rem}}.table{--bs-table-bg: rgba(0,0,0,0);--bs-table-striped-color: #212529;--bs-table-striped-bg: rgba(0,0,0,0.05);--bs-table-active-color: #212529;--bs-table-active-bg: rgba(0,0,0,0.1);--bs-table-hover-color: #212529;--bs-table-hover-bg: rgba(0,0,0,0.075);width:100%;margin-bottom:1rem;color:#212529;vertical-align:top;border-color:#dee2e6}.table>:not(caption)>*>*{padding:.5rem .5rem;background-color:var(--bs-table-bg);border-bottom-width:1px;box-shadow:inset 0 0 0 9999px var(--bs-table-accent-bg)}.table>tbody{vertical-align:inherit}.table>thead{vertical-align:bottom}.table>:not(:last-child)>:last-child>*{border-bottom-color:currentColor}.caption-top{caption-side:top}.table-sm>:not(caption)>*>*{padding:.25rem .25rem}.table-bordered>:not(caption)>*{border-width:1px 0}.table-bordered>:not(caption)>*>*{border-width:0 1px}.table-borderless>:not(caption)>*>*{border-bottom-width:0}.table-striped>tbody>tr:nth-of-type(odd){--bs-table-accent-bg: var(--bs-table-striped-bg);color:var(--bs-table-striped-color)}.table-active{--bs-table-accent-bg: var(--bs-table-active-bg);color:var(--bs-table-active-color)}.table-hover>tbody>tr:hover{--bs-table-accent-bg: var(--bs-table-hover-bg);color:var(--bs-table-hover-color)}.table-primary{--bs-table-bg: #cfe2ff;--bs-table-striped-bg: #c5d7f2;--bs-table-striped-color: #000;--bs-table-active-bg: #bacbe6;--bs-table-active-color: #000;--bs-table-hover-bg: #bfd1ec;--bs-table-hover-color: #000;color:#000;border-color:#bacbe6}.table-secondary{--bs-table-bg: #e2e3e5;--bs-table-striped-bg: #d7d8da;--bs-table-striped-color: #000;--bs-table-active-bg: #cbccce;--bs-table-active-color: #000;--bs-table-hover-bg: #d1d2d4;--bs-table-hover-color: #000;color:#000;border-color:#cbccce}.table-success{--bs-table-bg: #d1e7dd;--bs-table-striped-bg: #c7dbd2;--bs-table-striped-color: #000;--bs-table-active-bg: #bcd0c7;--bs-table-active-color: #000;--bs-table-hover-bg: #c1d6cc;--bs-table-hover-color: #000;color:#000;border-color:#bcd0c7}.table-info{--bs-table-bg: #cff4fc;--bs-table-striped-bg: #c5e8ef;--bs-table-striped-color: #000;--bs-table-active-bg: #badce3;--bs-table-active-color: #000;--bs-table-hover-bg: #bfe2e9;--bs-table-hover-color: #000;color:#000;border-color:#badce3}.table-warning{--bs-table-bg: #fff3cd;--bs-table-striped-bg: #f2e7c3;--bs-table-striped-color: #000;--bs-table-active-bg: #e6dbb9;--bs-table-active-color: #000;--bs-table-hover-bg: #ece1be;--bs-table-hover-color: #000;color:#000;border-color:#e6dbb9}.table-danger{--bs-table-bg: #f8d7da;--bs-table-striped-bg: #eccccf;--bs-table-striped-color: #000;--bs-table-active-bg: #dfc2c4;--bs-table-active-color: #000;--bs-table-hover-bg: #e5c7ca;--bs-table-hover-color: #000;color:#000;border-color:#dfc2c4}.table-light{--bs-table-bg: #f8f9fa;--bs-table-striped-bg: #ecedee;--bs-table-striped-color: #000;--bs-table-active-bg: #dfe0e1;--bs-table-active-color: #000;--bs-table-hover-bg: #e5e6e7;--bs-table-hover-color: #000;color:#000;border-color:#dfe0e1}.table-dark{--bs-table-bg: #212529;--bs-table-striped-bg: #2c3034;--bs-table-striped-color: #fff;--bs-table-active-bg: #373b3e;--bs-table-active-color: #fff;--bs-table-hover-bg: #323539;--bs-table-hover-color: #fff;color:#fff;border-color:#373b3e}.table-responsive{overflow-x:auto;-webkit-overflow-scrolling:touch}@media (max-width: 575.98px){.table-responsive-sm{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media (max-width: 767.98px){.table-responsive-md{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media (max-width: 991.98px){.table-responsive-lg{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media (max-width: 1199.98px){.table-responsive-xl{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media (max-width: 1399.98px){.table-responsive-xxl{overflow-x:auto;-webkit-overflow-scrolling:touch}}.form-label{margin-bottom:.5rem}.col-form-label{padding-top:calc(.375rem + 1px);padding-bottom:calc(.375rem + 1px);margin-bottom:0;font-size:inherit;line-height:1.5}.col-form-label-lg{padding-top:calc(.5rem + 1px);padding-bottom:calc(.5rem + 1px);font-size:1.25rem}.col-form-label-sm{padding-top:calc(.25rem + 1px);padding-bottom:calc(.25rem + 1px);font-size:.875rem}.form-text{margin-top:.25rem;font-size:.875em;color:#6c757d}.form-control{display:block;width:100%;padding:.375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:#212529;background-color:#fff;background-clip:padding-box;border:1px solid #ced4da;appearance:none;border-radius:.25rem;transition:border-color 0.15s ease-in-out,box-shadow 0.15s ease-in-out}@media (prefers-reduced-motion: reduce){.form-control{transition:none}}.form-control[type="file"]{overflow:hidden}.form-control[type="file"]:not(:disabled):not([readonly]){cursor:pointer}.form-control:focus{color:#212529;background-color:#fff;border-color:#86b7fe;outline:0;box-shadow:0 0 0 .25rem rgba(13,110,253,0.25)}.form-control::-webkit-date-and-time-value{height:1.5em}.form-control::placeholder{color:#6c757d;opacity:1}.form-control:disabled,.form-control[readonly]{background-color:#e9ecef;opacity:1}.form-control::file-selector-button{padding:.375rem .75rem;margin:-.375rem -.75rem;margin-inline-end:.75rem;color:#212529;background-color:#e9ecef;pointer-events:none;border-color:inherit;border-style:solid;border-width:0;border-inline-end-width:1px;border-radius:0;transition:color 0.15s ease-in-out,background-color 0.15s ease-in-out,border-color 0.15s ease-in-out,box-shadow 0.15s ease-in-out}@media (prefers-reduced-motion: reduce){.form-control::file-selector-button{transition:none}}.form-control:hover:not(:disabled):not([readonly])::file-selector-button{background-color:#dde0e3}.form-control::-webkit-file-upload-button{padding:.375rem .75rem;margin:-.375rem -.75rem;margin-inline-end:.75rem;color:#212529;background-color:#e9ecef;pointer-events:none;border-color:inherit;border-style:solid;border-width:0;border-inline-end-width:1px;border-radius:0;transition:color 0.15s ease-in-out,background-color 0.15s ease-in-out,border-color 0.15s ease-in-out,box-shadow 0.15s ease-in-out}@media (prefers-reduced-motion: reduce){.form-control::-webkit-file-upload-button{transition:none}}.form-control:hover:not(:disabled):not([readonly])::-webkit-file-upload-button{background-color:#dde0e3}.form-control-plaintext{display:block;width:100%;padding:.375rem 0;margin-bottom:0;line-height:1.5;color:#212529;background-color:transparent;border:solid transparent;border-width:1px 0}.form-control-plaintext.form-control-sm,.form-control-plaintext.form-control-lg{padding-right:0;padding-left:0}.form-control-sm{min-height:calc(1.5em + .5rem + 2px);padding:.25rem .5rem;font-size:.875rem;border-radius:.2rem}.form-control-sm::file-selector-button{padding:.25rem .5rem;margin:-.25rem -.5rem;margin-inline-end:.5rem}.form-control-sm::-webkit-file-upload-button{padding:.25rem .5rem;margin:-.25rem -.5rem;margin-inline-end:.5rem}.form-control-lg{min-height:calc(1.5em + 1rem + 2px);padding:.5rem 1rem;font-size:1.25rem;border-radius:.3rem}.form-control-lg::file-selector-button{padding:.5rem 1rem;margin:-.5rem -1rem;margin-inline-end:1rem}.form-control-lg::-webkit-file-upload-button{padding:.5rem 1rem;margin:-.5rem -1rem;margin-inline-end:1rem}textarea.form-control{min-height:calc(1.5em + .75rem + 2px)}textarea.form-control-sm{min-height:calc(1.5em + .5rem + 2px)}textarea.form-control-lg{min-height:calc(1.5em + 1rem + 2px)}.form-control-color{max-width:3rem;height:auto;padding:.375rem}.form-control-color:not(:disabled):not([readonly]){cursor:pointer}.form-control-color::-moz-color-swatch{height:1.5em;border-radius:.25rem}.form-control-color::-webkit-color-swatch{height:1.5em;border-radius:.25rem}.form-select{display:block;width:100%;padding:.375rem 2.25rem .375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:#212529;background-color:#fff;background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M2 5l6 6 6-6'/%3e%3c/svg%3e");background-repeat:no-repeat;background-position:right .75rem center;background-size:16px 12px;border:1px solid #ced4da;border-radius:.25rem;appearance:none}.form-select:focus{border-color:#86b7fe;outline:0;box-shadow:0 0 0 .25rem rgba(13,110,253,0.25)}.form-select[multiple],.form-select[size]:not([size="1"]){padding-right:.75rem;background-image:none}.form-select:disabled{background-color:#e9ecef}.form-select:-moz-focusring{color:transparent;text-shadow:0 0 0 #212529}.form-select-sm{padding-top:.25rem;padding-bottom:.25rem;padding-left:.5rem;font-size:.875rem}.form-select-lg{padding-top:.5rem;padding-bottom:.5rem;padding-left:1rem;font-size:1.25rem}.form-check{display:block;min-height:1.5rem;padding-left:1.5em;margin-bottom:.125rem}.form-check .form-check-input{float:left;margin-left:-1.5em}.form-check-input{width:1em;height:1em;margin-top:.25em;vertical-align:top;background-color:#fff;background-repeat:no-repeat;background-position:center;background-size:contain;border:1px solid rgba(0,0,0,0.25);appearance:none;color-adjust:exact}.form-check-input[type="checkbox"]{border-radius:.25em}.form-check-input[type="radio"]{border-radius:50%}.form-check-input:active{filter:brightness(90%)}.form-check-input:focus{border-color:#86b7fe;outline:0;box-shadow:0 0 0 .25rem rgba(13,110,253,0.25)}.form-check-input:checked{background-color:#0d6efd;border-color:#0d6efd}.form-check-input[type="checkbox"]:checked{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='M6 10l3 3l6-6'/%3e%3c/svg%3e")}.form-check-input[type="radio"]:checked{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='2' fill='%23fff'/%3e%3c/svg%3e")}.form-check-input[type="checkbox"]:indeterminate{background-color:#0d6efd;border-color:#0d6efd;background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='M6 10h8'/%3e%3c/svg%3e")}.form-check-input:disabled{pointer-events:none;filter:none;opacity:.5}.form-check-input[disabled]~.form-check-label,.form-check-input:disabled~.form-check-label{opacity:.5}.form-switch{padding-left:2.5em}.form-switch .form-check-input{width:2em;margin-left:-2.5em;background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='rgba%280,0,0,0.25%29'/%3e%3c/svg%3e");background-position:left center;border-radius:2em;transition:background-position 0.15s ease-in-out}@media (prefers-reduced-motion: reduce){.form-switch .form-check-input{transition:none}}.form-switch .form-check-input:focus{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%2386b7fe'/%3e%3c/svg%3e")}.form-switch .form-check-input:checked{background-position:right center;background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%23fff'/%3e%3c/svg%3e")}.form-check-inline{display:inline-block;margin-right:1rem}.btn-check{position:absolute;clip:rect(0, 0, 0, 0);pointer-events:none}.btn-check[disabled]+.btn,.btn-check:disabled+.btn{pointer-events:none;filter:none;opacity:.65}.form-range{width:100%;height:1.5rem;padding:0;background-color:transparent;appearance:none}.form-range:focus{outline:0}.form-range:focus::-webkit-slider-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .25rem rgba(13,110,253,0.25)}.form-range:focus::-moz-range-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .25rem rgba(13,110,253,0.25)}.form-range::-moz-focus-outer{border:0}.form-range::-webkit-slider-thumb{width:1rem;height:1rem;margin-top:-.25rem;background-color:#0d6efd;border:0;border-radius:1rem;transition:background-color 0.15s ease-in-out,border-color 0.15s ease-in-out,box-shadow 0.15s ease-in-out;appearance:none}@media (prefers-reduced-motion: reduce){.form-range::-webkit-slider-thumb{transition:none}}.form-range::-webkit-slider-thumb:active{background-color:#b6d4fe}.form-range::-webkit-slider-runnable-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:#dee2e6;border-color:transparent;border-radius:1rem}.form-range::-moz-range-thumb{width:1rem;height:1rem;background-color:#0d6efd;border:0;border-radius:1rem;transition:background-color 0.15s ease-in-out,border-color 0.15s ease-in-out,box-shadow 0.15s ease-in-out;appearance:none}@media (prefers-reduced-motion: reduce){.form-range::-moz-range-thumb{transition:none}}.form-range::-moz-range-thumb:active{background-color:#b6d4fe}.form-range::-moz-range-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:#dee2e6;border-color:transparent;border-radius:1rem}.form-range:disabled{pointer-events:none}.form-range:disabled::-webkit-slider-thumb{background-color:#adb5bd}.form-range:disabled::-moz-range-thumb{background-color:#adb5bd}.form-floating{position:relative}.form-floating>.form-control,.form-floating>.form-select{height:calc(3.5rem + 2px);padding:1rem .75rem}.form-floating>label{position:absolute;top:0;left:0;height:100%;padding:1rem .75rem;pointer-events:none;border:1px solid transparent;transform-origin:0 0;transition:opacity 0.1s ease-in-out,transform 0.1s ease-in-out}@media (prefers-reduced-motion: reduce){.form-floating>label{transition:none}}.form-floating>.form-control::placeholder{color:transparent}.form-floating>.form-control:focus,.form-floating>.form-control:not(:placeholder-shown){padding-top:1.625rem;padding-bottom:.625rem}.form-floating>.form-control:-webkit-autofill{padding-top:1.625rem;padding-bottom:.625rem}.form-floating>.form-select{padding-top:1.625rem;padding-bottom:.625rem}.form-floating>.form-control:focus~label,.form-floating>.form-control:not(:placeholder-shown)~label,.form-floating>.form-select~label{opacity:.65;transform:scale(0.85) translateY(-0.5rem) translateX(0.15rem)}.form-floating>.form-control:-webkit-autofill~label{opacity:.65;transform:scale(0.85) translateY(-0.5rem) translateX(0.15rem)}.input-group{position:relative;display:flex;flex-wrap:wrap;align-items:stretch;width:100%}.input-group>.form-control,.input-group>.form-select{position:relative;flex:1 1 auto;width:1%;min-width:0}.input-group>.form-control:focus,.input-group>.form-select:focus{z-index:3}.input-group .btn{position:relative;z-index:2}.input-group .btn:focus{z-index:3}.input-group-text{display:flex;align-items:center;padding:.375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:#212529;text-align:center;white-space:nowrap;background-color:#e9ecef;border:1px solid #ced4da;border-radius:.25rem}.input-group-lg>.form-control,.input-group-lg>.form-select,.input-group-lg>.input-group-text,.input-group-lg>.btn{padding:.5rem 1rem;font-size:1.25rem;border-radius:.3rem}.input-group-sm>.form-control,.input-group-sm>.form-select,.input-group-sm>.input-group-text,.input-group-sm>.btn{padding:.25rem .5rem;font-size:.875rem;border-radius:.2rem}.input-group-lg>.form-select,.input-group-sm>.form-select{padding-right:3rem}.input-group:not(.has-validation)>:not(:last-child):not(.dropdown-toggle):not(.dropdown-menu),.input-group:not(.has-validation)>.dropdown-toggle:nth-last-child(n + 3){border-top-right-radius:0;border-bottom-right-radius:0}.input-group.has-validation>:nth-last-child(n + 3):not(.dropdown-toggle):not(.dropdown-menu),.input-group.has-validation>.dropdown-toggle:nth-last-child(n + 4){border-top-right-radius:0;border-bottom-right-radius:0}.input-group>:not(:first-child):not(.dropdown-menu):not(.valid-tooltip):not(.valid-feedback):not(.invalid-tooltip):not(.invalid-feedback){margin-left:-1px;border-top-left-radius:0;border-bottom-left-radius:0}.valid-feedback{display:none;width:100%;margin-top:.25rem;font-size:.875em;color:#198754}.valid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:.875rem;color:#fff;background-color:rgba(25,135,84,0.9);border-radius:.25rem}.was-validated :valid~.valid-feedback,.was-validated :valid~.valid-tooltip,.is-valid~.valid-feedback,.is-valid~.valid-tooltip{display:block}.was-validated .form-control:valid,.form-control.is-valid{border-color:#198754;padding-right:calc(1.5em + .75rem);background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%23198754' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e");background-repeat:no-repeat;background-position:right calc(.375em + .1875rem) center;background-size:calc(.75em + .375rem) calc(.75em + .375rem)}.was-validated .form-control:valid:focus,.form-control.is-valid:focus{border-color:#198754;box-shadow:0 0 0 .25rem rgba(25,135,84,0.25)}.was-validated textarea.form-control:valid,textarea.form-control.is-valid{padding-right:calc(1.5em + .75rem);background-position:top calc(.375em + .1875rem) right calc(.375em + .1875rem)}.was-validated .form-select:valid,.form-select.is-valid{border-color:#198754;padding-right:4.125rem;background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M2 5l6 6 6-6'/%3e%3c/svg%3e"),url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%23198754' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e");background-position:right .75rem center,center right 2.25rem;background-size:16px 12px,calc(.75em + .375rem) calc(.75em + .375rem)}.was-validated .form-select:valid:focus,.form-select.is-valid:focus{border-color:#198754;box-shadow:0 0 0 .25rem rgba(25,135,84,0.25)}.was-validated .form-check-input:valid,.form-check-input.is-valid{border-color:#198754}.was-validated .form-check-input:valid:checked,.form-check-input.is-valid:checked{background-color:#198754}.was-validated .form-check-input:valid:focus,.form-check-input.is-valid:focus{box-shadow:0 0 0 .25rem rgba(25,135,84,0.25)}.was-validated .form-check-input:valid~.form-check-label,.form-check-input.is-valid~.form-check-label{color:#198754}.form-check-inline .form-check-input~.valid-feedback{margin-left:.5em}.was-validated .input-group .form-control:valid,.input-group .form-control.is-valid,.was-validated .input-group .form-select:valid,.input-group .form-select.is-valid{z-index:3}.invalid-feedback{display:none;width:100%;margin-top:.25rem;font-size:.875em;color:#dc3545}.invalid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:.875rem;color:#fff;background-color:rgba(220,53,69,0.9);border-radius:.25rem}.was-validated :invalid~.invalid-feedback,.was-validated :invalid~.invalid-tooltip,.is-invalid~.invalid-feedback,.is-invalid~.invalid-tooltip{display:block}.was-validated .form-control:invalid,.form-control.is-invalid{border-color:#dc3545;padding-right:calc(1.5em + .75rem);background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23dc3545'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e");background-repeat:no-repeat;background-position:right calc(.375em + .1875rem) center;background-size:calc(.75em + .375rem) calc(.75em + .375rem)}.was-validated .form-control:invalid:focus,.form-control.is-invalid:focus{border-color:#dc3545;box-shadow:0 0 0 .25rem rgba(220,53,69,0.25)}.was-validated textarea.form-control:invalid,textarea.form-control.is-invalid{padding-right:calc(1.5em + .75rem);background-position:top calc(.375em + .1875rem) right calc(.375em + .1875rem)}.was-validated .form-select:invalid,.form-select.is-invalid{border-color:#dc3545;padding-right:4.125rem;background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M2 5l6 6 6-6'/%3e%3c/svg%3e"),url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23dc3545'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e");background-position:right .75rem center,center right 2.25rem;background-size:16px 12px,calc(.75em + .375rem) calc(.75em + .375rem)}.was-validated .form-select:invalid:focus,.form-select.is-invalid:focus{border-color:#dc3545;box-shadow:0 0 0 .25rem rgba(220,53,69,0.25)}.was-validated .form-check-input:invalid,.form-check-input.is-invalid{border-color:#dc3545}.was-validated .form-check-input:invalid:checked,.form-check-input.is-invalid:checked{background-color:#dc3545}.was-validated .form-check-input:invalid:focus,.form-check-input.is-invalid:focus{box-shadow:0 0 0 .25rem rgba(220,53,69,0.25)}.was-validated .form-check-input:invalid~.form-check-label,.form-check-input.is-invalid~.form-check-label{color:#dc3545}.form-check-inline .form-check-input~.invalid-feedback{margin-left:.5em}.was-validated .input-group .form-control:invalid,.input-group .form-control.is-invalid,.was-validated .input-group .form-select:invalid,.input-group .form-select.is-invalid{z-index:3}.btn{display:inline-block;font-weight:400;line-height:1.5;color:#212529;text-align:center;text-decoration:none;vertical-align:middle;cursor:pointer;user-select:none;background-color:transparent;border:1px solid transparent;padding:.375rem .75rem;font-size:1rem;border-radius:.25rem;transition:color 0.15s ease-in-out,background-color 0.15s ease-in-out,border-color 0.15s ease-in-out,box-shadow 0.15s ease-in-out}@media (prefers-reduced-motion: reduce){.btn{transition:none}}.btn:hover{color:#212529}.btn-check:focus+.btn,.btn:focus{outline:0;box-shadow:0 0 0 .25rem rgba(13,110,253,0.25)}.btn:disabled,.btn.disabled,fieldset:disabled .btn{pointer-events:none;opacity:.65}.btn-primary{color:#fff;background-color:#0d6efd;border-color:#0d6efd}.btn-primary:hover{color:#fff;background-color:#0b5ed7;border-color:#0a58ca}.btn-check:focus+.btn-primary,.btn-primary:focus{color:#fff;background-color:#0b5ed7;border-color:#0a58ca;box-shadow:0 0 0 .25rem rgba(49,132,253,0.5)}.btn-check:checked+.btn-primary,.btn-check:active+.btn-primary,.btn-primary:active,.btn-primary.active,.show>.btn-primary.dropdown-toggle{color:#fff;background-color:#0a58ca;border-color:#0a53be}.btn-check:checked+.btn-primary:focus,.btn-check:active+.btn-primary:focus,.btn-primary:active:focus,.btn-primary.active:focus,.show>.btn-primary.dropdown-toggle:focus{box-shadow:0 0 0 .25rem rgba(49,132,253,0.5)}.btn-primary:disabled,.btn-primary.disabled{color:#fff;background-color:#0d6efd;border-color:#0d6efd}.btn-secondary{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-secondary:hover{color:#fff;background-color:#5c636a;border-color:#565e64}.btn-check:focus+.btn-secondary,.btn-secondary:focus{color:#fff;background-color:#5c636a;border-color:#565e64;box-shadow:0 0 0 .25rem rgba(130,138,145,0.5)}.btn-check:checked+.btn-secondary,.btn-check:active+.btn-secondary,.btn-secondary:active,.btn-secondary.active,.show>.btn-secondary.dropdown-toggle{color:#fff;background-color:#565e64;border-color:#51585e}.btn-check:checked+.btn-secondary:focus,.btn-check:active+.btn-secondary:focus,.btn-secondary:active:focus,.btn-secondary.active:focus,.show>.btn-secondary.dropdown-toggle:focus{box-shadow:0 0 0 .25rem rgba(130,138,145,0.5)}.btn-secondary:disabled,.btn-secondary.disabled{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-success{color:#fff;background-color:#198754;border-color:#198754}.btn-success:hover{color:#fff;background-color:#157347;border-color:#146c43}.btn-check:focus+.btn-success,.btn-success:focus{color:#fff;background-color:#157347;border-color:#146c43;box-shadow:0 0 0 .25rem rgba(60,153,110,0.5)}.btn-check:checked+.btn-success,.btn-check:active+.btn-success,.btn-success:active,.btn-success.active,.show>.btn-success.dropdown-toggle{color:#fff;background-color:#146c43;border-color:#13653f}.btn-check:checked+.btn-success:focus,.btn-check:active+.btn-success:focus,.btn-success:active:focus,.btn-success.active:focus,.show>.btn-success.dropdown-toggle:focus{box-shadow:0 0 0 .25rem rgba(60,153,110,0.5)}.btn-success:disabled,.btn-success.disabled{color:#fff;background-color:#198754;border-color:#198754}.btn-info{color:#000;background-color:#0dcaf0;border-color:#0dcaf0}.btn-info:hover{color:#000;background-color:#31d2f2;border-color:#25cff2}.btn-check:focus+.btn-info,.btn-info:focus{color:#000;background-color:#31d2f2;border-color:#25cff2;box-shadow:0 0 0 .25rem rgba(11,172,204,0.5)}.btn-check:checked+.btn-info,.btn-check:active+.btn-info,.btn-info:active,.btn-info.active,.show>.btn-info.dropdown-toggle{color:#000;background-color:#3dd5f3;border-color:#25cff2}.btn-check:checked+.btn-info:focus,.btn-check:active+.btn-info:focus,.btn-info:active:focus,.btn-info.active:focus,.show>.btn-info.dropdown-toggle:focus{box-shadow:0 0 0 .25rem rgba(11,172,204,0.5)}.btn-info:disabled,.btn-info.disabled{color:#000;background-color:#0dcaf0;border-color:#0dcaf0}.btn-warning{color:#000;background-color:#ffc107;border-color:#ffc107}.btn-warning:hover{color:#000;background-color:#ffca2c;border-color:#ffc720}.btn-check:focus+.btn-warning,.btn-warning:focus{color:#000;background-color:#ffca2c;border-color:#ffc720;box-shadow:0 0 0 .25rem rgba(217,164,6,0.5)}.btn-check:checked+.btn-warning,.btn-check:active+.btn-warning,.btn-warning:active,.btn-warning.active,.show>.btn-warning.dropdown-toggle{color:#000;background-color:#ffcd39;border-color:#ffc720}.btn-check:checked+.btn-warning:focus,.btn-check:active+.btn-warning:focus,.btn-warning:active:focus,.btn-warning.active:focus,.show>.btn-warning.dropdown-toggle:focus{box-shadow:0 0 0 .25rem rgba(217,164,6,0.5)}.btn-warning:disabled,.btn-warning.disabled{color:#000;background-color:#ffc107;border-color:#ffc107}.btn-danger{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-danger:hover{color:#fff;background-color:#bb2d3b;border-color:#b02a37}.btn-check:focus+.btn-danger,.btn-danger:focus{color:#fff;background-color:#bb2d3b;border-color:#b02a37;box-shadow:0 0 0 .25rem rgba(225,83,97,0.5)}.btn-check:checked+.btn-danger,.btn-check:active+.btn-danger,.btn-danger:active,.btn-danger.active,.show>.btn-danger.dropdown-toggle{color:#fff;background-color:#b02a37;border-color:#a52834}.btn-check:checked+.btn-danger:focus,.btn-check:active+.btn-danger:focus,.btn-danger:active:focus,.btn-danger.active:focus,.show>.btn-danger.dropdown-toggle:focus{box-shadow:0 0 0 .25rem rgba(225,83,97,0.5)}.btn-danger:disabled,.btn-danger.disabled{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-light{color:#000;background-color:#f8f9fa;border-color:#f8f9fa}.btn-light:hover{color:#000;background-color:#f9fafb;border-color:#f9fafb}.btn-check:focus+.btn-light,.btn-light:focus{color:#000;background-color:#f9fafb;border-color:#f9fafb;box-shadow:0 0 0 .25rem rgba(211,212,213,0.5)}.btn-check:checked+.btn-light,.btn-check:active+.btn-light,.btn-light:active,.btn-light.active,.show>.btn-light.dropdown-toggle{color:#000;background-color:#f9fafb;border-color:#f9fafb}.btn-check:checked+.btn-light:focus,.btn-check:active+.btn-light:focus,.btn-light:active:focus,.btn-light.active:focus,.show>.btn-light.dropdown-toggle:focus{box-shadow:0 0 0 .25rem rgba(211,212,213,0.5)}.btn-light:disabled,.btn-light.disabled{color:#000;background-color:#f8f9fa;border-color:#f8f9fa}.btn-dark{color:#fff;background-color:#212529;border-color:#212529}.btn-dark:hover{color:#fff;background-color:#1c1f23;border-color:#1a1e21}.btn-check:focus+.btn-dark,.btn-dark:focus{color:#fff;background-color:#1c1f23;border-color:#1a1e21;box-shadow:0 0 0 .25rem rgba(66,70,73,0.5)}.btn-check:checked+.btn-dark,.btn-check:active+.btn-dark,.btn-dark:active,.btn-dark.active,.show>.btn-dark.dropdown-toggle{color:#fff;background-color:#1a1e21;border-color:#191c1f}.btn-check:checked+.btn-dark:focus,.btn-check:active+.btn-dark:focus,.btn-dark:active:focus,.btn-dark.active:focus,.show>.btn-dark.dropdown-toggle:focus{box-shadow:0 0 0 .25rem rgba(66,70,73,0.5)}.btn-dark:disabled,.btn-dark.disabled{color:#fff;background-color:#212529;border-color:#212529}.btn-outline-primary{color:#0d6efd;border-color:#0d6efd}.btn-outline-primary:hover{color:#fff;background-color:#0d6efd;border-color:#0d6efd}.btn-check:focus+.btn-outline-primary,.btn-outline-primary:focus{box-shadow:0 0 0 .25rem rgba(13,110,253,0.5)}.btn-check:checked+.btn-outline-primary,.btn-check:active+.btn-outline-primary,.btn-outline-primary:active,.btn-outline-primary.active,.btn-outline-primary.dropdown-toggle.show{color:#fff;background-color:#0d6efd;border-color:#0d6efd}.btn-check:checked+.btn-outline-primary:focus,.btn-check:active+.btn-outline-primary:focus,.btn-outline-primary:active:focus,.btn-outline-primary.active:focus,.btn-outline-primary.dropdown-toggle.show:focus{box-shadow:0 0 0 .25rem rgba(13,110,253,0.5)}.btn-outline-primary:disabled,.btn-outline-primary.disabled{color:#0d6efd;background-color:transparent}.btn-outline-secondary{color:#6c757d;border-color:#6c757d}.btn-outline-secondary:hover{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-check:focus+.btn-outline-secondary,.btn-outline-secondary:focus{box-shadow:0 0 0 .25rem rgba(108,117,125,0.5)}.btn-check:checked+.btn-outline-secondary,.btn-check:active+.btn-outline-secondary,.btn-outline-secondary:active,.btn-outline-secondary.active,.btn-outline-secondary.dropdown-toggle.show{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-check:checked+.btn-outline-secondary:focus,.btn-check:active+.btn-outline-secondary:focus,.btn-outline-secondary:active:focus,.btn-outline-secondary.active:focus,.btn-outline-secondary.dropdown-toggle.show:focus{box-shadow:0 0 0 .25rem rgba(108,117,125,0.5)}.btn-outline-secondary:disabled,.btn-outline-secondary.disabled{color:#6c757d;background-color:transparent}.btn-outline-success{color:#198754;border-color:#198754}.btn-outline-success:hover{color:#fff;background-color:#198754;border-color:#198754}.btn-check:focus+.btn-outline-success,.btn-outline-success:focus{box-shadow:0 0 0 .25rem rgba(25,135,84,0.5)}.btn-check:checked+.btn-outline-success,.btn-check:active+.btn-outline-success,.btn-outline-success:active,.btn-outline-success.active,.btn-outline-success.dropdown-toggle.show{color:#fff;background-color:#198754;border-color:#198754}.btn-check:checked+.btn-outline-success:focus,.btn-check:active+.btn-outline-success:focus,.btn-outline-success:active:focus,.btn-outline-success.active:focus,.btn-outline-success.dropdown-toggle.show:focus{box-shadow:0 0 0 .25rem rgba(25,135,84,0.5)}.btn-outline-success:disabled,.btn-outline-success.disabled{color:#198754;background-color:transparent}.btn-outline-info{color:#0dcaf0;border-color:#0dcaf0}.btn-outline-info:hover{color:#000;background-color:#0dcaf0;border-color:#0dcaf0}.btn-check:focus+.btn-outline-info,.btn-outline-info:focus{box-shadow:0 0 0 .25rem rgba(13,202,240,0.5)}.btn-check:checked+.btn-outline-info,.btn-check:active+.btn-outline-info,.btn-outline-info:active,.btn-outline-info.active,.btn-outline-info.dropdown-toggle.show{color:#000;background-color:#0dcaf0;border-color:#0dcaf0}.btn-check:checked+.btn-outline-info:focus,.btn-check:active+.btn-outline-info:focus,.btn-outline-info:active:focus,.btn-outline-info.active:focus,.btn-outline-info.dropdown-toggle.show:focus{box-shadow:0 0 0 .25rem rgba(13,202,240,0.5)}.btn-outline-info:disabled,.btn-outline-info.disabled{color:#0dcaf0;background-color:transparent}.btn-outline-warning{color:#ffc107;border-color:#ffc107}.btn-outline-warning:hover{color:#000;background-color:#ffc107;border-color:#ffc107}.btn-check:focus+.btn-outline-warning,.btn-outline-warning:focus{box-shadow:0 0 0 .25rem rgba(255,193,7,0.5)}.btn-check:checked+.btn-outline-warning,.btn-check:active+.btn-outline-warning,.btn-outline-warning:active,.btn-outline-warning.active,.btn-outline-warning.dropdown-toggle.show{color:#000;background-color:#ffc107;border-color:#ffc107}.btn-check:checked+.btn-outline-warning:focus,.btn-check:active+.btn-outline-warning:focus,.btn-outline-warning:active:focus,.btn-outline-warning.active:focus,.btn-outline-warning.dropdown-toggle.show:focus{box-shadow:0 0 0 .25rem rgba(255,193,7,0.5)}.btn-outline-warning:disabled,.btn-outline-warning.disabled{color:#ffc107;background-color:transparent}.btn-outline-danger{color:#dc3545;border-color:#dc3545}.btn-outline-danger:hover{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-check:focus+.btn-outline-danger,.btn-outline-danger:focus{box-shadow:0 0 0 .25rem rgba(220,53,69,0.5)}.btn-check:checked+.btn-outline-danger,.btn-check:active+.btn-outline-danger,.btn-outline-danger:active,.btn-outline-danger.active,.btn-outline-danger.dropdown-toggle.show{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-check:checked+.btn-outline-danger:focus,.btn-check:active+.btn-outline-danger:focus,.btn-outline-danger:active:focus,.btn-outline-danger.active:focus,.btn-outline-danger.dropdown-toggle.show:focus{box-shadow:0 0 0 .25rem rgba(220,53,69,0.5)}.btn-outline-danger:disabled,.btn-outline-danger.disabled{color:#dc3545;background-color:transparent}.btn-outline-light{color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light:hover{color:#000;background-color:#f8f9fa;border-color:#f8f9fa}.btn-check:focus+.btn-outline-light,.btn-outline-light:focus{box-shadow:0 0 0 .25rem rgba(248,249,250,0.5)}.btn-check:checked+.btn-outline-light,.btn-check:active+.btn-outline-light,.btn-outline-light:active,.btn-outline-light.active,.btn-outline-light.dropdown-toggle.show{color:#000;background-color:#f8f9fa;border-color:#f8f9fa}.btn-check:checked+.btn-outline-light:focus,.btn-check:active+.btn-outline-light:focus,.btn-outline-light:active:focus,.btn-outline-light.active:focus,.btn-outline-light.dropdown-toggle.show:focus{box-shadow:0 0 0 .25rem rgba(248,249,250,0.5)}.btn-outline-light:disabled,.btn-outline-light.disabled{color:#f8f9fa;background-color:transparent}.btn-outline-dark{color:#212529;border-color:#212529}.btn-outline-dark:hover{color:#fff;background-color:#212529;border-color:#212529}.btn-check:focus+.btn-outline-dark,.btn-outline-dark:focus{box-shadow:0 0 0 .25rem rgba(33,37,41,0.5)}.btn-check:checked+.btn-outline-dark,.btn-check:active+.btn-outline-dark,.btn-outline-dark:active,.btn-outline-dark.active,.btn-outline-dark.dropdown-toggle.show{color:#fff;background-color:#212529;border-color:#212529}.btn-check:checked+.btn-outline-dark:focus,.btn-check:active+.btn-outline-dark:focus,.btn-outline-dark:active:focus,.btn-outline-dark.active:focus,.btn-outline-dark.dropdown-toggle.show:focus{box-shadow:0 0 0 .25rem rgba(33,37,41,0.5)}.btn-outline-dark:disabled,.btn-outline-dark.disabled{color:#212529;background-color:transparent}.btn-link{font-weight:400;color:#0d6efd;text-decoration:underline}.btn-link:hover{color:#0a58ca}.btn-link:disabled,.btn-link.disabled{color:#6c757d}.btn-lg{padding:.5rem 1rem;font-size:1.25rem;border-radius:.3rem}.btn-sm{padding:.25rem .5rem;font-size:.875rem;border-radius:.2rem}.nav{display:flex;flex-wrap:wrap;padding-left:0;margin-bottom:0;list-style:none}.nav-link{display:block;padding:.5rem 1rem;text-decoration:none;transition:color 0.15s ease-in-out,background-color 0.15s ease-in-out,border-color 0.15s ease-in-out}@media (prefers-reduced-motion: reduce){.nav-link{transition:none}}.nav-link.disabled{color:#6c757d;pointer-events:none;cursor:default}.nav-tabs{border-bottom:1px solid #dee2e6}.nav-tabs .nav-link{margin-bottom:-1px;background:none;border:1px solid transparent;border-top-left-radius:.25rem;border-top-right-radius:.25rem}.nav-tabs .nav-link:hover,.nav-tabs .nav-link:focus{border-color:#e9ecef #e9ecef #dee2e6;isolation:isolate}.nav-tabs .nav-link.disabled{color:#6c757d;background-color:transparent;border-color:transparent}.nav-tabs .nav-link.active,.nav-tabs .nav-item.show .nav-link{color:#495057;background-color:#fff;border-color:#dee2e6 #dee2e6 #fff}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-left-radius:0;border-top-right-radius:0}.nav-pills .nav-link{background:none;border:0;border-radius:.25rem}.nav-pills .nav-link.active,.nav-pills .show>.nav-link{color:#fff;background-color:#0d6efd}.nav-fill>.nav-link,.nav-fill .nav-item{flex:1 1 auto;text-align:center}.nav-justified>.nav-link,.nav-justified .nav-item{flex-basis:0;flex-grow:1;text-align:center}.nav-fill .nav-item .nav-link,.nav-justified .nav-item .nav-link{width:100%}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.navbar{position:relative;display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;padding-top:.5rem;padding-bottom:.5rem}.navbar>.container,.navbar>.container-fluid,.navbar>.container-sm,.navbar>.container-md,.navbar>.container-lg,.navbar>.container-xl,.navbar>.container-xxl{display:flex;flex-wrap:inherit;align-items:center;justify-content:space-between}.navbar-brand{padding-top:.3125rem;padding-bottom:.3125rem;margin-right:1rem;font-size:1.25rem;text-decoration:none;white-space:nowrap}.navbar-nav{display:flex;flex-direction:column;padding-left:0;margin-bottom:0;list-style:none}.navbar-nav .nav-link{padding-right:0;padding-left:0}.navbar-nav .dropdown-menu{position:static}.navbar-text{padding-top:.5rem;padding-bottom:.5rem}.navbar-collapse{flex-basis:100%;flex-grow:1;align-items:center}.navbar-toggler{padding:.25rem .75rem;font-size:1.25rem;line-height:1;background-color:transparent;border:1px solid transparent;border-radius:.25rem;transition:box-shadow 0.15s ease-in-out}@media (prefers-reduced-motion: reduce){.navbar-toggler{transition:none}}.navbar-toggler:hover{text-decoration:none}.navbar-toggler:focus{text-decoration:none;outline:0;box-shadow:0 0 0 .25rem}.navbar-toggler-icon{display:inline-block;width:1.5em;height:1.5em;vertical-align:middle;background-repeat:no-repeat;background-position:center;background-size:100%}.navbar-nav-scroll{max-height:var(--bs-scroll-height, 75vh);overflow-y:auto}@media (min-width: 576px){.navbar-expand-sm{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-sm .navbar-nav{flex-direction:row}.navbar-expand-sm .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-sm .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-sm .navbar-nav-scroll{overflow:visible}.navbar-expand-sm .navbar-collapse{display:flex !important;flex-basis:auto}.navbar-expand-sm .navbar-toggler{display:none}}@media (min-width: 768px){.navbar-expand-md{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-md .navbar-nav{flex-direction:row}.navbar-expand-md .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-md .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-md .navbar-nav-scroll{overflow:visible}.navbar-expand-md .navbar-collapse{display:flex !important;flex-basis:auto}.navbar-expand-md .navbar-toggler{display:none}}@media (min-width: 992px){.navbar-expand-lg{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-lg .navbar-nav{flex-direction:row}.navbar-expand-lg .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-lg .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-lg .navbar-nav-scroll{overflow:visible}.navbar-expand-lg .navbar-collapse{display:flex !important;flex-basis:auto}.navbar-expand-lg .navbar-toggler{display:none}}@media (min-width: 1200px){.navbar-expand-xl{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-xl .navbar-nav{flex-direction:row}.navbar-expand-xl .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-xl .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-xl .navbar-nav-scroll{overflow:visible}.navbar-expand-xl .navbar-collapse{display:flex !important;flex-basis:auto}.navbar-expand-xl .navbar-toggler{display:none}}@media (min-width: 1400px){.navbar-expand-xxl{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-xxl .navbar-nav{flex-direction:row}.navbar-expand-xxl .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-xxl .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-xxl .navbar-nav-scroll{overflow:visible}.navbar-expand-xxl .navbar-collapse{display:flex !important;flex-basis:auto}.navbar-expand-xxl .navbar-toggler{display:none}}.navbar-expand{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand .navbar-nav{flex-direction:row}.navbar-expand .navbar-nav .dropdown-menu{position:absolute}.navbar-expand .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand .navbar-nav-scroll{overflow:visible}.navbar-expand .navbar-collapse{display:flex !important;flex-basis:auto}.navbar-expand .navbar-toggler{display:none}.navbar-light .navbar-brand{color:rgba(0,0,0,0.9)}.navbar-light .navbar-brand:hover,.navbar-light .navbar-brand:focus{color:rgba(0,0,0,0.9)}.navbar-light .navbar-nav .nav-link{color:rgba(0,0,0,0.55)}.navbar-light .navbar-nav .nav-link:hover,.navbar-light .navbar-nav .nav-link:focus{color:rgba(0,0,0,0.7)}.navbar-light .navbar-nav .nav-link.disabled{color:rgba(0,0,0,0.3)}.navbar-light .navbar-nav .show>.nav-link,.navbar-light .navbar-nav .nav-link.active{color:rgba(0,0,0,0.9)}.navbar-light .navbar-toggler{color:rgba(0,0,0,0.55);border-color:rgba(0,0,0,0.1)}.navbar-light .navbar-toggler-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%280,0,0,0.55%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e")}.navbar-light .navbar-text{color:rgba(0,0,0,0.55)}.navbar-light .navbar-text a,.navbar-light .navbar-text a:hover,.navbar-light .navbar-text a:focus{color:rgba(0,0,0,0.9)}.navbar-dark .navbar-brand{color:#fff}.navbar-dark .navbar-brand:hover,.navbar-dark .navbar-brand:focus{color:#fff}.navbar-dark .navbar-nav .nav-link{color:rgba(255,255,255,0.55)}.navbar-dark .navbar-nav .nav-link:hover,.navbar-dark .navbar-nav .nav-link:focus{color:rgba(255,255,255,0.75)}.navbar-dark .navbar-nav .nav-link.disabled{color:rgba(255,255,255,0.25)}.navbar-dark .navbar-nav .show>.nav-link,.navbar-dark .navbar-nav .nav-link.active{color:#fff}.navbar-dark .navbar-toggler{color:rgba(255,255,255,0.55);border-color:rgba(255,255,255,0.1)}.navbar-dark .navbar-toggler-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%28255,255,255,0.55%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e")}.navbar-dark .navbar-text{color:rgba(255,255,255,0.55)}.navbar-dark .navbar-text a,.navbar-dark .navbar-text a:hover,.navbar-dark .navbar-text a:focus{color:#fff}.card{position:relative;display:flex;flex-direction:column;min-width:0;word-wrap:break-word;background-color:#fff;background-clip:border-box;border:1px solid rgba(0,0,0,0.125);border-radius:.25rem}.card>hr{margin-right:0;margin-left:0}.card>.list-group{border-top:inherit;border-bottom:inherit}.card>.list-group:first-child{border-top-width:0;border-top-left-radius:calc(.25rem - 1px);border-top-right-radius:calc(.25rem - 1px)}.card>.list-group:last-child{border-bottom-width:0;border-bottom-right-radius:calc(.25rem - 1px);border-bottom-left-radius:calc(.25rem - 1px)}.card>.card-header+.list-group,.card>.list-group+.card-footer{border-top:0}.card-body{flex:1 1 auto;padding:1rem 1rem}.card-title{margin-bottom:.5rem}.card-subtitle{margin-top:-.25rem;margin-bottom:0}.card-text:last-child{margin-bottom:0}.card-link:hover{text-decoration:none}.card-link+.card-link{margin-left:1rem}.card-header{padding:.5rem 1rem;margin-bottom:0;background-color:rgba(0,0,0,0.03);border-bottom:1px solid rgba(0,0,0,0.125)}.card-header:first-child{border-radius:calc(.25rem - 1px) calc(.25rem - 1px) 0 0}.card-footer{padding:.5rem 1rem;background-color:rgba(0,0,0,0.03);border-top:1px solid rgba(0,0,0,0.125)}.card-footer:last-child{border-radius:0 0 calc(.25rem - 1px) calc(.25rem - 1px)}.card-header-tabs{margin-right:-.5rem;margin-bottom:-.5rem;margin-left:-.5rem;border-bottom:0}.card-header-pills{margin-right:-.5rem;margin-left:-.5rem}.card-img-overlay{position:absolute;top:0;right:0;bottom:0;left:0;padding:1rem;border-radius:calc(.25rem - 1px)}.card-img,.card-img-top,.card-img-bottom{width:100%}.card-img,.card-img-top{border-top-left-radius:calc(.25rem - 1px);border-top-right-radius:calc(.25rem - 1px)}.card-img,.card-img-bottom{border-bottom-right-radius:calc(.25rem - 1px);border-bottom-left-radius:calc(.25rem - 1px)}.card-group>.card{margin-bottom:.75rem}@media (min-width: 576px){.card-group{display:flex;flex-flow:row wrap}.card-group>.card{flex:1 0 0%;margin-bottom:0}.card-group>.card+.card{margin-left:0;border-left:0}.card-group>.card:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.card-group>.card:not(:last-child) .card-img-top,.card-group>.card:not(:last-child) .card-header{border-top-right-radius:0}.card-group>.card:not(:last-child) .card-img-bottom,.card-group>.card:not(:last-child) .card-footer{border-bottom-right-radius:0}.card-group>.card:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.card-group>.card:not(:first-child) .card-img-top,.card-group>.card:not(:first-child) .card-header{border-top-left-radius:0}.card-group>.card:not(:first-child) .card-img-bottom,.card-group>.card:not(:first-child) .card-footer{border-bottom-left-radius:0}}.pagination{display:flex;padding-left:0;list-style:none}.page-link{position:relative;display:block;color:#0d6efd;text-decoration:none;background-color:#fff;border:1px solid #dee2e6;transition:color 0.15s ease-in-out,background-color 0.15s ease-in-out,border-color 0.15s ease-in-out,box-shadow 0.15s ease-in-out}@media (prefers-reduced-motion: reduce){.page-link{transition:none}}.page-link:hover{z-index:2;color:#0a58ca;background-color:#e9ecef;border-color:#dee2e6}.page-link:focus{z-index:3;color:#0a58ca;background-color:#e9ecef;outline:0;box-shadow:0 0 0 .25rem rgba(13,110,253,0.25)}.page-item:not(:first-child) .page-link{margin-left:-1px}.page-item.active .page-link{z-index:3;color:#fff;background-color:#0d6efd;border-color:#0d6efd}.page-item.disabled .page-link{color:#6c757d;pointer-events:none;background-color:#fff;border-color:#dee2e6}.page-link{padding:.375rem .75rem}.page-item:first-child .page-link{border-top-left-radius:.25rem;border-bottom-left-radius:.25rem}.page-item:last-child .page-link{border-top-right-radius:.25rem;border-bottom-right-radius:.25rem}.pagination-lg .page-link{padding:.75rem 1.5rem;font-size:1.25rem}.pagination-lg .page-item:first-child .page-link{border-top-left-radius:.3rem;border-bottom-left-radius:.3rem}.pagination-lg .page-item:last-child .page-link{border-top-right-radius:.3rem;border-bottom-right-radius:.3rem}.pagination-sm .page-link{padding:.25rem .5rem;font-size:.875rem}.pagination-sm .page-item:first-child .page-link{border-top-left-radius:.2rem;border-bottom-left-radius:.2rem}.pagination-sm .page-item:last-child .page-link{border-top-right-radius:.2rem;border-bottom-right-radius:.2rem}.clearfix::after{display:block;clear:both;content:""}.link-primary{color:#0d6efd}.link-primary:hover,.link-primary:focus{color:#0a58ca}.link-secondary{color:#6c757d}.link-secondary:hover,.link-secondary:focus{color:#565e64}.link-success{color:#198754}.link-success:hover,.link-success:focus{color:#146c43}.link-info{color:#0dcaf0}.link-info:hover,.link-info:focus{color:#3dd5f3}.link-warning{color:#ffc107}.link-warning:hover,.link-warning:focus{color:#ffcd39}.link-danger{color:#dc3545}.link-danger:hover,.link-danger:focus{color:#b02a37}.link-light{color:#f8f9fa}.link-light:hover,.link-light:focus{color:#f9fafb}.link-dark{color:#212529}.link-dark:hover,.link-dark:focus{color:#1a1e21}.ratio{position:relative;width:100%}.ratio::before{display:block;padding-top:var(--bs-aspect-ratio);content:""}.ratio>*{position:absolute;top:0;left:0;width:100%;height:100%}.ratio-1x1{--bs-aspect-ratio: 100%}.ratio-4x3{--bs-aspect-ratio: calc(3 / 4 * 100%)}.ratio-16x9{--bs-aspect-ratio: calc(9 / 16 * 100%)}.ratio-21x9{--bs-aspect-ratio: calc(9 / 21 * 100%)}.fixed-top{position:fixed;top:0;right:0;left:0;z-index:1030}.fixed-bottom{position:fixed;right:0;bottom:0;left:0;z-index:1030}.sticky-top{position:sticky;top:0;z-index:1020}@media (min-width: 576px){.sticky-sm-top{position:sticky;top:0;z-index:1020}}@media (min-width: 768px){.sticky-md-top{position:sticky;top:0;z-index:1020}}@media (min-width: 992px){.sticky-lg-top{position:sticky;top:0;z-index:1020}}@media (min-width: 1200px){.sticky-xl-top{position:sticky;top:0;z-index:1020}}@media (min-width: 1400px){.sticky-xxl-top{position:sticky;top:0;z-index:1020}}.visually-hidden,.visually-hidden-focusable:not(:focus):not(:focus-within){position:absolute !important;width:1px !important;height:1px !important;padding:0 !important;margin:-1px !important;overflow:hidden !important;clip:rect(0, 0, 0, 0) !important;white-space:nowrap !important;border:0 !important}.stretched-link::after{position:absolute;top:0;right:0;bottom:0;left:0;z-index:1;content:""}.text-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.align-baseline{vertical-align:baseline !important}.align-top{vertical-align:top !important}.align-middle{vertical-align:middle !important}.align-bottom{vertical-align:bottom !important}.align-text-bottom{vertical-align:text-bottom !important}.align-text-top{vertical-align:text-top !important}.float-start{float:left !important}.float-end{float:right !important}.float-none{float:none !important}.overflow-auto{overflow:auto !important}.overflow-hidden{overflow:hidden !important}.overflow-visible{overflow:visible !important}.overflow-scroll{overflow:scroll !important}.d-inline{display:inline !important}.d-inline-block{display:inline-block !important}.d-block{display:block !important}.d-grid{display:grid !important}.d-table{display:table !important}.d-table-row{display:table-row !important}.d-table-cell{display:table-cell !important}.d-flex{display:flex !important}.d-inline-flex{display:inline-flex !important}.d-none{display:none !important}.shadow{box-shadow:0 0.5rem 1rem rgba(0,0,0,0.15) !important}.shadow-sm{box-shadow:0 0.125rem 0.25rem rgba(0,0,0,0.075) !important}.shadow-lg{box-shadow:0 1rem 3rem rgba(0,0,0,0.175) !important}.shadow-none{box-shadow:none !important}.position-static{position:static !important}.position-relative{position:relative !important}.position-absolute{position:absolute !important}.position-fixed{position:fixed !important}.position-sticky{position:sticky !important}.top-0{top:0 !important}.top-50{top:50% !important}.top-100{top:100% !important}.bottom-0{bottom:0 !important}.bottom-50{bottom:50% !important}.bottom-100{bottom:100% !important}.start-0{left:0 !important}.start-50{left:50% !important}.start-100{left:100% !important}.end-0{right:0 !important}.end-50{right:50% !important}.end-100{right:100% !important}.translate-middle{transform:translate(-50%, -50%) !important}.translate-middle-x{transform:translateX(-50%) !important}.translate-middle-y{transform:translateY(-50%) !important}.border{border:1px solid #dee2e6 !important}.border-0{border:0 !important}.border-top{border-top:1px solid #dee2e6 !important}.border-top-0{border-top:0 !important}.border-end{border-right:1px solid #dee2e6 !important}.border-end-0{border-right:0 !important}.border-bottom{border-bottom:1px solid #dee2e6 !important}.border-bottom-0{border-bottom:0 !important}.border-start{border-left:1px solid #dee2e6 !important}.border-start-0{border-left:0 !important}.border-primary{border-color:#0d6efd !important}.border-secondary{border-color:#6c757d !important}.border-success{border-color:#198754 !important}.border-info{border-color:#0dcaf0 !important}.border-warning{border-color:#ffc107 !important}.border-danger{border-color:#dc3545 !important}.border-light{border-color:#f8f9fa !important}.border-dark{border-color:#212529 !important}.border-white{border-color:#fff !important}.border-1{border-width:1px !important}.border-2{border-width:2px !important}.border-3{border-width:3px !important}.border-4{border-width:4px !important}.border-5{border-width:5px !important}.w-25{width:25% !important}.w-50{width:50% !important}.w-75{width:75% !important}.w-100{width:100% !important}.w-auto{width:auto !important}.mw-100{max-width:100% !important}.vw-100{width:100vw !important}.min-vw-100{min-width:100vw !important}.h-25{height:25% !important}.h-50{height:50% !important}.h-75{height:75% !important}.h-100{height:100% !important}.h-auto{height:auto !important}.mh-100{max-height:100% !important}.vh-100{height:100vh !important}.min-vh-100{min-height:100vh !important}.flex-fill{flex:1 1 auto !important}.flex-row{flex-direction:row !important}.flex-column{flex-direction:column !important}.flex-row-reverse{flex-direction:row-reverse !important}.flex-column-reverse{flex-direction:column-reverse !important}.flex-grow-0{flex-grow:0 !important}.flex-grow-1{flex-grow:1 !important}.flex-shrink-0{flex-shrink:0 !important}.flex-shrink-1{flex-shrink:1 !important}.flex-wrap{flex-wrap:wrap !important}.flex-nowrap{flex-wrap:nowrap !important}.flex-wrap-reverse{flex-wrap:wrap-reverse !important}.gap-0{gap:0 !important}.gap-1{gap:.25rem !important}.gap-2{gap:.5rem !important}.gap-3{gap:1rem !important}.gap-4{gap:1.5rem !important}.gap-5{gap:3rem !important}.justify-content-start{justify-content:flex-start !important}.justify-content-end{justify-content:flex-end !important}.justify-content-center{justify-content:center !important}.justify-content-between{justify-content:space-between !important}.justify-content-around{justify-content:space-around !important}.justify-content-evenly{justify-content:space-evenly !important}.align-items-start{align-items:flex-start !important}.align-items-end{align-items:flex-end !important}.align-items-center{align-items:center !important}.align-items-baseline{align-items:baseline !important}.align-items-stretch{align-items:stretch !important}.align-content-start{align-content:flex-start !important}.align-content-end{align-content:flex-end !important}.align-content-center{align-content:center !important}.align-content-between{align-content:space-between !important}.align-content-around{align-content:space-around !important}.align-content-stretch{align-content:stretch !important}.align-self-auto{align-self:auto !important}.align-self-start{align-self:flex-start !important}.align-self-end{align-self:flex-end !important}.align-self-center{align-self:center !important}.align-self-baseline{align-self:baseline !important}.align-self-stretch{align-self:stretch !important}.order-first{order:-1 !important}.order-0{order:0 !important}.order-1{order:1 !important}.order-2{order:2 !important}.order-3{order:3 !important}.order-4{order:4 !important}.order-5{order:5 !important}.order-last{order:6 !important}.m-0{margin:0 !important}.m-1{margin:.25rem !important}.m-2{margin:.5rem !important}.m-3{margin:1rem !important}.m-4{margin:1.5rem !important}.m-5{margin:3rem !important}.m-auto{margin:auto !important}.mx-0{margin-right:0 !important;margin-left:0 !important}.mx-1{margin-right:.25rem !important;margin-left:.25rem !important}.mx-2{margin-right:.5rem !important;margin-left:.5rem !important}.mx-3{margin-right:1rem !important;margin-left:1rem !important}.mx-4{margin-right:1.5rem !important;margin-left:1.5rem !important}.mx-5{margin-right:3rem !important;margin-left:3rem !important}.mx-auto{margin-right:auto !important;margin-left:auto !important}.my-0{margin-top:0 !important;margin-bottom:0 !important}.my-1{margin-top:.25rem !important;margin-bottom:.25rem !important}.my-2{margin-top:.5rem !important;margin-bottom:.5rem !important}.my-3{margin-top:1rem !important;margin-bottom:1rem !important}.my-4{margin-top:1.5rem !important;margin-bottom:1.5rem !important}.my-5{margin-top:3rem !important;margin-bottom:3rem !important}.my-auto{margin-top:auto !important;margin-bottom:auto !important}.mt-0{margin-top:0 !important}.mt-1{margin-top:.25rem !important}.mt-2{margin-top:.5rem !important}.mt-3{margin-top:1rem !important}.mt-4{margin-top:1.5rem !important}.mt-5{margin-top:3rem !important}.mt-auto{margin-top:auto !important}.me-0{margin-right:0 !important}.me-1{margin-right:.25rem !important}.me-2{margin-right:.5rem !important}.me-3{margin-right:1rem !important}.me-4{margin-right:1.5rem !important}.me-5{margin-right:3rem !important}.me-auto{margin-right:auto !important}.mb-0{margin-bottom:0 !important}.mb-1{margin-bottom:.25rem !important}.mb-2{margin-bottom:.5rem !important}.mb-3{margin-bottom:1rem !important}.mb-4{margin-bottom:1.5rem !important}.mb-5{margin-bottom:3rem !important}.mb-auto{margin-bottom:auto !important}.ms-0{margin-left:0 !important}.ms-1{margin-left:.25rem !important}.ms-2{margin-left:.5rem !important}.ms-3{margin-left:1rem !important}.ms-4{margin-left:1.5rem !important}.ms-5{margin-left:3rem !important}.ms-auto{margin-left:auto !important}.p-0{padding:0 !important}.p-1{padding:.25rem !important}.p-2{padding:.5rem !important}.p-3{padding:1rem !important}.p-4{padding:1.5rem !important}.p-5{padding:3rem !important}.px-0{padding-right:0 !important;padding-left:0 !important}.px-1{padding-right:.25rem !important;padding-left:.25rem !important}.px-2{padding-right:.5rem !important;padding-left:.5rem !important}.px-3{padding-right:1rem !important;padding-left:1rem !important}.px-4{padding-right:1.5rem !important;padding-left:1.5rem !important}.px-5{padding-right:3rem !important;padding-left:3rem !important}.py-0{padding-top:0 !important;padding-bottom:0 !important}.py-1{padding-top:.25rem !important;padding-bottom:.25rem !important}.py-2{padding-top:.5rem !important;padding-bottom:.5rem !important}.py-3{padding-top:1rem !important;padding-bottom:1rem !important}.py-4{padding-top:1.5rem !important;padding-bottom:1.5rem !important}.py-5{padding-top:3rem !important;padding-bottom:3rem !important}.pt-0{padding-top:0 !important}.pt-1{padding-top:.25rem !important}.pt-2{padding-top:.5rem !important}.pt-3{padding-top:1rem !important}.pt-4{padding-top:1.5rem !important}.pt-5{padding-top:3rem !important}.pe-0{padding-right:0 !important}.pe-1{padding-right:.25rem !important}.pe-2{padding-right:.5rem !important}.pe-3{padding-right:1rem !important}.pe-4{padding-right:1.5rem !important}.pe-5{padding-right:3rem !important}.pb-0{padding-bottom:0 !important}.pb-1{padding-bottom:.25rem !important}.pb-2{padding-bottom:.5rem !important}.pb-3{padding-bottom:1rem !important}.pb-4{padding-bottom:1.5rem !important}.pb-5{padding-bottom:3rem !important}.ps-0{padding-left:0 !important}.ps-1{padding-left:.25rem !important}.ps-2{padding-left:.5rem !important}.ps-3{padding-left:1rem !important}.ps-4{padding-left:1.5rem !important}.ps-5{padding-left:3rem !important}.font-monospace{font-family:var(--bs-font-monospace) !important}.fs-1{font-size:calc(1.375rem + 1.5vw) !important}.fs-2{font-size:calc(1.325rem + .9vw) !important}.fs-3{font-size:calc(1.3rem + .6vw) !important}.fs-4{font-size:calc(1.275rem + .3vw) !important}.fs-5{font-size:1.25rem !important}.fs-6{font-size:1rem !important}.fst-italic{font-style:italic !important}.fst-normal{font-style:normal !important}.fw-light{font-weight:300 !important}.fw-lighter{font-weight:lighter !important}.fw-normal{font-weight:400 !important}.fw-bold{font-weight:700 !important}.fw-bolder{font-weight:bolder !important}.lh-1{line-height:1 !important}.lh-sm{line-height:1.25 !important}.lh-base{line-height:1.5 !important}.lh-lg{line-height:2 !important}.text-start{text-align:left !important}.text-end{text-align:right !important}.text-center{text-align:center !important}.text-decoration-none{text-decoration:none !important}.text-decoration-underline{text-decoration:underline !important}.text-decoration-line-through{text-decoration:line-through !important}.text-lowercase{text-transform:lowercase !important}.text-uppercase{text-transform:uppercase !important}.text-capitalize{text-transform:capitalize !important}.text-wrap{white-space:normal !important}.text-nowrap{white-space:nowrap !important}.text-break{word-wrap:break-word !important;word-break:break-word !important}.text-primary{color:#0d6efd !important}.text-secondary{color:#6c757d !important}.text-success{color:#198754 !important}.text-info{color:#0dcaf0 !important}.text-warning{color:#ffc107 !important}.text-danger{color:#dc3545 !important}.text-light{color:#f8f9fa !important}.text-dark{color:#212529 !important}.text-white{color:#fff !important}.text-body{color:#212529 !important}.text-muted{color:#6c757d !important}.text-black-50{color:rgba(0,0,0,0.5) !important}.text-white-50{color:rgba(255,255,255,0.5) !important}.text-reset{color:inherit !important}.bg-primary{background-color:#0d6efd !important}.bg-secondary{background-color:#6c757d !important}.bg-success{background-color:#198754 !important}.bg-info{background-color:#0dcaf0 !important}.bg-warning{background-color:#ffc107 !important}.bg-danger{background-color:#dc3545 !important}.bg-light{background-color:#f8f9fa !important}.bg-dark{background-color:#212529 !important}.bg-body{background-color:#fff !important}.bg-white{background-color:#fff !important}.bg-transparent{background-color:rgba(0,0,0,0) !important}.bg-gradient{background-image:var(--bs-gradient) !important}.user-select-all{user-select:all !important}.user-select-auto{user-select:auto !important}.user-select-none{user-select:none !important}.pe-none{pointer-events:none !important}.pe-auto{pointer-events:auto !important}.rounded{border-radius:.25rem !important}.rounded-0{border-radius:0 !important}.rounded-1{border-radius:.2rem !important}.rounded-2{border-radius:.25rem !important}.rounded-3{border-radius:.3rem !important}.rounded-circle{border-radius:50% !important}.rounded-pill{border-radius:50rem !important}.rounded-top{border-top-left-radius:.25rem !important;border-top-right-radius:.25rem !important}.rounded-end{border-top-right-radius:.25rem !important;border-bottom-right-radius:.25rem !important}.rounded-bottom{border-bottom-right-radius:.25rem !important;border-bottom-left-radius:.25rem !important}.rounded-start{border-bottom-left-radius:.25rem !important;border-top-left-radius:.25rem !important}.visible{visibility:visible !important}.invisible{visibility:hidden !important}@media (min-width: 576px){.float-sm-start{float:left !important}.float-sm-end{float:right !important}.float-sm-none{float:none !important}.d-sm-inline{display:inline !important}.d-sm-inline-block{display:inline-block !important}.d-sm-block{display:block !important}.d-sm-grid{display:grid !important}.d-sm-table{display:table !important}.d-sm-table-row{display:table-row !important}.d-sm-table-cell{display:table-cell !important}.d-sm-flex{display:flex !important}.d-sm-inline-flex{display:inline-flex !important}.d-sm-none{display:none !important}.flex-sm-fill{flex:1 1 auto !important}.flex-sm-row{flex-direction:row !important}.flex-sm-column{flex-direction:column !important}.flex-sm-row-reverse{flex-direction:row-reverse !important}.flex-sm-column-reverse{flex-direction:column-reverse !important}.flex-sm-grow-0{flex-grow:0 !important}.flex-sm-grow-1{flex-grow:1 !important}.flex-sm-shrink-0{flex-shrink:0 !important}.flex-sm-shrink-1{flex-shrink:1 !important}.flex-sm-wrap{flex-wrap:wrap !important}.flex-sm-nowrap{flex-wrap:nowrap !important}.flex-sm-wrap-reverse{flex-wrap:wrap-reverse !important}.gap-sm-0{gap:0 !important}.gap-sm-1{gap:.25rem !important}.gap-sm-2{gap:.5rem !important}.gap-sm-3{gap:1rem !important}.gap-sm-4{gap:1.5rem !important}.gap-sm-5{gap:3rem !important}.justify-content-sm-start{justify-content:flex-start !important}.justify-content-sm-end{justify-content:flex-end !important}.justify-content-sm-center{justify-content:center !important}.justify-content-sm-between{justify-content:space-between !important}.justify-content-sm-around{justify-content:space-around !important}.justify-content-sm-evenly{justify-content:space-evenly !important}.align-items-sm-start{align-items:flex-start !important}.align-items-sm-end{align-items:flex-end !important}.align-items-sm-center{align-items:center !important}.align-items-sm-baseline{align-items:baseline !important}.align-items-sm-stretch{align-items:stretch !important}.align-content-sm-start{align-content:flex-start !important}.align-content-sm-end{align-content:flex-end !important}.align-content-sm-center{align-content:center !important}.align-content-sm-between{align-content:space-between !important}.align-content-sm-around{align-content:space-around !important}.align-content-sm-stretch{align-content:stretch !important}.align-self-sm-auto{align-self:auto !important}.align-self-sm-start{align-self:flex-start !important}.align-self-sm-end{align-self:flex-end !important}.align-self-sm-center{align-self:center !important}.align-self-sm-baseline{align-self:baseline !important}.align-self-sm-stretch{align-self:stretch !important}.order-sm-first{order:-1 !important}.order-sm-0{order:0 !important}.order-sm-1{order:1 !important}.order-sm-2{order:2 !important}.order-sm-3{order:3 !important}.order-sm-4{order:4 !important}.order-sm-5{order:5 !important}.order-sm-last{order:6 !important}.m-sm-0{margin:0 !important}.m-sm-1{margin:.25rem !important}.m-sm-2{margin:.5rem !important}.m-sm-3{margin:1rem !important}.m-sm-4{margin:1.5rem !important}.m-sm-5{margin:3rem !important}.m-sm-auto{margin:auto !important}.mx-sm-0{margin-right:0 !important;margin-left:0 !important}.mx-sm-1{margin-right:.25rem !important;margin-left:.25rem !important}.mx-sm-2{margin-right:.5rem !important;margin-left:.5rem !important}.mx-sm-3{margin-right:1rem !important;margin-left:1rem !important}.mx-sm-4{margin-right:1.5rem !important;margin-left:1.5rem !important}.mx-sm-5{margin-right:3rem !important;margin-left:3rem !important}.mx-sm-auto{margin-right:auto !important;margin-left:auto !important}.my-sm-0{margin-top:0 !important;margin-bottom:0 !important}.my-sm-1{margin-top:.25rem !important;margin-bottom:.25rem !important}.my-sm-2{margin-top:.5rem !important;margin-bottom:.5rem !important}.my-sm-3{margin-top:1rem !important;margin-bottom:1rem !important}.my-sm-4{margin-top:1.5rem !important;margin-bottom:1.5rem !important}.my-sm-5{margin-top:3rem !important;margin-bottom:3rem !important}.my-sm-auto{margin-top:auto !important;margin-bottom:auto !important}.mt-sm-0{margin-top:0 !important}.mt-sm-1{margin-top:.25rem !important}.mt-sm-2{margin-top:.5rem !important}.mt-sm-3{margin-top:1rem !important}.mt-sm-4{margin-top:1.5rem !important}.mt-sm-5{margin-top:3rem !important}.mt-sm-auto{margin-top:auto !important}.me-sm-0{margin-right:0 !important}.me-sm-1{margin-right:.25rem !important}.me-sm-2{margin-right:.5rem !important}.me-sm-3{margin-right:1rem !important}.me-sm-4{margin-right:1.5rem !important}.me-sm-5{margin-right:3rem !important}.me-sm-auto{margin-right:auto !important}.mb-sm-0{margin-bottom:0 !important}.mb-sm-1{margin-bottom:.25rem !important}.mb-sm-2{margin-bottom:.5rem !important}.mb-sm-3{margin-bottom:1rem !important}.mb-sm-4{margin-bottom:1.5rem !important}.mb-sm-5{margin-bottom:3rem !important}.mb-sm-auto{margin-bottom:auto !important}.ms-sm-0{margin-left:0 !important}.ms-sm-1{margin-left:.25rem !important}.ms-sm-2{margin-left:.5rem !important}.ms-sm-3{margin-left:1rem !important}.ms-sm-4{margin-left:1.5rem !important}.ms-sm-5{margin-left:3rem !important}.ms-sm-auto{margin-left:auto !important}.p-sm-0{padding:0 !important}.p-sm-1{padding:.25rem !important}.p-sm-2{padding:.5rem !important}.p-sm-3{padding:1rem !important}.p-sm-4{padding:1.5rem !important}.p-sm-5{padding:3rem !important}.px-sm-0{padding-right:0 !important;padding-left:0 !important}.px-sm-1{padding-right:.25rem !important;padding-left:.25rem !important}.px-sm-2{padding-right:.5rem !important;padding-left:.5rem !important}.px-sm-3{padding-right:1rem !important;padding-left:1rem !important}.px-sm-4{padding-right:1.5rem !important;padding-left:1.5rem !important}.px-sm-5{padding-right:3rem !important;padding-left:3rem !important}.py-sm-0{padding-top:0 !important;padding-bottom:0 !important}.py-sm-1{padding-top:.25rem !important;padding-bottom:.25rem !important}.py-sm-2{padding-top:.5rem !important;padding-bottom:.5rem !important}.py-sm-3{padding-top:1rem !important;padding-bottom:1rem !important}.py-sm-4{padding-top:1.5rem !important;padding-bottom:1.5rem !important}.py-sm-5{padding-top:3rem !important;padding-bottom:3rem !important}.pt-sm-0{padding-top:0 !important}.pt-sm-1{padding-top:.25rem !important}.pt-sm-2{padding-top:.5rem !important}.pt-sm-3{padding-top:1rem !important}.pt-sm-4{padding-top:1.5rem !important}.pt-sm-5{padding-top:3rem !important}.pe-sm-0{padding-right:0 !important}.pe-sm-1{padding-right:.25rem !important}.pe-sm-2{padding-right:.5rem !important}.pe-sm-3{padding-right:1rem !important}.pe-sm-4{padding-right:1.5rem !important}.pe-sm-5{padding-right:3rem !important}.pb-sm-0{padding-bottom:0 !important}.pb-sm-1{padding-bottom:.25rem !important}.pb-sm-2{padding-bottom:.5rem !important}.pb-sm-3{padding-bottom:1rem !important}.pb-sm-4{padding-bottom:1.5rem !important}.pb-sm-5{padding-bottom:3rem !important}.ps-sm-0{padding-left:0 !important}.ps-sm-1{padding-left:.25rem !important}.ps-sm-2{padding-left:.5rem !important}.ps-sm-3{padding-left:1rem !important}.ps-sm-4{padding-left:1.5rem !important}.ps-sm-5{padding-left:3rem !important}.text-sm-start{text-align:left !important}.text-sm-end{text-align:right !important}.text-sm-center{text-align:center !important}}@media (min-width: 768px){.float-md-start{float:left !important}.float-md-end{float:right !important}.float-md-none{float:none !important}.d-md-inline{display:inline !important}.d-md-inline-block{display:inline-block !important}.d-md-block{display:block !important}.d-md-grid{display:grid !important}.d-md-table{display:table !important}.d-md-table-row{display:table-row !important}.d-md-table-cell{display:table-cell !important}.d-md-flex{display:flex !important}.d-md-inline-flex{display:inline-flex !important}.d-md-none{display:none !important}.flex-md-fill{flex:1 1 auto !important}.flex-md-row{flex-direction:row !important}.flex-md-column{flex-direction:column !important}.flex-md-row-reverse{flex-direction:row-reverse !important}.flex-md-column-reverse{flex-direction:column-reverse !important}.flex-md-grow-0{flex-grow:0 !important}.flex-md-grow-1{flex-grow:1 !important}.flex-md-shrink-0{flex-shrink:0 !important}.flex-md-shrink-1{flex-shrink:1 !important}.flex-md-wrap{flex-wrap:wrap !important}.flex-md-nowrap{flex-wrap:nowrap !important}.flex-md-wrap-reverse{flex-wrap:wrap-reverse !important}.gap-md-0{gap:0 !important}.gap-md-1{gap:.25rem !important}.gap-md-2{gap:.5rem !important}.gap-md-3{gap:1rem !important}.gap-md-4{gap:1.5rem !important}.gap-md-5{gap:3rem !important}.justify-content-md-start{justify-content:flex-start !important}.justify-content-md-end{justify-content:flex-end !important}.justify-content-md-center{justify-content:center !important}.justify-content-md-between{justify-content:space-between !important}.justify-content-md-around{justify-content:space-around !important}.justify-content-md-evenly{justify-content:space-evenly !important}.align-items-md-start{align-items:flex-start !important}.align-items-md-end{align-items:flex-end !important}.align-items-md-center{align-items:center !important}.align-items-md-baseline{align-items:baseline !important}.align-items-md-stretch{align-items:stretch !important}.align-content-md-start{align-content:flex-start !important}.align-content-md-end{align-content:flex-end !important}.align-content-md-center{align-content:center !important}.align-content-md-between{align-content:space-between !important}.align-content-md-around{align-content:space-around !important}.align-content-md-stretch{align-content:stretch !important}.align-self-md-auto{align-self:auto !important}.align-self-md-start{align-self:flex-start !important}.align-self-md-end{align-self:flex-end !important}.align-self-md-center{align-self:center !important}.align-self-md-baseline{align-self:baseline !important}.align-self-md-stretch{align-self:stretch !important}.order-md-first{order:-1 !important}.order-md-0{order:0 !important}.order-md-1{order:1 !important}.order-md-2{order:2 !important}.order-md-3{order:3 !important}.order-md-4{order:4 !important}.order-md-5{order:5 !important}.order-md-last{order:6 !important}.m-md-0{margin:0 !important}.m-md-1{margin:.25rem !important}.m-md-2{margin:.5rem !important}.m-md-3{margin:1rem !important}.m-md-4{margin:1.5rem !important}.m-md-5{margin:3rem !important}.m-md-auto{margin:auto !important}.mx-md-0{margin-right:0 !important;margin-left:0 !important}.mx-md-1{margin-right:.25rem !important;margin-left:.25rem !important}.mx-md-2{margin-right:.5rem !important;margin-left:.5rem !important}.mx-md-3{margin-right:1rem !important;margin-left:1rem !important}.mx-md-4{margin-right:1.5rem !important;margin-left:1.5rem !important}.mx-md-5{margin-right:3rem !important;margin-left:3rem !important}.mx-md-auto{margin-right:auto !important;margin-left:auto !important}.my-md-0{margin-top:0 !important;margin-bottom:0 !important}.my-md-1{margin-top:.25rem !important;margin-bottom:.25rem !important}.my-md-2{margin-top:.5rem !important;margin-bottom:.5rem !important}.my-md-3{margin-top:1rem !important;margin-bottom:1rem !important}.my-md-4{margin-top:1.5rem !important;margin-bottom:1.5rem !important}.my-md-5{margin-top:3rem !important;margin-bottom:3rem !important}.my-md-auto{margin-top:auto !important;margin-bottom:auto !important}.mt-md-0{margin-top:0 !important}.mt-md-1{margin-top:.25rem !important}.mt-md-2{margin-top:.5rem !important}.mt-md-3{margin-top:1rem !important}.mt-md-4{margin-top:1.5rem !important}.mt-md-5{margin-top:3rem !important}.mt-md-auto{margin-top:auto !important}.me-md-0{margin-right:0 !important}.me-md-1{margin-right:.25rem !important}.me-md-2{margin-right:.5rem !important}.me-md-3{margin-right:1rem !important}.me-md-4{margin-right:1.5rem !important}.me-md-5{margin-right:3rem !important}.me-md-auto{margin-right:auto !important}.mb-md-0{margin-bottom:0 !important}.mb-md-1{margin-bottom:.25rem !important}.mb-md-2{margin-bottom:.5rem !important}.mb-md-3{margin-bottom:1rem !important}.mb-md-4{margin-bottom:1.5rem !important}.mb-md-5{margin-bottom:3rem !important}.mb-md-auto{margin-bottom:auto !important}.ms-md-0{margin-left:0 !important}.ms-md-1{margin-left:.25rem !important}.ms-md-2{margin-left:.5rem !important}.ms-md-3{margin-left:1rem !important}.ms-md-4{margin-left:1.5rem !important}.ms-md-5{margin-left:3rem !important}.ms-md-auto{margin-left:auto !important}.p-md-0{padding:0 !important}.p-md-1{padding:.25rem !important}.p-md-2{padding:.5rem !important}.p-md-3{padding:1rem !important}.p-md-4{padding:1.5rem !important}.p-md-5{padding:3rem !important}.px-md-0{padding-right:0 !important;padding-left:0 !important}.px-md-1{padding-right:.25rem !important;padding-left:.25rem !important}.px-md-2{padding-right:.5rem !important;padding-left:.5rem !important}.px-md-3{padding-right:1rem !important;padding-left:1rem !important}.px-md-4{padding-right:1.5rem !important;padding-left:1.5rem !important}.px-md-5{padding-right:3rem !important;padding-left:3rem !important}.py-md-0{padding-top:0 !important;padding-bottom:0 !important}.py-md-1{padding-top:.25rem !important;padding-bottom:.25rem !important}.py-md-2{padding-top:.5rem !important;padding-bottom:.5rem !important}.py-md-3{padding-top:1rem !important;padding-bottom:1rem !important}.py-md-4{padding-top:1.5rem !important;padding-bottom:1.5rem !important}.py-md-5{padding-top:3rem !important;padding-bottom:3rem !important}.pt-md-0{padding-top:0 !important}.pt-md-1{padding-top:.25rem !important}.pt-md-2{padding-top:.5rem !important}.pt-md-3{padding-top:1rem !important}.pt-md-4{padding-top:1.5rem !important}.pt-md-5{padding-top:3rem !important}.pe-md-0{padding-right:0 !important}.pe-md-1{padding-right:.25rem !important}.pe-md-2{padding-right:.5rem !important}.pe-md-3{padding-right:1rem !important}.pe-md-4{padding-right:1.5rem !important}.pe-md-5{padding-right:3rem !important}.pb-md-0{padding-bottom:0 !important}.pb-md-1{padding-bottom:.25rem !important}.pb-md-2{padding-bottom:.5rem !important}.pb-md-3{padding-bottom:1rem !important}.pb-md-4{padding-bottom:1.5rem !important}.pb-md-5{padding-bottom:3rem !important}.ps-md-0{padding-left:0 !important}.ps-md-1{padding-left:.25rem !important}.ps-md-2{padding-left:.5rem !important}.ps-md-3{padding-left:1rem !important}.ps-md-4{padding-left:1.5rem !important}.ps-md-5{padding-left:3rem !important}.text-md-start{text-align:left !important}.text-md-end{text-align:right !important}.text-md-center{text-align:center !important}}@media (min-width: 992px){.float-lg-start{float:left !important}.float-lg-end{float:right !important}.float-lg-none{float:none !important}.d-lg-inline{display:inline !important}.d-lg-inline-block{display:inline-block !important}.d-lg-block{display:block !important}.d-lg-grid{display:grid !important}.d-lg-table{display:table !important}.d-lg-table-row{display:table-row !important}.d-lg-table-cell{display:table-cell !important}.d-lg-flex{display:flex !important}.d-lg-inline-flex{display:inline-flex !important}.d-lg-none{display:none !important}.flex-lg-fill{flex:1 1 auto !important}.flex-lg-row{flex-direction:row !important}.flex-lg-column{flex-direction:column !important}.flex-lg-row-reverse{flex-direction:row-reverse !important}.flex-lg-column-reverse{flex-direction:column-reverse !important}.flex-lg-grow-0{flex-grow:0 !important}.flex-lg-grow-1{flex-grow:1 !important}.flex-lg-shrink-0{flex-shrink:0 !important}.flex-lg-shrink-1{flex-shrink:1 !important}.flex-lg-wrap{flex-wrap:wrap !important}.flex-lg-nowrap{flex-wrap:nowrap !important}.flex-lg-wrap-reverse{flex-wrap:wrap-reverse !important}.gap-lg-0{gap:0 !important}.gap-lg-1{gap:.25rem !important}.gap-lg-2{gap:.5rem !important}.gap-lg-3{gap:1rem !important}.gap-lg-4{gap:1.5rem !important}.gap-lg-5{gap:3rem !important}.justify-content-lg-start{justify-content:flex-start !important}.justify-content-lg-end{justify-content:flex-end !important}.justify-content-lg-center{justify-content:center !important}.justify-content-lg-between{justify-content:space-between !important}.justify-content-lg-around{justify-content:space-around !important}.justify-content-lg-evenly{justify-content:space-evenly !important}.align-items-lg-start{align-items:flex-start !important}.align-items-lg-end{align-items:flex-end !important}.align-items-lg-center{align-items:center !important}.align-items-lg-baseline{align-items:baseline !important}.align-items-lg-stretch{align-items:stretch !important}.align-content-lg-start{align-content:flex-start !important}.align-content-lg-end{align-content:flex-end !important}.align-content-lg-center{align-content:center !important}.align-content-lg-between{align-content:space-between !important}.align-content-lg-around{align-content:space-around !important}.align-content-lg-stretch{align-content:stretch !important}.align-self-lg-auto{align-self:auto !important}.align-self-lg-start{align-self:flex-start !important}.align-self-lg-end{align-self:flex-end !important}.align-self-lg-center{align-self:center !important}.align-self-lg-baseline{align-self:baseline !important}.align-self-lg-stretch{align-self:stretch !important}.order-lg-first{order:-1 !important}.order-lg-0{order:0 !important}.order-lg-1{order:1 !important}.order-lg-2{order:2 !important}.order-lg-3{order:3 !important}.order-lg-4{order:4 !important}.order-lg-5{order:5 !important}.order-lg-last{order:6 !important}.m-lg-0{margin:0 !important}.m-lg-1{margin:.25rem !important}.m-lg-2{margin:.5rem !important}.m-lg-3{margin:1rem !important}.m-lg-4{margin:1.5rem !important}.m-lg-5{margin:3rem !important}.m-lg-auto{margin:auto !important}.mx-lg-0{margin-right:0 !important;margin-left:0 !important}.mx-lg-1{margin-right:.25rem !important;margin-left:.25rem !important}.mx-lg-2{margin-right:.5rem !important;margin-left:.5rem !important}.mx-lg-3{margin-right:1rem !important;margin-left:1rem !important}.mx-lg-4{margin-right:1.5rem !important;margin-left:1.5rem !important}.mx-lg-5{margin-right:3rem !important;margin-left:3rem !important}.mx-lg-auto{margin-right:auto !important;margin-left:auto !important}.my-lg-0{margin-top:0 !important;margin-bottom:0 !important}.my-lg-1{margin-top:.25rem !important;margin-bottom:.25rem !important}.my-lg-2{margin-top:.5rem !important;margin-bottom:.5rem !important}.my-lg-3{margin-top:1rem !important;margin-bottom:1rem !important}.my-lg-4{margin-top:1.5rem !important;margin-bottom:1.5rem !important}.my-lg-5{margin-top:3rem !important;margin-bottom:3rem !important}.my-lg-auto{margin-top:auto !important;margin-bottom:auto !important}.mt-lg-0{margin-top:0 !important}.mt-lg-1{margin-top:.25rem !important}.mt-lg-2{margin-top:.5rem !important}.mt-lg-3{margin-top:1rem !important}.mt-lg-4{margin-top:1.5rem !important}.mt-lg-5{margin-top:3rem !important}.mt-lg-auto{margin-top:auto !important}.me-lg-0{margin-right:0 !important}.me-lg-1{margin-right:.25rem !important}.me-lg-2{margin-right:.5rem !important}.me-lg-3{margin-right:1rem !important}.me-lg-4{margin-right:1.5rem !important}.me-lg-5{margin-right:3rem !important}.me-lg-auto{margin-right:auto !important}.mb-lg-0{margin-bottom:0 !important}.mb-lg-1{margin-bottom:.25rem !important}.mb-lg-2{margin-bottom:.5rem !important}.mb-lg-3{margin-bottom:1rem !important}.mb-lg-4{margin-bottom:1.5rem !important}.mb-lg-5{margin-bottom:3rem !important}.mb-lg-auto{margin-bottom:auto !important}.ms-lg-0{margin-left:0 !important}.ms-lg-1{margin-left:.25rem !important}.ms-lg-2{margin-left:.5rem !important}.ms-lg-3{margin-left:1rem !important}.ms-lg-4{margin-left:1.5rem !important}.ms-lg-5{margin-left:3rem !important}.ms-lg-auto{margin-left:auto !important}.p-lg-0{padding:0 !important}.p-lg-1{padding:.25rem !important}.p-lg-2{padding:.5rem !important}.p-lg-3{padding:1rem !important}.p-lg-4{padding:1.5rem !important}.p-lg-5{padding:3rem !important}.px-lg-0{padding-right:0 !important;padding-left:0 !important}.px-lg-1{padding-right:.25rem !important;padding-left:.25rem !important}.px-lg-2{padding-right:.5rem !important;padding-left:.5rem !important}.px-lg-3{padding-right:1rem !important;padding-left:1rem !important}.px-lg-4{padding-right:1.5rem !important;padding-left:1.5rem !important}.px-lg-5{padding-right:3rem !important;padding-left:3rem !important}.py-lg-0{padding-top:0 !important;padding-bottom:0 !important}.py-lg-1{padding-top:.25rem !important;padding-bottom:.25rem !important}.py-lg-2{padding-top:.5rem !important;padding-bottom:.5rem !important}.py-lg-3{padding-top:1rem !important;padding-bottom:1rem !important}.py-lg-4{padding-top:1.5rem !important;padding-bottom:1.5rem !important}.py-lg-5{padding-top:3rem !important;padding-bottom:3rem !important}.pt-lg-0{padding-top:0 !important}.pt-lg-1{padding-top:.25rem !important}.pt-lg-2{padding-top:.5rem !important}.pt-lg-3{padding-top:1rem !important}.pt-lg-4{padding-top:1.5rem !important}.pt-lg-5{padding-top:3rem !important}.pe-lg-0{padding-right:0 !important}.pe-lg-1{padding-right:.25rem !important}.pe-lg-2{padding-right:.5rem !important}.pe-lg-3{padding-right:1rem !important}.pe-lg-4{padding-right:1.5rem !important}.pe-lg-5{padding-right:3rem !important}.pb-lg-0{padding-bottom:0 !important}.pb-lg-1{padding-bottom:.25rem !important}.pb-lg-2{padding-bottom:.5rem !important}.pb-lg-3{padding-bottom:1rem !important}.pb-lg-4{padding-bottom:1.5rem !important}.pb-lg-5{padding-bottom:3rem !important}.ps-lg-0{padding-left:0 !important}.ps-lg-1{padding-left:.25rem !important}.ps-lg-2{padding-left:.5rem !important}.ps-lg-3{padding-left:1rem !important}.ps-lg-4{padding-left:1.5rem !important}.ps-lg-5{padding-left:3rem !important}.text-lg-start{text-align:left !important}.text-lg-end{text-align:right !important}.text-lg-center{text-align:center !important}}@media (min-width: 1200px){.float-xl-start{float:left !important}.float-xl-end{float:right !important}.float-xl-none{float:none !important}.d-xl-inline{display:inline !important}.d-xl-inline-block{display:inline-block !important}.d-xl-block{display:block !important}.d-xl-grid{display:grid !important}.d-xl-table{display:table !important}.d-xl-table-row{display:table-row !important}.d-xl-table-cell{display:table-cell !important}.d-xl-flex{display:flex !important}.d-xl-inline-flex{display:inline-flex !important}.d-xl-none{display:none !important}.flex-xl-fill{flex:1 1 auto !important}.flex-xl-row{flex-direction:row !important}.flex-xl-column{flex-direction:column !important}.flex-xl-row-reverse{flex-direction:row-reverse !important}.flex-xl-column-reverse{flex-direction:column-reverse !important}.flex-xl-grow-0{flex-grow:0 !important}.flex-xl-grow-1{flex-grow:1 !important}.flex-xl-shrink-0{flex-shrink:0 !important}.flex-xl-shrink-1{flex-shrink:1 !important}.flex-xl-wrap{flex-wrap:wrap !important}.flex-xl-nowrap{flex-wrap:nowrap !important}.flex-xl-wrap-reverse{flex-wrap:wrap-reverse !important}.gap-xl-0{gap:0 !important}.gap-xl-1{gap:.25rem !important}.gap-xl-2{gap:.5rem !important}.gap-xl-3{gap:1rem !important}.gap-xl-4{gap:1.5rem !important}.gap-xl-5{gap:3rem !important}.justify-content-xl-start{justify-content:flex-start !important}.justify-content-xl-end{justify-content:flex-end !important}.justify-content-xl-center{justify-content:center !important}.justify-content-xl-between{justify-content:space-between !important}.justify-content-xl-around{justify-content:space-around !important}.justify-content-xl-evenly{justify-content:space-evenly !important}.align-items-xl-start{align-items:flex-start !important}.align-items-xl-end{align-items:flex-end !important}.align-items-xl-center{align-items:center !important}.align-items-xl-baseline{align-items:baseline !important}.align-items-xl-stretch{align-items:stretch !important}.align-content-xl-start{align-content:flex-start !important}.align-content-xl-end{align-content:flex-end !important}.align-content-xl-center{align-content:center !important}.align-content-xl-between{align-content:space-between !important}.align-content-xl-around{align-content:space-around !important}.align-content-xl-stretch{align-content:stretch !important}.align-self-xl-auto{align-self:auto !important}.align-self-xl-start{align-self:flex-start !important}.align-self-xl-end{align-self:flex-end !important}.align-self-xl-center{align-self:center !important}.align-self-xl-baseline{align-self:baseline !important}.align-self-xl-stretch{align-self:stretch !important}.order-xl-first{order:-1 !important}.order-xl-0{order:0 !important}.order-xl-1{order:1 !important}.order-xl-2{order:2 !important}.order-xl-3{order:3 !important}.order-xl-4{order:4 !important}.order-xl-5{order:5 !important}.order-xl-last{order:6 !important}.m-xl-0{margin:0 !important}.m-xl-1{margin:.25rem !important}.m-xl-2{margin:.5rem !important}.m-xl-3{margin:1rem !important}.m-xl-4{margin:1.5rem !important}.m-xl-5{margin:3rem !important}.m-xl-auto{margin:auto !important}.mx-xl-0{margin-right:0 !important;margin-left:0 !important}.mx-xl-1{margin-right:.25rem !important;margin-left:.25rem !important}.mx-xl-2{margin-right:.5rem !important;margin-left:.5rem !important}.mx-xl-3{margin-right:1rem !important;margin-left:1rem !important}.mx-xl-4{margin-right:1.5rem !important;margin-left:1.5rem !important}.mx-xl-5{margin-right:3rem !important;margin-left:3rem !important}.mx-xl-auto{margin-right:auto !important;margin-left:auto !important}.my-xl-0{margin-top:0 !important;margin-bottom:0 !important}.my-xl-1{margin-top:.25rem !important;margin-bottom:.25rem !important}.my-xl-2{margin-top:.5rem !important;margin-bottom:.5rem !important}.my-xl-3{margin-top:1rem !important;margin-bottom:1rem !important}.my-xl-4{margin-top:1.5rem !important;margin-bottom:1.5rem !important}.my-xl-5{margin-top:3rem !important;margin-bottom:3rem !important}.my-xl-auto{margin-top:auto !important;margin-bottom:auto !important}.mt-xl-0{margin-top:0 !important}.mt-xl-1{margin-top:.25rem !important}.mt-xl-2{margin-top:.5rem !important}.mt-xl-3{margin-top:1rem !important}.mt-xl-4{margin-top:1.5rem !important}.mt-xl-5{margin-top:3rem !important}.mt-xl-auto{margin-top:auto !important}.me-xl-0{margin-right:0 !important}.me-xl-1{margin-right:.25rem !important}.me-xl-2{margin-right:.5rem !important}.me-xl-3{margin-right:1rem !important}.me-xl-4{margin-right:1.5rem !important}.me-xl-5{margin-right:3rem !important}.me-xl-auto{margin-right:auto !important}.mb-xl-0{margin-bottom:0 !important}.mb-xl-1{margin-bottom:.25rem !important}.mb-xl-2{margin-bottom:.5rem !important}.mb-xl-3{margin-bottom:1rem !important}.mb-xl-4{margin-bottom:1.5rem !important}.mb-xl-5{margin-bottom:3rem !important}.mb-xl-auto{margin-bottom:auto !important}.ms-xl-0{margin-left:0 !important}.ms-xl-1{margin-left:.25rem !important}.ms-xl-2{margin-left:.5rem !important}.ms-xl-3{margin-left:1rem !important}.ms-xl-4{margin-left:1.5rem !important}.ms-xl-5{margin-left:3rem !important}.ms-xl-auto{margin-left:auto !important}.p-xl-0{padding:0 !important}.p-xl-1{padding:.25rem !important}.p-xl-2{padding:.5rem !important}.p-xl-3{padding:1rem !important}.p-xl-4{padding:1.5rem !important}.p-xl-5{padding:3rem !important}.px-xl-0{padding-right:0 !important;padding-left:0 !important}.px-xl-1{padding-right:.25rem !important;padding-left:.25rem !important}.px-xl-2{padding-right:.5rem !important;padding-left:.5rem !important}.px-xl-3{padding-right:1rem !important;padding-left:1rem !important}.px-xl-4{padding-right:1.5rem !important;padding-left:1.5rem !important}.px-xl-5{padding-right:3rem !important;padding-left:3rem !important}.py-xl-0{padding-top:0 !important;padding-bottom:0 !important}.py-xl-1{padding-top:.25rem !important;padding-bottom:.25rem !important}.py-xl-2{padding-top:.5rem !important;padding-bottom:.5rem !important}.py-xl-3{padding-top:1rem !important;padding-bottom:1rem !important}.py-xl-4{padding-top:1.5rem !important;padding-bottom:1.5rem !important}.py-xl-5{padding-top:3rem !important;padding-bottom:3rem !important}.pt-xl-0{padding-top:0 !important}.pt-xl-1{padding-top:.25rem !important}.pt-xl-2{padding-top:.5rem !important}.pt-xl-3{padding-top:1rem !important}.pt-xl-4{padding-top:1.5rem !important}.pt-xl-5{padding-top:3rem !important}.pe-xl-0{padding-right:0 !important}.pe-xl-1{padding-right:.25rem !important}.pe-xl-2{padding-right:.5rem !important}.pe-xl-3{padding-right:1rem !important}.pe-xl-4{padding-right:1.5rem !important}.pe-xl-5{padding-right:3rem !important}.pb-xl-0{padding-bottom:0 !important}.pb-xl-1{padding-bottom:.25rem !important}.pb-xl-2{padding-bottom:.5rem !important}.pb-xl-3{padding-bottom:1rem !important}.pb-xl-4{padding-bottom:1.5rem !important}.pb-xl-5{padding-bottom:3rem !important}.ps-xl-0{padding-left:0 !important}.ps-xl-1{padding-left:.25rem !important}.ps-xl-2{padding-left:.5rem !important}.ps-xl-3{padding-left:1rem !important}.ps-xl-4{padding-left:1.5rem !important}.ps-xl-5{padding-left:3rem !important}.text-xl-start{text-align:left !important}.text-xl-end{text-align:right !important}.text-xl-center{text-align:center !important}}@media (min-width: 1400px){.float-xxl-start{float:left !important}.float-xxl-end{float:right !important}.float-xxl-none{float:none !important}.d-xxl-inline{display:inline !important}.d-xxl-inline-block{display:inline-block !important}.d-xxl-block{display:block !important}.d-xxl-grid{display:grid !important}.d-xxl-table{display:table !important}.d-xxl-table-row{display:table-row !important}.d-xxl-table-cell{display:table-cell !important}.d-xxl-flex{display:flex !important}.d-xxl-inline-flex{display:inline-flex !important}.d-xxl-none{display:none !important}.flex-xxl-fill{flex:1 1 auto !important}.flex-xxl-row{flex-direction:row !important}.flex-xxl-column{flex-direction:column !important}.flex-xxl-row-reverse{flex-direction:row-reverse !important}.flex-xxl-column-reverse{flex-direction:column-reverse !important}.flex-xxl-grow-0{flex-grow:0 !important}.flex-xxl-grow-1{flex-grow:1 !important}.flex-xxl-shrink-0{flex-shrink:0 !important}.flex-xxl-shrink-1{flex-shrink:1 !important}.flex-xxl-wrap{flex-wrap:wrap !important}.flex-xxl-nowrap{flex-wrap:nowrap !important}.flex-xxl-wrap-reverse{flex-wrap:wrap-reverse !important}.gap-xxl-0{gap:0 !important}.gap-xxl-1{gap:.25rem !important}.gap-xxl-2{gap:.5rem !important}.gap-xxl-3{gap:1rem !important}.gap-xxl-4{gap:1.5rem !important}.gap-xxl-5{gap:3rem !important}.justify-content-xxl-start{justify-content:flex-start !important}.justify-content-xxl-end{justify-content:flex-end !important}.justify-content-xxl-center{justify-content:center !important}.justify-content-xxl-between{justify-content:space-between !important}.justify-content-xxl-around{justify-content:space-around !important}.justify-content-xxl-evenly{justify-content:space-evenly !important}.align-items-xxl-start{align-items:flex-start !important}.align-items-xxl-end{align-items:flex-end !important}.align-items-xxl-center{align-items:center !important}.align-items-xxl-baseline{align-items:baseline !important}.align-items-xxl-stretch{align-items:stretch !important}.align-content-xxl-start{align-content:flex-start !important}.align-content-xxl-end{align-content:flex-end !important}.align-content-xxl-center{align-content:center !important}.align-content-xxl-between{align-content:space-between !important}.align-content-xxl-around{align-content:space-around !important}.align-content-xxl-stretch{align-content:stretch !important}.align-self-xxl-auto{align-self:auto !important}.align-self-xxl-start{align-self:flex-start !important}.align-self-xxl-end{align-self:flex-end !important}.align-self-xxl-center{align-self:center !important}.align-self-xxl-baseline{align-self:baseline !important}.align-self-xxl-stretch{align-self:stretch !important}.order-xxl-first{order:-1 !important}.order-xxl-0{order:0 !important}.order-xxl-1{order:1 !important}.order-xxl-2{order:2 !important}.order-xxl-3{order:3 !important}.order-xxl-4{order:4 !important}.order-xxl-5{order:5 !important}.order-xxl-last{order:6 !important}.m-xxl-0{margin:0 !important}.m-xxl-1{margin:.25rem !important}.m-xxl-2{margin:.5rem !important}.m-xxl-3{margin:1rem !important}.m-xxl-4{margin:1.5rem !important}.m-xxl-5{margin:3rem !important}.m-xxl-auto{margin:auto !important}.mx-xxl-0{margin-right:0 !important;margin-left:0 !important}.mx-xxl-1{margin-right:.25rem !important;margin-left:.25rem !important}.mx-xxl-2{margin-right:.5rem !important;margin-left:.5rem !important}.mx-xxl-3{margin-right:1rem !important;margin-left:1rem !important}.mx-xxl-4{margin-right:1.5rem !important;margin-left:1.5rem !important}.mx-xxl-5{margin-right:3rem !important;margin-left:3rem !important}.mx-xxl-auto{margin-right:auto !important;margin-left:auto !important}.my-xxl-0{margin-top:0 !important;margin-bottom:0 !important}.my-xxl-1{margin-top:.25rem !important;margin-bottom:.25rem !important}.my-xxl-2{margin-top:.5rem !important;margin-bottom:.5rem !important}.my-xxl-3{margin-top:1rem !important;margin-bottom:1rem !important}.my-xxl-4{margin-top:1.5rem !important;margin-bottom:1.5rem !important}.my-xxl-5{margin-top:3rem !important;margin-bottom:3rem !important}.my-xxl-auto{margin-top:auto !important;margin-bottom:auto !important}.mt-xxl-0{margin-top:0 !important}.mt-xxl-1{margin-top:.25rem !important}.mt-xxl-2{margin-top:.5rem !important}.mt-xxl-3{margin-top:1rem !important}.mt-xxl-4{margin-top:1.5rem !important}.mt-xxl-5{margin-top:3rem !important}.mt-xxl-auto{margin-top:auto !important}.me-xxl-0{margin-right:0 !important}.me-xxl-1{margin-right:.25rem !important}.me-xxl-2{margin-right:.5rem !important}.me-xxl-3{margin-right:1rem !important}.me-xxl-4{margin-right:1.5rem !important}.me-xxl-5{margin-right:3rem !important}.me-xxl-auto{margin-right:auto !important}.mb-xxl-0{margin-bottom:0 !important}.mb-xxl-1{margin-bottom:.25rem !important}.mb-xxl-2{margin-bottom:.5rem !important}.mb-xxl-3{margin-bottom:1rem !important}.mb-xxl-4{margin-bottom:1.5rem !important}.mb-xxl-5{margin-bottom:3rem !important}.mb-xxl-auto{margin-bottom:auto !important}.ms-xxl-0{margin-left:0 !important}.ms-xxl-1{margin-left:.25rem !important}.ms-xxl-2{margin-left:.5rem !important}.ms-xxl-3{margin-left:1rem !important}.ms-xxl-4{margin-left:1.5rem !important}.ms-xxl-5{margin-left:3rem !important}.ms-xxl-auto{margin-left:auto !important}.p-xxl-0{padding:0 !important}.p-xxl-1{padding:.25rem !important}.p-xxl-2{padding:.5rem !important}.p-xxl-3{padding:1rem !important}.p-xxl-4{padding:1.5rem !important}.p-xxl-5{padding:3rem !important}.px-xxl-0{padding-right:0 !important;padding-left:0 !important}.px-xxl-1{padding-right:.25rem !important;padding-left:.25rem !important}.px-xxl-2{padding-right:.5rem !important;padding-left:.5rem !important}.px-xxl-3{padding-right:1rem !important;padding-left:1rem !important}.px-xxl-4{padding-right:1.5rem !important;padding-left:1.5rem !important}.px-xxl-5{padding-right:3rem !important;padding-left:3rem !important}.py-xxl-0{padding-top:0 !important;padding-bottom:0 !important}.py-xxl-1{padding-top:.25rem !important;padding-bottom:.25rem !important}.py-xxl-2{padding-top:.5rem !important;padding-bottom:.5rem !important}.py-xxl-3{padding-top:1rem !important;padding-bottom:1rem !important}.py-xxl-4{padding-top:1.5rem !important;padding-bottom:1.5rem !important}.py-xxl-5{padding-top:3rem !important;padding-bottom:3rem !important}.pt-xxl-0{padding-top:0 !important}.pt-xxl-1{padding-top:.25rem !important}.pt-xxl-2{padding-top:.5rem !important}.pt-xxl-3{padding-top:1rem !important}.pt-xxl-4{padding-top:1.5rem !important}.pt-xxl-5{padding-top:3rem !important}.pe-xxl-0{padding-right:0 !important}.pe-xxl-1{padding-right:.25rem !important}.pe-xxl-2{padding-right:.5rem !important}.pe-xxl-3{padding-right:1rem !important}.pe-xxl-4{padding-right:1.5rem !important}.pe-xxl-5{padding-right:3rem !important}.pb-xxl-0{padding-bottom:0 !important}.pb-xxl-1{padding-bottom:.25rem !important}.pb-xxl-2{padding-bottom:.5rem !important}.pb-xxl-3{padding-bottom:1rem !important}.pb-xxl-4{padding-bottom:1.5rem !important}.pb-xxl-5{padding-bottom:3rem !important}.ps-xxl-0{padding-left:0 !important}.ps-xxl-1{padding-left:.25rem !important}.ps-xxl-2{padding-left:.5rem !important}.ps-xxl-3{padding-left:1rem !important}.ps-xxl-4{padding-left:1.5rem !important}.ps-xxl-5{padding-left:3rem !important}.text-xxl-start{text-align:left !important}.text-xxl-end{text-align:right !important}.text-xxl-center{text-align:center !important}}@media (min-width: 1200px){.fs-1{font-size:2.5rem !important}.fs-2{font-size:2rem !important}.fs-3{font-size:1.75rem !important}.fs-4{font-size:1.5rem !important}}@media print{.d-print-inline{display:inline !important}.d-print-inline-block{display:inline-block !important}.d-print-block{display:block !important}.d-print-grid{display:grid !important}.d-print-table{display:table !important}.d-print-table-row{display:table-row !important}.d-print-table-cell{display:table-cell !important}.d-print-flex{display:flex !important}.d-print-inline-flex{display:inline-flex !important}.d-print-none{display:none !important}} diff --git a/browserconfig.xml b/browserconfig.xml new file mode 100644 index 0000000000..b3930d0f04 --- /dev/null +++ b/browserconfig.xml @@ -0,0 +1,9 @@ + + + + + + #da532c + + + diff --git a/btc-ln/BOLT 11 - invoices/index.html b/btc-ln/BOLT 11 - invoices/index.html new file mode 100644 index 0000000000..311f96fefd --- /dev/null +++ b/btc-ln/BOLT 11 - invoices/index.html @@ -0,0 +1,136 @@ +BOLT 11 - invoices | philip's notes

                BOLT 11 - invoices

                2022-04-10 · 2 min read

                See: LDK - lightning-invoice crate

                Fields with known tags: lightning-invoice::TaggedField

                pub enum TaggedField {
                +	PaymentHash(Sha256),
                +	Description(Description),
                +	PayeePubKey(PayeePubKey),
                +	DescriptionHash(Sha256),
                +	ExpiryTime(ExpiryTime),
                +	MinFinalCltvExpiry(MinFinalCltvExpiry),
                +	Fallback(Fallback),
                +	PrivateRoute(PrivateRoute),
                +	PaymentSecret(PaymentSecret),
                +	Features(InvoiceFeatures),
                +}
                +

                Routing hints #

                Private nodes behind a public LSP can still accept payments via Routing Hints. Here, the private node advertises an invoice with the final LSP -> Private Node hop encoded into the invoice, so other nodes can still route to the Private Node even though they're not publicly advertised or otherwise reachable.

                lightning-invoice::PrivateRoute

                /// Private routing information
                +///
                +/// # Invariants
                +/// The encoded route has to be <1024 5bit characters
                +/// long (<=639 bytes or <=12 hops)
                +pub struct PrivateRoute(RouteHint);
                +

                ln::routing::router::RouteHint

                /// A list of hops along a payment path terminating
                +/// with a channel to the recipient.
                +pub struct RouteHint(pub Vec<RouteHintHop>);
                +

                ln::routing::router::RouteHintHop

                /// A channel descriptor for a hop along a payment path.
                +pub struct RouteHintHop {
                +	/// The node_id of the non-target end of the route
                +	pub src_node_id: PublicKey,
                +	/// The short_channel_id of this channel
                +	pub short_channel_id: u64,
                +	/// The fees which must be paid to use this channel
                +	pub fees: RoutingFees,
                +	/// The difference in CLTV values between this
                +	/// node and the next node.
                +	pub cltv_expiry_delta: u16,
                +	/// The minimum value, in msat, which must be
                +	/// relayed to the next hop.
                +	pub htlc_minimum_msat: Option<u64>,
                +	/// The maximum value in msat available for
                +	/// routing with a single HTLC.
                +	pub htlc_maximum_msat: Option<u64>,
                +}
                +
                \ No newline at end of file diff --git a/btc-ln/BOLT 2 - channel management protocol/index.html b/btc-ln/BOLT 2 - channel management protocol/index.html new file mode 100644 index 0000000000..23e1401b02 --- /dev/null +++ b/btc-ln/BOLT 2 - channel management protocol/index.html @@ -0,0 +1,319 @@ +BOLT 2 - channel management protocol | philip's notes

                BOLT 2 - channel management protocol

                2022-04-10 · 14 min read

                Source: https://github.com/lightning/bolts/blob/master/02-peer-protocol.md

                This BOLT describes the bilateral messaging protocol for (1) establishing, (2) operating, and (3) closing lightning payment channels between two LN peers.

                def: channel_id: [u8; 32] #

                Channels are identified by a channel_id, which is derived from the funding tx id and index.

                Before the channel is funded, the channel_id is random.

                Pre-funded channels are not yet uniquely identified. Use (src_node_id, dest_node_id, channel_id) for identification.

                Parties can also offer "short channel id" (SCID) aliases (size = u64), which we can use instead of the actual channel_id to avoid leaking the on-chain funding UTXO.

                Channel Establishment #

                Channels may be established after a secure connection is authenticated and features negotiated.

                The establishment process goes through 3 phases: (1-2) negotiate the channel parameters, (3-4) create the funding tx, (5-6) lock in the channel once the funding tx is confirmed on-chain.

                 funder                                 fundee
                ++-------+                              +-------+
                +|       |--(1)---  open_channel  ----->|       |  <
                +|       |<-(2)--  accept_channel  -----|       |  <
                +|       |                              |       |  <  temporary channel id
                +|   A   |--(3)--  funding_created  --->|   B   |  <
                +|       |<-(4)--  funding_signed  -----|       |  <
                +|       |                              |       | ---
                +|       |--(5)--- funding_locked  ---->|       |  <
                +|       |<-(6)--- funding_locked  -----|       |  <  real channel id
                ++-------+                              +-------+  <
                +

                def: open_channel wire message #

                The channel funder sends an open_channel message to the channel fundee. Here, funder and fundee are negotiating the channel parameters for their new channel contract. A few of the important channel parameters:

                1. the channel size (amount to be funded or max liquidity)
                2. optional initial payment to fundee
                3. channel fee rate
                4. supported channel features
                5. bounds: minimum HTLC size, dust limits, max num. HTLCs, max in-flight value
                6. on-chain confirmations-to-finality

                The channel id is just a random nonce at this point.

                See: msgs::OpenChannel

                /// An open_channel message to be sent or received from a peer
                +pub struct OpenChannel {
                +	/// The genesis hash of the blockchain where the channel is to be opened
                +	pub chain_hash: BlockHash,
                +	/// A temporary channel ID, until the funding outpoint is announced
                +	pub temporary_channel_id: [u8; 32],
                +	/// The channel value
                +	pub funding_satoshis: u64,
                +	/// The amount to push to the counterparty as part of the open, in
                +	/// milli-satoshi
                +	pub push_msat: u64,
                +	/// The threshold below which outputs on transactions broadcast by
                +	/// sender will be omitted
                +	pub dust_limit_satoshis: u64,
                +	/// The maximum inbound HTLC value in flight towards sender, in
                +	/// milli-satoshi
                +	pub max_htlc_value_in_flight_msat: u64,
                +	/// The minimum value unencumbered by HTLCs for the counterparty
                +	/// to keep in the channel
                +	pub channel_reserve_satoshis: u64,
                +	/// The minimum HTLC size incoming to sender, in milli-satoshi
                +	pub htlc_minimum_msat: u64,
                +	/// The feerate per 1000-weight of sender generated transactions,
                +	/// until updated by update_fee
                +	pub feerate_per_kw: u32,
                +	/// The number of blocks which the counterparty will have to wait
                +	/// to claim on-chain funds if they broadcast a commitment transaction
                +	pub to_self_delay: u16,
                +	/// The maximum number of inbound HTLCs towards sender
                +	pub max_accepted_htlcs: u16,
                +	/// The sender's key controlling the funding transaction
                +	pub funding_pubkey: PublicKey,
                +	/// Used to derive a revocation key for transactions broadcast
                +	/// by counterparty
                +	pub revocation_basepoint: PublicKey,
                +	/// A payment key to sender for transactions broadcast by counterparty
                +	pub payment_point: PublicKey,
                +	/// Used to derive a payment key to sender for transactions
                +	/// broadcast by sender
                +	pub delayed_payment_basepoint: PublicKey,
                +	/// Used to derive an HTLC payment key to sender
                +	pub htlc_basepoint: PublicKey,
                +	/// The first to-be-broadcast-by-sender transaction's per
                +	/// commitment point
                +	pub first_per_commitment_point: PublicKey,
                +	/// Channel flags
                +	pub channel_flags: u8,
                +	/// Optionally, a request to pre-set the to-sender output's
                +	/// scriptPubkey for when we collaboratively close
                +	pub shutdown_scriptpubkey: OptionalField<Script>,
                +	/// The channel type that this channel will represent. If none is
                +	/// set, we derive the channel type from the intersection of our
                +	/// feature bits with our counterparty's feature bits from the
                +	/// Init message.
                +	pub channel_type: Option<ChannelTypeFeatures>,
                +}
                +

                funder flow #

                ChannelManager::create_channel

                fundee flow #

                ChannelManager::internal_open_channel

                Channel::accept_inbound_channel

                (If configured for user-level authorization) Generate Event::OpenChannelRequest

                def: accept_channel wire message #

                The fundee can choose to accept a new channel proposal by responding with an accept_channel message.

                The channel id is still the same random nonce.

                See: https://github.com/lightningdevkit/rust-lightning/blob/711bcefbcc0999543d9622c030ff7dc8118fc26f/lightning/src/ln/msgs.rs#L181

                /// An accept_channel message to be sent or received from a peer
                +pub struct AcceptChannel {
                +	/// A temporary channel ID, until the funding outpoint is announced
                +	pub temporary_channel_id: [u8; 32],
                +	/// The threshold below which outputs on transactions broadcast
                +	/// by sender will be omitted
                +	pub dust_limit_satoshis: u64,
                +	/// The maximum inbound HTLC value in flight towards sender,
                +	/// in milli-satoshi
                +	pub max_htlc_value_in_flight_msat: u64,
                +	/// The minimum value unencumbered by HTLCs for the counterparty
                +	/// to keep in the channel
                +	pub channel_reserve_satoshis: u64,
                +	/// The minimum HTLC size incoming to sender, in milli-satoshi
                +	pub htlc_minimum_msat: u64,
                +	/// Minimum depth of the funding transaction before the channel
                +	/// is considered open
                +	pub minimum_depth: u32,
                +	/// The number of blocks which the counterparty will have to wait
                +	/// to claim on-chain funds if they broadcast a commitment transaction
                +	pub to_self_delay: u16,
                +	/// The maximum number of inbound HTLCs towards sender
                +	pub max_accepted_htlcs: u16,
                +	/// The sender's key controlling the funding transaction
                +	pub funding_pubkey: PublicKey,
                +	/// Used to derive a revocation key for transactions broadcast
                +	/// by counterparty
                +	pub revocation_basepoint: PublicKey,
                +	/// A payment key to sender for transactions broadcast by counterparty
                +	pub payment_point: PublicKey,
                +	/// Used to derive a payment key to sender for transactions
                +	/// broadcast by sender
                +	pub delayed_payment_basepoint: PublicKey,
                +	/// Used to derive an HTLC payment key to sender for transactions
                +	/// broadcast by counterparty
                +	pub htlc_basepoint: PublicKey,
                +	/// The first to-be-broadcast-by-sender transaction's per
                +	/// commitment point
                +	pub first_per_commitment_point: PublicKey,
                +	/// Optionally, a request to pre-set the to-sender output's
                +	/// scriptPubkey for when we collaboratively close
                +	pub shutdown_scriptpubkey: OptionalField<Script>,
                +	/// The channel type that this channel will represent. If none is
                +	/// set, we derive the channel type from the intersection of our
                +	/// feature bits with our counterparty's feature bits from the
                +	/// Init message.
                +	///
                +	/// This is required to match the equivalent field in
                +	/// [`OpenChannel::channel_type`].
                +	pub channel_type: Option<ChannelTypeFeatures>,
                +}
                +

                fundee flow #

                If accept: Channel::generate_accept_channel_message

                funder flow #

                ChannelManager::internal_accept_channel

                Channel::accept_channel

                Generate Event::FundingGenerationReady

                def: funding_created wire message #

                The funder crafts a funding transaction, signs it, and sends it to the fundee for their signature.

                The channel id is still a random nonce.

                See: https://github.com/lightningdevkit/rust-lightning/blob/711bcefbcc0999543d9622c030ff7dc8118fc26f/lightning/src/ln/msgs.rs#L222

                /// A funding_created message to be sent or received from a peer
                +pub struct FundingCreated {
                +	/// A temporary channel ID, until the funding is established
                +	pub temporary_channel_id: [u8; 32],
                +	/// The funding transaction ID
                +	pub funding_txid: Txid,
                +	/// The specific output index funding this channel
                +	pub funding_output_index: u16,
                +	/// The signature of the channel initiator (funder) on the
                +	/// initial commitment transaction
                +	pub signature: Signature,
                +}
                +

                funder flow #

                ChannelManager::funding_transaction_generated

                ChannelManager::funding_transaction_generated_intern

                Updates the channel state and creates the FundingCreated p2p msg: Channel::get_outbound_funding_created

                fundee flow #

                ChannelManager::internal_funding_created

                Fundee verifies, signs, returns FundingSigned msg: Channel::funding_created

                Fundee finally signs here: Channel::funding_created_signature

                Fundee adds channel monitor hook to watch for confirmations. Responds with FundingSigned message.

                def: funding_signed wire message #

                The fundee responds with their signature on the funding tx. With this signature, the funding tx is now ready for propagation by the funder.

                This is the first message where we refer to the channel by its real channel id and not the random nonce.

                See: https://github.com/lightningdevkit/rust-lightning/blob/711bcefbcc0999543d9622c030ff7dc8118fc26f/lightning/src/ln/msgs.rs#L235

                /// A funding_signed message to be sent or received from a peer
                +pub struct FundingSigned {
                +	/// The channel ID
                +	pub channel_id: [u8; 32],
                +	/// The signature of the channel acceptor (fundee) on the
                +	/// initial commitment transaction
                +	pub signature: Signature,
                +}
                +

                fundee flow #

                Fundee responds with FundingSigned message in tail-end of Channel::funding_created

                funder flow #

                Verify, hook channel monitor on tx, and broadcast funding tx: ChannelManager::internal_funding_signed

                Verify, build funding tx & tx monitor: Channel::funding_signed

                Broadcast funding tx: chaininterface::BroadcasterInterface::broadcast_transaction

                def: funding_locked wire message #

                Each node watches the chain, waiting for the funding tx to confirm. Once a node sees the funding tx confirm, they send a msgs::FundingLocked message to the other peer.

                Only once both peers have seen and verified that the funding tx has confirmed, and both peers have received each other's FundingLocked message, can the channel finally enter normal operating mode.

                The peers use the real channel id here.

                See: https://github.com/lightningdevkit/rust-lightning/blob/711bcefbcc0999543d9622c030ff7dc8118fc26f/lightning/src/ln/msgs.rs#L244

                /// A funding_locked message to be sent or received from a peer
                +pub struct FundingLocked {
                +	/// The channel ID
                +	pub channel_id: [u8; 32],
                +	/// The per-commitment point of the second commitment transaction
                +	pub next_per_commitment_point: PublicKey,
                +	/// If set, provides a short_channel_id alias for this channel.
                +	/// The sender will accept payments to be forwarded over this
                +	/// SCID and forward them to this messages' recipient.
                +	pub short_channel_id_alias: Option<u64>,
                +}
                +

                funder & fundee flow #

                On funding tx confirmation #

                The ChannelManager on both sides will get poked when the funding tx is sufficiently confirmed. There appear to be several different possible interfaces, depending on how the chain listening is setup, like whether we're connected to a full node or light node, or if we have some block filtering etc...

                The two I can see right off the bat are the traits chain::Listen (whole new blocks) and chain::Confirm (only specific txs we're interested in, only block headers).

                You choose chain::Listen if you're connected to a full node and chain::Confirm if you're connected to a light node (my speculation).

                These interfaces are impl'd by ChannelManager, who will eventually call ChannelManager::do_chain_event with a callback, which can possibly generate a FundingLocked msg for sending to the other peer.

                Each channel handles the tx confirm update in Channel::transactions_confirmed. Check if the tx is relevant and sufficiently confirmed, then generate the FundingLocked msg in Channel::check_get_funding_locked.

                If the Channel::is_usable (both sides confirmed), then also Channel::get_announcement_sigs, which generates a msgs::AccountmentSignatures for sending, announcing the new channel.

                Once the channel is_usable, we enter Normal Channel Operation.

                On remote funding_locked msg rx #

                Rx peer's funding_locked msg: ChannelManager::internal_funding_locked

                Update the channel state w/ Channel::funding_locked.

                Like before, if the channel is now usable (both sides confirmed), is configured for announcement, and is announcable, then generate, sign, and send the msg::AnnouncementSignatures.

                (not clear to me yet when these are announced)

                Once the channel is_usable, we enter Normal Channel Operation.

                Cooperative Channel Close #

                Both nodes can agree to graceful close a channel. This process consumes less fees and lets both sides access their funds immediately.

                The other alternatives are unilateral close (maybe someone crashed) and revoked transaction close (the counterparty deliberately cheats and broadcasts an old state).

                One side begins active shutdown of the channel and indicates how/where they want to be paid. The passive shutdown side responds similarly. Once a side has observed a shutdown, they will no longer accept new HTLCs on this channel. Once the shutdown is begun, both sides will wait for all pending HTLCs to resolve pending HTLCs to fail backwards. Once all HTLCs have resolved, both sides negotiate a final fee amount and broadcast the channel closure tx.

                Protocol Diagram

                +-------+                              +-------+
                +|       |--(1)-----  shutdown  ------->|       |
                +|       |<-(2)-----  shutdown  --------|       |
                +|       |                              |       |
                +|       | <complete all pending HTLCs> |       |
                +|   A   |                 ...          |   B   |
                +|       |                              |       |
                +|       |--(3)-- closing_signed  F1--->|       |
                +|       |<-(4)-- closing_signed  F2----|       |
                +|       |              ...             |       |
                +|       |--(?)-- closing_signed  Fn--->|       |
                +|       |<-(?)-- closing_signed  Fn----|       |
                ++-------+                              +-------+
                +

                def: shutdown wire message #

                See: https://github.com/lightningdevkit/rust-lightning/blob/711bcefbcc0999543d9622c030ff7dc8118fc26f/lightning/src/ln/msgs.rs#L256

                /// A shutdown message to be sent or received from a peer
                +pub struct Shutdown {
                +	/// The channel ID
                +	pub channel_id: [u8; 32],
                +	/// The destination of this peer's funds on closing.
                +	/// Must be in one of these forms: p2pkh, p2sh, p2wpkh, p2wsh.
                +	pub scriptpubkey: Script,
                +}
                +

                active closer #

                ChannelManager::close_channel which immediately calls ChannelManager::close_channel_internal. chanmgr grabs the channel, moves it into shutdown mode, maybe updates monitor w/ new shutdown script, sends shutdown msg to peer. Then fails all pending HTLCs backwards: ChannelManager::fail_htlc_backwards. I guess we don't wait for HTLCs to resolve, just notify that they should fail.

                Begin channel shutdown, craft Shutdown message, return failed HTLCs: Channel::get_shutdown

                passive closer #

                Notify the channel about the remote shutdown. Maybe update the monitor w/ shutdown script. Send the shutdown response msg. Fail any pending HTLCs. ChannelManager::internal_shutdown

                Channel rx'd shutdown msg from remote peer; maybe generate a shutdown response msg: Channel::shutdown

                def: closing_signed wire message #

                The channel is officially shutdown and all pending HTLCs are resolved or failed. Now both peers must negotiate a fee for the closing transaction.

                There are two negotiation methods: (1) the "old" method, where nodes go back and forth proposing a "fair" fee and either accepting or rejecting with their new fee, and (2) the "modern" method, where the funder proposes a permissible fee range, and the fundee chooses a value from the range.

                See: https://github.com/lightningdevkit/rust-lightning/blob/711bcefbcc0999543d9622c030ff7dc8118fc26f/lightning/src/ln/msgs.rs#L279

                /// A closing_signed message to be sent or received from a peer
                +pub struct ClosingSigned {
                +	/// The channel ID
                +	pub channel_id: [u8; 32],
                +	/// The proposed total fee for the closing transaction
                +	pub fee_satoshis: u64,
                +	/// A signature on the closing transaction
                +	pub signature: Signature,
                +	/// The minimum and maximum fees which the sender is willing
                +	/// to accept, provided only by new nodes.
                +	pub fee_range: Option<ClosingSignedFeeRange>,
                +}
                +
                +/// The minimum and maximum fees which the sender is willing to place
                +/// on the closing transaction. This is provided in [`ClosingSigned`]
                +/// by both sides to indicate the fee range they are willing to use.
                +pub struct ClosingSignedFeeRange {
                +	/// The minimum absolute fee, in satoshis, which the sender is
                +	/// willing to place on the closing transaction.
                +	pub min_fee_satoshis: u64,
                +	/// The maximum absolute fee, in satoshis, which the sender is
                +	/// willing to place on the closing transaction.
                +	pub max_fee_satoshis: u64,
                +}
                +

                Normal Channel Operation #

                Protocol Diagram

                +-------+                               +-------+
                +|       |--(1)---- update_add_htlc ---->|       |
                +|       |--(2)---- update_add_htlc ---->|       |
                +|       |<-(3)---- update_add_htlc -----|       |
                +|       |                               |       |
                +|       |--(4)--- commitment_signed --->|       |
                +|   A   |<-(5)---- revoke_and_ack ------|   B   |
                +|       |                               |       |
                +|       |<-(6)--- commitment_signed ----|       |
                +|       |--(7)---- revoke_and_ack ----->|       |
                +|       |                               |       |
                +|       |--(8)--- commitment_signed --->|       |
                +|       |<-(9)---- revoke_and_ack ------|       |
                ++-------+                               +-------+
                +

                TODO(philiphayes): finish this section

                def: update_add_htlc wire message #

                /// An update_add_htlc message to be sent or received from a peer
                +pub struct UpdateAddHTLC {
                +	/// The channel ID
                +	pub channel_id: [u8; 32],
                +	/// The HTLC ID
                +	pub htlc_id: u64,
                +	/// The HTLC value in milli-satoshi
                +	pub amount_msat: u64,
                +	/// The payment hash, the pre-image of which controls HTLC redemption
                +	pub payment_hash: PaymentHash,
                +	/// The expiry height of the HTLC
                +	pub cltv_expiry: u32,
                +	pub(crate) onion_routing_packet: OnionPacket,
                +}
                +
                \ No newline at end of file diff --git a/btc-ln/BOLT 4 - onion routing protocol/index.html b/btc-ln/BOLT 4 - onion routing protocol/index.html new file mode 100644 index 0000000000..2d1cc6d3ad --- /dev/null +++ b/btc-ln/BOLT 4 - onion routing protocol/index.html @@ -0,0 +1,97 @@ +BOLT 4 - onion routing protocol | philip's notes

                BOLT 4 - onion routing protocol

                2022-03-17 · 2 min read

                Source: https://github.com/lightning/bolts/blob/master/04-onion-routing.md

                Terminology #

                • Origin Node
                • Intermediate Node, a.k.a. Hop
                • Final Node
                • Route: list of Hops, constructed by Origin Node

                Overview #

                • Route payment HTLC from origin node to final node via many intermediate nodes.
                • Based on (2009) Sphinx - A Compact and Provably Secure Mix Format (co-authored by old colleague George Danezis :)), extended with a per-hop payload.
                • Intermediate nodes can't learn (1) origin, (2) other hops (except pred- and succ- hops), (3) route length, or (4) position in route.
                • Origin node must pre-compute full route. Must learn pubkey of each intermediate (and final) node.
                • Intermediate nodes advertise their fee schema.
                  • Fees are just (flat base rate + proportional rate).
                  • If nodes advertise new fee rates, they must continue to accept their stale fee rates for a little while longer to account for propagation delay.
                • Origin node also effectively decides the fee each hop will pay. If an intermediate node deviates (forwards less than advertised) then subsequent nodes must reject.
                • Each hop sees a hop payload consisting of
                  • (1) amount to forward: u64
                  • (2) outgoing cltv value: u32
                  • (3) short channel id
                  • (4) payment data: (payment secret, total msat)
                  • (5): payment metadata: bytes
                \ No newline at end of file diff --git a/btc-ln/BOLT 7 - p2p node and channel discovery/index.html b/btc-ln/BOLT 7 - p2p node and channel discovery/index.html new file mode 100644 index 0000000000..618adc25e2 --- /dev/null +++ b/btc-ln/BOLT 7 - p2p node and channel discovery/index.html @@ -0,0 +1,146 @@ +BOLT 7 - p2p node and channel discovery | philip's notes

                BOLT 7 - p2p node and channel discovery

                2022-03-17 · 2 min read

                Source: https://github.com/lightning/bolts/blob/master/07-routing-gossip.md#htlc-fees

                Overview #

                • Node Discovery
                  • Nodes advertise their ID, host {oneof: IPv4/6, TORv3}, port
                  • Other nodes must be able to open connections with you
                • Channel Discovery
                  • Nodes advertise their currently open channels so others can route through them
                • Gossip Messages
                  • node_announcement: nodes exchange these for node discovery
                  • channel_announcement: nodes exchange these to announce new channels between some nodes. Should only ever be one per channel.
                  • channel_update: Advertise updates to a channel. Dissemninated. At least two expected per channel.

                short_channel_id: u64 #

                • A compact descriptor pointing to a channel funding tx.
                short_channel_id: {
                +	block_height: u24,
                +	block_tx_idx: u24,
                +	tx_output_idx: u16,
                +}
                +

                node_announcement Message #

                node_announcement: {
                +	signature,
                +	features_len: u16,
                +	features: bytes,
                +	timestamp: u32,
                +	node_id,
                +	rgb_color: (u8, u8, u8),
                +	alias: [u8; 32],
                +	addrlen: u16, // serialized length of addresses
                +	addresses: Vec<AddressDescriptor>,
                +}
                +
                +enum AddressDescriptor {
                +	Ipv4(addr, port),
                +	Ipv6(addr, port),
                +	Torv3(onion_addr, port)
                +}
                +

                channel_announcement Message #

                nodes must prove that there is actually a channel btw node 1 and node 2

                1. prove a funding tx that pays to btc_key_1 and btc_key_2
                  1. verify via short_channel_id -> chain lookup
                2. prove node 1 owns btc_key_1
                  1. verify btc_sig_1
                3. prove node 2 owns btc_key_2
                  1. verify btc_sig_2
                4. prove both node 1 and node 2 agree to this announcement message
                  1. verify node_sig_1 and node_sig_2 (signing over the rest of the announcement)
                channel_announcement: {
                +	node_sig_1: sig,
                +	node_sig_2: sig,
                +	btc_sig_1: sig,
                +	btc_sig_2: sig,
                +	features_len: u16,
                +	features: bytes,
                +	chain_hash,
                +	short_channel_id,
                +	node_id_1: pubkey,
                +	node_id_2: pubkey,
                +	btc_key_1: pubkey,
                +	btc_key_2: pubkey,
                +}
                +

                channel_update Message #

                After announcement, each side independently announces their fees, supported features, etc

                channel_update: {
                +	signature,
                +	chain_hash,
                +	short_channel_id,
                +	timestamp: u32,
                +	message_flags: bytes,
                +	channel_flags: bytes,
                +	cltv_expiry_delta: u16,
                +	htlc_min_msat: u64,
                +	fee_base_msat: u32,
                +	fee_proportional_mills: u32,
                +	htlc_max_msat: u64,
                +}
                +
                \ No newline at end of file diff --git a/btc-ln/BOLT 8 - secure noise transport/index.html b/btc-ln/BOLT 8 - secure noise transport/index.html new file mode 100644 index 0000000000..4fcf1635a6 --- /dev/null +++ b/btc-ln/BOLT 8 - secure noise transport/index.html @@ -0,0 +1,100 @@ +BOLT 8 - secure noise transport | philip's notes

                BOLT 8 - secure noise transport

                2022-04-10 · 1 min read

                Source: https://github.com/lightning/bolts/blob/master/08-transport.md

                Summary #

                Lightning connections use a 1.5 RTT Noise_XK handshake, which means the listener pubkey is pinned and the dialer pubkey is negotiated in-band.

                In contrast, we moved from Noise_XX to a 1 RTT Noise_IK handshake in diem's secure transport. Privacy was not a requirement, but minimizing responder DH ops (two) and network messages (none) before authentication rejection (had a well-defined list of acceptable inbound pubkeys) was more important to reduce DDoS surface for liveness-sensitive consensus protocol. We also tried to mitigate handshake replays, which isn't possible w/ XK or XX.

                The lightning Noise messages also use an encrypted message length, which needs its own separate MAC.

                The max ln message length is u16::MAX == 65535. The max ln packet size is

                |msg len| + |msg len MAC| + |ln msg| + |ln msg MAC|
                += 2 + 16 + 65535 + 16
                += 65569
                +
                \ No newline at end of file diff --git a/btc-ln/atomic multipath payments (AMP)/index.html b/btc-ln/atomic multipath payments (AMP)/index.html new file mode 100644 index 0000000000..3e235e87e6 --- /dev/null +++ b/btc-ln/atomic multipath payments (AMP)/index.html @@ -0,0 +1,109 @@ +atomic multipath payments (AMP) | philip's notes

                atomic multipath payments (AMP)

                2021-12-14 · 3 min read

                TODO: can apparently use AMP for non-interactive payments?

                1-share AMP = spontaneous payment

                Setup #

                Alice has two payment channels open with Bob (or some path to Bob), each with outbound capacity of 1 BTC. Alice wants to pay Bob 2 BTC.

                flowchart LR;
                +	A[Alice] -->|1:0| B;
                +	A[Alice] -->|1:0| B;
                +
                +	B[Bob];
                +

                Problem #

                Naively, Alice could pay Bob in two separate payments:

                Payment 1:

                flowchart LR;
                +	A[Alice] -->|0:1| B;
                +	A[Alice] -->|1:0| B;
                +
                +	B[Bob];
                +

                Payment 2:

                flowchart LR;
                +	A[Alice] -->|0:1| B;
                +	A[Alice] -->|0:1| B;
                +
                +	B[Bob];
                +

                However, if the second payment fails, the total 2 BTC payment is only paritally fulfilled and Alice has no way of getting the initial 1 BTC back without trust/coordination.

                Solution #

                Atomic Multipath Payments let you split a payment to a recipient and send each piece over completely separate routes, yet the recipient can only fully receive the payment if all pieces complete successfully.

                Desired Properties: + Atomicity: Bob doesn't receive any money until all pieces of the payment come through. + Avoid Payment Hash Reuse: Each payment piece has a distinct payment hash. (Why is this useful?) + Order Invariance: The payment pieces can fulfill in any order. + Non-interactive Setup: Bob doesn't have to know the transaction is an AMP.

                Protocol Sketch #

                let ID = random value to identify the overall AMP let V = total payment value let n = # payments/routes let v_1, .., v_n = V partitioned n ways, (exact values not important here)

                Alice needs to generate a base preimage (BP) to encumber the overall payment. When Bob eventually learns BP, the payment should be 100% complete.

                To construct BP, Alice samples n partial shares s_1, .., s_n. BP is then the sum of all partial shares, BP = s_1 ^ .. ^ s_n.

                Alice then needs to construct n partial payments. For each payment, Alice constructs a partial payment preimage r_i = H(BP || i), which encumbers the i'th payment. The public partial payment hash h_i = H(r_i).

                Alice then initiates each partial payment by constructing a route to the destination with value v_i and payment hash h_i. Alice also includes some info (ID, n, s_i) to identify the overall AMP and this partial payment's additive share.

                Finally, when Bob receives all n payments, he can reconstruct BP = s_1 ^ .. ^ s_n. With BP, Bob can then reconstruct each partial payment preimage, which competes the total payment.

                \ No newline at end of file diff --git a/btc-ln/breez lightning service providers/index.html b/btc-ln/breez lightning service providers/index.html new file mode 100644 index 0000000000..1f7af5d793 --- /dev/null +++ b/btc-ln/breez lightning service providers/index.html @@ -0,0 +1,94 @@ +breez lightning service providers | philip's notes

                breez lightning service providers

                2021-12-12 · 4 min read

                Source: https://medium.com/breez-technology/introducing-lightning-service-providers-fe9fb1665d5f

                Requirements for mainstream #

                1. minimize onboarding friction
                  1. friend asks "do you accept lightning?": 1st time inbound receive
                    1. IDEAL USE CASE FOR LSPs IMO
                  2. friend asks "can you pay me w/ lightning?": 1st time outbound send
                    1. user onboards initial balance via fiat onramp
                      1. I suppose user can just pay LSP directly huh!
                    2. user already has BTC in some wallet/exchange (low probability)
                2. hide complexity from user
                  1. users should not have to understand channels, channel management, HTLCs, etc...
                  2. zero configuration
                  3. only a single balance (should be no BTC vs LN balance distinction)
                    1. See (https://blockonomi.com/submarine-swaps/)
                  4. auto-rebalance channels in the background
                    1. A user might have capacity spread across multiple channels (is there some way to just merge them all as more capacity is added?)
                    2. Each channel might only have 20% of the total outbound capacity; we need to rebalance if the user wants to make a payment > 20% of their total capacity. (Or this is just an AMP?)
                3. predictable and low fee structure
                  1. unfortunately, I think this is one downside w/ this approach.
                  2. imagine user with low inbound liquidity recveives money from friend. the LSP needs on-chain TX to top up and will probably also add additional inbound capacity (to amortize) (right?). suddenly user gets "unexpected" cost, since they probably don't understand or can't see channel capacities and on-chain tx fees.

                Problems #

                1. Wallet needs to be open and online in order to receive payments
                2. Recovering wallet on new device. Must ensure old Signal app/LN wallet stops running

                define: LSP == Lightning Service Providers

                Lightning is to LSP as Internet is to ISP

                Network hub, centralizing liquidity is more efficient

                See also: https://www.bitrefill.com/thor-lightning-network-channels/?hl=en and https://lnbig.com/#/open-channel

                1. LSPs front initial inbound liquidity to users
                  1. currently Breez defaults to ~$50 initial inbound liquidity per user
                2. LSPs are the sole counterparty for wallet users. LSPs take on all of the complexity in managing the channel capacity, closing unused channels, fronting initial liquidity, accepting fiat to top-up channels, etc...
                3. LSPs handle ensuring connectivity and liquidity out to the rest of the LN, hiding this complexity from normal users.
                4. LSPs rebalance funds across their channels to ensure liquidity for users.
                5. LSPs can focus on reliability to ensure consistent uptime vs user-run wallets.
                6. Tbh "non-custodial" is a bit of a misdirection, since in this case the LSP controls the wallet code :p.
                  1. Of course, this doesn't seem to be a problem for everyone using Venmo, Whatsapp, etc... but those also run on fiat rails, which can revert fraud.
                  2. App cannot be compromised or all users' funds at risk
                  3. LSP can be compromised (assuming no non-consensual send APIs exposed) without risking user funds (but can they? how are channel closes handled if we can't assume the users' LND clients are always live?).
                  4. Why even bother running a whole ass LND on each user's phone and instead just do fully custodial lightning? (definitely bad optics)
                  5. From SEC perspective, ideal setup has clear separation b/w LND wallet and Signal app. From UX perspective, prev. is untenable wrt. complexity. Wallet must be integrated.
                7. Most LSPs have 30 channel maintainence guarantee, may close if inactive longer.
                8. LSP needs initial fee to charge for (1) initial channel open tx, (2) capital cost, (3) channel close tx, (4) small profit. Breez was ~$1 vs $50 fronted, almost 2% fee.
                9. LSPs also can charge fee on (1) lightning txs, (2) fiat onboarding.
                \ No newline at end of file diff --git a/btc-ln/hosted channels/index.html b/btc-ln/hosted channels/index.html new file mode 100644 index 0000000000..d33dbce011 --- /dev/null +++ b/btc-ln/hosted channels/index.html @@ -0,0 +1,94 @@ +hosted channels | philip's notes

                hosted channels

                2021-12-12 · 1 min read

                Hosted Channels (HC) are a new channel type that aren't backed by an on-chain HTLC. The Host side holds the money and the Client side trusts the host.

                HCs aren't enforceable on-chain but can still be advertised to the LN. They're more capital efficient and other nodes can use the public HCs.

                Looks like Simple Bitcoin Wallet is using Hosted Channels for first-time inbound receive?

                \ No newline at end of file diff --git a/btc-ln/index.html b/btc-ln/index.html new file mode 100644 index 0000000000..27553504f4 --- /dev/null +++ b/btc-ln/index.html @@ -0,0 +1,76 @@ +btc-ln | philip's notes

                btc-ln

                BOLT 11 - invoices →

                2022-04-10 · 2 min read

                hosted channels →

                2021-12-12 · 1 min read

                lightning libs →

                2021-12-12 · 1 min read

                lightning network notes →

                2022-03-17 · 1 min read

                lightning rod →

                2021-12-12 · 1 min read

                submarine swaps →

                2021-12-12 · 3 min read

                zero-conf channels →

                2021-12-12 · 1 min read

                \ No newline at end of file diff --git a/btc-ln/lightning libs/index.html b/btc-ln/lightning libs/index.html new file mode 100644 index 0000000000..27331ddc87 --- /dev/null +++ b/btc-ln/lightning libs/index.html @@ -0,0 +1,94 @@ +lightning libs | philip's notes

                lightning libs

                2021-12-12 · 1 min read

                Immortan is a minimal, privacy-focused, opinionated LN protocol implementation aimed to specifically power lite LN nodes which are mostly to be found on mobile phones or desktop computers and only run private channels.

                https://github.com/btcontract/IMMORTAN https://github.com/btcontract/wallet

                Eclair (French for Lightning) is a Scala implementation of the Lightning Network.

                https://github.com/ACINQ/eclair

                Breez is a Lightning Network mobile client and a hub. It provides a platform for simple, instantaneous bitcoin payments.

                https://github.com/breez/breez https://github.com/breez/breezmobile https://github.com/breez/server

                rust-lightning LDK is a Lightning library written in Rust, with many modular pieces which are intended to be mixed and matched to enable Lightning functionality in many different kinds of projects.

                https://github.com/lightningdevkit/rust-lightning

                cloudhead/nakamoto: a privacy preserving BTC light client in Rust. Very modular. IO-free core protocol.

                https://github.com/cloudhead/nakamoto

                \ No newline at end of file diff --git a/btc-ln/lightning network notes/index.html b/btc-ln/lightning network notes/index.html new file mode 100644 index 0000000000..ca986aa5e7 --- /dev/null +++ b/btc-ln/lightning network notes/index.html @@ -0,0 +1,94 @@ +lightning network notes | philip's notes

                lightning network notes

                2022-03-17 · 1 min read

                HTLCs must clear quickly #

                • HTLCs should clear quickly (like at most 30sec)
                • Each pending HTLC adds an extra txout to your (refund?) tx, which costs you on-chain fees if you have to revoke.
                • Good quality nodes should almost never (?) hold HTLCs for a long time.
                • Rustie proposal (offhand comment from Tadje circa 2019) means nodes will try to ascribe blame if an HTLC doesn't clear quickly.
                  • If the path looks like A -> B -> C, and A sees HTLC pass some timeout, A will request proof (proof that B closed channel B <-> C with pending HTLC containing image of R) from B that he has also punished C for not publishing R (preimage) or A will punish B (by closing their channel A <-> B).
                \ No newline at end of file diff --git a/btc-ln/lightning rod/index.html b/btc-ln/lightning rod/index.html new file mode 100644 index 0000000000..5e0cb3b997 --- /dev/null +++ b/btc-ln/lightning rod/index.html @@ -0,0 +1,94 @@ +lightning rod | philip's notes

                lightning rod

                2021-12-12 · 1 min read

                TODO, looks like some way to do offline payments via a trustless intermediary who will hold onto some state.

                https://medium.com/breez-technology/introducing-lightning-rod-2e0a40d3e44a

                Carl: What ended up happening to the LR offline? Roy (Breez): Didn't end up implementing it then b/c there's a limit to the number of HTLCs you can hodl, and in some nodes the limit is very low. There are other issues, like mobile notifications are not very reliable and if the payer doesn't connect afterwards it leads to channel being closed. All these can be mitigated, so it's possible we'll revisit now the network is a bit more stable.

                Carl: Signal is a VoIP app. Carl: VoIP applications have special privilege in iOS-land, so they can run a snippet of code upon notification Philip: hmm so on iOS you can send a notification, which would trigger the Signal app to like check their channels or receive an async payment? Carl: yes I think so

                \ No newline at end of file diff --git a/btc-ln/lightningdevkit - rust-lightning/index.html b/btc-ln/lightningdevkit - rust-lightning/index.html new file mode 100644 index 0000000000..d29c6f2474 --- /dev/null +++ b/btc-ln/lightningdevkit - rust-lightning/index.html @@ -0,0 +1,303 @@ +lightningdevkit - rust-lightning | philip's notes

                lightningdevkit - rust-lightning

                2022-03-03 · 5 min read

                Github: https://github.com/lightningdevkit/rust-lightning/

                ldk-sample node impl #

                https://github.com/lightningdevkit/ldk-sample

                run:

                $ cargo run <bitcoind-rpc-username>:<bitcoind-rpc-password>@<bitcoind-rpc-host>:<bitcoind-rpc-port? <ldk_storage_directory_path> [<ldk-peer-listening-port>] [bitcoin-network] [announced-listen-addr announced-node-name]
                +

                deps:

                • lightning

                • lightning-block-sync = { features = [ "rpc-client" ] }

                • lightning-invoice

                • lightning-net-tokio

                • lightning-persister

                • lightning-background-processor

                • bitcoin

                • bitcoin-bech32

                • tokio

                looks like the sample assumes some bitcoind node running locally/accessible via rpc

                main #

                Simplified and annotated

                // primary crate-specific logic
                +use crate::bitcoind_client::BitcoindClient;
                +use crate::disk::FilesystemLogger;
                +
                +// ..
                +
                +// Is this like the in-memory storage?
                +// it says "TODO: persist payment into to disk" loe
                +pub(crate) type PaymentInfoStorage = Arc<Mutex<HashMap<PaymentHash, PaymentInfo>>>;
                +
                +// what is FilesystemPersister doing here? some extra indexed
                +// data?
                +type ChainMonitor = chainmonitor::ChainMonitor<
                +	InMemorySigner,
                +	Arc<dyn Filter + Send + Sync>,
                +	Arc<BitcoindClient>,
                +	Arc<BitcoindClient>,
                +	Arc<FilesystemLogger>,
                +	Arc<FilesystemPersister>,
                +>;
                +
                +pub(crate) type PeerManager = SimpleArcPeerManager<
                +	SocketDescriptor,
                +	ChainMonitor,
                +	BitcoindClient,
                +	BitcoindClient,
                +	dyn chain::Access + Send + Sync,
                +	FilesystemLogger,
                +>;
                +
                +// ok, this uses ChainMonitor, and chanmgr def needs to persist
                +// so maybe that's why ChainMonitor has persistance?
                +pub(crate) type ChannelManager = SimpleArcChannelManager<
                +	ChainMonitor,
                +	BitcoindClient,
                +	BitcoindClient,
                +	FilesystemLogger
                +>;
                +
                +// what is E?
                +pub(crate) type InvoicePayer<E> = payment::InvoicePayer<
                +	Arc<ChannelManager>,
                +	Router,
                +	Arc<Mutex<Scorer>>,
                +	Arc<FilesystemLogger>,
                +	E,
                +>;
                +
                +// this is Lightning Network router?
                +type Router = DefaultRouter<Arc<NetworkGraph>, Arc<FilesystemLogger>>;
                +
                +// ..
                +
                +async fn handle_ldk_events(
                +	channel_manager: Arc<ChannelManager>,
                +	bitcoind_client: Arc<BitcoindClient>,
                +	keys_manager: Arc<KeysManager>,
                +	inbound_payments: PaymentInfoStorage,
                +	outbound_payments: PaymentInfoStorage,
                +	network: Network,
                +	event: &Event,
                +) {
                +	match event {
                +
                +	// client should gen a funding tx, then call
                +	// chanmgr::funding_transaction_generated. event generated in chanmgr.
                +	FundingGenerationReady {
                +		temp_chan_id,
                +	  	chan_out_value,
                +		out_script,
                +		user_chan_id (or 0 for inbound)
                +	} => {
                +		let raw_tx = bitcoind.create_raw_transaction(outputs).await;
                +		let funded_tx = bitcoind.fund_raw_transaction(raw_tx).await;
                +		let signed_tx =
                +			bitcoind.sign_raw_transaction_with_wallet(funded_tx.hex).await;
                +		let final_tx = encode::deserialize(signed_tx.hex);
                +		chanmgr.funding_transaction_generated(temp_chan_id, final_tx);
                +	}
                +
                +	// got that cash money babyyy
                +	// need to find the payment preimage and feed it to chanmgr::claim_funds
                +	// if we can't find it, hit up chanmgr::fail_htlc_backwards
                +	// note: might get multiple events for a single inbound payment :O
                +	PaymentReceived { payment_hash, purpose, amt, .. } => {
                +		let mut payments = inbound_payments.lock();
                +		let (preimage, secret) = match purpose {
                +			// 					      vvvvvvvv can be None?
                +			PaymentPurpose::Invoice { preimage, secret } => { /*..*/ }
                +			PaymentPurpose::Spontaneous(preimage) => { (preimage, None) }
                +		};
                +		//                                       vvvvvvvv unwrap????
                +		let status = chanmgr.claim_funds(preimage.unwrap());
                +		let status = if status { HTLCStatus::Succeeded } else { Failed };
                +		payments.upsert(payment_hash, { status, preimage, secret, amt });
                +	}
                +
                +	// outbound payment succeeded! made its way to the target and we got
                +	// the preimage back!
                +	PaymentSent { preimage, payment_hash, fee_paid, .. } => {
                +		let mut payments = inbound_payments.lock();
                +		if let Some(payment) = payments.find_mut(payment_hash) {
                +			payment.preimage = Some(preimage);
                +			payment.status = Succeeded;
                +		}
                +	}
                +
                +	// outbound payment failed. PaymentPathFailed events provide extra info
                +	// also for each individual path in a MPP. provided when payment no
                +	// longer retryable (either b/c of many timeouts or
                +	// called chanmgr::abandon_payment).
                +	PaymentFailed { hash, .. } => {
                +		if let Some(payment) = inbound_payments.lock().get_mut(hash) {
                +			payment.status = Failed;
                +		}
                +	}
                +
                +	// gen'd when we successfully forward a payment through our node and
                +	// earn a forwarding fee
                +	PaymentForwarded { fee_earned, claim_from_onchain_tx } => {
                +		log(/* .. */);
                +	}
                +
                +	// you should call chanmgr::process_pending_htlc_forwards some time
                +	// in the future
                +	PendingHTLCsForwardable { time_forwardable } => {
                +		let min = time_forwardable.as_millis();
                +		// spawns a task that calls chanmgr::process_pending_htlc_forwards
                +		// after random time in range [min, 5*min]
                +	}
                +
                +	// some of your tx outputs were confirmed on-chain and are now spendable.
                +	// you _must_ store & spend these outputs asap (?).
                +	SpendableOutputs { outputs } => {
                +		let spending_tx = keysmgr.spend_spendable_outputs(outputs, /* .. */);
                +		bitcoind.broadcast_tx(spending_tx);
                +	}
                +
                +	// one of our channels is being closed. e.g., force close, coop close,
                +	// funding tx timeout, d/c'd peer.
                +	ChannelClosed { chanid, reason, user_chanid } => { /* log */ }
                +
                +	// we can abandon the funding tx and recycle inputs for another purpose
                +	DiscardFunding { chanid, tx } => {
                +		// A "real" node should probably "lock" the UTXOs spent in funding
                +		// transactions until  the funding transaction either confirms, or
                +		// this event is generated.
                +	}
                +
                +	// a path for an outbound payment succeeded. useful for scoring nodes
                +	// on the path?
                +	PaymentPathSuccessful { /* ignore? */ }
                +
                +	// an outbound HTLC failed. probably someone dropped us on the floor.
                +	// might be able to retry with a different route.
                +	// Note: doesn't indicate failure for a MPP payment.
                +	PaymentPathFailed => { /* ignore? */ }
                +
                +	}
                +}
                +
                +async fn start_ldk() {
                +	// 1. create data directory
                +	// 2. connect to bitcoind rpc
                +	// 3. check we're on same network as bitcoind
                +	// 4. init broadcaster interface (uses bitcoind)
                +	// 5. init persistance (FilesystemPersister(dir))
                +	// 6. init chain monitor (uses bitcoind + fs persister)
                +	// 7. init keys manager (uses a 32B seed file to derive other keys)
                +	// 8. read channel monitor state from disk (could be empty?)
                +
                +	// 9. init channel manager
                +	//	 9.a. if no dir/manager file, then fresh node
                +	//     9.a.1. use latest block hash/height and freash chan manager
                +	//   9.b. read chan manager state from fs
                +
                +	// 10. sync chan mons and chan mgr to chain tip (if restarting node)
                +	//   10.a. go through each chan mon and sync
                +	//         (via init::synchronize_listeners)
                +
                +	// 11. tell chain mon to watch each chan
                +	// 12. try to read any persisted network graph state
                +	// 13. spawn a task that persists the network graph every 10min
                +	// 	   (note: not safety critical, can always just re-gossip)
                +	// 14. init peer mgr (needs node secret, ln msg handler uses chan mgr
                +	// 	   and route handler (NetGraphMsgHandler))
                +	// 15. init inbound net
                +	//	 15.a. bind to port.
                +	//   15.b. spawn a lightning_net_tokio::setup_inbound(peermgr) task for
                +	//         every inbound connection.
                +	// 16. spawn a task that polls the best chain tip every 1s.
                +	// 17. spawn a task that persists the scorer (used for scoring channels
                +	// 	   to find lowest fee path) every 10min.
                +	// 18. init main event handler (top-level app events you should handle)
                +	// 19. init InvoicePayer (utility for paying Invoices and sending pymts)
                +	// 	   this takes the event handler, router, chanmgr, and scorer
                +	// 20. init BackgroundProcessor (this fwds events to the InvoicePayer,
                +	//	   periodically backs up chanmgr, drives clock on chanmgr and
                +	// 	   and peermgr, periodically clear stale chans in net graph)
                +	// 21. spawn a task that tries to reconnect with channel peers every 1s
                +	// 22. spawn a task that broadcasts our node_announcement every 1min
                +}
                +
                \ No newline at end of file diff --git a/btc-ln/submarine swaps/index.html b/btc-ln/submarine swaps/index.html new file mode 100644 index 0000000000..73cfa58118 --- /dev/null +++ b/btc-ln/submarine swaps/index.html @@ -0,0 +1,94 @@ +submarine swaps | philip's notes

                submarine swaps

                2021-12-12 · 3 min read

                Problem #

                It is crucial for UX that there is no distinction b/w on-chain BTC and off-chain LN capacity. Transfers b/w on-chain BTC and off-chain LN wallets should also happen in one step and with minimal fees.

                Without submarine swaps you need an intermediate step where you first transfer LN funds to an on-chain BTC wallet, then pay the BTC. Another way to look at BTC -> LN is for topping up an existing LN channel.

                Note: a submarine swap can't increase the total channel capacity, just fill your inbound/outbound side sending/receiving on-chain BTC (unless you are a client of an LSP who will open a zero-conf channel to your node).

                Submarine Swaps claim to solve this problem.

                Define #

                Submarine swaps transfer funds between the base-layer chain and the second-layer Lightning Network through (paid) intermediaries — importantly — without trust. In effect, Submarine Swaps can bridge users’ on-chain and off-chain balances. Source

                Submarine swaps are atomic on-chain to off-chain swaps (and vice-versa) of cryptocurrencies. Source

                Submarine swaps rely on a trustless intermediary or "swap provider".

                Protocol #

                on-chain BTC -> off-chain LN channel

                1. User sends on-chain BTC contract + LN invoice to the swap provider.

                  This swap contract is an HTLC; if the swap provider fails to execute in time, the user can reclaim their funds.

                2. The preimage in the swap contract is used by the swap provider as proof of payment to claim the on-chain BTC at the swap address.

                  The swap provider will not know the preimage unless the LN invoice is paid.

                3. If successful, the off-chain LN channel will be filled with the corresponding amount and the swap provider can claim the funds in the HTLC.

                Misc #

                Actually execute a swap (0.20% fee as of 2021/12/12): https://submarineswaps.org/

                See src for a swaps service: https://github.com/submarineswaps/swaps-service

                Breez uses Submarine Swaps to move on-chain bitcoin directly to the user’s Lightning node without the need to send the funds to a local bitcoin wallet first. As a result, users only see and manage their Lightning balance without a need to manage a separate on-chain balance.

                Can execute Submarine Swaps across chains (i.e., spend on-chain ETH to fill off-chain LN channel)

                Added privacy benefit: with a submarine swap, you effectively wash the BTC and receive uncorrelated Lightning.

                \ No newline at end of file diff --git a/btc-ln/zero-conf channels/index.html b/btc-ln/zero-conf channels/index.html new file mode 100644 index 0000000000..bf0ebb876e --- /dev/null +++ b/btc-ln/zero-conf channels/index.html @@ -0,0 +1,97 @@ +zero-conf channels | philip's notes

                zero-conf channels

                2021-12-12 · 1 min read

                  https://medium.com/breez-technology/lightning-payment-channels-a-flavor-for-every-palette-53cb975907ea

                  [bitcoin-dev] [Opt-in full-RBF] Zero-conf apps in immediate danger

                  def: zero-conf app

                  Accepts on-chain payment from untrusted party and possibly delivers product/service depending on risk factors.

                  Risk Analysis:

                  1. If incoming txn is RBF (direct or inherited)
                    • then the txn is too risky; wait for 1+ conf, since it can be replaced at any time
                  2. If the payment amount is for an amount greater than X
                    • then the txn is too risky; wait for 1+ conf, since the amount is worthy of a sophisticated attacker
                  3. Else
                    • wait for txn to propagate through mempool
                    • If there's no double-spend attempt, then accept zero-conf.

                  If receiving from fully untrusted third parties, zero-conf apps should be willing to tolerate an expected loss.

                  https://github.com/lightning/bolts/issues/565#issuecomment-460601680

                  https://bitcoinops.org/en/topics/zero-conf-channels/

                  \ No newline at end of file diff --git a/combinatorics/index.html b/combinatorics/index.html new file mode 100644 index 0000000000..a51f43ea8a --- /dev/null +++ b/combinatorics/index.html @@ -0,0 +1,73 @@ +combinatorics | philip's notes

                  combinatorics

                  k-combinations of a multiset →

                  2022-02-08 · 5 min read

                  \ No newline at end of file diff --git a/combinatorics/k-combinations of a multiset/index.html b/combinatorics/k-combinations of a multiset/index.html new file mode 100644 index 0000000000..76aa1a7350 --- /dev/null +++ b/combinatorics/k-combinations of a multiset/index.html @@ -0,0 +1,186 @@ +k-combinations of a multiset | philip's notes

                  k-combinations of a multiset

                  2022-02-08 · 5 min read

                  def: Multiset #

                  A multiset is just a set that may contain duplicates. For example, [a, a, b, b, b, c] is a multiset in a flattened, array-like representation. We could just as easily write it in a compact, map-like representation: { a: 2, b: 3, c: 1 }. Here, we take each unique element and associate it with its number of occurances in the multiset.

                  Multisets are a natural representation for many common objects in combinatorics, and are often used to model rolling multiple dice, counting cards by suite, and so on.

                  When representing multisets computationally, it's often convenient to represent them as a sorted array. That way, we'll have exactly one canonical representative for each multiset. This trick can enable further optimizations for us to exploit.

                  def: k-Combinations of a Multiset #

                  The k-combinations of a multiset are all k-length combinations drawn from the given multiset. Since these are combinations and not permutations, the order is not important (so the permutations [1, 1, 2, 2] and [1, 2, 1, 2] and [2, 2, 1, 1] and ... are all equivalent).

                  The elements are also drawn without replacement, so an element only appearing twice in the multiset should only ever appear at most twice in any combination.

                  To get a better idea of what we're talking about, suppose we've just rolled 6 dice and they come up as [1, 1, 2, 2, 2, 3]. How many different ways can we select 4 of the 6 dice to re-roll? As you can probably guess, these are just the 4-combinations of the above multiset.

                  Listing out the 4-combinations of mset = [1, 1, 2, 2, 2, 3] in lexicographic order:

                  [1, 1, 2, 2]
                  +[1, 1, 2, 3]
                  +[1, 2, 2, 2]
                  +[1, 2, 2, 3]
                  +[2, 2, 2, 3]
                  +

                  Insight #

                  If you stare at the list above for a bit, you might notice something interesting. If we list out the combinations in sorted order, the first combination is always mset[0..k] and the last combination is always mset[n-k..n], where mset the multiset, k is the length of each combination, n is the number of elements in the multiset mset, and a..b is Rust range syntax for integers between a (inclusive) and b (exclusive).

                  This property will come in handy in a moment when we write an algorithm to generate the k-combinations, since these two k-combinations give us our start and end points. In other words, we'll start generating combinations from mset[0..k] and we'll know we've finished when the current combination equals mset[n-k..n]

                  I'll leave the general proof as an exercise for the reader : )

                  Algorithm #

                  See also: http://www.martinbroadhurst.com/combinations-of-a-multiset.html

                  Here is the core function, which takes mset, a sorted multiset slice, and arr the previous generated combination. We modify arr in-place to the next combination.

                  If there are no combinations left to generate, the function returns true.

                  fn next_mset_comb<T>(
                  +	// this is the original multiset in flattened,
                  +	// array-like representation
                  +	mset: &[T],
                  +	// this is the _previous_ combination, also in flattened
                  +	// array-like representation
                  +	arr: &mut [T],
                  +) -> bool
                  +where
                  +    T: Clone + PartialOrd,
                  +{
                  +	let n = mset.len();
                  +	let k = arr.len();
                  +
                  +	let last = &mset[(n-k)..n];
                  +
                  +	// find the rightmost element in `arr` that is less
                  +	// than the "max" value it can have (which is the
                  +	// same as the element in the final combination at the
                  +	// same index)
                  +	let maybe_next_idx = (&*arr).into_iter()
                  +		.zip(last.into_iter())
                  +		.rposition(|(x, l)| x < l);
                  +
                  +	let (i, x) = match maybe_next_idx {
                  +		Some(i) => (i, &arr[i]),
                  +		None => return true, // done!
                  +	};
                  +
                  +	// find the successor element (the next element in the
                  +	// multiset greater than arr[i])
                  +	let maybe_succ_idx = mset.into_iter().position(|y| x < y);
                  +
                  +	let j = match maybe_succ_idx {
                  +		Some(j) => j,
                  +		// since we've already checked we're not at the end,
                  +		// it cannot happen that there is no successor.
                  +		None => unreachable!(),
                  +	};
                  +
                  +	// replace arr[i] with its successor and all subsequent in arr with
                  +	// the subsequent in the original multiset.
                  +	arr[i..k].clone_from_slice(&mset[j..(j + (k - i))]);
                  +
                  +	// not done yet : )
                  +	false
                  +}
                  +

                  We can also use the above to write an Iterator over the k-combinations. This Iterator has a nice advantage in that it only uses constant space while iterating, so no need for a big temporary array.

                  struct KCombsIter<T> {
                  +    mset: Vec<T>,
                  +    comb: Vec<T>,
                  +    done: bool,
                  +}
                  +
                  +impl<T> KCombsIter<T>
                  +where
                  +    T: Clone + PartialOrd + Ord,
                  +{
                  +    fn new(mset: Vec<T>, k: usize) -> Self {
                  +        assert!(k <= mset.len());
                  +        assert!(is_sorted(mset.iter()));
                  +
                  +        let comb = mset[0..k].to_vec();
                  +
                  +        Self {
                  +            mset,
                  +            comb,
                  +            done: false,
                  +        }
                  +    }
                  +}
                  +
                  +impl<T> Iterator for KCombsIter<T>
                  +where
                  +    T: Clone + PartialOrd + Ord,
                  +{
                  +    type Item = Vec<T>;
                  +
                  +    fn next(&mut self) -> Option<Self::Item> {
                  +        if !self.done {
                  +            let comb = self.comb.clone();
                  +            self.done = next_mset_comb(&self.mset, &mut self.comb);
                  +            Some(comb)
                  +        } else {
                  +            None
                  +        }
                  +    }
                  +}
                  +

                  See the complete code in action on the Rust Playground: https://play.rust-lang.org/?version=stable&mode=debug&edition=2021&gist=6d08a5fa898eb5e43f9a0f7d30fdd0ad

                  The above may be slightly wasteful for certain usecases, since it needs to allocate on each iteration. For your specific usage, you'll want to specialize the representation of the multiset itself in order to squeeze out every last drop of perf.

                  For example, in my Kingdome Come: Deliverance - Optimal Dice Strategy algorithm, you can see the bit-packed DiceVec, which represents a roll of 0 to 6 dice packed into a single u64 and the likewise specialized iterator DiceVecMultisetsIter, which uses SIMD to manipulate the multisets and doesn't need any intermediate allocation.

                  \ No newline at end of file diff --git a/confidential computing/enarx (WASM TEE)/index.html b/confidential computing/enarx (WASM TEE)/index.html new file mode 100644 index 0000000000..ef0404a6ac --- /dev/null +++ b/confidential computing/enarx (WASM TEE)/index.html @@ -0,0 +1,162 @@ +enarx (WASM TEE) | philip's notes

                  enarx (WASM TEE)

                  2022-02-17 · 13 min read

                  site: https://enarx.dev

                  TEE #

                  Trusted Execution Environments (TEEs) allow organizations to run applications within a set of memory pages that are encrypted with a secret key by the host CPU in such a way that these pages are not accessible to the operating system or any other software, even running at the highest privilege level.

                  There are currently two leading models of TEEs:

                  • Process-based: current implementations include Intel’s SGX (Software Guard eXtensions).
                  • VM-based: current implementations include AMD’s SEV (Secure Encrypted Virtualization).

                  Applications that need to run in a TEE must be developed specifically for each platform, and they differ significantly depending if it’s a process-based or VM-based TEE model. Additionally, they must implement something called attestation, which is a validation process for the TEE to prove that it’s genuine before it can be trusted by the application. Rewriting the application or the custom VMM that runs it, as well as the attestation, for each hardware platform is extremely complex and time-consuming.

                  In the next section, we will introduce Enarx, an open source framework for running applications in TEEs that addresses many of the issues raised. We’ll give a simplified overview of the component architecture of Enarx (and how it allows for support for multiple hardware platforms) and the process of creating and deploying applications to TEE instances using Enarx.

                  Enarx #

                  Enarx is a framework for running applications in TEE instances – which we refer to as “Keeps”–without the need to trust lots of dependencies, without the need to rewrite the application, and without the need to implement attestation separately.

                  Enarx aims to minimize the trust relationships required when executing applications, meaning that the only components which need to be trusted are: the CPU and associated firmware, the workload itself, and the Enarx middleware, which is fully open source and auditable. Applications run without any of the layers in the stack (e.g. hypervisor, kernel, user-space) being able to look into or alter the Keep or its contents.

                  It provides a WebAssembly runtime, based on wasmtime, offering developers a wide range of language choices for implementation, including Rust, C, C++, C#, Go, Java, Python and Haskell. It is designed to work across silicon architectures transparently to the user so that the application can run equally simple on Intel platforms (SGX or the recently-announced TDX), AMD platforms (SEV) or forthcoming platforms such as Arms’ Realms and IBM’s PEF - all without having to recompile the application code.

                  Enarx is CPU-architecture independent, enabling the same application code to be deployed across multiple targets, abstracting issues such as cross-compilation and differing attestation mechanisms between hardware vendors.

                  Enarx provides attestation, packaging and provisioning of the application to take place in a way which is transparent to the user. Every instance of an application goes through three steps:

                  • Attestation: Enarx checks that the host to which you’re planning to deploy is a genuine TEE instance.
                  • Packaging: Once the attestation is complete and the TEE instance verified, the Enarx management component encrypts the application and any required data.
                  • Provisioning: Enarx then sends the application and data along to the host for execution in the Enarx Keep.

                  At no point is the host system able to look inside or change the code or data within a Keep. Thus, Enarx allows organizations with sensitive code or data to run their applications with strong integrity and confidentiality protections.

                  Components #

                  Enarx component details image

                  Threat Model #

                  A representation of a computing stack, with "CPU | Firmware" at the bottom and "Application" and "Middleware" at the top. The other six middle layers in between are crossed out.

                  Enarx trust architecture (VM case)

                  Enarx provides four layers in the run-time stack. Working from the lowest up, they are:

                  1. a VMM (Virtual Memory Manager)
                  2. a microkernel (μkernel)
                  3. a WASM runtime (WebAssembly)
                  4. a WASI implementation (WebAssembly System Interface).

                  Attestation #

                  An application which is going to run in an Enarx Keep needs to attest two things:

                  1. The hardware TEE providing Keeps.
                  2. A measurement of the Enarx runtime. This means that Red Hat may need to launch a service to abstract attestation. The way that this works is that the client requests attestation from Enarx. Enarx supplies a blob. The client forwards this to Red Hat. Red Hat will then complete attestation of the h/w environment and translate the measurements of Enarx into a something which allows you to identify the specific version of Enarx.

                  (??? what is Red Hat in this case? the abstract cloud provider? is "requests from Enarx" like request from a local library, or actually hitting an API??)

                  From the client’s point of view, the attestation steps of Enarx end up with the following two cryptographically validated assertions:

                  1. The TEE type and version;
                  2. The Enarx version and integrity. The attestation processes associated with the various hardware architectures are very different (see SEV architectural and SGX architectural): providing a common mechanism to abstract this is expected to be a major part of the work associated with this project.

                  Simplified Enarx process flow

                  AMD SEV Remote Attestation Protocol #

                  Goal #

                  This protocol allows a tenant to:

                  1. Verify the platform certificate chain belonging to the remote host where the Enarx Keep is constructed
                  2. Establish a secure channel with the remote CPU AMD Secure Processor (AMD SP) on the remote host
                  3. Compare its own measurement of the guest's initial state with the AMD SP's measurement from the untrusted host
                  4. Safely deliver its workload to the AMD SP

                  This protocol maps the regular SEV launch procedure onto a simple client-server model (client sends request to server; server sends its response to client). In fact, the message formats are comprised of data structures defined in the AMD SEV specification.

                  It is a short, serialized exchange. More importantly, however, it is meant to be an “atomic” transaction. What this means is that the client and the backend complete attestation successfully in this exchange or they don’t. There are no “in-between” end conditions. Therefore, neither party should have any expectation of “retrying” a previous step. It is always forward progress or none at all. As the orchestrator, it is the Keep Manager’s responsibility to know if the keep becomes defunct during attestation, launch, or normal operation. It is expected that the Keep Manager will inform the client of an appropriate error condition and tear down the defunct Keep if necessary.

                  Message Formats #

                  The data structures defined in the SEV specification form the substrate for this protocol. As a result, message payloads are binary structures. The messages for this protocol are CBOR-encoded. They will be represented here in Concise Data Definition Language (CDDL).

                  message = {
                  +      certificate-chain-naples //
                  +      certificate-chain-rome //
                  +      launch-start //
                  +      measurement //
                  +      secret //
                  +      finish
                  +}
                  +
                  +certificate-chain-naples = (
                  +      "ark": certificate-ca-small,
                  +      "ask": certificate-ca-small,
                  +      "pdh": certificate-sev,
                  +      "pek": certificate-sev,
                  +      "oca": certificate-sev,
                  +      "cek": certificate-sev,
                  +)
                  +
                  +certificate-chain-rome = (
                  +      "ark": certificate-ca-large,
                  +      "ask": certificate-ca-large,
                  +      "pdh": certificate-sev,
                  +      "pek": certificate-sev,
                  +      "oca": certificate-sev,
                  +      "cek": certificate-sev,
                  +)
                  +
                  +launch-start = (
                  +      "policy": policy,
                  +      "pdh": certificate-sev,
                  +      "session": session,
                  +)
                  +
                  +measurement = (
                  +      "build": build,
                  +      "measurement": bytes .size 32,
                  +      "nonce": bytes .size 16,
                  +)
                  +
                  +secret = (
                  +      "header": {
                  +            "iv": bytes .size 16,
                  +            "mac": bytes .size 32,
                  +      },
                  +      "ciphertext": bytes,
                  +)
                  +
                  +finish = /* TODO */
                  +
                  +version = (
                  +      "major": uint .size 1,
                  +      "minor": uint .size 1,
                  +)
                  +
                  +build = (
                  +      "version": version,
                  +      "build": uint .size 1,
                  +)
                  +
                  +policy = (
                  +      "flags": uint .size 2,
                  +      "minfw": version,
                  +)
                  +
                  +session = (
                  +      "nonce": bytes .size 16,
                  +      "wrap_tk": bytes .size 32,
                  +      "wrap_iv": bytes .size 16,
                  +      "wrap_mac": bytes .size 32,
                  +      "policy_mac": bytes .size 32,
                  +)
                  +

                  Sequence Diagram #

                  message sequence diagram

                  Syscall Proxy #

                  Enarx needs to support Keeps that are built on encrypted virtual machine technologies such as AMD SEV and IBM Power PEF. This means that we need to boot an operating system inside the guest VM. However, existing operating systems do not meet the Enarx design principles (especially: minimal trusted computing base [TCB], external network stack and memory safety). Therefore, this page outlines a plan for building a minimal OS which intends to service only the minimal requirements to run Enarx.

                  Existing Systems #

                  A traditional virtualization stack (such as Qemu + Linux) is typically composed of four components:

                  1. The Virtual Machine Manager (e.g. Qemu)
                  2. The VM BIOS / Firmware (e.g. OVMF)
                  3. The Guest Bootloader
                  4. The Guest Kernel

                  The Plan #

                  In order to remove these problems, Enarx plans to produce three components when running in a VM-based TEE:

                  1. The Enarx VMM
                  2. The Enarx μKernel
                  3. The Enarx Userspace WASM / WASI Runtime

                  These three components will be tightly coupled and shipped as an integrated system. The interfaces between the components will be considered an internal implementation detail that can be changed at any time. Enarx tenants will validate the cryptographic measurement of the three components (VMM Guest Memory Setup, μKernel and Userspace Runtime) as a single unit to reduce combinatorial complexity.

                  Enarx Syscall Proxy

                  In order to keep the TCB small, especially the exclusion of a full network stack, we intend to proxy syscalls to the host. This allows us to use as many of the host resources as possible while maintaining a small Keep size. It also allows for performance optimizations as Enarx gets more mature. The above chart shows a full trace of a single syscall across the various components. This works as follows:

                  1. An Enarx application, compiled to WebAssembly, makes a WASI call, for example: read(). This causes a transition from the JIT-compiled code into our guest userspace Rust code. This does not entail a full context switch and should be fast.

                  2. The hand-crafted Rust code should translate the WASI call into a Linux read() syscall. From here we leave Ring 3 (on x86; other architectures have similar structures) and jump into the μKernel, performing a context switch. At this point, some syscalls will be handled internally by the μKernel, for example, memory allocation where the virtual machine has sufficiently allocated pages to handle the request immediately.

                  3. All syscalls which cannot be handled internally by the μKernel must be passed to the host, so the guest μKernel passes the syscall request to the host (Linux) kernel. As an optimization, some syscalls may be handled by the host (Linux) kernel directly. For example, read() of a socket can be handled immediately by the host kernel, avoiding future context switches. This requires the (future) development of a Linux kernel module to handle these request directly in the host kernel. Since this is an optimization step, we can wait until the interfaces have settled before pursuing this.

                  4. All syscalls which cannot be handled internally by the host kernel must cause a vmexit in the host VMM. For example, a request for additional pages to be mapped into the guest must be passed to the VMM since that is the component which manages the allocated pages. Like previous layers, any syscalls which can be handled directly in the VMM (for example allocation from a pre-allocated memory pool) should be handled immediately to avoid future context switches.

                  5. In some cases, the VMM will have to re-enter the host kernel in order to fulfil the request. This is the slowest performance path and should be avoided wherever possible.

                  Syscall Categories and their Layers #

                  • Memory Allocation: Memory allocation syscalls should be served by the μKernel from pre-allocated pools of huge pages. Allocation of huge pages should be passed through to the host layers.

                  • Networking: All networking syscalls should be passed to the host layers. This ensures that the network stack lives outside the TCB.

                  • Filesystem: The guest μKernel should implement a filesystem on top of block encryption and authentication. Block IO should be passed to the host layers. It may even be possible to implement this functionality directly in userspace to reduce the number of context switches. Block authentication, block encryption and the filesystem should be implemented as reusable crates for use in other (non-VM-based keep) contexts.

                  • Threading: Techniques like NUMA are extremely hard to implement. Therefore, the μKernel should pass this to the host layers where possible. One particular strategy to accomplish this is to perform vCPU hotplug. When a new thread is created in the guest userspace, a new vCPU is created by the VMM. Therefore there is always a 1:1 mapping between userspace threads and vCPUs. The guest μKernel can pool pre-allocated vCPUs to increase performance.

                  FAQ #

                  Why not do containers? #

                  Would it be possible to implement containers within TEEs? That depends somewhat on the TEE implementation, but the answer is a "kind of yes". However, when you run containers on a host, the interactions that the container runtime has with the host leak all sorts of information that we really don't want to be making available to it. One of the design goals of Enarx is to reduce the number of layers that you need to trust, so this isn't a great fit. We know that containers are great, and one of the interesting sets of questions around Enarx revolves around exactly how you orchestrate Keeps, but whatever that looks like, we won't be doing something which meets the specification for containers, for the reasons outlined above.

                  (wish they were a bit more specific about this)

                  Will Enarx offer protection against side-channel attacks? #

                  The short answer is yes, where possible. To expand on this, first of all this is only a goal for now, as we won't be focusing our efforts on it immediately given we are still working on core functionality. Secondly, it is likely to be impossible to mitigate all side-channel attacks, but we certainly will attempt to do so where possible, as part of our aim to make Enarx Keeps as secure as possible.

                  TEE vs TPM #

                  You could implement many of the capabilities of a TPM within a TEE, but it doesn't make sense to create a "full" TPM implementation within a TEE on two levels:

                  • One of the key points of a TPM is that it's linked to the hardware, meaning that the boot sequence can be tied into PCRs (Platform Configuration Registers). TEEs aren't necessarily suitable as Hardware-Based Roots of Trust.
                  • Enarx provides a general processing environment. The capabilities of a TPM are carefully scoped, and to meet the requirements of the TCG (Trusted Computing Group, the standards body for TPMs), you need to implement these very carefully.

                  TEE vs HSM #

                  HSM's provide higher levels of protection than TEEs, but are separate modules, accessed via PCI bus, network, etc. TEEs are integral to the CPU packages on a motherboard. Both HSMs and TEE instances can be used as general-function processing units (depending on the model), and both can be programmed for particular uses (e.g. PKCS#11 modules). The cost of HSMs is high (typically thousands of dollars), whereas TEEs are integral to a chipset. The work to program an HSM is difficult.

                  \ No newline at end of file diff --git a/confidential computing/fortanix rust tutorial/index.html b/confidential computing/fortanix rust tutorial/index.html new file mode 100644 index 0000000000..1c2112edf9 --- /dev/null +++ b/confidential computing/fortanix rust tutorial/index.html @@ -0,0 +1,370 @@ +fortanix rust tutorial | philip's notes

                  fortanix rust tutorial

                  2022-02-17 · 12 min read

                  Source: https://edp.fortanix.com/docs/installation/guide/

                  Next time, also check out: https://docs.conclave.net/machine-setup.html

                  Windows SGX setup: https://dqdongg.com/windows/2020/05/31/Windows-sgx.html

                  Fortanix on Azure DCsv3 VM #

                  If you don't have a recent Intel CPU that supports SGX, you'll need to develop on a remote machine.

                  This tutorial will show you how to get the basic toolchain set up for developing Fortanix rust-sgx applications on a remote Azure VM that supports SGX confidential compute.

                  Create our VM #

                  We're using Ubuntu 20.04 LTS here. If you use an older Ubuntu version, you will experience problems.

                  $ az vm create \
                  +	--name sgx-test \
                  +	--resource-group sgx-test_group \
                  +	--size Standard_DC1s_v3 \
                  +	--image Canonical:0001-com-ubuntu-server-focal:20_04-lts-gen2:latest
                  +
                  +{
                  +  "fqdns": "",
                  +  "id": "/subscriptions/XXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXX/resourceGroups/sgx-test_group/providers/Microsoft.Compute/virtualMachines/sgx-test",
                  +  "location": "westus",
                  +  "macAddress": "..",
                  +  "powerState": "VM running",
                  +  "privateIpAddress": "10.0.0.4",
                  +  "publicIpAddress": "..",
                  +  "resourceGroup": "sgx-test_group",
                  +  "zones": ""
                  +}
                  +

                  Sanity check for SGX support #

                  $ ssh phlip9@XX.XX.XX.XX
                  +
                  +# The SGX kernel device should be available
                  +sgx-test:~$ ls -la /dev | grep sgx
                  +drwxr-xr-x  2 root root          80 Apr 26 20:10 sgx
                  +crw-rw-rw-  1 root root     10, 125 Apr 26 20:10 sgx_enclave
                  +crw-rw----  1 root sgx_prv  10, 126 Apr 26 20:10 sgx_provision
                  +
                  +# Kernel log should say something about SGX
                  +sgx-test:~$ sudo dmesg | grep -i sgx
                  +[    0.543687] sgx: EPC section 0x2c0000000-0x3bfffffff
                  +

                  If you've built the sgx-detect fortanix tool locally (targetting x86_64-unknown-linux) you can try scp'ing that over. It won't work just yet, since don't all SGX system libs installed.

                  # Try copying over a pre-built sgx-detect
                  +$ scp ~/dev/fortanix-rust-sgx/target/release/sgx-detect phlip9@XX.XX.XX.XX:~/
                  +
                  +sgx-test:~$ ./sgx-detect
                  +./sgx-detect: error while loading shared libraries: libsgx_dcap_ql.so.1: cannot open shared object file: No such file or directory
                  +

                  (Ubuntu/Debian) Install SGX libraries via APT #

                  Adding deb repos with SGX dependencies.

                  # For the Intel `libsgx-` dependencies.
                  +$ echo 'deb [arch=amd64] https://download.01.org/intel-sgx/sgx_repo/ubuntu focal main' | sudo tee /etc/apt/sources.list.d/intel-sgx.list
                  +$ wget -qO - https://download.01.org/intel-sgx/sgx_repo/ubuntu/intel-sgx-deb.key | sudo apt-key add -
                  +
                  +# (Optional) If you need `clang`.
                  +# $ echo "deb http://apt.llvm.org/focal/ llvm-toolchain-focal-10 main" | sudo tee /etc/apt/sources.list.d/llvm-toolchain-focal-10.list
                  +# $ wget -qO - https://apt.llvm.org/llvm-snapshot.gpg.key | sudo apt-key add -
                  +
                  +# (Optional) If you're using the Azure DCAP client, `az-dcap-client`.
                  +# $ echo "deb [arch=amd64] https://packages.microsoft.com/ubuntu/20.04/prod focal main" | sudo tee /etc/apt/sources.list.d/msprod.list
                  +# $ wget -qO - https://packages.microsoft.com/keys/microsoft.asc | sudo apt-key add -
                  +
                  $ sudo apt update
                  +
                  +# You should see libsgx things here now.
                  +$ apt search libsgx
                  +libsgx-ae-epid/unknown 2.15.101.1-bionic1 amd64
                  +  Intel(R) Software Guard Extensions QE and PvE
                  +# ..
                  +libsgx-urts-dbgsym/unknown 2.15.101.1-bionic1 amd64
                  +  debug symbols for libsgx-urts
                  +
                  +$ sudo apt upgrade
                  +
                  +# You may need these if you're doing more than just running `sgx-detect`.
                  +# $ sudo apt install \
                  +# 	clang-10 libssl-dev gdb libsgx-enclave-common libsgx-quote-ex \
                  +# 	libprotobuf17 libsgx-dcap-ql libsgx-dcap-ql-dev az-dcap-client \
                  +# 	open-enclave ninja-build
                  +
                  +# SGX dependencies
                  +$ sudo apt install libsgx-enclave-common libsgx-quote-ex libsgx-dcap-ql libsgx-dcap-ql-dev
                  +
                  +# Standard dev tools
                  +$ sudo apt install build-essential libssl-dev pkg-config
                  +
                  +# Fortanix needs protoc for the AESM client
                  +$ sudo apt install protobuf-compiler
                  +
                  +# Install rust
                  +$ curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
                  +
                  +# Add SGX target
                  +$ rustup target add x86_64-fortanix-unknown-sgx
                  +

                  (macOS, build-only) Install SGX deps via Homebrew #

                  $ brew install protobuf
                  +
                  +# Install rust
                  +$ curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
                  +
                  +# Add SGX target
                  +$ rustup target add x86_64-fortanix-unknown-sgx
                  +

                  Build and run Fortanix sgx-detect tools #

                  Let's verify our install with sgx-detect.

                  
                  +
                  +# # Install fortanix SGX tools (via crates.io)
                  +# $ cargo install fortanix-sgx-tools sgxs-tools
                  +# # Failed b/c published crates are 4 mo out-of-date and need weird nightly
                  +# # version to compile.
                  +
                  +# Install fortanix SGX tools (via git repo) since the crates.io version
                  +# is very out-of-date.
                  +$ git clone https://github.com/fortanix/rust-sgx.git --depth=1
                  +$ cargo install --path ./intel-sgx/fortanix-sgx-tools
                  +$ cargo install --path ./intel-sgx/sgxs-tools
                  +
                  +$ sgx-detect
                  +Detecting SGX, this may take a minute...
                  +  SGX instruction set
                  +    CPU support
                  +    CPU configuration
                  +    Enclave attributes
                  +    Enclave Page Cache
                  +  SGX features
                  +      SGX2  ✔  EXINFO  ✘  ENCLV  ✘  OVERSUB  ✔  KSS
                  +    Total EPC size: 4.0GiB
                  +  Flexible launch control
                  +    CPU support
                  +   CPU configuration
                  +    Able to launch production mode enclave
                  +  SGX system software
                  +    SGX kernel device (/dev/sgx_enclave)
                  +    libsgx_enclave_common
                  +    AESM service
                  +    Able to launch enclaves
                  +      Debug mode
                  +      Production mode
                  +      Production mode (Intel whitelisted)
                  +
                  +You're all set to start running SGX programs!
                  +
                  +
                  +$ echo >> ~/.cargo/config -e '[target.x86_64-fortanix-unknown-sgx]\nrunner = "ftxsgx-runner-cargo"'
                  +

                  (Failed) Attempt at SGX inside WSL2 #

                  Install protobuf compiler

                  # Ubuntu/Debian/WSL
                  +$ sudo apt install protobuf-compiler
                  +$ protoc --version
                  +
                  +libprotoc 3.6.1
                  +

                  Installing libsgx-dcap-ql-dev

                  # make sure we're running on focal Ubuntu release
                  +$ lsb_release -a
                  +
                  +$ echo "deb https://download.01.org/intel-sgx/sgx_repo/ubuntu focal main" | sudo tee -a /etc/apt/sources.list.d/fortanix.list >/dev/null
                  +
                  +$ curl -sSL https://download.01.org/intel-sgx/sgx_repo/ubuntu/intel-sgx-deb.key | sudo -E apt-key add -
                  +
                  +$ sudo apt update
                  +$ sudo apt install libsgx-dcap-ql-dev
                  +

                  Installing Linux SGX drivers

                  On Intel's website, find the latest “Intel SGX Linux Release” (not “Intel SGX DCAP Linux Release”) and download the “Intel (R) SGX Installers” for your platform. The package will have driver in the name.

                  Ubuntu 20.04 Drivers: https://download.01.org/intel-sgx/sgx-linux/2.15.1/distro/ubuntu20.04-server/

                  Installation Guide: https://download.01.org/intel-sgx/sgx-dcap/1.12.1/linux/docs/Intel_SGX_SW_Installation_Guide_for_Linux.pdf

                  $ sudo apt install build-essential ocaml automake autoconf libtool libssl-dev dkms
                  +
                  +$ wget https://download.01.org/intel-sgx/sgx-linux/2.15.1/distro/ubuntu20.04-server/sgx_linux_x64_driver_1.41.bin
                  +
                  +$ chmod a+x sgx_linux_x64_driver_1.41.bin
                  +$ sudo ./sgx_linux_x64_driver_1.41.bin
                  +

                  Error

                  Error! Your kernel headers for kernel 5.10.93.2-microsoft-standard-WSL2 cannot be found.
                  +Please install the linux-headers-5.10.93.2-microsoft-standard-WSL2 package,
                  +or use the --kernelsourcedir option to tell DKMS where it's located
                  +

                  I conveniently already have this kernel pulled : )

                  $ sudo ./sgx_linux_x64_driver_1.41.bin --kernelsourcedir
                  +

                  Unfortunately, seems like it won't recognize the path... My guess is that SGX inside WSL2 is probably a dead end. :(

                  Attempt in Win11 #

                  PS > git config --global http.sslCAinfo "C:\Users\phlip9\scoop\apps\mingit-busybox\current\mingw64\ssl\certs\ca-bundle.crt"
                  +PS > scoop update
                  +
                  +PS > scoop install openssl
                  +
                  +PS > scoop bucket add extras
                  +PS > scoop install protobuf
                  +
                  # make sure our nightly compiler is recent
                  +PS > rustup toolchain install nightly-2021-12-15
                  +
                  +# install the SGX toolchain
                  +PS > rustup target add x86_64-fortanix-unknown-sgx --toolchain nightly-2021-12-15
                  +
                  +# install the SGX tools
                  +PS > cargo +nightly-2021-12-15 install fortanix-sgx-tools sgxs-tools
                  +

                  Didn't detect OpenSSL library...

                  EDIT: nvm had to restart whole Windows Terminal app, not just open a new shell... pretty fuckin annoying tbh...

                  OK, it picked up the OpenSSL library and protobuf compiler. Unfortunately it now fails b/c some file is hard depending on std::os::unix which doesn't exist on windows...

                  PS > git clone git@github.com:fortanix/rust-sgx.git
                  +
                  +PS > cargo +nightly-2021-12-15 build -p fortanix-sgx-tools -p sgxs-tools
                  +

                  Error

                  error[E0433]: failed to resolve: could not find `unix` in `os`
                  + --> C:\Users\phlip9\.cargo\registry\src\github.com-1ecc6299db9ec823\proc-mounts-0.2.4\src\mounts\info.rs:7:9
                  +  |
                  +7 |     os::unix::ffi::OsStringExt,
                  +  |         ^^^^ could not find `unix` in `os`
                  +
                  +error[E0433]: failed to resolve: could not find `unix` in `os`
                  + --> C:\Users\phlip9\.cargo\registry\src\github.com-1ecc6299db9ec823\proc-mounts-0.2.4\src\mounts\list.rs:4:9
                  +  |
                  +4 |     os::unix::ffi::OsStrExt,
                  +  |         ^^^^ could not find `unix` in `os`
                  +
                  +error[E0433]: failed to resolve: could not find `unix` in `os`
                  + --> C:\Users\phlip9\.cargo\registry\src\github.com-1ecc6299db9ec823\proc-mounts-0.2.4\src\swaps.rs:7:9
                  +  |
                  +7 |     os::unix::ffi::OsStringExt,
                  +  |         ^^^^ could not find `unix` in `os`
                  +
                  +error[E0599]: no function or associated item named `from_vec` found for struct `OsString` in the current scope
                  +   --> C:\Users\phlip9\.cargo\registry\src\github.com-1ecc6299db9ec823\proc-mounts-0.2.4\src\mounts\info.rs:130:22
                  +    |
                  +130 |         Ok(OsString::from_vec(ret))
                  +    |                      ^^^^^^^^ function or associated item not found in `OsString`
                  +
                  +error[E0599]: no method named `as_bytes` found for reference `&OsStr` in the current scope
                  +  --> C:\Users\phlip9\.cargo\registry\src\github.com-1ecc6299db9ec823\proc-mounts-0.2.4\src\mounts\list.rs:55:43
                  +   |
                  +55 |         self.starts_with(path.as_os_str().as_bytes(), |m| &m.source)
                  +   |                                           ^^^^^^^^ method not found in `&OsStr`
                  +
                  +error[E0599]: no method named `as_bytes` found for reference `&OsStr` in the current scope
                  +  --> C:\Users\phlip9\.cargo\registry\src\github.com-1ecc6299db9ec823\proc-mounts-0.2.4\src\mounts\list.rs:63:43
                  +   |
                  +63 |         self.starts_with(path.as_os_str().as_bytes(), |m| &m.dest)
                  +   |                                           ^^^^^^^^ method not found in `&OsStr`
                  +
                  +error[E0599]: no method named `as_bytes` found for reference `&OsStr` in the current scope
                  +  --> C:\Users\phlip9\.cargo\registry\src\github.com-1ecc6299db9ec823\proc-mounts-0.2.4\src\mounts\list.rs:72:49
                  +   |
                  +72 |             let input = func(mount).as_os_str().as_bytes();
                  +   |                                                 ^^^^^^^^ method not found in `&OsStr`
                  +
                  +error[E0599]: no function or associated item named `from_vec` found for struct `OsString` in the current scope
                  +   --> C:\Users\phlip9\.cargo\registry\src\github.com-1ecc6299db9ec823\proc-mounts-0.2.4\src\swaps.rs:106:22
                  +    |
                  +106 |         Ok(OsString::from_vec(ret))
                  +    |                      ^^^^^^^^ function or associated item not found in `OsString`
                  +

                  OK with some fixes (hacks) I got it to build

                  Running sgx-detect

                  PS > .\target\release\sgx-detect.exe
                  +
                  +Detecting SGX, this may take a minute...
                  +thread 'main' panicked at 'Couldn't find sgx_uae_service.dll: Os { code: 126, kind: Uncategorized, message: "The specified module could not be found." }', intel-sgx\aesm-client\src\imp\windows.rs:67:18
                  +note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
                  +

                  I think I'm missing some stuff installed?

                  Let's have a look at the Intel SGX SDK for Windows guide: https://cdrdv2.intel.com/v1/dl/getContent/671222?explicitVersion=true

                  Installing Intel Management Engine Driver (for Win 10 (though I'm on Win 11 loe))

                  In the installer.zip > Cons (for consumer) > MEI-Only Installer MSI (don't want other BS) > MEISetup.exe

                  Verifying we have SGX not disabled in the BIOS. Under Advanced/CPU Config/SW Guard Extensions (SGX), select SW Controlled and not Disabled. Curiously no direct Enabled option?

                  Note: "Trusted Computing" refers to TPM (Trusted Platform Module) and not SGX. I believe it's used for UEFI secure boot or something.

                  Now let's try to get the SGX platform software and drivers installed.

                  (One thing that makes me nervous, is that many docs suggest that the SGX platform software should be pre-installed via Windows Update if SGX is supported. However, ls /mnt/c/Windows/System32 | grep -i sgx doesn't show anything...)

                  Just saw this note here (https://www.intel.com/content/www/us/en/developer/articles/guide/sgx-sdk-installation-guide.html)

                  Note: You can’t install Intel® SGX PSW installer when Windows OS is installed in Legacy mode and Intel® SGX is configured as “Software Controlled” in BIOS. You need to configure Intel® SGX as “Enabled” in BIOS before installing Intel® SGX PSW.

                  Does this mean Legacy AND SW Controlled or Legacy OR SW Controlled???

                  Something to look into? https://github.com/intel/sgx-software-enable Would need to live-boot into a linux distro in UEFI boot mode, then compile and run this I guess.

                  useful command msinfo32

                  BIOS Mode: UEFI Secure Boot State: Off (Why??) Total RAM: 16 GB Available RAM: 9.85 GB (??)

                  Booted into my Pop!-OS live USB. Pulled and built the sgx_enable program. Looks like it ran successfully!!

                  Booting into the BIOS still shows Software Controlled but I don't know if that's just 'cus the BIOS can't show it properly.

                  Booting back into Win11, I notice something's changed in msinfo32. Under System Summary > Hardware Resources > Memory, there's a new entry!
                  ResourceDeviceStatus
                  0xa0200000-0xa5f7ffffIntel Software Guard Extensions DeviceOK

                  Opened Windows Update and checked for updates. A "Intel Software Component" looks like it installed? Going to restart just to be sure these things actually installed lmao.

                  AYYYYY

                  λ ls /c/Windows/System32/ | grep -i sgx
                  +sgx_dcap_ql.dll*
                  +sgx_dcap_quoteverify.dll*
                  +sgx_enclave_common.dll*
                  +sgx_epid.dll*
                  +sgx_launch.dll*
                  +sgx_platform.dll*
                  +sgx_quote_ex.dll*
                  +sgx_uae_service.dll*
                  +sgx_urts.dll*
                  +

                  Running sgx-detect again

                  PS > .\target\release\sgx-detect.exe -v
                  +
                  +Detecting SGX, this may take a minute...
                  +✔  SGX instruction set
                  +  ✔  CPU support
                  +  ✔  CPU configuration
                  +  ✔  Enclave attributes
                  +  ✔  Enclave Page Cache
                  +  SGX features
                  +    ✘  SGX2  ✘  EXINFO  ✘  ENCLV  ✘  OVERSUB  ✘  KSS
                  +    Total EPC size: 93.5MiB
                  +✘  Flexible launch control
                  +  ✔  CPU support
                  +  ? CPU configuration
                  +  ✘  Able to launch production mode enclave
                  +✔  SGX system software
                  +  ✘  SGX kernel device
                  +  ✔  libsgx_enclave_common
                  +  ✔  AESM service
                  +  ✔  Able to launch enclaves
                  +    ✔  Debug mode
                  +    ✘  Production mode
                  +    ✔  Production mode (Intel whitelisted)
                  +
                  +🕮   Flexible launch control > CPU configuration
                  +Your hardware supports Flexible Launch Control, but whether it's enabled could not be determined. More information might be available by re-running this program with sudo. Would you like to do that?
                  +(not supported yet)
                  +
                  +debug: Error reading MSR 3Ah: RDMSR not implemented on Windows
                  +
                  +More information: https://edp.fortanix.com/docs/installation/help/#flc-cpu-configuration
                  +
                  +🕮   SGX system software > SGX kernel device
                  +The SGX device (/dev/sgx/enclave, /dev/sgx or /dev/isgx) is not present.
                  +
                  +It could not be detected whether you have an SGX driver installed. Please make sure the SGX driver is installed and loaded correctly.
                  +
                  +debug: Error opening device: Device Driver Path not supported in Windows
                  +debug: Error checking module status: KMOD Status not implemented on Windows
                  +
                  +More information: https://edp.fortanix.com/docs/installation/help/#sgx-driver
                  +
                  +🕮   SGX system software > Able to launch enclaves > Production mode
                  +The enclave could not be launched. This might indicate a problem with FLC.
                  +
                  +debug: failed to load report enclave
                  +debug: cause: The EINITTOKEN provider didn't provide a token
                  +debug: cause: aesm error code Unknown(16388)
                  +
                  +More information: https://edp.fortanix.com/docs/installation/help/#run-enclave-prod
                  +
                  +You're all set to start running SGX programs!
                  +

                  I think this is OK? I'm pretty sure our CPU isn't recent enough to support FLC (Flexible Launch Control). I also didn't see anything relevant in the BIOS settings. It looks like it was able to launch an enclave in debug mode at least?

                  Will need to buy newer Intel CPU for more serious development.

                  \ No newline at end of file diff --git a/confidential computing/gramine/index.html b/confidential computing/gramine/index.html new file mode 100644 index 0000000000..341c1f3f8c --- /dev/null +++ b/confidential computing/gramine/index.html @@ -0,0 +1,235 @@ +gramine | philip's notes

                  gramine

                  2022-03-26 · 5 min read

                  site: https://gramineproject.io/ github: https://github.com/gramineproject/gramine related: mystikos

                  Gramine on Azure #

                  Related: fortanix rust tutorial > Fortanix on Azure DCsv3 VM

                  Provision our VM #

                  We're using Ubuntu 20.04 LTS here. If you use an older Ubuntu version, you will experience problems.

                  $ az vm create \
                  +	--name sgx-test \
                  +	--resource-group sgx-test_group \
                  +	--size Standard_DC1s_v3 \
                  +	--image Canonical:0001-com-ubuntu-server-focal:20_04-lts-gen2:latest
                  +
                  +{
                  +  "fqdns": "",
                  +  "id": "/subscriptions/XXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXX/resourceGroups/sgx-test_group/providers/Microsoft.Compute/virtualMachines/sgx-test",
                  +  "location": "westus",
                  +  "macAddress": "..",
                  +  "powerState": "VM running",
                  +  "privateIpAddress": "10.0.0.4",
                  +  "publicIpAddress": "..",
                  +  "resourceGroup": "sgx-test_group",
                  +  "zones": ""
                  +}
                  +

                  Installing Dependencies #

                  Still on our DCsv3 VM w/ Ubuntu 20.04

                  # Intel SGX SDK
                  +$ echo 'deb [arch=amd64] https://download.01.org/intel-sgx/sgx_repo/ubuntu focal main' | sudo tee /etc/apt/sources.list.d/intel-sgx.list
                  +$ wget -qO - https://download.01.org/intel-sgx/sgx_repo/ubuntu/intel-sgx-deb.key | sudo apt-key add -
                  +
                  +# Azure DCAP SDK
                  +$ echo "deb [arch=amd64] https://packages.microsoft.com/ubuntu/20.04/prod focal main" | sudo tee /etc/apt/sources.list.d/msprod.list
                  +$ wget -qO - https://packages.microsoft.com/keys/microsoft.asc | sudo apt-key add -
                  +
                  +$ sudo apt update
                  +
                  +# SGX SDK libs should show up now
                  +$ apt search libsgx
                  +libsgx-ae-epid/unknown 2.15.101.1-bionic1 amd64
                  +  Intel(R) Software Guard Extensions QE and PvE
                  +# ..
                  +libsgx-urts-dbgsym/unknown 2.15.101.1-bionic1 amd64
                  +  debug symbols for libsgx-urts
                  +
                  +$ sudo apt upgrade
                  +
                  +# install SGX SDKs and gramine build deps
                  +$ sudo apt-get install -y \
                  +	build-essential autoconf bison gawk libcurl4-openssl-dev \
                  +	libprotobuf-c-dev ninja-build pkg-config protobuf-c-compiler python3 \
                  +	python3-click python3-jinja2 python3-pip python3-protobuf wget \
                  +	libunwind8 python3-pyelftools python3-pytest \
                  +	libsgx-dcap-quote-verify-dev az-dcap-client \
                  +	libsgx-enclave-common libsgx-quote-ex libsgx-dcap-ql libsgx-dcap-ql-dev
                  +$ sudo python3 -m pip install 'meson>=0.55' 'toml>=0.10'
                  +

                  Build Gramine #

                  # pull gramine src
                  +$ git clone https://github.com/gramineproject/gramine.git --depth=1
                  +$ cd gramine
                  +
                  +# build gramine
                  +$ meson setup build/ --buildtype=release \
                  +    -Dsgx=enabled -Ddirect=disabled -Ddcap=enabled
                  +$ ninja -C build/
                  +$ sudo ninja -C build/ install
                  +

                  Run the helloworld #

                  # generate our enclave signing key
                  +$ gramine-sgx-gen-private-key
                  +
                  +# # (If their command doesn't work) generate your enclave signing key
                  +# $ mkdir -p ~/.config/gramine
                  +# $ openssl genrsa -3 -out ~/.config/gramine/enclave-key.pem 3072
                  +
                  +# Run helloworld
                  +$ cd CI-Examples/helloworld
                  +$ make SGX=1
                  +$ gramine-sgx helloworld
                  +# ..
                  +Hello, world
                  +

                  GSC (Gramine Shielded Containers) #

                  We're going to try building a sample OpenVino container, then wrap it with Gramine Shielded Containers (GSC) to run on a remote enclave.

                  Build example container (on local machine!) #

                  $ git clone https://github.com/gramineproject/gsc.git
                  +$ cd gsc/Examples/openvino
                  +
                  +$ docker build --rm \
                  +	-t ubuntu20.04-openvino \
                  +	-f ubuntu20.04-openvino.dockerfile .
                  +
                  +$ cd ../../
                  +$ mkdir .venv && python3 -m venv ./.venv/gsc # (phlip9-only) $ mkvenv gsc
                  +$ ./.venv/gsc/bin/activate                   # (phlip9-only) $ workon gsc
                  +(gsc) $ pip3 install --upgrade pip
                  +(gsc) $ pip3 install docker jinja2 toml pyyaml
                  +

                  Create gsc/config.yaml #

                  # gsc/config.yaml
                  +# Specify the OS distro. Currently tested distros are
                  +# ``ubuntu:18.04``, ``ubuntu:20.04``, ``ubuntu:21.04`` and ``centos:8``.
                  +Distro: "ubuntu:20.04"
                  +
                  +# If you're using your own fork and branch of Gramine, specify the GitHub link and the branch name
                  +# below; typically, you want to keep the default values though
                  +Gramine:
                  +    Repository: "https://github.com/gramineproject/gramine.git"
                  +    Branch:     "master"
                  +	# Build based on a pre-built image (via ./gsc build-gramine)
                  +	# Image: ""
                  +
                  +# Specify the Intel SGX driver installed on your machine (more specifically, on the machine where
                  +# the graminized Docker container will run); there are several variants of the SGX driver:
                  +#
                  +#   - legacy out-of-tree driver: use something like the below values, but adjust the branch name
                  +#         Repository: "https://github.com/01org/linux-sgx-driver.git"
                  +#         Branch:     "sgx_driver_1.9"
                  +#
                  +#   - DCAP out-of-tree driver: use something like the below values
                  +#         Repository: "https://github.com/intel/SGXDataCenterAttestationPrimitives.git"
                  +#         Branch:     "DCAP_1.11 && cp -r driver/linux/* ."
                  +#
                  +#   - DCAP in-kernel driver: use empty values like below
                  +#         Repository: ""
                  +#         Branch:     ""
                  +#
                  +SGXDriver:
                  +    Repository: ""
                  +    Branch:     ""
                  +

                  (WSL-only) Edit gsc/gsc.py #

                  TODO: submit a PR

                  diff --git a/gsc.py b/gsc.py
                  +index 4e71d12..b9a33cf 100755
                  +--- a/gsc.py
                  ++++ b/gsc.py
                  +@@ -43,10 +43,12 @@ def build_docker_image(docker_api, build_path, image_name, dockerfile, **kwargs)
                  +                               **kwargs)
                  +     for chunk in stream:
                  +         encoding = sys.stdout.encoding if sys.stdout.encoding is not None else 'UTF-8'
                  +-        json_output = json.loads(chunk.decode(encoding))
                  +-        if 'stream' in json_output:
                  +-            for line in json_output['stream'].splitlines():
                  +-                print(line)
                  ++        msgs = chunk.decode(encoding).splitlines()
                  ++        for msg in msgs:
                  ++            json_output = json.loads(msg)
                  ++            if 'stream' in json_output:
                  ++                for line in json_output['stream'].splitlines():
                  ++                    print(line)
                  +
                  +
                  + def extract_binary_cmd_from_image_config(config, env):
                  +

                  Gramine-ify and sign built container #

                  # gramine-ify built container
                  +(gsc) $ ./gsc build --insecure-args ubuntu20.04-openvino \
                  +    Examples/openvino/ubuntu20.04-openvino.manifest
                  +
                  +# generate our enclave signing key
                  +$ mkdir -p ~/.config/gramine
                  +$ openssl genrsa -3 -out ~/.config/gramine/enclave-key.pem 3072
                  +
                  +# sign our container
                  +(gsc) $ ./gsc sign-image ubuntu20.04-openvino ~/.config/gramine/enclave-key.pem
                  +
                  +Successfully built a signed Docker image `gsc-ubuntu20.04-openvino` from `gsc-ubuntu20.04-openvino-unsigned`.
                  +

                  Gramine RA-TLS (Remote Attestation) #

                  • Enclaves create a random, self-signed RA-TLS cert containing an attestation Quote.
                  • Client connects to the enclave over TLS. The client's TLS library is hooked with a custom cert chain verifier, which verifies the attestation quote.

                  RA-TLS x509 certificate #

                  • The enclave generates an RSA 3072 key pair.
                  • The enclave builds an attestation Report containing hash(pubkey) in the user report_data.
                  • The enclave gets an attestation Quote endorsing their Report.
                  • The enclave generates a self-signed cert embedding the Quote. The cert is signed with their previously generated RSA key.

                  RA-TLS x509 cert details #

                  • MD Alg: SHA256
                  • Subject Key: enclave's RSA pubkey
                  • Issuer Key: enclave's RSA pubkey
                  • Subject Name: "CN=RATLS,O=GramineDevelopers,C=US"
                  • Issuer Name: "CN=RATLS,O=GramineDevelopers,C=US"
                  • Serial Number: 1 (dummy value)
                  • Timestamp Not-Before: (configurable)
                  • Timestamp Not-After: (configurable)
                  • Custom Quote Extension: quote bytes
                  \ No newline at end of file diff --git a/confidential computing/index.html b/confidential computing/index.html new file mode 100644 index 0000000000..606e4f4ffc --- /dev/null +++ b/confidential computing/index.html @@ -0,0 +1,73 @@ +confidential computing | philip's notes

                  confidential computing

                  enarx (WASM TEE) →

                  2022-02-17 · 13 min read

                  fortanix rust tutorial →

                  2022-02-17 · 12 min read

                  gramine →

                  2022-03-26 · 5 min read

                  intel TDX →

                  2022-02-17 · 2 min read

                  marblerun →

                  2022-03-29 · 3 min read

                  mystikos →

                  2022-03-26 · 1 min read

                  remote attestation protocols →

                  2022-05-15 · 8 min read

                  \ No newline at end of file diff --git a/confidential computing/intel SGX/SGX lingo/index.html b/confidential computing/intel SGX/SGX lingo/index.html new file mode 100644 index 0000000000..e1f6f9fc77 --- /dev/null +++ b/confidential computing/intel SGX/SGX lingo/index.html @@ -0,0 +1,410 @@ +SGX lingo | philip's notes

                  SGX lingo

                  2022-04-12 · 21 min read

                  • Understanding Intel SGX is challenging due to the sheer number of new concepts and names that you need to internalize. In my experience, it's a bit like wading through "acronym soup", desperately searching for familiar ground to find your footing before you can truly begin learning.
                  • To make this process easier for newcomers, I've written an extended glossary of SGX terminology, with extensive links and explanations.
                  • Most of the code links and samples are written in Rust.
                  • The entries are not listed in any particular order.

                  Quote #

                  A datastructure provided as proof to an external party that an application enclave is running on genuine Intel hardware at a given TCB version.

                  An application's identity Report, signed by an Attestation Key (AK) (usually the one provisioned in the Quoting Enclave (QE)).

                  Report (EREPORT) #

                  A hardware report generated by an enclave containing (1) the enclave's identity, (2) measurement info, and (3) a small amount of application data (64-bytes), called the ReportData.

                  Reports are efficiently verifiable inside other enclaves on the same machine. When generated via the EREPORT instruction, the Report struct will contain a MAC created from a special Seal Key used for tagging reports. This allows us to cheaply verify reports without an expensive signature verification, since other enclaves can just rederive the report key and check the MAC tag, which is fast.

                  Otherwise for remote attestation:

                  Attestation Key (AK) #

                  The key used by the QE to sign application enclave REPORTs, producing Quotes.

                  This Quote certifies that an application enclave is running on genuine Intel SGX HW at a given TCB version.

                  The AK is created and owned by the owner of the remote attestation infrastructure (e.g., Azure or Intel) but is also certified by the Intel SGX rooted key (this key is rooted to the platform HW fuses), which proves the enclave is valid.

                  Architectural Enclaves #

                  Intel provides several Intel-signed enclaves necessary for running user application enclaves, verifying launch policies, producing remote attestation Quotes, and more.

                  A non-exhaustive list of Architectural Enclaves:

                  1. Launch Enclave (LE)
                  2. Quoting Enclave (QE)
                  3. Provisioning Certification Enclave (PCE)
                  4. Provisioning Enclave (PE)
                  5. Platform Services Enclave (PSE)

                  To see the complete list of signed enclaves:

                  # Valid for Intel SGX v2.21 and Intel DCAP v1.18
                  +
                  +$ cd $(mktemp -d)
                  +$ curl https://download.01.org/intel-sgx/sgx-linux/2.21/prebuilt_ae_2.21.tar.gz | tar -xzv
                  +$ curl https://download.01.org/intel-sgx/sgx-dcap/1.18/linux/prebuilt_dcap_1.18.tar.gz | tar -xzv
                  +
                  +$ cd psw/ae/data/prebuilt/
                  +$ exa -1
                  +le_prod_css.bin
                  +libsgx_id_enclave.signed.so
                  +libsgx_le.signed.so
                  +libsgx_pce.signed.so
                  +libsgx_pve.signed.so
                  +libsgx_qe.signed.so
                  +libsgx_qe3.signed.so
                  +libsgx_qve.signed.so
                  +libsgx_tdqe.signed.so
                  +

                  Launch Enclave (LE) #

                  The Launch Enclave generates a Launch Token, which is needed to run another enclave. The LE itself is special in that it doesn't need a launch token, but its signing key id, [[#Signer Measurement MRSIGNER|MRSIGNER]], must match the CPU's configuration.

                  The API for generating a new Launch Token takes (1) a SIGSTRUCT and (2) an Enclave Attributes bitflag and returns a new launch token.

                  See: Fortanix EDP EinittokenProvider trait

                  See: Fortanix EDP AesmService impl

                  Enclave file: libsgx_le.signed.so.

                  Enclave API:

                  enclave {
                  +include "arch.h"
                  +include "sgx_report.h"
                  +from "sgx_tstdc.edl" import *;
                  +
                  +trusted {
                  +	public int le_get_launch_token_wrapper(
                  +		[in]  const sgx_measurement_t *mrenclave,
                  +		[in]  const sgx_measurement_t *mrsigner,
                  +		[in]  const sgx_attributes_t  *se_attributes,
                  +		[out] token_t               * lictoken
                  +	);
                  +
                  +	public uint32_t le_init_white_list_wrapper(
                  +		[size = wl_cert_chain_size, in]  const uint8_t *wl_cert_chain,
                  +		uint32_t wl_cert_chain_size
                  +	);
                  +};
                  +};
                  +

                  Quoting Enclave (QE) #

                  An Intel-provided, signed enclave trusted by the attestation infrastructure to sign and issue Quotes or attestations about other enclaves on the same platform.

                  The QE will include a hash of the AK in its QE.REPORT.ReportData.

                  The QE will also include the PCE's certification of itself (the QE) in its REPORT.

                  Enclave file: libsgx_qe.signed.so.

                  Enclave API:

                  enclave {
                  +include "sgx_report.h"
                  +include "sgx_quote.h"
                  +from "sgx_tstdc.edl" import *;
                  +
                  +trusted {
                  +	public uint32_t verify_blob(
                  +		[size = blob_size, in, out] uint8_t *p_blob,
                  +		uint32_t blob_size,
                  +		[out] uint8_t *p_is_resealed,
                  +		[out] sgx_cpu_svn_t *p_cpusvn
                  +	);
                  +
                  +	public uint32_t get_quote(
                  +		[size = blob_size, in, out] uint8_t *p_blob,
                  +		uint32_t blob_size,
                  +		[in] const sgx_report_t *p_report,
                  +		sgx_quote_sign_type_t quote_type,
                  +		[in] const sgx_spid_t *p_spid,
                  +		[in] const sgx_quote_nonce_t *p_nonce,
                  +		// SigRL is relatively big, so we cannot copy it into EPC
                  +		[user_check] const uint8_t *p_sig_rl,
                  +		uint32_t sig_rl_size,
                  +		[out] sgx_report_t *qe_report,
                  +		// Quote is also big, we should output it in piece meal.
                  +		[user_check] uint8_t *p_quote,
                  +		uint32_t quote_size, sgx_isv_svn_t pce_isvnsvn
                  +	);
                  +};
                  +};
                  +
                  +

                  Provisioning Certification Enclave (PCE) #

                  An Intel-provided enclave that acts as a Certificate Authority (CA) for local Quoting Enclaves running on the same platform. It endorses the Attestation Keys provisioned to each Quoting Enclave with its Provisioning Certification Key (PCK).

                  The PCE's PCK is itself endorsed by the Intel Root CA.

                  The QEs can request the PCE to sign their REPORTs with the PCE's PCK. These signed REPORTs contain ReportData proving that attestation keys or provisioning protocol messages are generated on genuine HW.

                  Only the PCE can produce the PCK private keys.

                  The PCE provides an API for getting the PCK Cert-ID (EncPPID+TCB+PCE-ID) used by a verifier to lookup the matching PCK Cert via the remote IAS API.

                  The PCE also provides an API for signing another enclave (e.g., the QE) REPORT using the PCK.

                  See: Intel - Supporting Third Party Attestation for Intel SGX with Intel Data Center Attestation Primitives

                  Enclave file: libsgx_pce.signed.so.

                  Enclave API:

                  enclave{
                  +include "pce_cert.h"
                  +include "sgx_report.h"
                  +from "sgx_tstdc.edl" import *;
                  +
                  +trusted {
                  +	public uint32_t get_pc_info(
                  +		[in]const sgx_report_t *report,
                  +		[in, size=key_size]const uint8_t *public_key, uint32_t key_size,
                  +		uint8_t crypto_suite,
                  +		[out, size=encrypted_ppid_buf_size]uint8_t *encrypted_ppid, uint32_t encrypted_ppid_buf_size,
                  +		[out]uint32_t *encrypted_ppid_out_size,
                  +		[out]pce_info_t *pce_info,
                  +		[out] uint8_t *signature_scheme
                  +	);
                  +
                  +	public uint32_t certify_enclave(
                  +		[in]const psvn_t *cert_psvn,
                  +		[in]const sgx_report_t *report,
                  +		[out, size=signature_buf_size]uint8_t *signature, uint32_t signature_buf_size,
                  +		[out]uint32_t *signature_out_size
                  +	);
                  +
                  +	public uint32_t get_pc_info_without_ppid(
                  +		[out]pce_info_t *pce_info
                  +	);
                  +};
                  +};
                  +

                  Provisioning Enclave (PE or PvE) #

                  If using the anonymous EPID Attestation Key (AK) Algorithm, then a special Provisioning Enclave is used to interface with the Intel EPID provisioning servers to provision the enclave's AK.

                  Enclave file: libsgx_pve.signed.so.

                  See: Enclave API

                  Platform Services Enclave (PSE) #

                  Intel also provides a set of additional platform enclaves which offer useful services like monotonic counters and trusted time to other enclaves on the machine.

                  The PSE talks to the local Intel Management Engine (IME) over a secure channel. Inside the IME is a small 32-bit Intel core running completely isolated from the general purpose CPU cores.

                  Trusted Time Service #

                  The PSE exposes a Protected Real-time Clock (PRTC), which measures relative elapsed seconds since the initial clock measurement. This value is not a calendar or wall-clock time. To establish a trusted clock base time, you'll need to query some remote semi-trusted servers over a secure channel.

                  See: Intel - Trusted Time and Monotonic Counters with SGX Platform Services Enclave

                  See: 2019 - Applications and Challenges in Securing Time

                  TDX Quoting Enclave (TDQE) #

                  Enclave File: libsqx_tdqe.signed.so.

                  Enclave API:

                  
                  +enclave {
                  +include "sgx_report.h"
                  +include "sgx_quote.h"
                  +include "sgx_report2.h"
                  +include "user_types.h"
                  +include "ecdsa_quote.h"
                  +
                  +trusted {
                  +    public uint32_t get_pce_encrypt_key(
                  +	    [in]const sgx_target_info_t *pce_target_info,
                  +		[out] sgx_report_t *p_qe_report,
                  +		uint8_t crypto_suite,
                  +		uint16_t cert_key_type,
                  +		uint32_t key_size,
                  +		[out, size=key_size] uint8_t *p_public_key
                  +	);
                  +
                  +    public uint32_t gen_att_key(
                  +	    [size = blob_size, in, out] uint8_t *p_blob,
                  +		uint32_t blob_size,
                  +		[in]const sgx_target_info_t *p_pce_target_info,
                  +		[out] sgx_report_t *qe_report,
                  +		[in, size = authentication_data_size] uint8_t* p_authentication_data,
                  +		uint32_t authentication_data_size
                  +	);
                  +
                  +    public uint32_t verify_blob(
                  +	    [size = blob_size, in, out] uint8_t *p_blob,
                  +		uint32_t blob_size,
                  +		[out] uint8_t *p_is_resealed,
                  +		[out] sgx_report_body_t *p_report,
                  +		uint32_t pub_key_id_size,
                  +		[out, size=pub_key_id_size] uint8_t *p_pub_key_id
                  +	);
                  +
                  +    public uint32_t store_cert_data(
                  +	    [in]ref_plaintext_ecdsa_data_sdk_t *p_plaintext_data,
                  +		sgx_ql_cert_key_type_t certification_key_type,
                  +		[in, size = encrypted_ppid_size] uint8_t* p_encrypted_ppid,
                  +		uint32_t encrypted_ppid_size,
                  +		[in, out, size = blob_size] uint8_t *p_blob,
                  +		uint32_t blob_size
                  +	);
                  +
                  +    public uint32_t gen_quote(
                  +		[size = blob_size, in, out] uint8_t *p_blob,
                  +		uint32_t blob_size,
                  +		[in] const sgx_report2_t *p_app_report,
                  +		[in] const sgx_quote_nonce_t *p_nonce,
                  +		[in] const sgx_target_info_t *p_app_enclave_target_info,
                  +		[out] sgx_report_t *p_qe_report,
                  +		[size = quote_size, in, out] uint8_t *p_quote,
                  +		uint32_t quote_size,
                  +		[in, size = cert_data_size] const uint8_t * p_cert_data,
                  +		uint32_t cert_data_size
                  +	);
                  +};
                  +};
                  +

                  Architectural Enclave Service Manager (AESM) #

                  Instead of interacting with the local Architectural Enclaves directly, local user applications and libraries typically interface with a local Intel-provided service called the Architectural Enclave Service Manager. The AESM service typically runs as a local daemon and provides a socket for applications to interface with.

                  An AESM client allows user applications to easily obtain Launch Tokens from the LE, needed for running enclaves, and turn Attestation Reports into Quotes via the QE.

                  Check out the Protobuf definitions and AesmClient API.

                  Provisioning Certification Key (PCK) #

                  A signing key available to the PCE for signing QE REPORTs.

                  This key is unique to the specific processor instance, HW TCB, and PCE version.

                  See: Fortanix EDP - dcap-retrieve-pckid via AESM

                  PCK Cert #

                  A long-lived x.509 CA cert signed and distributed by Intel for every SGX platform.

                  The Intel-provided Provisioning Certification Enclave (PCE) uses this cert to endorse Attestation Keys provisioned to any Quoting Enclaves.

                  This cert is used by Quote verifiers to check that the QE is valid and running and running on a specific PSVN.

                  The PCK Cert is endorsed by the Intel SGX Root CA via an intermediate Intel SGX PCK Platform CA.

                  The PCK Cert has some extra cert extension fields, described in more detail in the Intel PCK Cert Spec. These mostly appear to be metadata, like the PPID, TCB levels, CPUSVN, CPU SKU, and a list of supported extensions.

                  Platform Provisioning ID (PPID) #

                  The provisioning ID for a processor package or platform instance. PPID is not TCB dependent.

                  Security Version Number (SVN) #

                  A monotonically increasing version number that corresponds with major security releases of TCB software.

                  Note that new, non-security-critical software versions can be released without touching the SVN.

                  Part of the verification process is just checking that the remote enclave is running a recent TCB software version without any unpatched vulnerabilities.

                  Platform Security Version Number (PSVN, CPUSVN) #

                  A list of SVNs for each component in the SGX TCB, including the PCE SVN.

                  Think of a PSVN as pinning each component in the TCB to a specific (security-critical) version.

                  Independent Software Vendor (ISV) #

                  ISVs develop enclave applications.

                  Intel Attestation Services (IAS) #

                  See: Intel Attestation Services - API Specification v6.1

                  See: Intel Developer Zone Registration

                  See: Oasis IAS proxy backend to the Intel API

                  See: []

                  Service Provider ID (SPID) #

                  The id of the credentials needed for a Service Provider to talk with with the Intel Attestation Services (IAS).

                  Service Providers must register with Intel in order to acquire these credentials.

                  Enclave Page Cache (EPC) #

                  A region of memory on the platform allocated to enclave code and data.

                  Provisioning TCB #

                  The Intel SGX Trusted Computing Base (TCB). This TCB includes the platform HW TCB and PCE SVN.

                  PCE-ID #

                  The PCE SVN (?) used to generate the PPID and PCK signing key.

                  Data Center Attestation Primitives (DCAP) #

                  A library for generating and verifying attestation evidence.

                  The Intel-provided library is called Intel SGX DCAP. There's also a version by Microsoft called Azure DCAP, which (AFAICT) uses an Azure-run cache over the Intel API services.

                  Launch Token #

                  TODO

                  Flexible Launch Control (FLC) #

                  An SGX feature only available on more recent platforms that allows an arbitrary LE to generate launch tokens.

                  The default launch policy still uses an SGX client whitelist; however, FLC allows a platform owner to change the default LE MRSIGNER to different value.

                  Enclave Load Policy #

                  The remote service providing enclave services, linked with the DCAP library, can choose whether system enclaves like the QE and PCE are loaded on-demand (as application enclaves request their services) or loaded persistently (load once and then keep them loaded until the application shuts down).

                  The two options trade off between greater EPC usage (Persistent) and greater remote attestation latency + overhead (Ephemeral).

                  Owner Epoch #

                  The Owner Epoch is a 128-bit value used in the Seal Key KDF.

                  Since the Owner Epoch is used in the Seal Key KDF, any change to this value would DoS our HW from unsealing any protected data from a previous Owner Epoch value. A malicious cloud operator (Azure) could DoS attack us by changing the Owner Epoch, forcing us to re-provision all enclave secrets.

                  More likely, a vulnerability, TCB violation, or operator error could lead to an unintended Owner Epoch rotation.

                  To help with recovery, applications should record the current Owner Epoch in case something goes wrong. If nobody remembers the Owner Epoch, we can never restore our Seal Keys.

                  Apparently it's also possible virtualize the Owner Epoch if running inside a hypervisor? (TODO: confirm).

                  Ref: 2018 - Some notes on SGX OwnerEpoch and Sealing

                  Quoting Enclave ID (QE-ID) #

                  A pseudo-platform ID that isn't associated with a particular SVN. Instead, the ID is dependent on (1) the QE's MRSIGNER, (2) its Seal Key, which depends

                  Quoting Enclave QuoteInfo #

                  QuoteInfo is the quoting enclave's information needed for clients to perform remote attestation. The target_info is a serialized TargetInfo.

                  pub struct QuoteInfo {
                  +    target_info: Vec<u8>, // serialized Targetinfo
                  +    pub_key_id: Vec<u8>,
                  +}
                  +

                  TargetInfo #

                  Targetinfo is a measurement of the QE.

                  #[repr(C, align(512))]
                  +pub struct Targetinfo {
                  +    pub measurement: [u8; 32],
                  +    pub attributes: Attributes,
                  +    pub _reserved1: [u8; 4],
                  +    pub miscselect: Miscselect,
                  +    pub _reserved2: [u8; 456],
                  +}
                  +

                  Enclave Measurement (MRENCLAVE) #

                  In order to for a client to feel secure provisioning their secrets into an enclave, they need to verify that the enclave is running trusted software. An enclave measurement effectively summarizes the initial state of the trusted software running in the enclave.

                  Intel SGX constructs this measurement when the enclave is built and initialized. During enclave init, it records a log of all important build activities, including:

                  • Content: code, data, stack, heap
                  • Location of each page within the enclave
                  • Security flags used

                  The measurement is actually not the full log, but a 256-bit hash digest of the log. This measurement is stored as MRENCLAVE inside the enclave's software TCB and is accessible inside the enclave via a syscall.

                  Clients can then compare the observed MRENCLAVE with a trusted, expected MRENCLAVE value to guarantee that the enclave is running the expected software.

                  For systems using the Fortanix SGX Stream format (SGXS) to describe an enclave, the SHA256 hash of the .sgxs bytes is exactly the enclave's MRENCLAVE*. Very convenient!

                  *Unless you use the Extended SGXS format, which allows unmeasured sections. In that case, you need to be a little more careful about how you hash the format and ignore the unmeasured sections.

                  Why do we need to verify the software inside the enclave? #

                  If the client forgets to verify the actual software running inside the enclave, there's a simple attack to exfiltrate the client's secrets! All we need to do is run some malicious code in the enclave, which just prints the client's secrets after provisioning. Boom, client secrets leaked.

                  Keep in mind the enclave could be 100% genuine Intel hardware, but unless the client verifies the actual software inside the enclave, they should absolutely not provision their secrets.

                  Fortanix SGX Stream format (SGXS) #

                  The SGX stream (SGXS) format is the most basic description of an enclave, and when combined with a signature and initialization token file contains all the information needed by an Operating System to load the enclave.

                  The format consists entirely of all data that would be hashed to produce the enclave measurement [[#Enclave Measurement MRENCLAVE|MRENCLAVE]].

                  See: Fortanix EDP - SGX Stream format (SGXS).

                  See: Fortanix EDP - ftxsgx-elf2sgxs for converting a standard ELF binary to SGXS.

                  See: Fortanix EDP - sgxs-sign for signing SGXS with your RSA private key.

                  Signer Measurement (MRSIGNER) #

                  Each enclave is also signed by the client or the enclave author, depending on the exact trust model. The MRSIGNER is just the enclave signer's pubkey hash.

                  The signer signs part of the SIGSTRUCT, which then includes the signature and signer pubkey inside.

                  Sealing keys can be derived from the signer measurement + ISV product id/svn, instead of the enclave measurement to allow easy upgrading across different versions of the same enclave.

                  Rust code for generating a signer and computing its measurement:

                  // Generating a 3072-bit RSA key + measurement for signing
                  +// sigstructs. NOTE: the RSA exponent MUST be 3.
                  +let e = openssl::bn::BigNum::from_u32(3)?;
                  +let key = openssl::rsa::Rsa::generate_with_e(3072, &e)?;
                  +
                  +// The signer measurement is the SHA-256 hash of the little-endian
                  +// public key modulus.
                  +
                  +// Openssl returns the modulus in big-endian, so we need to reverse
                  +// the bytes to little-endian before hashing.
                  +let mut modulus = key.n().to_vec();
                  +modulus.reverse();
                  +let mut modulus_buf = [0u8; 384];
                  +modulus_buf[..modulus.len()].copy_from_slice(&modulus);
                  +
                  +let signer_measurement = sha256::digest(&modulus_buf).as_slice();
                  +

                  Enclave Signature Struct (SIGSTRUCT) #

                  Each enclave has an associated SIGSTRUCT, which contains (among other things):

                  1. The MRENCLAVE, pinning the enclave initial state.
                  2. The CPU SVN.
                  3. The ISV
                  4. The ISVPRODID
                  5. The Enclave Attributes and Enclave Miscselect bit flags.

                  The enclave signer then signs a specific portion of the SIGSTRUCT. This signature, along with the signer's full RSA-3072 pubkey, is then placed into the SIGSTRUCT itself.

                  See the Fortanix EDP SIGSTRUCT definition.

                  struct Sigstruct {
                  +    header: [u8; 16],
                  +    vendor: u32,
                  +    date: u32,
                  +    header2: [u8; 16],
                  +    swdefined: u32,
                  +    _reserved1: [u8; 84],
                  +    modulus: [u8; 384],
                  +    exponent: u32,
                  +    signature: [u8; 384],
                  +    miscselect: Miscselect,
                  +    miscmask: u32,
                  +    _reserved2: [u8; 20],
                  +    attributes: Attributes,
                  +    attributemask: [u64; 2],
                  +    enclavehash: [u8; 32],
                  +    _reserved3: [u8; 32],
                  +    isvprodid: u16,
                  +    isvsvn: u16,
                  +    _reserved4: [u8; 12],
                  +    q1: [u8; 384],
                  +    q2: [u8; 384],
                  +}
                  +

                  See: oasis-core/go/common/sgx/sigstruct.Verify

                  • (Binding) ensure that the sigstruct.mrenclave matches the actual mrenclave that we're about to load.

                  Enclave Info #

                  struct EnclaveInfo {
                  +	// The enclave measurement
                  +	mrenclave: Vec<u8>,
                  +	// The signer measurement
                  +	mrsigner: Vec<u8>,
                  +	// The ISV Product ID
                  +	isvprodid: u32,
                  +	// The ISV SVN
                  +	isvsvn: u32,
                  +}
                  +

                  Report TargetInfo (TARGETINFO) #

                  TargetInfo is just the MRENCLAVE plus Attributes and Miscselect masks.

                  struct Targetinfo {
                  +	mrenclave: [u8; 32],
                  +	attributes: Attributes,
                  +	// padding
                  +	miscselect: Miscselect,
                  +	// padding
                  +}
                  +

                  Enclave Init Token (EINITTOKEN) #

                  When launching an enclave, you need to pass a special token to the EINIT instruction. This token is called the EINITTOKEN and is generated by the Launch Enclave after it verifies the full Enclave Signature Struct SIGSTRUCT signature.

                  The SGX platform then verifies the contents of the token before it allows the enclave to initialize.

                  Why does Intel use this EINITTOKEN thing rather than just passing the full SIGSTRUCT each time we init? My guess is that it allows us to amortize the SIGSTRUCT signature verification cost. The LE do the expensive signature verification once, produce a cheaply verifiable launch token, then use the launch token each time rather than the expensive SIGSTRUCT.

                  Note that the token is only verifiable by other enclaves on the same machine; it just contains a MAC created with a privileged Intel-only Seal Key.

                  struct Einittoken {
                  +    valid: u32,
                  +    _reserved1: [u8; 44],
                  +    attributes: Attributes,
                  +    mrenclave: [u8; 32],
                  +    _reserved2: [u8; 32],
                  +    mrsigner: [u8; 32],
                  +    _reserved3: [u8; 32],
                  +    cpusvnle: [u8; 16],
                  +    isvprodidle: u16,
                  +    isvsvnle: u16,
                  +    _reserved4: [u8; 24],
                  +    maskedmiscselectle: Miscselect,
                  +    maskedattributesle: Attributes,
                  +    keyid: [u8; 32],
                  +    mac: [u8; 16],
                  +}
                  +

                  Enclave Attributes #

                  struct Attributes {
                  +    flags: AttributesFlags,
                  +    xfrm: u64,
                  +}
                  +
                  +bitflags! {
                  +	struct AttributesFlags: u64 {
                  +		const INIT          = 0b0000_0001;
                  +		const DEBUG         = 0b0000_0010;
                  +		const MODE64BIT     = 0b0000_0100;
                  +		const PROVISIONKEY  = 0b0001_0000;
                  +		const EINITTOKENKEY = 0b0010_0000;
                  +		const CET           = 0b0100_0000;
                  +		const KSS           = 0b1000_0000;
                  +	}
                  +}
                  +
                  // file: common/inc/sgx_attributes.h
                  +
                  +/* Enclave Flags Bit Masks */
                  +#define SGX_FLAGS_INITTED        0x0000000000000001ULL     /* If set, then the enclave is initialized */
                  +#define SGX_FLAGS_DEBUG          0x0000000000000002ULL     /* If set, then the enclave is debug */
                  +#define SGX_FLAGS_MODE64BIT      0x0000000000000004ULL     /* If set, then the enclave is 64 bit */
                  +#define SGX_FLAGS_PROVISION_KEY  0x0000000000000010ULL     /* If set, then the enclave has access to provision key */
                  +#define SGX_FLAGS_EINITTOKEN_KEY 0x0000000000000020ULL     /* If set, then the enclave has access to EINITTOKEN key */
                  +#define SGX_FLAGS_KSS            0x0000000000000080ULL     /* If set, then the enclave uses KSS */
                  +#define SGX_FLAGS_AEX_NOTIFY     0x0000000000000400ULL     /* If set, then the enclave enables AEX Notify */
                  +
                  +/* XSAVE Feature Request Mask */
                  +#define SGX_XFRM_LEGACY          0x0000000000000003ULL     /* Legacy XFRM which includes the basic feature bits required by SGX, x87 state(0x01) and SSE state(0x02) */
                  +#define SGX_XFRM_AVX             0x0000000000000006ULL     /* AVX XFRM which includes AVX state(0x04) and SSE state(0x02) required by AVX */
                  +#define SGX_XFRM_AVX512          0x00000000000000E6ULL     /* AVX-512 XFRM */
                  +#define SGX_XFRM_MPX             0x0000000000000018ULL     /* MPX XFRM - not supported */
                  +#define SGX_XFRM_PKRU            0x0000000000000200ULL     /* PKRU state */
                  +#define SGX_XFRM_AMX             0x0000000000060000ULL     /* AMX XFRM, including XTILEDATA(0x40000) and XTILECFG(0x20000) */
                  +

                  Most user enclaves only need to enable the MODE64BIT attribute in production.

                  The KSS attribute enables the Key sharing and separation (KSS) feature.

                  The Extended Features Request Mask (xfrm) allows an enclave to ensure certain CPU features (e.g., SSE, AESNI) are available, or the enclave will fail to load.

                  Enclave Miscselect #

                  pub struct Miscselect: u32 {
                  +	const EXINFO = 0b0000_0001;
                  +}
                  +

                  KEYREQUEST #

                  A struct which gets fed into the Seal Key KDF in order to generate keys for sealing or remote attestation.

                  The keyname is a user-defined label

                  struct Keyrequest {
                  +    keyname: u16,
                  +    keypolicy: Keypolicy,
                  +    isvsvn: u16,
                  +    _reserved1: u16,
                  +    cpusvn: [u8; 16],
                  +    attributemask: [u64; 2],
                  +    keyid: [u8; 32],
                  +    miscmask: u32,
                  +    _reserved2: [u8; 436],
                  +}
                  +
                  +struct Keypolicy: u16 {
                  +	const MRENCLAVE = 0b0000_0001;
                  +	const MRSIGNER  = 0b0000_0010;
                  +}
                  +
                  +#[repr(u16)]
                  +enum Keyname {
                  +    Einittoken    = 0,
                  +    Provision     = 1,
                  +    ProvisionSeal = 2,
                  +    Report        = 3,
                  +    Seal          = 4,
                  +}
                  +

                  Key sharing and separation (KSS) #

                  See: https://www.fortanix.com/blog/2018/02/upcoming-intel-sgx-features-explained#key-sharing-and-separation-kss

                  Premise: Communicating between two different enclaves is cumbersome. The KSS feature adds more flexibility.

                  The new KSS feature adds a configuration value+SVN and two extra 16-byte product IDs.

                  The 64-byte configuration value and 2-byte SVN is used as a post-init identity. The value affects the attestation identity and (optionally) seal key derivation, but isn't included in the Sigstruct. This allows a single enclave binary that is specialized into different services (with different identities!) at load time.

                  The extra product IDs are "family ID" and "extra product ID" (but can be used for other purposes). They can be used in seal key derivation. The IDs are included in the Sigstruct but not the EINITTOKEN. meaning a launch enclave can't use these for access controls.

                  \ No newline at end of file diff --git a/confidential computing/intel SGX/index.html b/confidential computing/intel SGX/index.html new file mode 100644 index 0000000000..76b0e5f4d9 --- /dev/null +++ b/confidential computing/intel SGX/index.html @@ -0,0 +1,91 @@ +confidential computing/intel SGX | philip's notes

                  confidential computing/intel SGX

                  overview →

                  2022-02-13 · 12 min read

                  remote attestation →

                  2022-04-12 · 10 min read

                  sealing →

                  2022-04-14 · 9 min read

                  secure time →

                  2022-04-21 · 4 min read

                  SGX lingo →

                  2022-04-12 · 21 min read

                  \ No newline at end of file diff --git a/confidential computing/intel SGX/overview/index.html b/confidential computing/intel SGX/overview/index.html new file mode 100644 index 0000000000..890a783875 --- /dev/null +++ b/confidential computing/intel SGX/overview/index.html @@ -0,0 +1,109 @@ +overview | philip's notes

                  intel SGX - overview

                  2022-02-13 · 12 min read

                  Wikipedia: https://www.wikiwand.com/en/Software_Guard_Extensions

                  They allow user-level as well as operating system code to define private regions of memory, called enclaves, whose contents are protected and unable to be either read or saved by any process outside the enclave itself, including processes running at higher privilege levels

                  Applications running inside of SGX must be written to be side channel resistant as SGX does not protect against side channel measurement or observation.

                  Enclaves cannot use sockets because enclaves rely on the untrusted application that loads the enclave to communicate with external components. Enclaves cannot create independent communication channels to outside entities. This would break their security and trust model. source

                  • Enclave memory cannot be read or written from outside the enclave regardless of the current privilege level and CPU mode.
                  • Production enclaves cannot be debugged by software or hardware debuggers.
                  • The enclave environment cannot be entered through classic function calls, jumps, register manipulation, or stack manipulation. The only way to call an enclave function is through a new instruction that performs several protection checks.
                  • Enclave memory is encrypted using industry-standard encryption algorithms with replay protection. Tapping the memory or connecting the DRAM modules to another system will yield only encrypted data.
                  • The memory encryption key randomly changes every power cycle. The key is stored within the CPU and is not accessible.
                  • Data isolated within enclaves can only be accessed by code that shares the enclave.

                  See also SGX 101

                  • With SGX, your CPU comes with two new 128bit keys: RPK & RSK
                  • RPK: Root Provisioning Key. Known only to Intel.
                  • RSK: Root Sealing Key. Most derived keys based on RSK.
                  • New DRAM key (derived from RSK?) every power cycle.
                  • Remote Attestation is enforced for the client to prove to the service provider that an enclave is running a given software, inside a given CPU, with a given security level, for a given Individual Software Vender (ISV). This is required before the service provider decides to provide requested secrets.
                  • Sealed Storage is required to save secret data to untrusted media. Note that data and code inside enclaves are not secrets. They are just logics that are required to process the secret and most of them are open sourced or can be reverse engineered. Therefore, secrets are provisioned later by the service provider and should be stored out of the enclave through sealing mechanism when necessary (e.g. for future usage).

                  Security Limitations #

                  • Cache timing attacks
                  • Physical attacks. E.g. laser fault injection attacks
                  • Microcode malicious patching
                  • Untrusted I/O
                  • Human element. E.g. trusted development environment
                  • CPU bugs and bugs in dependencies.

                  Application Design #

                  Application design with Intel SGX requires that the application be divided into two components:

                  • Trusted component: This is the enclave. The code that resides in the trusted code is the code that accesses an application’s secrets. An application can have more than one trusted component/enclave.

                  • Untrusted component: This is the rest of the application and any of its modules. It is important to note that, from the standpoint of an enclave, the OS and the VMM are considered untrusted components.

                  • Fairly expensive to communicate back-and-forth (how much?)

                  • ECalls -> call into enclave

                  • OCalls -> call out to untrusted code

                  • proxy generation via EDL (enclave description language)

                  • specialized memory allocator. limitations on stack/heap sizes, threads, etc...

                  • Enclave runs concurrently with the OS. You start the enclave, and it runs in the background until you shut it down again.

                  • Can read/write files O_o (sgx_tprotected_fs)

                  • Need to declare # threads and stack/heap sizes up front.

                  • Video uses lazy_static to save enclave state between ECalls : /

                  Attestation #

                  Pasted image 20220213102656.png

                  Sealing #

                  Sealing is the process of encrypting data so that it can be written to untrusted memory or storage without revealing its contents. The data can be read back in by the enclave at a later date and unsealed (decrypted). The encryption keys are derived internally on demand and are not exposed to the enclave.

                  There are two methods of sealing data:

                  • Enclave Identity: This method produces a key that is unique to this exact enclave.
                  • Sealing Identity: This method produces a key that is based on the identity of the enclave’s Sealing Authority. Multiple enclaves from the same signing authority can derive the same key.

                  Hardware Requirements #

                  • Intel CPU later than 2015+

                  Performance Overhead #

                  calling some max(&[u32]) function inside enclave.

                  source: https://medium.com/@danny_harnik/impressions-of-intel-sgx-performance-22442093595a

                  SGX find_max bench

                  sgx-perf: A Performance Analysis Tool for Intel SGX Enclaves (2018)

                  We measured transition times of ≈5,850 cycles (≈2.1 µs) with a warm cache for one round-trip (see §5 for the experimental settings). In the second case, we measured a transition time of ≈10,170 cycles (≈3.8 µs), ≈1.74× more than without patches. Finally, with all the updates and microcodes to address the Spectre and Foreshadow vulnerabilities enclave transitions became even slower, resulting in a round-trip time of ≈13,100 cycles (≈4.9 µs), ≈ 2.24× more. This further underlines the need to save on enclave transitions.

                  About 20,000 transitions/sec? per thread? overall?

                  In-Enclave Synchronisation: Enclaves can be multi-threaded and therefore need synchronisation primitives. Unfortunately, as sleeping is not possible inside enclaves, the in-enclave synchronisation primitives provided by the SGX SDK implement additional ocalls to sleep outside of the enclave.

                  The SDK offers mutexes that work as follows: if a thread tries to lock an unlocked mutex, then this operation succeeds without needing to leave the enclave. Whenever a thread tries to lock an already locked mutex, it will put itself into a queue and exit the enclave via an ocall to sleep

                  Enclave Paging: Another important factor for enclave performance is enclave size, especially the size of the working set. SGX stores all enclaves inside the EPC which on current implementations has a size of 128 MiB. Of those, 93 MiB are usable.

                  SGXv1 requires pre-declared limits on stack/heap allocations.

                  With SGX v2, this becomes less of a problem, as the enclave can be extended after creation. Therefore, the enclave can be created small and as soon as stack or heap are exhausted, new pages may be added on-demand.

                  Pasted image 20220213112512.png

                  Enclave Signing #

                  https://docs.conclave.net/signing.html

                  Enclaves must be signed. With modern SGX servers you may self-sign your enclaves, but, a signature is still required.

                  Why is signing required? #

                  Signing requirements are a part of the Intel SGX architecture. The enclave signature is used for two different purposes:

                  1. Linking different enclave versions together into an upgrade path, so new enclaves can decrypt data stored by or sent to old enclaves.
                  2. Authorising which enclaves can be executed on a host.

                  Restricting which enclaves can launch on a host ensures that datacenter providers aren't hosting server processes they can't examine (??????) or turn over to law enforcement. It also makes it harder for people to write malware with un-debuggable cores (loooool), and is part of the privacy (anti-tracking) infrastructure in SGX.

                  Using signatures to link binaries into a single upgrade path is the same technique used by Android and iOS to move permissions and stored data from old to new apps.

                  Signing is also used to authorise which enclaves can start. By default Intel chips won't start an enclave unless it's signed by an Intel key, but this behaviour can be changed and on Azure (see "Deploying to Azure") enclaves can be self-signed. If you want to use older hardware getting whitelisted by Intel is free and can be done quickly. It's a similar process to getting an SSL certificate but using different tools.

                  On Xeon E CPUs with Intel FLC support in the chipset, and a recent enough kernel driver, the owner can add their own whitelisting authorities via BIOS/UEFI firmware settings. This means they can replace the default "must be approved by Intel" launch control logic with their own (which may e.g. only allow their own enclaves, or may allow any self-signed enclave).

                  Hosted SGX #

                  Azure #

                  Azure Confidential Compute

                  Pricing (2022/02/18):

                  https://azure.microsoft.com/en-us/pricing/details/virtual-machines/linux/

                  Filters: US East 2 + grep "SGX"

                  DCsv2- and DCdsv3-series

                  The DCsv2-series virtual machines can help protect the confidentiality and integrity of your data and code while it’s processed in the public cloud. These machines are backed by 3.7GHz Intel® Xeon E-2288G (Coffee Lake) with SGX technology. With the Intel® Turbo Boost Technology these machines can go up to 5.0GHz. DC series instances enable customers to build secure enclave-based applications to protect their code and data while it’s in use.

                  DCsv2-series is ideal for workloads that require smaller EPC (Enclave Page Cache) memory.
                  InstanceCoresRAMTemporary Storage$/hr (useast2)$/hr (uswest1)
                  DC1s v214 GiB50 GiB$0.125/hr
                  DC2s v228 GiB100 GiB$0.250/hr
                  ..
                  DC8s v2832 GiB400 GiB$0.998/hr

                  DCsv3- and DCdsv3-series

                  The DCsv3 and DCdsv3-series virtual machines run the 3rd Generation Intel® Xeon Scalable (Ice Lake) processor with hyper-threading disabled for a hardened security posture. These VMs are designed to protect the confidentiality and integrity of your data in the cloud. Featuring Intel® SGX (Software Guard Extensions), customers can create private regions of memory, called enclaves, to protect code and data in use. DCsv3 and DCdsv3-series enables customers to up to 1500X larger enclaves than before.
                  InstanceCoresRAMTemporary Storage$/hr (useast2)$/hr (uswest1)
                  DC1s v318 GiBN/A$0.096/hr$0.125/hr
                  DC2s v3216 GiBN/A$0.192/hr$0.250/hr
                  ..
                  DC48s v348384 GiBN/A$4.608/hr$5.990/hr
                  DC1ds v318 GiB75 GiB$0.113/hr$0.147/hr
                  DC2ds v3216 GiB150 GiB$0.226/hr$0.294/hr
                  ..
                  DC48ds v348384 GiB2400 GiB$5.424/hr$7.051/hr

                  Google Cloud #

                  Google Cloud Confidential Compute

                  Cloud Vendor Support Table #

                  Packet.net, IBM and Alibaba have Bare Metal Instances available that allow the execution of SGX instructions to create secure enclaves in the cloud. See IBM Cloud Bare Metal Instances and Alibaba ECS Bare Metal Instance. If you were able to experiment with SGX in the Cloud, please let us know!

                  Both AWS and Google have CPUs that capable of SGX but the execution is disabled. We discussed that into detail here. According to a Intel forum post.

                  VendorServicenameCPU SGX capableSGX activated in BIOSDateSource
                  AWSEC2 C5 instancesYES, SGX1 and SGX2NO, SGX not activated in BIOSApr 2018Issue 37
                  AzureAzure Confidential Computing Public PreviewYES, SGX1, SGX2YES, SGX1, SGX2Oct 2018Blog
                  GoogleN1 instancesYES, SGX1 and SGX2NO, SGX not activated in BIOSApr 2018Issue 38
                  IBMIBM Cloud Bare Metal InstancesYES, unknown versionYESMay 2018Issue 46
                  packet.netReserved HardwareYES, SGX1YESApr 2018Issue 44
                  Alibaba CloudECS Bare Metal InstanceYES, unknown versionYESSep 2018Docs, Issue 50
                  OVHcloudInfrastructure Dedicated ServersYES, unknown versionYESSep 2019Docs, Issue 66
                  Alibaba CloudECS Security-enhanced family (public preview)YES, SGX2YESJuly 2021Docs

                  Hardware that supports Intel SGX #

                  See: ayeks/SGX-hardware

                  Desktop Hardware SKUs #

                  Marketing NameProcessor#Post-Conversion S-Spec
                  Intel® Corei7-6700KSR2L0
                  Intel® Corei5-6400TSR2L1
                  Intel® Corei7-6700SR2L2
                  Intel® Corei7-6700TSR2L3
                  Intel® Corei5-6600KSR2L4
                  Intel® Corei5-6600SR2L5
                  Intel® Corei5-6500SR2L6
                  Intel® Corei5-6400SR2L7
                  Intel® Corei5-6500TSR2L8
                  Intel® Corei5-6600TSR2L9
                  Intel® Xeon®E3-1280 v5SR2LC
                  Intel® Xeon®E3-1240 v5SR2LD
                  Intel® Xeon®E3-1230 v5SR2LE
                  Intel® Xeon®E3-1270 v5SR2LF
                  Intel® Xeon®E3-1220 v5SR2LG
                  Intel® Xeon®E3-1260L v5SR2LH
                  Intel® Xeon®E3-1225 v5SR2LJ
                  Intel® Xeon®E3-1275 v5SR2LK
                  Intel® Xeon®E3-1245 v5SR2LL
                  Intel® Xeon®E3-1235L v5SR2LM
                  Intel® Xeon®E3-1240L v5SR2LN
                  \ No newline at end of file diff --git a/confidential computing/intel SGX/remote attestation/index.html b/confidential computing/intel SGX/remote attestation/index.html new file mode 100644 index 0000000000..e71477b051 --- /dev/null +++ b/confidential computing/intel SGX/remote attestation/index.html @@ -0,0 +1,203 @@ +remote attestation | philip's notes

                  remote attestation

                  2022-04-12 · 10 min read

                  Goals #

                  1. The point of Remote Attestation is to prove to a remote client:
                    1. Our software is running inside a genuine Intel enclave.
                    2. The enclave is running a fully up-to-date system at the latest security level.
                    3. The software itself is running a specific, developer-defined version, called an ISV SVN.
                    4. The software is signed by a specific authority, called the Signer Measurement (MRSIGNER).
                    5. The software's initial state (code & data) is exactly as we expect, communicated via a cryptographic summary called the Enclave Measurement (MRENCLAVE).
                    6. (Optional) additional data was present and acknowledged by the enclave when it generated the attestation, called the ReportData.
                      • This slot can be used to pass info to the attestation verifier, e.g., enclave application pubkeys, freshness nonces, timestamps.
                      • The size is only 64-bytes, so if you have lots of things to attest to, you'll need to attest to a commitment rather than the data itself
                  2. Once the client decides they can trust the enclave's attestation (according to some configurable policy), they can open a secure channel with the enclave.
                  3. Over the secure channel, the client can issue commands or provision secrets into the enclave. These secrets remain encryped and unintelligible to the outside, untrusted service provider, machine, and OS.

                  Remote attestation procedure in detail #

                  Attesting to another local enclave is easy and efficient.

                  Attesting to a remote client requires a few extra steps:

                  1. The application enclave generates a Report, which includes the various things we want to attest to, described above.
                  2. Ask the local Quoting Enclave (QE) to sign the application enclave's report with its Attestation Key (AK), usually via the Architectural Enclave Service Manager (AESM) API.
                  3. (Optional) The application enclave can verify that the Quote was generated by a trusted Quoting Enclave (QE) on the local machine.
                    • In theory, this step is optional, since the remote attestation verifier should ultimately reject an invalid Quote. However this step can give the enclave itself assurance that it's talking to a legitimate QE.
                    • When requesting a Quote, the application enclave can provide a 16-byte nonce to ensure freshness (preventing replay attacks of old quotes).
                    • From the AESM or Quoting Library, the application enclave should receive a serialized quote and QE Report from their Quote request.
                    • This QE Report is a Report generated by the Quoting Enclave. The application enclave should check that the Quoting Enclave ID in the QE Report is trustworthy.
                    • The application should then check that the QE Report's ReportData field contains the value SHA-256(nonce || quote) || [0; 32].
                    • Finally, the application enclave should check that the Quote actually contains its own Report.
                  4. (EPID-only) This signed report, called a Quote, is sent to the endorsement service Intel Attestation Services (IAS) who will endorse (read: sign with its cert) the report IFF it believes the Quote is valid.
                    • This endorsed Quote is now verifiable by anyone that knows the endorsement service's root CA cert.
                    • The remote Intel-run IAS is the only party that can endorse these EPID Quotes. This makes Intel's service an interactive party in our attestation protocol flow when using EPID Quotes.
                  5. (ECDSA-only) The report is signed by an ECDSA Attestation Key in a Quoting Enclave. The Attestation Key is endorsed by an Attestation Key Cert from the Provisioning Certification Enclave (PCE).

                  Attestation Key Algorithms #

                  There are a two-ish different Attestation Key (TODO link) algorithms that each have different tradeoffs and TCB surface.

                  1. ECDSA P256 or ECDSA P384
                    1. simple, but ids are public and linkable. This is not a problem in data centers or confidential computing scenarios.
                  2. Intel Enhanced Privacy ID (EPID)
                    1. complicated, but ids are private and revocations are efficient.
                    2. significant increased protocol complexity.
                    3. Intel verifier is all attestations.

                  See: sgx_types::sgx_ql_attestation_algorithm_id_t

                  Remote Attestation Quote Verification #

                  To help visualize how the chain-of-trust extends from our Trust Root (the Intel SGX Root CA) to the enclave's attested values (usually a TLS cert pubkey), I've made this helpful diagram.

                  Quickly recapping, the User starts with three trusted objects:

                  1. the Intel SGX Root CA
                  2. the acceptable Quoting Enclave identities, retrieved from the IAS (not depicted)
                  3. the acceptable Application Enclave identities (e.g., MRSIGNER or MRENCLAVE)

                  The Application Enclave usually provides the Quote to the User as part of setting up a secure transport channel. The User wants to verify the Quote to ensure the enclave is running the expected software.

                  This particular diagram shows the ECDSA DCAP-QL Quote structure and how each component commits or signs other sub-components. The flow is somewhat different for EPID-based attestation Quotes.

                  sgx_remote_attestation.png

                  PCK lookup service #

                  Intel DCAP - Provisioning Certificate Caching Service (PCCS)

                  GET platform's Provisioning Certification Key (PCK) certs #

                  The platform is identified by its encrypted Platform Provisioning ID (PPID) and Provisioning Certification Enclave ID (PCE-ID).

                  GET Current Intel Quoting Enclave (QE) and Quote Verification Enclave (QVE) Identities #

                  Query the Intel Trusted Services API for current valid Quoting Enclave (QE) identity.

                  $ curl -v -X GET "https://api.trustedservices.intel.com/sgx/certification/v3/qe/identity"
                  +
                  {
                  +  "enclaveIdentity": {
                  +    "id": "QE",
                  +    "version": 2,
                  +    "issueDate": "2022-04-12T21:57:18Z",
                  +    "nextUpdate": "2022-05-12T21:57:18Z",
                  +    "tcbEvaluationDataNumber": 12,
                  +    "miscselect": "00000000",
                  +    "miscselectMask": "FFFFFFFF",
                  +    "attributes": "11000000000000000000000000000000",
                  +    "attributesMask": "FBFFFFFFFFFFFFFF0000000000000000",
                  +    "mrsigner": "8C4F5775D796503E96137F77C68A829A0056AC8DED70140B081B094490C57BFF",
                  +    "isvprodid": 1,
                  +    "tcbLevels": [
                  +      {
                  +        "tcb": {
                  +          "isvsvn": 6
                  +        },
                  +        "tcbDate": "2021-11-10T00:00:00Z",
                  +        "tcbStatus": "UpToDate"
                  +      },
                  +      {
                  +        "tcb": {
                  +          "isvsvn": 5
                  +        },
                  +        "tcbDate": "2020-11-11T00:00:00Z",
                  +        "tcbStatus": "OutOfDate"
                  +      },
                  +      {
                  +        "tcb": {
                  +          "isvsvn": 4
                  +        },
                  +        "tcbDate": "2019-11-13T00:00:00Z",
                  +        "tcbStatus": "OutOfDate"
                  +      },
                  +      {
                  +        "tcb": {
                  +          "isvsvn": 2
                  +        },
                  +        "tcbDate": "2019-05-15T00:00:00Z",
                  +        "tcbStatus": "OutOfDate"
                  +      },
                  +      {
                  +        "tcb": {
                  +          "isvsvn": 1
                  +        },
                  +        "tcbDate": "2018-08-15T00:00:00Z",
                  +        "tcbStatus": "OutOfDate"
                  +      }
                  +    ]
                  +  },
                  +  "signature": "1750f7e5997a8cb5ba2073f7a4312e43f5771a409e0610b20428dffebe51e53a6eadfb5691045b0819b29754dd6f5cfd20837b0e6f76e2307146dd3deb5203be"
                  +}
                  +

                  Likewise, there's a similar endpoint for looking up the Quote Verification Enclave (QVE) identity:

                  $ curl -v -X GET "https://api.trustedservices.intel.com/sgx/certification/v3/qve/identity"
                  +

                  For both responses, the "signature" field contains a signature over the "enclaveIdentity" body (hex-encoded, no whitespace, very canonical lmao) using the TCB Info Signing Key.

                  Determining if an SGX Enclave identity matches the standard Quoting Enclave Identity #

                  1. Retrieve standard Quoting Enclave Identity from the Intel SGX Provisioning Certification Service (PCS) and verify that it is a valid structure issued by Intel.
                  2. Perform the following comparison of SGX Enclave Report against the retrieved QE Identity:
                    1. Verify if MRSIGNER field retrieved from SGX Enclave Report is equal to the value of mrsigner field in QE Identity.
                    2. Verify if ISVPRODID field retrieved from SGX Enclave Report is equal to the value of isvprodid field in QE Identity.
                    3. Apply miscselectMask (binary mask) from QE Identity to MISCSELECT field retrieved from SGX Enclave Report. Verify if the outcome (miscselectMask & MISCSELECT) is equal to the value of miscselect field in QE Identity.
                    4. Apply attributesMask (binary mask) from QE Identity to ATTRIBUTES field retrieved from SGX Enclave Report. Verify if the outcome (attributesMask & ATTRIBUTES) is equal to the value of attributes field in QE Identity.
                  3. If any of the checks above fail, the identity of the enclave does not match QE Identity published by Intel.
                  4. Determine a TCB status of the Quoting Enclave:
                    1. Retrieve a collection of TCB Levels (sorted by ISVSVNs) from tcbLevels field in QE Identity structure.
                    2. Go over the list of TCB Levels (descending order) and find the one that has ISVSVN that is lower or equal to the ISVSVN value from SGX Enclave Report.
                    3. If a TCB level is found, read its status from tcbStatus field, otherwise your TCB Level is not supported.

                  GET TCB info for a given CPU family/platform #

                  The platform is identified by an FMSPC (Family, Model, Stepping, Platform Type, Customized SKU) hex-encoded 6-byte array.

                  curl -v -X GET "https://api.trustedservices.intel.com/sgx/certification/v3/tcb?fmspc={}"
                  +
                  {
                  +   "tcbInfo":{
                  +	  "version":2,
                  +	  "issueDate":"2019-07-30T12:00:00Z",
                  +	  "nextUpdate":"2019-08-30T12:00:00Z",
                  +	  "fmspc":"000000000000",
                  +	  "pceId":"0000",
                  +	  "tcbType": 0,
                  +	  "tcbEvaluationDataNumber": 2,
                  +	  "tcbLevels":[
                  +		 {
                  +			"tcb":{
                  +			   "sgxtcbcomp01svn":0,
                  +			   "sgxtcbcomp02svn":0,
                  +			   "sgxtcbcomp03svn":0,
                  +			   "sgxtcbcomp04svn":0,
                  +			   "sgxtcbcomp05svn":0,
                  +			   "sgxtcbcomp06svn":0,
                  +			   "sgxtcbcomp07svn":0,
                  +			   "sgxtcbcomp08svn":0,
                  +			   "sgxtcbcomp09svn":0,
                  +			   "sgxtcbcomp10svn":0,
                  +			   "sgxtcbcomp11svn":0,
                  +			   "sgxtcbcomp12svn":0,
                  +			   "sgxtcbcomp13svn":0,
                  +			   "sgxtcbcomp14svn":0,
                  +			   "sgxtcbcomp15svn":0,
                  +			   "sgxtcbcomp16svn":0,
                  +			   "pcesvn":0
                  +			},
                  +			"tcbDate":"2019-07-11T12:00:00Z",
                  +			"tcbStatus": "UpToDate",
                  +			"advisoryIDs": ["INTEL-SA-00079", "INTEL-SA-00076"]
                  +		 }
                  +	  ]
                  +   },
                  +   "signature":"e45785756a06abfabb2eb6481c3b67c8a0729142e10e06e6415948a88e2f2e773bb2ff9f513ec32e4c5afb15883ab653393f8082f69b69ba19a2a21e3eefee7c"
                  +}
                  +

                  Determine the status of a TCB level for a platform #

                  We use this API to verify that a given platform's current TCB is not vulnerable or revoked.

                  1. Retrieve FMSPC value from SGX PCK Certificate assigned to a given platform.
                  2. Retrieve TCB Info matching the FMSPC value.
                  3. Go over the sorted collection of TCB Levels retrieved from TCB Info starting from the first item on the list:
                    1. Compare all of the SGX TCB Comp SVNs retrieved from the SGX PCK Certificate (from 01 to 16) with the corresponding values in the TCB Level. If all SGX TCB Comp SVNs in the certificate are greater or equal to the corresponding values in TCB Level, go to 3.b, otherwise move to the next item on TCB Levels list.
                    2. Compare PCESVN value retrieved from the SGX PCK certificate with the corresponding value in the TCB Level. If it is greater or equal to the value in TCB Level, read status assigned to this TCB level. Otherwise, move to the next item on TCB Levels list.
                  4. If no TCB level matches your SGX PCK Certificate, your TCB Level is not supported.

                  Misc #

                  Intel SGX Services

                  Intel Trusted Services API Developer Dashboard

                  scrtlabs/SecretNetwork/x/registration/remote_attestation

                  scrtlabs/SecretNetwork/cosmwasm/enclaves

                  \ No newline at end of file diff --git a/confidential computing/intel SGX/sealing/index.html b/confidential computing/intel SGX/sealing/index.html new file mode 100644 index 0000000000..a93b4d0537 --- /dev/null +++ b/confidential computing/intel SGX/sealing/index.html @@ -0,0 +1,477 @@ +sealing | philip's notes

                  sealing

                  2022-04-14 · 9 min read

                  Deriving some Key Material #

                  While an enclave is running, the enclave application code has access to the EGETKEY instruction. Enclaves use this to derive Seal Key material.

                  1. Enclave application code calls EREPORT to obtain the CPU SVN and ISV SVN.
                  2. The enclave application prepares a KEYREQUEST struct with appropriate fields.
                    1. The keyname=4, for Seal Key.
                    2. Choose a Key Request Policy.
                    3. Choose a keyid. This should be a hashed Domain Separation Value, like you would input to a normal KDF. Some places also seem to use a random value, which you prepend in plaintext next to the ciphertext? Not sure when that's necessary. Is this also functioning like a nonce or something? Need to investigate...
                  3. User code calls the EGETKEY instruction with the KEYREQUEST.
                  4. The instruction derives key material according to the policy defined by the KEYREQUEST and returns 128-bits key material to the enclave code.
                    1. IF the Keyrequest.ISVSVN > Enclave.ISVSVN or Keyrequest.CPUSVN > Enclave.CPUSVN, THEN the key request fails.

                  You can also view the full EGETKEY flow and some real code in oasis-core that calls EGETKEY.

                  Key Request Policy #

                  The enclave has two options

                  1. The enclave can request a key derived from the Enclave Measurement (MRENCLAVE), which pins a derived key to the exact (1) TCB version, (2) enclave code, and (3) CPU product ID.
                  2. The key can also be derived from the Enclave Signer's Identity, which allows any enclave signed with this identity to derive the same keys. Newer enclave versions can also successfully derive keys created on older versions, but older versions will fail to derive keys created on newer versions. See Preventing Version Downgrade Attacks.

                  Preventing Version Downgrade Attacks #

                  Older versions of an enclave should not be able to derive keys or read sealed data from a newer enclave version. To prevent these downgrading attacks, the KEYREQUEST also contains the current CPU SVN and ISV SVN. The EGETKEY intrinsic will then verify that the keyrequest CPU SVN and ISV SVN are not beyond the current CPU SVN and enclave ISV SVN.

                  Sealing Pattern #

                  Sealed data should effectively include the SGX lingo > KEYREQUEST used to seal the data. When an enclave wants to decrypt some sealed data, it just passes this attached KEYREQUEST to EGETKEY. An enclave should then reseal the data, but with a freshly generated Seal Key. This will ratchet any old secure platform versions forward.

                  Migrating data between enclaves #

                  1. Same platform, same enclave, different instances
                    1. Offline migration is always possible. Both enclaves will simply rederive the same keys.
                  2. Same platform, different enclave versions
                    1. If the enclave has a newer security version for the CPU SVN + ISV SVN and the Keypolicy is set to MRSIGNER
                      1. Then Offline migration is possible. Both enclaves will derive the same keys.
                    2. Otherwise, online migration is necessary.
                  3. Different platform, same or different enclave
                    1. Online migration is necessary.

                  Offline migration #

                  We say offline migration is available when no coordination is required for two enclaves to read each other's sealed data.

                  Online migration #

                  In contrast, online migration requires both enclaves to coordinate. Both enclaves usually need to be online and able to communicate. The enclaves then establish a secure channel using remote attestation and migrate secrets or other unsealed data over the secure channel.

                  Another approach is to delegate key distribution to a shared enclave service. This is what oasis does with their oasis > Key Manager Enclaves. Here compute enclaves store their machine-specific keys with the key manager enclaves, along with a policy for which other enclaves can read the keys. This way enclaves don't need to communicate with or attest each other directly and can instead just query the local key manager enclave.

                  Examples #

                  oasis #

                  See: oasis > Sealing

                  intel/linux-sgx #

                  https://github.com/intel/linux-sgx/blob/26c458905b72e66db7ac1feae04b43461ce1b76f/sdk/tseal/tSeal.cpp

                  extern "C" sgx_status_t sgx_seal_data_ex(
                  +	const uint16_t key_policy,
                  +	const sgx_attributes_t attribute_mask,
                  +	const sgx_misc_select_t misc_mask,
                  +	const uint32_t additional_MACtext_length,
                  +	const uint8_t *p_additional_MACtext,
                  +	const uint32_t text2encrypt_length,
                  +	const uint8_t *p_text2encrypt,
                  +	const uint32_t sealed_data_size,
                  +	sgx_sealed_data_t *p_sealed_data
                  +) {
                  +    sgx_status_t err = SGX_ERROR_UNEXPECTED;
                  +    sgx_key_id_t keyID;
                  +    sgx_key_request_t tmp_key_request;
                  +    uint8_t payload_iv[SGX_SEAL_IV_SIZE];
                  +    memset(&payload_iv, 0, sizeof(payload_iv));
                  +
                  +
                  +    uint32_t sealedDataSize = sgx_calc_sealed_data_size(additional_MACtext_length,text2encrypt_length);
                  +    // Check for overflow
                  +    if (sealedDataSize == UINT32_MAX)
                  +    {
                  +        return SGX_ERROR_INVALID_PARAMETER;
                  +    }
                  +
                  +    //
                  +    // Check parameters
                  +    //
                  +    // check key_request->key_policy:
                  +    //  1. Reserved bits are not set
                  +    //  2. Either MRENCLAVE or MRSIGNER is set
                  +    if ((key_policy & ~(SGX_KEYPOLICY_MRENCLAVE | SGX_KEYPOLICY_MRSIGNER | (KEY_POLICY_KSS) | SGX_KEYPOLICY_NOISVPRODID)) ||
                  +        (key_policy & (SGX_KEYPOLICY_MRENCLAVE | SGX_KEYPOLICY_MRSIGNER)) == 0)
                  +    {
                  +        return SGX_ERROR_INVALID_PARAMETER;
                  +    }
                  +    if ( !(attribute_mask.flags & SGX_FLAGS_INITTED)
                  +      || !(attribute_mask.flags & SGX_FLAGS_DEBUG) )
                  +    {
                  +        return SGX_ERROR_INVALID_PARAMETER;
                  +    }
                  +    if ((additional_MACtext_length > 0) && (p_additional_MACtext == NULL))
                  +    {
                  +        return SGX_ERROR_INVALID_PARAMETER;
                  +    }
                  +    if ((text2encrypt_length == 0) || (p_text2encrypt == NULL) || (!sgx_is_within_enclave(p_text2encrypt,text2encrypt_length)))
                  +    {
                  +        return SGX_ERROR_INVALID_PARAMETER;
                  +    }
                  +    // Ensure sealed data blob is within an enclave during the sealing process
                  +    if ((p_sealed_data == NULL) || (!sgx_is_within_enclave(p_sealed_data,sealed_data_size)))
                  +    {
                  +        return SGX_ERROR_INVALID_PARAMETER;
                  +    }
                  +    // Ensure aad data does not cross enclave boundary
                  +    if ((additional_MACtext_length > 0) &&
                  +        (!(sgx_is_within_enclave(p_additional_MACtext,additional_MACtext_length) || sgx_is_outside_enclave(p_additional_MACtext, additional_MACtext_length))))
                  +    {
                  +        return SGX_ERROR_INVALID_PARAMETER;
                  +    }
                  +    if (sealedDataSize != sealed_data_size)
                  +    {
                  +        return SGX_ERROR_INVALID_PARAMETER;
                  +    }
                  +    memset(p_sealed_data, 0, sealedDataSize);
                  +    memset(&keyID, 0, sizeof(sgx_key_id_t));
                  +    memset(&tmp_key_request, 0, sizeof(sgx_key_request_t));
                  +
                  +    // Get the report to obtain isv_svn and cpu_svn
                  +    const sgx_report_t *report = sgx_self_report();
                  +
                  +    // Get a random number to populate the key_id of the key_request
                  +    err = sgx_read_rand(reinterpret_cast<uint8_t *>(&keyID), sizeof(sgx_key_id_t));
                  +    if (err != SGX_SUCCESS)
                  +    {
                  +        goto clear_return;
                  +    }
                  +
                  +    memcpy(&(tmp_key_request.cpu_svn), &(report->body.cpu_svn), sizeof(sgx_cpu_svn_t));
                  +    memcpy(&(tmp_key_request.isv_svn), &(report->body.isv_svn), sizeof(sgx_isv_svn_t));
                  +    tmp_key_request.config_svn = report->body.config_svn;
                  +    tmp_key_request.key_name = SGX_KEYSELECT_SEAL;
                  +    tmp_key_request.key_policy = key_policy;
                  +    tmp_key_request.attribute_mask.flags = attribute_mask.flags;
                  +    tmp_key_request.attribute_mask.xfrm = attribute_mask.xfrm;
                  +    memcpy(&(tmp_key_request.key_id), &keyID, sizeof(sgx_key_id_t));
                  +    tmp_key_request.misc_mask = misc_mask;
                  +
                  +    err = random_stack_advance<0x400>(sgx_seal_data_iv, additional_MACtext_length, p_additional_MACtext,
                  +        text2encrypt_length, p_text2encrypt, payload_iv, &tmp_key_request, p_sealed_data);
                  +
                  +    if (err == SGX_SUCCESS)
                  +    {
                  +        // Copy data from the temporary key request buffer to the sealed data blob
                  +        memcpy(&(p_sealed_data->key_request), &tmp_key_request, sizeof(sgx_key_request_t));
                  +    }
                  +clear_return:
                  +    // Clear temp state
                  +    memset_s(&keyID, sizeof(sgx_key_id_t), 0, sizeof(sgx_key_id_t));
                  +    return err;
                  +}
                  +

                  openenclave #

                  https://github.com/openenclave/openenclave/blob/master/enclave/core/seal.c#L93

                  
                  +oe_result_t oe_seal(
                  +    const oe_uuid_t* plugin_id,
                  +    const oe_seal_setting_t* settings,
                  +    size_t settings_count,
                  +    const uint8_t* plaintext,
                  +    size_t plaintext_size,
                  +    const uint8_t* additional_data,
                  +    size_t additional_data_size,
                  +    uint8_t** blob,
                  +    size_t* blob_size)
                  +{
                  +    oe_result_t result;
                  +    const oe_seal_plugin_definition_t* plugin;
                  +    size_t i;
                  +
                  +    if (blob == NULL || blob_size == NULL)
                  +        return OE_INVALID_PARAMETER;
                  +
                  +    *blob = NULL;
                  +    *blob_size = 0;
                  +
                  +    if ((settings == NULL) != (settings_count == 0) ||
                  +        !oe_is_within_enclave(settings, settings_count * sizeof(*settings)) ||
                  +        (plaintext == NULL) != (plaintext_size == 0) ||
                  +        !oe_is_within_enclave(plaintext, plaintext_size) ||
                  +        (additional_data == NULL) != (additional_data_size == 0) ||
                  +        ((additional_data != NULL) &&
                  +         !oe_is_within_enclave(additional_data, additional_data_size)))
                  +        return OE_INVALID_PARAMETER;
                  +
                  +    for (i = 0; i < settings_count; ++i)
                  +    {
                  +        if (settings[i].type < 0 || settings[i].type >= OE_SEAL_SETTING_MAX)
                  +            return OE_INVALID_PARAMETER;
                  +        if (settings[i].size > 0 &&
                  +            !oe_is_within_enclave(settings[i].value.p, settings[i].size))
                  +            return OE_INVALID_PARAMETER;
                  +    }
                  +
                  +    if (oe_mutex_lock(&_plugins_lock) != OE_OK)
                  +        return OE_UNEXPECTED;
                  +
                  +    plugin = _find_plugin(plugin_id);
                  +    if (plugin == NULL)
                  +        OE_RAISE(OE_NOT_FOUND);
                  +
                  +    result = plugin->seal(
                  +        settings,
                  +        settings_count,
                  +        plaintext,
                  +        plaintext_size,
                  +        additional_data,
                  +        additional_data_size,
                  +        blob,
                  +        blob_size);
                  +
                  +done:
                  +    oe_mutex_unlock(&_plugins_lock);
                  +    return result;
                  +}
                  +

                  https://github.com/openenclave/openenclave/blob/master/include/openenclave/bits/sgx/sgxtypes.h#L1073

                  /* Enclave MISCSELECT Flags Bit Masks, additional information to an SSA frame */
                  +/* If set, then the enclave page fault and general protection exception are
                  + * reported */
                  +#define SGX_MISC_FLAGS_PF_GP_EXIT_INFO 0x0000000000000001ULL
                  +
                  +/* Enclave Flags Bit Masks */
                  +/* If set, then the enclave is initialized */
                  +#define SGX_FLAGS_INITTED 0x0000000000000001ULL
                  +/* If set, then the enclave is debug */
                  +#define SGX_FLAGS_DEBUG 0x0000000000000002ULL
                  +/* If set, then the enclave is 64 bit */
                  +#define SGX_FLAGS_MODE64BIT 0x0000000000000004ULL
                  +/* If set, then the enclave has access to provision key */
                  +#define SGX_FLAGS_PROVISION_KEY 0x0000000000000010ULL
                  +/* If set, then the enclave has access to EINITTOKEN key */
                  +#define SGX_FLAGS_EINITTOKEN_KEY 0x0000000000000020ULL
                  +#define SGX_FLAGS_RESERVED                                         \
                  +    (~(SGX_FLAGS_INITTED | SGX_FLAGS_DEBUG | SGX_FLAGS_MODE64BIT | \
                  +       SGX_FLAGS_PROVISION_KEY | SGX_FLAGS_EINITTOKEN_KEY))
                  +
                  +/* Set the bits which have no security implications to 0 for sealed data
                  + migration */
                  +/* Bits which have no security implications in attributes.flags:
                  + *    Reserved bit[55:6]  - 0xFFFFFFFFFFFFC0ULL
                  + *    SGX_FLAGS_MODE64BIT
                  + *    SGX_FLAGS_PROVISION_KEY
                  + *    SGX_FLAGS_EINITTOKEN_KEY */
                  +#define SGX_FLAGS_NON_SECURITY_BITS                                        \
                  +    (0xFFFFFFFFFFFFC0ULL | SGX_FLAGS_MODE64BIT | SGX_FLAGS_PROVISION_KEY | \
                  +     SGX_FLAGS_EINITTOKEN_KEY)
                  +
                  +/* bit[27:0]: have no security implications */
                  +#define SGX_MISC_NON_SECURITY_BITS 0x0FFFFFFFU
                  +
                  +/* OE seal key default flag masks*/
                  +#define OE_SEALKEY_DEFAULT_FLAGSMASK (~SGX_FLAGS_NON_SECURITY_BITS)
                  +#define OE_SEALKEY_DEFAULT_MISCMASK (~SGX_MISC_NON_SECURITY_BITS)
                  +#define OE_SEALKEY_DEFAULT_XFRMMASK (0X0ULL)
                  +

                  https://github.com/openenclave/openenclave/blob/master/enclave/sealing/sgx/seal_gcmaes.c

                  static oe_result_t _init_key_request(sgx_key_request_t* keyrequest)
                  +{
                  +    sgx_report_t report = {{{0}}};
                  +
                  +    oe_result_t result = OE_OK;
                  +
                  +    OE_CHECK(
                  +        oe_memset_s(keyrequest, sizeof(*keyrequest), 0, sizeof(*keyrequest)));
                  +
                  +    OE_CHECK(sgx_create_report(NULL, 0, NULL, 0, &report));
                  +    OE_CHECK(oe_memcpy_s(
                  +        &keyrequest->cpu_svn,
                  +        sizeof(keyrequest->cpu_svn),
                  +        &report.body.cpusvn,
                  +        sizeof(report.body.cpusvn)));
                  +
                  +    keyrequest->key_name = SGX_KEYSELECT_SEAL;
                  +    keyrequest->key_policy = SGX_KEYPOLICY_MRSIGNER;
                  +    keyrequest->isv_svn = report.body.isvsvn;
                  +    keyrequest->attribute_mask.flags = OE_SEALKEY_DEFAULT_FLAGSMASK;
                  +    keyrequest->attribute_mask.xfrm = OE_SEALKEY_DEFAULT_XFRMMASK;
                  +    keyrequest->misc_attribute_mask = OE_SEALKEY_DEFAULT_MISCMASK;
                  +
                  +done:
                  +    return result;
                  +}
                  +
                  +static oe_result_t _seal(
                  +    const oe_seal_setting_t* settings,
                  +    size_t settings_count,
                  +    const uint8_t* plaintext,
                  +    size_t plaintext_size,
                  +    const uint8_t* additional_data,
                  +    size_t additional_data_size,
                  +    uint8_t** blob,
                  +    size_t* blob_size)
                  +{
                  +    oe_result_t result = OE_OK;
                  +    struct _sealed_blob_header* header;
                  +    uint8_t* key = NULL;
                  +    size_t size;
                  +    oe_entropy_kind_t kind;
                  +    size_t i;
                  +
                  +    size = sizeof(*header);
                  +    if (plaintext_size > OE_UINT32_MAX - size)
                  +        return OE_INTEGER_OVERFLOW;
                  +    size += plaintext_size;
                  +    if (additional_data_size > OE_UINT32_MAX - size)
                  +        return OE_INTEGER_OVERFLOW;
                  +    // Please note that blob will NOT include additional_data
                  +
                  +    *blob_size = size;
                  +    *blob = (uint8_t*)oe_calloc(1, size);
                  +    if (*blob == NULL)
                  +        return OE_OUT_OF_MEMORY;
                  +
                  +    header = (struct _sealed_blob_header*)*blob;
                  +    OE_CHECK(_init_key_request(&header->keyrequest));
                  +    OE_CHECK(oe_get_entropy(
                  +        header->keyrequest.key_id, sizeof(header->keyrequest.key_id), &kind));
                  +    header->ciphertext_size = (uint32_t)plaintext_size;
                  +    header->total_size = (uint32_t)(plaintext_size + additional_data_size);
                  +    OE_CHECK(oe_get_entropy(header->iv, sizeof(header->iv), &kind));
                  +
                  +    for (i = 0; i < settings_count; ++i)
                  +        switch (settings[i].type)
                  +        {
                  +            case OE_SEAL_SETTING_POLICY:
                  +                switch (settings[i].value.w)
                  +                {
                  +                    case OE_SEAL_POLICY_UNIQUE:
                  +                        header->keyrequest.key_policy = SGX_KEYPOLICY_MRENCLAVE;
                  +                        break;
                  +                    case OE_SEAL_POLICY_PRODUCT:
                  +                        header->keyrequest.key_policy = SGX_KEYPOLICY_MRSIGNER;
                  +                        break;
                  +                    default:
                  +                        OE_RAISE(OE_INVALID_PARAMETER);
                  +                }
                  +                break;
                  +
                  +            case OE_SEAL_SETTING_IV:
                  +                if (settings[i].size != sizeof(header->iv))
                  +                    OE_RAISE(OE_INVALID_PARAMETER);
                  +                else
                  +                    OE_CHECK(oe_memcpy_s(
                  +                        header->iv,
                  +                        sizeof(header->iv),
                  +                        settings[i].value.p,
                  +                        settings[i].size));
                  +                break;
                  +
                  +            case OE_SEAL_SETTING_SGX_KEYNAME:
                  +                header->keyrequest.key_name = settings[i].value.w;
                  +                break;
                  +
                  +            case OE_SEAL_SETTING_SGX_ISVSVN:
                  +                header->keyrequest.isv_svn = settings[i].value.w;
                  +                break;
                  +
                  +            case OE_SEAL_SETTING_SGX_CPUSVN:
                  +                if (settings[i].size != sizeof(header->keyrequest.cpu_svn))
                  +                    OE_RAISE(OE_INVALID_PARAMETER);
                  +                OE_CHECK(oe_memcpy_s(
                  +                    header->keyrequest.cpu_svn,
                  +                    sizeof(header->keyrequest.cpu_svn),
                  +                    settings[i].value.p,
                  +                    settings[i].size));
                  +                break;
                  +
                  +            case OE_SEAL_SETTING_SGX_FLAGSMASK:
                  +                header->keyrequest.attribute_mask.flags = settings[i].value.q;
                  +                break;
                  +
                  +            case OE_SEAL_SETTING_SGX_XFRMMASK:
                  +                header->keyrequest.attribute_mask.xfrm = settings[i].value.q;
                  +                break;
                  +
                  +            case OE_SEAL_SETTING_SGX_MISCMASK:
                  +                header->keyrequest.misc_attribute_mask = settings[i].value.d;
                  +                break;
                  +
                  +            case OE_SEAL_SETTING_SGX_CONFIGSVN:
                  +                header->keyrequest.config_svn = settings[i].value.w;
                  +                break;
                  +
                  +            case OE_SEAL_SETTING_ADDITIONAL_CONTEXT:
                  +                // Custom OE_SEAL_SETTING_ADDITIONAL_CONTEXT not supported
                  +
                  +            case OE_SEAL_SETTING_SGX_CET_ATTRIBUTES_MASK:
                  +                // OE_SEAL_SETTING_SGX_CET_ATTRIBUTES_MASK not supported
                  +
                  +            default:
                  +                OE_RAISE(OE_UNSUPPORTED);
                  +        }
                  +
                  +    OE_CHECK(oe_get_seal_key(
                  +        (uint8_t*)&header->keyrequest,
                  +        sizeof(header->keyrequest),
                  +        &key,
                  +        &size));
                  +
                  +    OE_STATIC_ASSERT(sizeof(header->tag) >= 16);
                  +    OE_CHECK(oe_aes_gcm_encrypt(
                  +        key,
                  +        size,
                  +        header->iv,
                  +        sizeof(header->iv),
                  +        additional_data,
                  +        additional_data_size,
                  +        plaintext,
                  +        plaintext_size,
                  +        (uint8_t*)(header + 1),
                  +        plaintext_size,
                  +        header->tag));
                  +
                  +done:
                  +    oe_free_key(key, size, NULL, 0);
                  +
                  +    if (result != OE_OK)
                  +    {
                  +        oe_free(*blob);
                  +        *blob = NULL;
                  +    }
                  +
                  +    return result;
                  +}
                  +
                  \ No newline at end of file diff --git a/confidential computing/intel SGX/secure time/index.html b/confidential computing/intel SGX/secure time/index.html new file mode 100644 index 0000000000..86bcf1998b --- /dev/null +++ b/confidential computing/intel SGX/secure time/index.html @@ -0,0 +1,109 @@ +secure time | philip's notes

                  secure time

                  2022-04-21 · 4 min read

                  Time in an enclave is difficult.

                  Why do we care about time in an enclave? #

                  1. Knowing the time lets us detect replay attacks on sealed persistent data.
                  2. We need the current time to decide whether a certificate/OCSP response/DNSSEC reply is stale or expired.
                  3. With the current time, we can tell whether a PoW blockchain header is stale or recent.
                  4. Various protocols rely on accurate clocks for security, e.g., DNSSEC, Kerberos, TLS, WireGuard.

                  Why is this problem so hard? #

                  • We can't rely on standard OS time services, since they can be modified by the host and must sit outside our TCB.
                  • CPU instructions that query an on-die Real-time Clock (RTC) are likewise untrustworthy.
                  • Intel's Platform Services Enclave (PSE) provides an interface to the Intel Management Engine's (IME) RTC, which is isolated from the host OS. Unfortunately, this is more trustworthy but still only provides you with a relative time. We want the absolute time.

                  What do we do about it? #

                  Requirements #

                  1. We want absolute time, so we can communicate with others outside our own machine.
                  2. The true time, as observed by other enclaves on the machine, should be strictly increasing.
                  3. The platform operator is outside our TCB. They should not be able to make the true time go backwards.
                  4. We are not secure against DoS by the platform operator. This doesn't significantly change our threat model however, since they can just turn off the machine. : )
                  5. Minimize the startup latency of other enclaves by doing the bootstrap once in a shared enclave.

                  Approach #

                  Shared Time-keeper Enclave #

                  Use a shared enclave that keeps track of time on the same machine. Other local enclaves can query the Time-keeper for the current true time.

                  The Time-keeper uses a combination of a remote, semi-trusted time service, and a local, trusted relative clock provided by the Intel ME and Platform Services Enclave (PSE) to keep track of the true time.

                  • The connection to the remote time service needs to be secure against the platform operator. We probably use NTP with NTS to some small, fixed set of NTP servers (that support NTS).
                  • On startup, we use the local insecure time to bootstrap our secure connection to the remote time service.
                    • We need the initial insecure time measurement so we can complete the TLS handshake.
                    • We could also attempt to bootstrap more securely with roughtime.
                    • Since platform operator DoS is out-of-scope, a bad initial insecure time is effectively the same as a DoS, since we'll just reject the server's TLS cert.
                  • We then use our secure channel to the remote time service to fix our trusted clock base.
                  • We then use the local, trusted relative clock to track the time since the clock base.
                  • Since the relative clock only provides second granularity, we use an intra-epoch counter stored in-memory that gets incremented after each request.
                    • On startup, we need to make sure we wait until the next second for the previous epoch to fully elapse.
                  • Depending on requirements, refresh the base time by re-bootstrapping from the remote time source to reduce clock-skew. This refresh could happen every hour or so.
                  • Other enclaves can request the current time from the time-keeper. The request should include a nonce for freshness/replay-prevention. The request should be (at least) MAC'd with a shared symmetric key derived via EGETKEY with the same key_id.
                  \ No newline at end of file diff --git a/confidential computing/intel TDX/index.html b/confidential computing/intel TDX/index.html new file mode 100644 index 0000000000..fb82bc400f --- /dev/null +++ b/confidential computing/intel TDX/index.html @@ -0,0 +1,91 @@ +intel TDX | philip's notes

                  intel TDX

                  2022-02-17 · 2 min read

                  Intel TDX is designed to isolate virtual machines from the VMM/hypervisor and other non-VMM system software on the platform. TDX is also able to protect the VMs from some forms of hardware attacks

                  Intel Trust Domain Extensions (Intel TDX) is introducing new, architectural elements to help deploy hardware-isolated, virtual machines (VMs) called trust domains (TDs). Intel TDX is designed to isolate VMs from the virtual-machine manager (VMM)/hypervisor and any other non-TD software on the platform to protect TDs from a broad range of software. source

                  • Secure-Arbitration Mode (SEAM) – a new mode of the CPU designed to host an Intel-provided, digitally-signed, security-services module called the Intel TDX module.

                  • Shared bit in GPA to help allow TD to access shared memory.

                  • Secure EPT to help translate private GPA to provide address-translation integrity and to prevent TD-code fetches from shared memory. Encryption and integrity protection of private-memory access using a TD-private key is the goal.

                  • Physical-address-metadata table (PAMT) to help track page allocation, page initialization, and TLB consistency.

                  • Multi-key, total-memory-encryption (MKTME) engine designed to provide memory encryption using AES-128- XTS and integrity using 28-bit MAC and a TD-ownership bit.

                  • Remote attestation designed to provide evidence of TD executing on a genuine, Intel TDX system and its TCB version.

                  • It looks like you basically run a linux kernel on the host machine, then linux (which now supports TDX) can run these VM isolates (just like containers I guess, but with privacy and isolation).

                  Roadmap Status (2021/09/24) #

                  itemstatus
                  linux firmware loaderWIP
                  KVM TDUnder Review
                  KVM MMUUnder Review
                  KVM unmappingUnder discussion
                  QEMU guest BIOSUnder Review
                  QEMU cpuidWIP
                  QEMU guest attestationWIP
                  QEMU unmappingUnder discussion
                  \ No newline at end of file diff --git a/confidential computing/marblerun/index.html b/confidential computing/marblerun/index.html new file mode 100644 index 0000000000..64323fc94f --- /dev/null +++ b/confidential computing/marblerun/index.html @@ -0,0 +1,98 @@ +marblerun | philip's notes

                  marblerun

                  2022-03-29 · 3 min read

                  Github: https://github.com/edgelesssys/marblerun

                  Docs: https://docs.edgeless.systems/marblerun/#/

                  • MarbleRun is a #confidential-computing aware service mesh for kubernetes
                  • Coordinator
                    • the control plane
                    • communicates w/ data plane via gRPC
                    • exposes REST interface to clients
                    • clients are
                      • owners/providers/admins who need to deploy applications and admin
                      • users/customers who do remote attestation w/ Coordinator
                  • Marbles
                    • the data plane
                    • run your application code in secure enclaves
                  // coordinator-era.json
                  +{
                  +	"SecurityVersion": 1,
                  +	"ProductID": 3,
                  +	"SignerID": "43361affedeb75affee9baec7e054a5e14883213e5a121b67d74a0e12e9d2b7a",
                  +	"Debug": true
                  +}
                  +

                  EGo & Marblerun Talk #

                  Video: EGo & Marblerun - Moritz Eckert - OC3 2021

                  • EGo

                    • Mostly transparently wraps existing Go code to run inside enclave
                    • Built on openenclave (provides the low-level interface and compatibility layer)
                    • Fairly lightweight? Contains only Application Code, Go Runtime, and small OpenEnclave layer.
                  • Challenges deploying Go enclaves on k8s

                    • top-level DevOps user
                      • don't really care whether we're running one big service or many microservices (?)
                      • just want one big attestation of the whole cluster, rather than doing individual attestations with each service.
                    • services
                      • packaged as k8s pods
                      • services want to communicate with each other / share data
                      • service 2 service communication needs attestations so service enclaves can securely communicate w/ each other.
                    • secrets distribution
                      • ex: web frontend instances all need to share same cert
                      • secret distribution must happen via secure channels between enclaves
                    • sealing and persistence
                      • pod migration (pod gets shutdown and migrated to other host) is difficult w/ enclaves
                      • enclave's sealing key is unique to each enclave. data encryted with enclave's sealing key can only be decrypted by that enclave.
                      • "virtual" sealing key, so this is somehow abstracted and data not bound to one node
                    • secure connections
                      • all connections b/w enclaves must be through secure mTLS connections terminated inside enclaves
                    • code updates
                      • how to ship new enclave code and have other outside enclaves recognize this
                  • Why do existing service meshes not work?

                    • Threat model only considers network-bound adversaries
                    • Threat model considers hosts & cloud provider to be trusted third parties.
                    • TLS is only terminated at service mesh sidecar proxies
                    • Secrets handled in unsecured memory on-node
                    • Not SGX aware, no remote attestations
                  • Marblerun

                    • extends enclave concept to entire cluster
                    • E2E Confidentiality, Integrity, Verifiability
                    • Updatable, Cloud-native
                    • Integrates w/ k8s and existing service meshes like
                      • { Consul, Linkerd, Istio (Envoy) }
                    • Supports EGo, Gramine (experimental), and Occlum (experimental) runtimes.
                    • cloud agnostic
                  • DevOps

                    • Provides Manifest (JSON) which describes cluster?
                    • doesn't need to worry too much about CC
                    • can use existing tooling
                    • don't need to change too much code
                  • User

                    • Asks marblerun control plane for attestation w/ Quote, Cert, and Manifest
                    • can verify everything in one step
                      • everything runs in enclaves
                      • everything always encrypted
                      • cluster topology
                      • cluster identities
                  \ No newline at end of file diff --git a/confidential computing/mystikos/index.html b/confidential computing/mystikos/index.html new file mode 100644 index 0000000000..0af91f389f --- /dev/null +++ b/confidential computing/mystikos/index.html @@ -0,0 +1,91 @@ +mystikos | philip's notes

                  mystikos

                  2022-03-26 · 1 min read

                  Github: https://github.com/deislabs/mystikos Site: ??? Related: gramine

                  Mystikos is a #libOS kernel / libc-injected runtime for running Linux software in SGX.

                  • Goal: lift-n-shift existing application with little or no modification into enclave.
                  • Goal: target multiple enclave types
                  • Built by team inside Azure

                  Architecture #

                  • C-runtime based on musl, but also glibc-compatible.
                  • a #libOS like micro-kernel
                  • Linux kernel target interface (TCALL)
                  • CLI and other related utils

                  Current available targets:

                  1. SGX (via Open Enclave SDK)
                  2. Linux (for simulation and testing on non-SGX hardware)

                  Examples #

                  \ No newline at end of file diff --git a/confidential computing/remote attestation protocols/index.html b/confidential computing/remote attestation protocols/index.html new file mode 100644 index 0000000000..5bfca1954c --- /dev/null +++ b/confidential computing/remote attestation protocols/index.html @@ -0,0 +1,91 @@ +remote attestation protocols | philip's notes

                  remote attestation protocols

                  2022-05-15 · 8 min read

                  See also: intel SGX > remote attestation

                  Related slides: CCC-Attestation/meetings - Discussion Wrap up

                  Goals #

                  • An application running inside a Trusted Execution Environment (TEE) proves various assertions about itself to a remote party.
                  • These assertions might include claims like
                    1. a summary of the application code running in the TEE, e.g., an SGX Enclave Measurement (MRENCLAVE)
                    2. the Enclave Signer Identity (MRSIGNER)
                    3. the current TCB status (up-to-date or insecure)
                  • At the end of the attestation protocol, we should have a bidirectional secure channel established between both endpoints. We might use this channel to provision secrets, issue commands, etc...

                  Protocol Tradeoffs #

                  Quote Generation and Verification Frequency #

                  How often does the enclave need to generate a new quote?

                  Quote Generation #

                  1. Once per connection
                  2. Once on enclave startup

                  Quote Verification #

                  1. Once per connection.
                  2. Amortize Quote verification so client only has to do it once.

                  RTTs to Useful Payload #

                  How many RTTs until the client can send useful application payloads?

                  1. 1 RTT
                    • Normal TLS
                    • Embedded Quote TLS
                  2. 2 RTT (extra application layer handshake step)
                    • TLS EKM Session Binding

                  Safety #

                  • Is the protocol safe by default?
                  • How brittle/fail-safe is the protocol implementation?

                  Support for Client Authentication/Attestation #

                  • Can an enclave act as the client and present a Quote to the Server?
                  • Can two enclaves on the same machine efficiently verify each other's Reports?
                  • If built on TLS, can we do mutual-auth TLS (mTLS)?

                  Confidentiality vs Support Middleware #

                  • Most of the protocols terminate the secure channel inside the enclaves, which is by far the safest option, but means we have to forgo application-aware load balancers and reverse proxies, which have become standard in most cloud/kubernetes deployments.
                  • The Attestation in HTTP Headers HTTPA protocol presents an alternative, where the secure channel is moved up to the HTTP layer. The TLS session can be terminated at the service provider edge and existing middleware load balancers and reverse proxies can operate as normal on the unprotected parts of the HTTP request.

                  Invasiveness #

                  Different attestation protocols operate at different levels of the transport protocol stack and require varying changes to existing transport protocols. Invasiveness is a qualitative statement about the changes to existing libraries needed before a new client language can be supported.

                  As an upper bound, changing the TCP protocol handshake would be incredibly invasive and would likely require maintaining Linux kernel patches or running a custom user-space TCP stack. Supporting locked down platforms like Android or iOS would be... challenging to say the least.

                  In contrast, a hypothetical lower bound would probably be a default TLS config (i.e., no custom verifiers, no self-signed certs, default global CA set), since that would be supported "out-of-the-box" on every major platform.

                  TLS Configs by Invasiveness and Availability #

                  If you don't control the client libraries connecting to the enclaves, it's important to stay on the TLS happy path. Different platforms and client libraries allow configuring TLS to varying levels. Staying on the happy path is important for ease-of-implementation and time-to-market. TLS configurations in order from most to least easy/available:

                  1. default configuration (available everywhere)
                    • This means the enclave needs a cert rooted at a global CA, e.g., Let's Encrypt.
                  2. custom root CA cert (available everywhere, slightly more complicated)
                    • The client pins a specific root CA cert for this connection.
                    • The root CA cert is probably provisioned into the enclave out-of-band or provisioned with one of the other bespoke attestation protocols. Ideally, you can keep the provisioning step out of the steady-state client path or do it only once.
                  3. export keying material (rare availability, if exists then only application layer changes)
                  4. custom cert verifier, custom cert extensions (ok availability, dangerous and large engineering effort)
                  5. modified TLS implementation (completely bespoke, requires standardization)

                  For a decent overview of lowest common denominator TLS configurations, see the Rust reqwest::ClientBuilder API. Take note of which APIs are supported on which TLS feature flags.

                  Protocols #

                  TLS Embed Quote in Self-signed Certificate #

                  TLS Exported Keying Material Session Binding #

                  Client and Server open a standard TLS connection, then derive a secret from the TLS session shared secret. The Client then requests a Quote from the Server. The Quote must bind to the derived shared secret or the Client will reject it. Once the Client verifies the Quote, you have a secure channel.

                  Delegate Quote Verification and Mint an X509 Cert for Enclave #

                  Attest CA Provisioning Enclave #

                  TODO

                  • Fortanix
                  • Oasis (sort of)

                  Attestation in HTTP Headers (HTTPA) #

                  Most modern services are horizontally scaled and run behind a series of load balancers, reverse proxies, and TLS termination endpoints. These middleware services usually terminate TLS at the provider's edge and then inspect or operate on the HTTP request/response to route traffic, cache responses, check user authentication/authorization, track metrics, attach tracing info, etc, etc...

                  The other protocols described in this note will terminate the TLS session inside the destination enclave service. The security model is definitely clearest when terminating at the destination; however, we also lose out on all the functionality provided by these middlewares and must replicate or otherwise go without them in the enclave service.

                  In contrast, this proposal runs an attestation protocol over HTTPS in a standard TLS session, which can be terminated normally at the edge. Both parties effectively do a key exchange over HTTP headers. Once negotiated, parts of subsequent HTTP requests can be protected via the shared secrets. The middlewares can continue to operate on the unprotected parts of the HTTP request as normal.

                  Enclave Key Exchange Protocol (EKEP) #

                  A modified version of Google's internal mutual-auth secure transport protocol (ALTS). Like a stripped down TLS handshake over gRPC.

                  TLS CBOR Web Token (CWT) certs with Entity Attestation Token (EAT) #

                  Normal TLS implementations usually exchange X509 certs. Some even support raw pubkey-only key exchange (no cert). This protocol proposes a new CWT cert format, along with an Entity Attestation Token (EAT) format inside the CWT cert.

                  Requires deeply invasive changes to TLS client libraries, who almost always assume X509 certs. Very far off the happy path IMO.

                  \ No newline at end of file diff --git a/crypto/(talk) authenticated data structures for stateless validation/index.html b/crypto/(talk) authenticated data structures for stateless validation/index.html new file mode 100644 index 0000000000..04568844a7 --- /dev/null +++ b/crypto/(talk) authenticated data structures for stateless validation/index.html @@ -0,0 +1,91 @@ +(talk) authenticated data structures for stateless validation | philip's notes

                  (talk) authenticated data structures for stateless validation

                  2022-08-11 · 2 min read

                    Video: https://www.youtube.com/watch?v=TuZiEb_SLx0 Author: https://alinush.github.io/papers.html

                    why #

                    1. Merkle Trees can't do some things efficiently
                      • Succinctness
                      • Proof and digest updates
                      • Proof aggregation
                    2. These are needed in new applications
                      • Transparency logs (e.g., x509 Certificate Transparency)
                      • Stateless validation (e.g., sharded eth, eth light clients)
                    3. These things are possible with new techniques
                      • Polynomial commitments
                      • Hidden-order groups (e.g. RSA)

                    cert transparency #

                    example #

                    • CA gets compromised and issues bad cert for high-value domain like google.com.

                    • Instead of preventing the problem (basically impossible), just detect bad CAs and remove them from browser/OS trust roots after the fact (when they're detected).

                    • Client gets an extra CT inclusion proof alongside normal cert chain. Client only accepts cert if it's included in a global transparency log.

                    • Services (e.g., google.com) also then monitor the global transparency logs for their certs.

                    • Transparency logs return complete inclusion proof (i.e., proves google.com certs returned is complete and not missing any).

                    • If service finds a bad cert, maybe one they didn't request, then they can ban the bad CA from the browser/CA trust roots.

                    • existing merkle accumulator can't easily guarantee completeness b/c the certs are appended in chronological order. log auditors then have to download the entire tree to check for bad certs.

                    • new bilinear accumulator and RSA-based accumulator allow for both lookup proof and append-only proof size in log n

                    • caveat: slightly worse append time and bilinear accum has many public params

                    • these more sophisticated accumulators (bilinear or RSA) allow for O(1) disjointness and subset proofs.

                    • perf: append-only proof: 7 KB, lookup proof: 40-120 KB, reduce communication: 10x-100x

                    • perf: 1 append/sec :0

                    • future work: confident we can go from $4 \lambda$ to $2 \lambda$ to $\log n$ tree depth

                    \ No newline at end of file diff --git a/crypto/TLS self-signed pubkey-only certs/index.html b/crypto/TLS self-signed pubkey-only certs/index.html new file mode 100644 index 0000000000..645867a9d8 --- /dev/null +++ b/crypto/TLS self-signed pubkey-only certs/index.html @@ -0,0 +1,145 @@ +TLS self-signed pubkey-only certs | philip's notes

                    mTLS self-signed pubkey-only certs

                    2022-04-06 · 2 min read

                    mysten-infra/rccheck

                    Assuming you already have PKI set up to distribute pubkeys everywhere, this crate allows you to

                    1. easily generate valid self-signed certs from a keypair.
                    2. server and client verifiers that check whether the peer pubkey is as we expect.

                    Just like our old NoiseIX handshake code (which was simpler IMO : ))

                    // rccheck/src/ed25519_certgen.rs
                    +
                    +fn gen_certificate(
                    +    subject_names: impl Into<Vec<String>>,
                    +    key_pair: (&[u8], &'static SignatureAlgorithm),
                    +) -> Result<rustls::Certificate, anyhow::Error> {
                    +    let kp = KeyPair::from_der_and_sign_algo(key_pair.0, key_pair.1)?;
                    +
                    +    let mut cert_params = CertificateParams::new(subject_names);
                    +    cert_params.key_pair = Some(kp);
                    +    cert_params.distinguished_name = rcgen::DistinguishedName::new();
                    +    cert_params.alg = key_pair.1;
                    +
                    +    let cert = rcgen::Certificate::from_params(cert_params).expect(
                    +        "unreachable! from_params should only fail if the key is incompatible with params.algo",
                    +    );
                    +    let cert_bytes = cert.serialize_der()?; // <- also signs
                    +    Ok(rustls::Certificate(cert_bytes))
                    +}
                    +

                    simple Rust library to gen x509 certs #

                    est31/rcgen

                    // rcgen/lib.rs
                    +impl CertificateParams {
                    +
                    +	// ..
                    +
                    +	fn serialize_der_with_signer<K: PublicKeyData>(&self, pub_key: &K, ca :&Certificate) -> Result<Vec<u8>, RcgenError> {
                    +		yasna::try_construct_der(|writer| {
                    +			writer.write_sequence(|writer| {
                    +
                    +				let tbs_cert_list_serialized = yasna::try_construct_der(|writer| {
                    +					self.write_cert(writer, pub_key, ca)?;
                    +					Ok::<(), RcgenError>(())
                    +				})?;
                    +				// Write tbsCertList
                    +				writer.next().write_der(&tbs_cert_list_serialized);
                    +
                    +				// Write signatureAlgorithm
                    +				ca.params.alg.write_alg_ident(writer.next());
                    +
                    +				// Write signature
                    +				ca.key_pair.sign(&tbs_cert_list_serialized, writer.next())?;
                    +
                    +				Ok(())
                    +			})
                    +		})
                    +	}
                    +
                    +	// ..
                    +}
                    +
                    \ No newline at end of file diff --git a/crypto/acme protocol/index.html b/crypto/acme protocol/index.html new file mode 100644 index 0000000000..23d115d595 --- /dev/null +++ b/crypto/acme protocol/index.html @@ -0,0 +1,135 @@ +acme protocol | philip's notes

                    acme protocol

                    2022-08-19 · 4 min read

                    A protocol for automated provisioning of web PKI certificates (certs bound to public domains, endorsed by a web root CA like Let's Encrypt).

                    why #

                    Before ACME, web service operators had to manually update their web certs. This error prone and time-consuming process meant that many sites either:

                    1. Didn't use HTTPS at all, significantly reducing security.
                    2. Used multi-year long cert expirations, increasing the danger when a cert was compromised.
                    3. Forgot to renew their certs when they expired, leading to outages.

                    ACME automates and simplifies the process of procuring and renewing web certs so everyone can enjoy HTTPS!

                    Since the process is fully automated, web services can autonomously renew their web certs without operator intervention, allowing significantly shorter cert expiration times (think weeks/months not years).

                    ACME is becoming a de-facto requirement as browser vendors reduce the maximum allowable cert expiration time to only a few months.

                    registration #

                    Before requesting any certs, a client needs to register an account <keypair> at the CA.

                    1. Client generates an account <keypair> for their account at the CA.
                    2. Client makes register request to CA containing <pubkey> of <keypair>.
                    3. CA responds with proof-of-ownership of <keypair> challenge, which includes a <nonce>.
                    4. Client responds with <nonce> signed using <keypair>.

                    For more details, see

                    ordering / renewing cert #

                    • In order to automate web PKI certificate issuance, CAs need clients to prove ownership over a domain name before they're willing to issue a new child cert for the client.
                    • These certs are called Domain Validated (DV) certs, since the CA just validates domain ownership before issuing the cert.

                    At a high level, the cert ordering process looks like:

                    1. Client sends certificate order request for <domain>. The order status is now pending.
                    2. CA responds with a random <token> as a proof-of-ownership challenge for <domain>. Client must bind <token> to <domain> using one of the challenge protocols.
                    3. Client sends to the CA which of the different challenge types it wishes to prove.
                    4. Client and CA perform the challenge protocol. If success, the client's cert order status will transition to ready.
                    5. Client sends a signed Certificate Signing Request (CSR) to the CA in order to finalize the order. The CSR is signed using the account <keypair> registered earlier.

                    http-01 challenge #

                    1. Client listens on http port 80. Public DNS should resolve the <domain> to the client's webserver.
                    2. Client's webserver should respond with <token>.<jwk-thumbprint> for a GET http://<domain>/.well-known/acme-challenge/<token> request.
                      • TODO: what is the <jwk-thumbprint> precisely?
                    3. Out-of-band, the CA requests the <token> from the client's URL and verifies that it matches the token it originally requested.

                    dns-01 challenge #

                    TODO

                    tls-alpn-01 challenge #

                    TODO

                    registration in detail #

                    A client creates an account at the ACME server by first requesting a new <nonce>:

                    HEAD /acme/new-nonce HTTP/1.1
                    +Host: example.com
                    +

                    The server returns a response containing a Replay-Nonce header containing the <nonce>:

                    HTTP/1.1 200 OK
                    +Replay-Nonce: oFvnlFP1wIhRlYS2jTaXbA
                    +Cache-Control: no-store
                    +Link: <https://example.com/acme/directory>;rel="index"
                    +

                    Next, the client sends a JSON POST request to /acme/new-account.

                    • protected contains a base64url-encoded JWK describing the client's account <pubkey>.
                    • All the fields in the payload field are optional.
                    POST /acme/new-account HTTP/1.1
                    +Host: example.com
                    +Content-Type: application/jose+json
                    +
                    +{
                    + "protected": base64url({
                    +   "alg": "ES256",
                    +   "jwk": {...},
                    +   "nonce": "6S8IqOGY7eL2lsGoTZYifg",
                    +   "url": "https://example.com/acme/new-account"
                    + }),
                    + "payload": base64url({
                    +   "termsOfServiceAgreed": true,
                    +   "contact": [
                    +	 "mailto:cert-admin@example.org",
                    +	 "mailto:admin@example.org"
                    +   ],
                    +   "onlyReturnExisting": false,
                    +   "externalAccountBinding": {},
                    + }),
                    + "signature": "RZPOnYoPs1PhjszF...-nh6X1qtOFPB519I"
                    +}
                    +

                    If successful, the ACME server returns something like the following HTTP response:

                    HTTP/1.1 201 Created
                    +Content-Type: application/json
                    +Replay-Nonce: D8s4D2mLs8Vn-goWuPQeKA
                    +Link: <https://example.com/acme/directory>;rel="index"
                    +Location: https://example.com/acme/acct/evOfKhNU60wg
                    +
                    +{
                    + "status": "valid",
                    +
                    + "contact": [
                    +   "mailto:cert-admin@example.org",
                    +   "mailto:admin@example.org"
                    + ],
                    +
                    + "orders": "https://example.com/acme/acct/evOfKhNU60wg/orders"
                    +}
                    +
                    \ No newline at end of file diff --git a/crypto/biscuit authz/index.html b/crypto/biscuit authz/index.html new file mode 100644 index 0000000000..43d9081366 --- /dev/null +++ b/crypto/biscuit authz/index.html @@ -0,0 +1,91 @@ +biscuit authz | philip's notes

                    biscuit authz

                    2022-08-23 · 2 min read

                      Biscuit is an authorization token with decentralized verification, offline attenuation and strong security policy enforcement based on a logic language

                      overview #

                      • Tokens are signed with a root ed25519 keypair.
                      • Any service/client/user that knows the root pubkey can verify the token.
                      • Tokens can be "attenuated" (reduce rights/permissions) offline, without re-auth. See: how attenuation works.
                      • Authorization policies are written in a Datalog-like language.
                      • Tokens naturally support capability-based auth, role-based auth (RBAC), ACLs, etc... with Datalog.
                      • Tokens have content-based revocation id that can be used to revoke tokens.
                      • Implemented in Rust, Haskell, Go, Java, Wasm, C

                      how attenuation works #

                      • Attenuating a token is adding a new block with reduced permissions.
                      • Note: tokens can be "sealed" to prevent further attenuation.
                      • In an "unsealed" token, the last "proof" block in a sequence actually contains a private key (bound by the public key placed in the prev. block, plus the previous block's signature).
                      • Adding a new attentuation block is just removing the "proof" block (containing the private key) and replacing it with a fresh block. You then sign the fresh block with the private key you just removed.

                      Pretty pictures:

                      The initial token

                      • Fig. (1) The initial token. This one is just a single top-level "authority" block, signed and issued by the root key authority.

                      The attenuated token

                      • Fig. (2) The attenuated token. Notice how private key 1 is no longer present in the token; instead, it was removed and used to sign the next block. This token is still unsealed, so there is now private key 2 available for further attenuation.
                      \ No newline at end of file diff --git a/crypto/dex - open-source OIDC & OAuth 2.0 provider/index.html b/crypto/dex - open-source OIDC & OAuth 2.0 provider/index.html new file mode 100644 index 0000000000..2de0c01601 --- /dev/null +++ b/crypto/dex - open-source OIDC & OAuth 2.0 provider/index.html @@ -0,0 +1,97 @@ +dex - open-source OIDC & OAuth 2.0 provider | philip's notes

                      dex - open-source OIDC & OAuth 2.0 provider

                      2023-07-19 · 1 min read

                        OpenID Connect (OIDC) identity and OAuth 2.0 provider with pluggable connectors.

                        Dex acts as a portal to other identity providers through "connectors." This lets dex defer authentication to LDAP servers, SAML providers, or established identity providers like GitHub, Google, and Active Directory. Clients write their authentication logic once to talk to dex, then dex handles the protocols for a given backend.

                        \ No newline at end of file diff --git a/crypto/hkdf-sha256/index.html b/crypto/hkdf-sha256/index.html new file mode 100644 index 0000000000..f86835e493 --- /dev/null +++ b/crypto/hkdf-sha256/index.html @@ -0,0 +1,355 @@ +hkdf-sha256 | philip's notes

                        hkdf-sha256

                        2022-11-18 · 7 min read

                        • HKDF: HMAC-based Key Derivation Function.
                        • We'll use a specific hash function (SHA-256) for simplified analysis. You can use any cryptographic hash function, but some constants will need to change to accomodate the different digest block size.
                        • Why this page: I keep forgetting perf-relevant details like ideal salt / IKM sizes, or HKDF salt/PRK caching. Seeing all the details laid out flat, with strong types, makes this all clear. As an example, you can save 60-70% on key derivation time if you reuse the intermediate derived Prk when deriving multiple secrets from one common input secret.

                        usage #

                        // SALT is usually a static, constant value used for domain
                        +// separation.
                        +//
                        +// Using a unique salt for your application improves the security
                        +// bounds on the HKDF. Intuitively, you get a unique PRF just for
                        +// your application, rather than a shared PRF used by all the other
                        +// default-config'ed users of HKDF-SHA256.
                        +//
                        +// A constant salt is useful for performance since we can
                        +// pre-compute the salted `hkdf::Salt` state.
                        +//
                        +// I also like to pre-hash the salt, since it guarantees the value
                        +// is shorter than the hmac `2 * sha256::BLOCKSIZE` key size
                        +// threshold, which mandates an extra hash if exceeded. If your
                        +// language supports it, you can even compute this at compile time.
                        +let salt: &[u8] = sha256::digest(b"MY-DOMAIN-SEPARATION-VALUE");
                        +
                        +// IKM is the input secret
                        +let ikm: &[u8] = b"MY-SECRET-KEY-MATERIAL";
                        +// For most cases, think of `infos` as a unqiue label for the
                        +// child-secret. You can also bind higher-level application data
                        +// like negotiated protocol versions or public keys or other
                        +// session-specific data here.
                        +let infos: &[&[u8]] = &[b"file key"];
                        +// The length of the output secret. Note that there is a maximum
                        +// output length of `255 * BLOCKSIZE` bytes.
                        +let output_secret_len: usize = 32;
                        +
                        +// If you just need to derive a few child secrets, just use the
                        +// one-line convenience method:
                        +let secret = hkdf::derive(salt, ikm, infos, output_secret_len);
                        +
                        +// Otherwise, at a minimum, consider caching or pre-computing the
                        +// salted HKDF(s) used in your application.
                        +//
                        +// You can then reuse the salted_hkdf multiple times, even with
                        +// different root secrets (IKMs).
                        +let salted_hkdf = hkdf::Salt::new(salt);
                        +let secret1 = salted_hkdf
                        +	.extract(ikm1)
                        +	.expand(infos, secret_len);
                        +let secret2 = salted_hkdf
                        +	.extract(ikm2)
                        +	.expand(infos, secret_len);
                        +
                        +// If you use a single input key/secret to derive many child
                        +// secrets, reuse the extracted PRK instead of rederiving it each
                        +// time:
                        +let prk = salted_hkdf.extract(ikm);
                        +let secret1 = prk.expand(&[b"file key"] /* infos */, secret_len);
                        +let secret2 = prk.expand(&[b"noise key"] /* infos */, secret_len);
                        +

                        definitions #

                        SHA256 #

                        mod sha256 {
                        +	const BLOCK_SIZE: usize = 32;
                        +	const INTERNAL_BLOCK_SIZE: usize = 64;
                        +
                        +	/// A finalized SHA-256 hash digest. 32 bytes. 256 bits.
                        +	struct Hash([u8; BLOCK_SIZE]);
                        +
                        +	/// An intermediate SHA-256 digest state.
                        +	struct Context { /* .. */ }
                        +
                        +	impl Context {
                        +		fn new() -> Self { /* .. */ }
                        +		fn update(&mut input: &[u8]) { /* .. */ }
                        +		fn finish(self) -> sha256::Hash;
                        +	}
                        +
                        +	/// A convenience function to easily digest many inputs in
                        +	/// one line.
                        +	fn digest(inputs: &[&[u8]]) -> sha256::Hash {
                        +		let mut ctx = sha256::Context::new();
                        +		for input in inputs {
                        +			ctx.update(input);
                        +		}
                        +		ctx.finish()
                        +	}
                        +}
                        +

                        HMAC-SHA256 #

                        mod hmac {
                        +	/// A keyed HMAC PRF. Normally this would be used to compute
                        +	/// MAC tags for message authentication, but HKDFs use this
                        +	/// a bit differently.
                        +	struct Context {
                        +		// IPAD := [0x36; 32]
                        +		// inner(x) := H(K xor IPAD || x)
                        +		inner: sha256::Context,
                        +		// OPAD := [0x5c; 32]
                        +		// outer(x) := H(K xor OPAD || x)
                        +		outer: sha256::Context,
                        +	}
                        +
                        +	impl Context {
                        +		/// Create a new keyed HMAC context for digesting multiple
                        +		/// inputs.
                        +		fn new(key: &[u8]) -> Self {
                        +			// Keys longer than the internal block size (64 bytes)
                        +			// must be pre-hashed to make them smaller.
                        +			let key_hash: sha256::Hash;
                        +			let key = if key.len() > 64 {
                        +				key_hash = sha256::digest(&[key]);
                        +				key_hash.0.as_slice()
                        +			} else {
                        +				key
                        +			};
                        +
                        +			// zero-pad key to the internal block size (64 bytes).
                        +			let mut padded_key = [0u8; 64];
                        +			padded_key[..key.len()].copy_from_slice(key);
                        +
                        +			// ikey := [ key_i ^ 0x36 ]_{i in 0..64}
                        +			let mut ikey = [0x36_u8; 64];
                        +			for (ikey_i, key_i) in ikey.iter_mut().zip(&padded_key) {
                        +				*ikey_i ^= key_i;
                        +			}
                        +
                        +			// okey := [ key_i ^ 0x5c ]_{i in 0..64}
                        +			let mut okey = [0x5c_u8; 64];
                        +			for (okey_i, key_i) in okey.iter_mut().zip(&padded_key) {
                        +				*okey_i ^= key_i;
                        +			}
                        +
                        +			let mut hmac_key = Self {
                        +				inner: sha256::Context::new(),
                        +				outer: sha256::Context::new(),
                        +			};
                        +
                        +			hmac_key.inner.update(&ikey);
                        +			hmac_key.outer.update(&okey);
                        +			hmac_key
                        +		}
                        +
                        +		fn update(&mut self, input: &[u8]) {
                        +			self.inner.update(input);
                        +		}
                        +
                        +		fn finish(mut self) -> sha256::Hash {
                        +			let inner_output = self.inner.finish();
                        +			self.outer.update(&inner_output);
                        +			self.outer.finish()
                        +		}
                        +	}
                        +
                        +	/// A convenience function for easily HMAC'ing multiple
                        +	/// inputs in one line.
                        +	fn digest(key: &[u8], inputs: &[&[u8]]) -> sha256::Hash {
                        +		let mut ctx = hmac::Context::new(key);
                        +		for input in inputs {
                        +			ctx.update(input);
                        +		}
                        +		ctx.sign()
                        +	}
                        +}
                        +
                        • Useful perf tips:
                          • You can avoid an extra Hash(key) when doing an HMAC so long as the key is no longer than the internal hash block size (e.g., 64 bytes for SHA-256).
                          • If a key is fixed for multiple HMAC invocations, you can compute the hmac::Context once and reuse it for multiple hmac::Context::sign's, avoiding at least 2 hashes and some padding+XORs.

                        HKDF-SHA256 #

                        • Extract a PRK (Pseudo-Random Key) from IKM (input key material) and domain separator (called salt).
                        • Expand a PRK and label or context into secrets of varying sizes.
                        mod hkdf {
                        +	/// A domain-separated (salted) HKDF context ready to expand
                        +	/// into an `hkdf::Prk` using some IKM (Input Key Material).
                        +	///
                        +	/// `Salt` is (relatively) expensive to construct, so it's
                        +	/// good to compute once and reuse.
                        +	///
                        +	/// `Salt` contains an `hmac::Context`, domain-separated by
                        +	/// `salt_value`.
                        +	///
                        +	/// `Salt.0 := HMAC(salt_value, ___)`
                        +	struct Salt(hmac::Context);
                        +
                        +	impl Salt {
                        +		fn new(salt_value: &[u8]) -> Self {
                        +			Self(hmac::Context::new(salt_value))
                        +		}
                        +
                        +		/// HKDF-extract a new PRK (keyed HMAC context) from some
                        +		/// IKM (Input Key Material).
                        +		fn extract(&self, ikm: &[u8]) -> hkdf::Prk {
                        +			let mut salt_ctx = self.0.clone();
                        +			salt_ctx.update(ikm);
                        +			let prk = salt_ctx.finish().0;
                        +			hkdf::Prk(hmac::Context::new(&prk))
                        +		}
                        +	}
                        +
                        +	/// A domain-separated and "extracted" Pseudo-Random Key
                        +	/// ready to now "expand" into many different child secrets
                        +	/// of varying lengths.
                        +	///
                        +	/// `Prk` is (relatively) expensive to construct, so it's
                        +	/// good to compute once and reuse.
                        +	///
                        +	/// `PRK.0 := HMAC(HMAC(salt, ikm), ___)`
                        +	struct Prk(hmac::Context);
                        +
                        +	impl Prk {
                        +		/// HKDF-expand a new secret of `out_len` bytes from a
                        +		/// `Prk`, using `infos` for domain separation or
                        +		/// application specific context.
                        +		///
                        +		/// For example, from a single root secret, you might
                        +		/// derive many subkeys simply by using different `infos`
                        +		/// labels, like "cert key" or "sealing key" or "btc key
                        +		/// 54".
                        +		///
                        +		/// HKDF-SHA256 has a max output secret limit of
                        +		/// `255 * 32 == 8160` bytes.
                        +		fn expand(&self, infos: &[&[u8]], out_len: usize) -> Vec<u8> {
                        +			// N is the number of sha256-block-sized blocks we need
                        +			// to derive in order to cover the desired output length
                        +			// `out_len`.
                        +			//
                        +			// N := ceil(out_len / sha256::BLOCK_SIZE)
                        +			//   := (out_len.saturating_sub(1) / sha256::BLOCK_SIZE) + 1
                        +			let n = (out_len.saturating_sub(1) / 32) + 1;
                        +			let n = u8::try_from(n).expect("out_len is too large");
                        +
                        +			// T      := T(1) || T(2) || .. || T(N)
                        +			// T(0)   := b"" (empty byte string)
                        +			// T(i) := hmac::digest(prk, T(i-1) || infos || [ i ])
                        +
                        +			let mut out = Vec::with_capacity(len);
                        +			// T(i-1)
                        +			let mut t_im1 = [0u8; 32];
                        +
                        +			for i in 1..=n {
                        +				// T(i) := hmac::digest(prk, T(i-1) || infos || [ i ])
                        +				let mut t_i = {
                        +					let mut ctx = self.0.clone();
                        +					if i != 1 {
                        +						ctx.update(&t_im1);
                        +					}
                        +					for info in infos {
                        +						ctx.update(info);
                        +					}
                        +					ctx.update(&[i]);
                        +					ctx.finish().0
                        +				};
                        +				t_im1 = t_i;
                        +
                        +				if i < n {
                        +					out.extend_from_slice(&t_i[..]);
                        +				} else {
                        +					// the last block will need to be truncated if
                        +					// `out_len` isn't a multiple of the block size.
                        +					let l = 32 - (((n as usize) * 32) - out_len);
                        +					out.extend_from_slice(&t_i[..l]);
                        +				}
                        +			}
                        +
                        +			out
                        +		}
                        +	}
                        +
                        +	/// A convenience function to derive a secret of size `out_len`
                        +	/// from `ikm` (Input Key Material)
                        +	fn derive(
                        +		salt: &[u8],
                        +		ikm: &[u8],
                        +		infos: &[&[u8]],
                        +		out_len: usize,
                        +	) -> Vec<u8> {
                        +		let salt = hkdf::Salt::new(salt);
                        +		let prk = salt.extract(ikm);
                        +		prk.expand(infos, out_len)
                        +	}
                        +}
                        +
                        • Useful perf tips:
                          • The salted HKDF function can be cached. If you find yourself deriving secrets from multiple different IKMs, this trick may be useful.
                          • The extracted PRK can be cached. If you find yourself deriving many different secrets from one root secret, this trick may be useful. I've found this trick in particular can save between 60-70% on key derivation time.

                        RFCs #

                        \ No newline at end of file diff --git a/crypto/index.html b/crypto/index.html new file mode 100644 index 0000000000..0ec11ff20d --- /dev/null +++ b/crypto/index.html @@ -0,0 +1,73 @@ +crypto | philip's notes

                        crypto

                        acme protocol →

                        2022-08-19 · 4 min read

                        biscuit authz →

                        2022-08-23 · 2 min read

                        hkdf-sha256 →

                        2022-11-18 · 7 min read

                        tls exported keying material →

                        2022-08-19 · 1 min read

                        zkdocs →

                        2022-05-06 · 1 min read

                        \ No newline at end of file diff --git a/crypto/smallstep - private online CA & ACME server/index.html b/crypto/smallstep - private online CA & ACME server/index.html new file mode 100644 index 0000000000..e954bbe073 --- /dev/null +++ b/crypto/smallstep - private online CA & ACME server/index.html @@ -0,0 +1,94 @@ +smallstep - private online CA & ACME server | philip's notes

                        smallstep - private online CA & ACME server

                        2023-07-19 · 1 min read

                        A private certificate authority (X.509 & SSH) & ACME server for secure automated certificate management, so you can use TLS everywhere & SSO for SSH.

                        \ No newline at end of file diff --git a/crypto/tls exported keying material/index.html b/crypto/tls exported keying material/index.html new file mode 100644 index 0000000000..477ce30dca --- /dev/null +++ b/crypto/tls exported keying material/index.html @@ -0,0 +1,104 @@ +tls exported keying material | philip's notes

                        tls exported keying material

                        2022-08-19 · 1 min read

                        RFC 5705 - Keying Material Exporters for TLS

                        what #

                        Exposes a KDF on the TLS connection shared secret that the client and server agreed upon.

                        API #

                        rustls::Connection::export_keying_material

                        impl Connection {
                        +    /// Derives key material from the agreed connection secrets.
                        +    ///
                        +    /// This function fills in `output` with `output.len()` bytes of
                        +    /// key material derived from the master session secret using
                        +    /// `label` and `context` for diversification.
                        +    pub fn export_keying_material(
                        +        &self,
                        +        output: &mut [u8],
                        +        label: &[u8],
                        +        context: Option<&[u8]>,
                        +    ) -> Result<(), Error>;
                        +}
                        +
                        \ No newline at end of file diff --git a/crypto/zkdocs/index.html b/crypto/zkdocs/index.html new file mode 100644 index 0000000000..f17c43ebb0 --- /dev/null +++ b/crypto/zkdocs/index.html @@ -0,0 +1,91 @@ +zkdocs | philip's notes

                        zkdocs

                        2022-05-06 · 1 min read

                        ZKDocs provides comprehensive, detailed, and interactive documentation on zero-knowledge proof systems and related primitives.

                        \ No newline at end of file diff --git a/design/form design/index.html b/design/form design/index.html new file mode 100644 index 0000000000..e853784562 --- /dev/null +++ b/design/form design/index.html @@ -0,0 +1,91 @@ +form design | philip's notes

                        form design

                        2022-02-22 · 4 min read

                          Video: You Suck at Form Design

                          10 Commandments of Form Design #

                          1. Align form elements.
                          2. Place labels above inputs. Avoid labels to the left of inputs.
                          3. Input labels must stand out.
                          4. Focused input must stand out.
                          5. Hard labels rather than placeholders.
                          6. Errors should go next to exact input.
                          7. Invalid input fields must stand out.
                          8. Cramped forms look bad. Use effective whitespace.
                          9. Avoid wordiness. Move extra info to hovers/dropdowns/etc...
                          10. Keep num. fields manageable. Either multi-step or group if too many.

                          Examples #

                          Alignment #

                          Before:

                          1. The form inputs are not aligned with the heading.
                          2. The form labels are to the left, which makes people's eyes zig-zag.

                          Pasted image 20220222190514.png

                          After:

                          Pasted image 20220222190807.png

                          Clear Input Fields #

                          Before:

                          1. The single colored underline is not enough to show that this is an input field. People might mistake them for page breaks.

                          Pasted image 20220222190924.png

                          After:

                          A subtle background color helps to make form inputs stand out.

                          Pasted image 20220222191023.png

                          Clear Input Focus #

                          Before:

                          1. The currently focused input field does not give any indication that the user is inputting into it.

                          Pasted image 20220222191145.png

                          After:

                          Add a highlight, underline, background color, etc... to show that this field is focused.

                          Pasted image 20220222191240.png

                          Use separate labels #

                          Before:

                          1. This input relies on the placeholder to show what the input is for. However, the user might walk away and come back, or just forget what the field is for. Without a separate label that stays untouched, the user can get lost.

                          Pasted image 20220222191432.png

                          After:

                          Pasted image 20220222191747.png

                          Put placeholders outside inputs #

                          Before:

                          1. When the user clicks on the input, the placeholder disappears. If the placeholder is conveying any useful information about e.g. formatting, then just put the placeholder outside the input so the user can always see it.

                          Pasted image 20220222192006.png

                          After:

                          Pasted image 20220222192042.png

                          Errors go next to inputs #

                          Before:

                          1. All the errors are just dumped at the top or bottom.
                          2. It's not clear which fields need to be changed.

                          Pasted image 20220222192112.png

                          After:

                          1. Ensure each error message is as close to the source as possible.
                          2. Ensure the problem fields are properly highlighted red so the user can quickly identify which fields need to change.

                          Pasted image 20220222192216.png

                          Minimize words. Move help to hovers/dropdowns. #

                          Before:

                          1. Lots of words / explanation / supplemental info below the First Name field.

                          Pasted image 20220222192708.png

                          After:

                          1. Move supplemental info into a hover text or pull-out thing so the actual form is clear.

                          Pasted image 20220222192840.png

                          Use effective whitespace #

                          Before:

                          1. Inputs and labels are too cramped. Looks awful.

                          Pasted image 20220222193025.png

                          After:

                          1. Just a little bit more whitespace makes things much nicer.

                          Pasted image 20220222193102.png

                          Avoid intimidating number of fields #

                          Before:

                          1. Too many fields at once can be intimidating. Users will just give up and go elsewhere.

                          Pasted image 20220222193243.png

                          After (1):

                          1. One option is to split the form into separate steps, so each step looks manageable.

                          Pasted image 20220222193326.png

                          After (2):

                          1. Another option is to use some whitespace to group different inputs.

                          Pasted image 20220222193443.png

                          \ No newline at end of file diff --git a/design/index.html b/design/index.html new file mode 100644 index 0000000000..ab7baa547e --- /dev/null +++ b/design/index.html @@ -0,0 +1,73 @@ +design | philip's notes

                          design

                          form design →

                          2022-02-22 · 4 min read

                          \ No newline at end of file diff --git a/devops/AKS - azure kubernetes service/index.html b/devops/AKS - azure kubernetes service/index.html new file mode 100644 index 0000000000..9ef4e9cd60 --- /dev/null +++ b/devops/AKS - azure kubernetes service/index.html @@ -0,0 +1,94 @@ +AKS - azure kubernetes service | philip's notes

                          AKS - azure kubernetes service

                          2022-03-25 · 1 min read

                          • Azure hosts master nodes.
                          • Azure provides convenient hooks into other Azure hosted services like metrics & log aggregators, VPC, auth & ACLs, load balancers, persistent volumes, etc...
                          • Kubernetes overhead is FREE (minus network bandwidth) since Azure hosts master nodes. You can also pay more for better uptime SLAs.
                          \ No newline at end of file diff --git a/devops/algo wireguard VPN server/index.html b/devops/algo wireguard VPN server/index.html new file mode 100644 index 0000000000..67d9684207 --- /dev/null +++ b/devops/algo wireguard VPN server/index.html @@ -0,0 +1,121 @@ +algo wireguard VPN server | philip's notes

                          algo wireguard VPN server

                          2020-11-26 · 2 min read

                            Setup #

                            1. Create DigitalOcean Account https://m.do.co/c/75caca4c0b8e

                            2. Create new DigitalOcean API key.

                              • API > Personal Access Tokens > Generate New Token.
                              • Name: trailofbits/algo, Read: Y, Write: Y.
                              • Make sure to save the value somewhere since it'll disappear after leaving the page.
                            3. Clone trailofbits/algo

                            $ git clone https://github.com/trailofbits/algo.git
                            +$ cd algo
                            +$ git checkout -b 20201126 ebec20ed3
                            +
                            1. Install algo python deps
                            $ python3 -m pip install --user --upgrade virtualenv
                            +$ python3 -m virtualenv --python="$(command -v python3)" .env
                            +$ source .env/bin/activate
                            +$ python3 -m pip install -U pip virtualenv
                            +$ python3 -m pip install -r requirements.txt
                            +
                            1. Setup algo/config.cfg

                              • Add some users [phlipphone, phliptop, phlipdesk, ...].
                              • Disable IPSEC.
                              • Enable unattended_reboot.
                            2. Deploy

                              • Cloud Provider: DigitalOcean
                              • Name: wg
                              • Cellular On Demand: N
                              • Wifi On Demand: N
                              • DNS adblocking: y
                              • SSH tunneling: N
                              • Enter DigitalOcean API Key.
                              • Region: SFO2
                            3. SSH into the droplet

                            $ ssh -F configs/178.128.1.190/ssh_config wg
                            +
                            1. (Optional) Install the DigitalOcean metrics agent
                            # curl --proto '=https' --tlsv1.2 -sSf https://repos.insights.digitalocean.com/install.sh | sudo bash
                            +
                            1. (Optional) Set up DNS forwarding. Add nameserver (NS) records in domain registrar pointing to digitalocean nameservers.

                            Ex: In registrar, under domain (phlip9.com), add NS records for VPN's subdomain (wg.phlip9.com):

                            Type    Name    Value                   TTL
                            +NS      wg      ns1.digitalocean.com    1 Hour
                            +NS      wg      ns2.digitalocean.com    1 Hour
                            +NS      wg      ns3.digitalocean.com    1 Hour
                            +

                            Verify records have updated (may take a minute):

                            $ dig NS +nocmd +nocomments wg.phlip9.com
                            +
                            +;wg.phlip9.com.                 IN      NS
                            +wg.phlip9.com.          1452    IN      NS      ns1.digitalocean.com.
                            +wg.phlip9.com.          1452    IN      NS      ns3.digitalocean.com.
                            +wg.phlip9.com.          1452    IN      NS      ns2.digitalocean.com.
                            +

                            In DigitalOcean, go to Create > Domains/DNS. Enter Domain: wg.phlip9.com. Add Domain. Create New Record: type: A, hostname: @, will direct to: droplet, ttl: 3600. Create New Record: type: AAAA, hostname: @, will direct to: droplet, ttl: 3600.

                            Verify records have updated:

                            $ dig A +nocmd +nocomments wg.phlip9.com
                            +
                            +;wg.phlip9.com.                 IN      A
                            +wg.phlip9.com.          3600    IN      A       178.128.1.190
                            +
                            +$ dig AAAA +nocmd +nocomments wg.phlip9.com
                            +
                            +;wg.phlip9.com.                 IN      AAAA
                            +wg.phlip9.com.          3600    IN      AAAA    2604:a880:2:d0::21d0:e001
                            +

                            Adding New Users #

                            Add new users to algo.config.

                            $ ./algo update-users
                            +

                            Wireguard VPN Clients #

                            macOS #

                            1. Install Wireguard from App Store

                            2. Import tunnels from file > algo/configs/178.128.1.190/wireguard/phliptop.conf

                            Android #

                            1. Install Wireguard from App Store

                            2. Scan QR code from image > algo/configs/178.128.1.190/wireguard/phlipphone.png

                            \ No newline at end of file diff --git a/devops/azure CLI/index.html b/devops/azure CLI/index.html new file mode 100644 index 0000000000..0a8153bb55 --- /dev/null +++ b/devops/azure CLI/index.html @@ -0,0 +1,201 @@ +azure CLI | philip's notes

                            azure CLI

                            2022-02-18 · 4 min read

                            Initial Setup #

                            Setup an Azure account: https://portal.azure.com.

                            Install the CLI #

                            Debian/Ubuntu/WSL #

                            $ curl -sL https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor | sudo tee /etc/apt/trusted.gpg.d/microsoft.gpg > /dev/null
                            +
                            +$ AZ_REPO=$(lsb_release -cs) echo "deb [arch=amd64] https://packages.microsoft.com/repos/azure-cli/ $AZ_REPO main" | sudo tee /etc/apt/sources.list.d/azure-cli.list
                            +
                            +$ sudo apt update
                            +$ sudo apt-get install azure-cli
                            +

                            macOS #

                            $ brew update
                            +$ brew install azure-cli
                            +

                            CLI Login #

                            $ az login
                            +

                            If this isn't inside a docker container, you can just run az login, which will open the browser for you. When doing this in WSL2, use az login --use-device-code and open https://microsoft.com/devicelogin separately.

                            View available regions #

                            # Pull out the "name" field in each object and sort them
                            +$ az account list-locations \
                            +	--query "[].name | sort(@)"
                            +

                            (Optional) Configure default region #

                            $ az configure --defaults location=westus
                            +

                            Create a resource group #

                            $ az group create \
                            +	--location westus \
                            +	--name az account list-locations --query "[].name | sort(@)"
                            +
                            +{
                            +  "id": "/subscriptions/XXXXX-XXXX-XXXX-XXXX-XXXXX/resourceGroups/mygroup",
                            +  "location": "westus",
                            +  "managedBy": null,
                            +  "name": "mygroup",
                            +  "properties": {
                            +    "provisioningState": "Succeeded"
                            +  },
                            +  "tags": null,
                            +  "type": "Microsoft.Resources/resourceGroups"
                            +}
                            +

                            (Optional) Configure default resource group #

                            $ az configure --defaults group=mygroup
                            +

                            Create our VM #

                            • Note: Azure only supports uploading RSA keys via the CLI (i.e., not Ed25519 or ECDSA). The bit-length must also be at least 2048. Don't worry though, we'll toss our usual Ed25519 pubkeys into the VM in just a sec!
                            $ az vm create \
                            +	--name myvm \
                            +	--size Standard_DC1s_v3 \
                            +	--image Canonical:0001-com-ubuntu-server-focal:20_04-lts-gen2:latest \
                            +	--authentication-type ssh \
                            +	--ssh-key-values ~/.ssh/id_rsa4096.pub \
                            +	--public-ip-sku Basic \
                            +	--public-ip-address-dns-name "my-unique-name" \
                            +	--public-ip-address-allocation Dynamic \
                            +	--storage-sku "Standard_LRS"
                            +
                            +{
                            +  "fqdns": "my-unique-name.westus.cloudapp.azure.com",
                            +  "id": "/subscriptions/XXXXX-XXXX-XXXX-XXXX-XXXXX/resourceGroups/mygroup/providers/Microsoft.Compute/virtualMachines/myvm",
                            +  "location": "westus",
                            +  "macAddress": "XX-XX-XX-XX-XX-XX",
                            +  "powerState": "VM running",
                            +  "privateIpAddress": "10.0.0.4",
                            +  "publicIpAddress": "XX.XX.XX.XX",
                            +  "resourceGroup": "mygroup",
                            +  "zones": ""
                            +}
                            +

                            Let's quickly confirm that the DNS name resolves correctly:

                            $ dig +short A my-unique-name.westus.cloudapp.azure.com
                            +XX.XX.XX.XX
                            +

                            Then let's make sure we can at least SSH into the VM:

                            $ ssh -i ~/.ssh/id_rsa4096 my-unique-name.westus.cloudapp.azure.com
                            +

                            We can also dump all of our github pubkeys into the VM, so we don't need the -i arg anymore : )

                            $ ssh -i ~/.ssh/id_rsa4096 \
                            +	my-unique-name.westus.cloudapp.azure.com \
                            +	"curl \"https://github.com/phlip9.keys\" >> ~/.ssh/authorized_keys"
                            +

                            (FIXUP) Create a public IPv4+IPv6 addr + DNS record #

                            • Note: the dns-name label must be unique across all customers in a region!
                            • The final DNS name will look like <dns-name>.<location>.cloudapp.azure.com.

                            See: Azure Docs - virtual network public IP

                            See: Azure - public IP address pricing

                            # Create the IPv4 address
                            +$ az network public-ip create \
                            +	--name "mygroup-ip" \
                            +	--allocation-method Dynamic \
                            +	--dns-name "my-unique-name" \
                            +	--sku Basic \
                            +	--version IPv4
                            +
                            +# Create the IPv6 address
                            +$ az network public-ip create \
                            +	--name "mygroup-ip" \
                            +	--allocation-method Dynamic \
                            +	--dns-name "my-unique-name" \
                            +	--sku Basic \
                            +	--version IPv6
                            +
                            +{
                            +  "publicIp": {
                            +    "ddosSettings": null,
                            +    "deleteOption": null,
                            +    "dnsSettings": {
                            +      "domainNameLabel": "my-unique-name",
                            +      "fqdn": "my-unique-name.westus.cloudapp.azure.com",
                            +      "reverseFqdn": null
                            +    },
                            +    "etag": "W/\"XXXXXX-XXXX-XXXX-XXXX-XXXXXX\"",
                            +    "extendedLocation": null,
                            +    "id": "/subscriptions/XXXXXX-XXXX-XXXX-XXXX-XXXXXX/resourceGroups/mygroup/providers/Microsoft.Network/publicIPAddresses/mygroup-ip",
                            +    "idleTimeoutInMinutes": 4,
                            +    "ipAddress": null,
                            +    "ipConfiguration": null,
                            +    "ipTags": [],
                            +    "linkedPublicIpAddress": null,
                            +    "location": "westus",
                            +    "migrationPhase": null,
                            +    "name": "mygroup-ip",
                            +    "natGateway": null,
                            +    "provisioningState": "Succeeded",
                            +    "publicIpAddressVersion": "IPv6",
                            +    "publicIpAllocationMethod": "Dynamic",
                            +    "publicIpPrefix": null,
                            +    "resourceGroup": "sgxdev",
                            +    "resourceGuid": "XXXXXX-XXXX-XXXX-XXXX-XXXXXX",
                            +    "servicePublicIpAddress": null,
                            +    "sku": {
                            +      "name": "Basic",
                            +      "tier": "Regional"
                            +    },
                            +    "tags": null,
                            +    "type": "Microsoft.Network/publicIPAddresses",
                            +    "zones": null
                            +  }
                            +}
                            +
                            \ No newline at end of file diff --git a/devops/consul/index.html b/devops/consul/index.html new file mode 100644 index 0000000000..d170f6babf --- /dev/null +++ b/devops/consul/index.html @@ -0,0 +1,91 @@ +consul | philip's notes

                            consul

                            2022-03-29 · 1 min read

                            Site: https://www.consul.io/

                            • Consul is a service mesh.
                            • Service Discovery: services can register themselves with Consul, like api or mysql. Other services can discover providers by querying Consul.
                            • Health Checking: Consul clients can provide simple health checks like HTTP 200 OK or platform metrics like memory or CPU utilization below 90%. These health checks can then be used by the service discovery and service routing to route around unhealthy nodes.
                            • KV Store: Consul provides a centralized KV store, which can be used for dynamic configuration, feature flags, coordination, leader election, etc...
                            • Secure Service Communication: Consul can generate and distribute TLS certs to each service to establish mTLS connections with other cluster services. Services can be segmented dynamically to allow only specific services to communicate.
                            • Multi Datacenter: Consul supports multiple regions / data centers.
                            • Distributed, highly available system.
                            • Maintains centralized Registry of services in cluster.
                            • Maintains centralized KV Store.
                            • Each service has a sidecar which transparently proxies all inbound and outbound requests.
                            • Configures each service with TLS certificates from our cluster CA. Services connect to each other through sidecar proxies, which do mTLS to guarantee authentication and integrity within the cluster.
                            • Maintain service dependency graph.
                            \ No newline at end of file diff --git a/devops/deployment strategies/index.html b/devops/deployment strategies/index.html new file mode 100644 index 0000000000..2726cf0018 --- /dev/null +++ b/devops/deployment strategies/index.html @@ -0,0 +1,91 @@ +deployment strategies | philip's notes

                            deployment strategies

                            2022-03-25 · 2 min read

                            Blog: https://harness.io/blog/continuous-verification/blue-green-canary-deployment-strategies/

                            Outage Deploy #

                            1. Shut down all v1 nodes
                            2. Deploy/provision v2 nodes

                            Pros:

                            • Dumbest and simplest approach

                            Cons:

                            • Risky
                            • Mandatory outage period
                            • Extended outage if there's a bug in v2 nodes that needs to rollback

                            Concurrent Deploy #

                            1. Concurrently reprovision all v1 nodes to v2 nodes

                            Pros:

                            • Dumb and simple
                            • (Hopefully) no downtime : )

                            Cons:

                            • Risky
                            • Multiple versions exist at the same time for a short period (potential fun bugs).
                            • Service API changes must be backwards compatible.
                            • Extended outage if there's a bug in v2 nodes that needs to rollback

                            Rolling Deploy #

                            1. Incrementally roll out new version to $n$ nodes, then $2n$ nodes, ..., until all $N$ nodes updated.
                              1. At each step, you verify whether the new deployment is healthy. If not, you rollback
                            2. If you need a rollback, then you just take the subset of newer version nodes and reprovision them with the older version.

                            Pros:

                            • Less-risky than previous strategies
                            • No downtime

                            Cons:

                            • Multiple versions exist at the same time for a short period (potential fun bugs).
                            • Service API changes must be backwards compatible.
                            • Need well-automated deployment verification

                            Blue-Green Deploy #

                            Blog: https://martinfowler.com/bliki/BlueGreenDeployment.html

                            1. Uses two (ideally) identical environments: (1) "staging" (blue) and (2) "production" (green).
                            2. Rollout upgrade to staging.
                            3. Check that staging metrics are good.
                            4. Then switch over user traffic from production to staging. Then the environment labels swap, so previously staging -> production and previously production -> staging.
                            5. If you need to rollback (after switching and before next deploy), you can just switch back to the (now staging) previous production environment.

                            Pros:

                            • Relatively simple and fast
                            • Low risk
                            • No downtime

                            Cons:

                            • Double the cost, since you need TWO production-ready environments
                            • Shifting traffic can have subtle race conditions or lost transactions.

                            Canary Deploy #

                            1. Rollout deploy to subsets of production users / traffic.
                            2. For example, deploy to 1% US users, 50% US users, 100% US users, then 100% Global users.

                            Pros:

                            • Test code in production with real users and real traffic.
                            • Cheaper than Blue-Green
                            • Low risk
                            • Fast and easy rollback
                            • No downtime

                            Cons:

                            • Testing in production
                            • High scripting complexity
                            • Service API changes must be backwards compatible.
                            • Need well-automated deployment verification

                            A/B Testing #

                            \ No newline at end of file diff --git a/devops/docker compose/index.html b/devops/docker compose/index.html new file mode 100644 index 0000000000..d40fb386f6 --- /dev/null +++ b/devops/docker compose/index.html @@ -0,0 +1,91 @@ +docker compose | philip's notes

                            docker compose

                            2022-03-25 · 1 min read

                            Docs: https://docs.docker.com/compose/

                            What #

                            Compose multiple Docker containers.

                            • Tool for defining and running multi-container Docker apps and services.
                            • Declarative YAML file describes all services, what stuff they expose, and which services they connect to.
                            • Manage full lifecycle of application (1) start, stop, rebuild, (2) view status, (3) stream logs, (4) run ad-hoc commands.

                            Use Cases #

                            • Local dev environment. If you have a big complex microservice app, you can describe it with docker compose and run it locally.
                            • Automated CI/CD test suite. Easily spin up your application, run integration tests, and spin down in an isolated CI-friendly environment.
                            • Single host deployment. First two are primary use cases, but docker compose also supports production single-host deployments.
                            \ No newline at end of file diff --git a/devops/index.html b/devops/index.html new file mode 100644 index 0000000000..423796091f --- /dev/null +++ b/devops/index.html @@ -0,0 +1,73 @@ +devops | philip's notes

                            devops

                            AKS - azure kubernetes service →

                            2022-03-25 · 1 min read

                            algo wireguard VPN server →

                            2020-11-26 · 2 min read

                            azure CLI →

                            2022-02-18 · 4 min read

                            consul →

                            2022-03-29 · 1 min read

                            deployment strategies →

                            2022-03-25 · 2 min read

                            docker compose →

                            2022-03-25 · 1 min read

                            k3s →

                            2022-03-25 · 1 min read

                            kind (kubernetes in docker) →

                            2022-04-25 · 1 min read

                            kubernetes →

                            2022-03-25 · 1 min read

                            linkerd →

                            2022-03-25 · 1 min read

                            minikube →

                            2022-03-25 · 1 min read

                            nomad →

                            2022-03-25 · 2 min read

                            service mesh →

                            2022-03-25 · 2 min read

                            \ No newline at end of file diff --git a/devops/k3s/index.html b/devops/k3s/index.html new file mode 100644 index 0000000000..9c1e4047cf --- /dev/null +++ b/devops/k3s/index.html @@ -0,0 +1,91 @@ +k3s | philip's notes

                            k3s

                            2022-03-25 · 1 min read

                            Docs: https://rancher.com/docs/k3s/latest/en/

                            • Lightweight Kubernetes
                            • designed for production workloads in unattended, resource-constrained, remote locations or inside IoT appliances
                            • Single binary, <50MB, supports ARM.
                            • Lightweight SQLite storage backend by default.
                            • "Minimal" dependencies (comparing a trash fire with a forest fire haha)

                            k3s architecture

                            \ No newline at end of file diff --git a/devops/kind (kubernetes in docker)/index.html b/devops/kind (kubernetes in docker)/index.html new file mode 100644 index 0000000000..eeeec634d1 --- /dev/null +++ b/devops/kind (kubernetes in docker)/index.html @@ -0,0 +1,91 @@ +kind (kubernetes in docker) | philip's notes

                            kind (kubernetes in docker)

                            2022-04-25 · 1 min read

                            kind is a tool for running local Kubernetes clusters using Docker container “nodes”. kind was primarily designed for testing Kubernetes itself, but may be used for local development or CI.

                            \ No newline at end of file diff --git a/devops/kubernetes/index.html b/devops/kubernetes/index.html new file mode 100644 index 0000000000..f577c857b5 --- /dev/null +++ b/devops/kubernetes/index.html @@ -0,0 +1,91 @@ +kubernetes | philip's notes

                            kubernetes

                            2022-03-25 · 1 min read

                            \ No newline at end of file diff --git a/devops/linkerd/index.html b/devops/linkerd/index.html new file mode 100644 index 0000000000..5128227628 --- /dev/null +++ b/devops/linkerd/index.html @@ -0,0 +1,91 @@ +linkerd | philip's notes

                            linkerd

                            2022-03-25 · 1 min read

                            Site: https://linkerd.io/

                            Docs: https://linkerd.io/2.11/overview/

                            • Linkerd is a service mesh for kubernetes.
                            • Proxies all inbound and outbound communication for every pod.
                            • Adds security, observability, and reliability features to every pod transparently.
                            • Add Linkerd to get instant
                              • API health metrics (request rate, success rate, error rate, latency, volume, etc...) without changing application code.
                              • Reliability features (latency-aware load balancing, request retries, timeouts, blue-green deploys).
                              • Service routing (deployment-aware routing, locality-aware routing, etc...)
                            • "Minimalist" design
                            • Their core "micro-proxy" uses Rust : )
                            \ No newline at end of file diff --git a/devops/minikube/index.html b/devops/minikube/index.html new file mode 100644 index 0000000000..6d6015271f --- /dev/null +++ b/devops/minikube/index.html @@ -0,0 +1,91 @@ +minikube | philip's notes

                            minikube

                            2022-03-25 · 1 min read

                            Docs: https://minikube.sigs.k8s.io/

                            • small Kubernetes distribution
                            • run Kubernetes locally
                            • use all the standard kubectl commands
                            • can effectively replace docker/docker desktop
                            • single binary
                            \ No newline at end of file diff --git a/devops/nomad/index.html b/devops/nomad/index.html new file mode 100644 index 0000000000..e6c91e2925 --- /dev/null +++ b/devops/nomad/index.html @@ -0,0 +1,91 @@ +nomad | philip's notes

                            nomad

                            2022-03-25 · 2 min read

                            Site: https://www.nomadproject.io/

                            Docs: https://www.nomadproject.io/docs

                            • "Workload" scheduler and orchestrator
                            • Supports container, VM, raw forked binary, or custom "driver" workloads.
                            • Devs declaratively specify workloads as Job file, which describes different services, versions, ports, dependencies, etc...
                            • Nomad looks at current desired set of jobs and tries to make reality match desired jobs.
                            • Nomad schedules workloads across available hardware. It restarts jobs that have crashed. It migrates jobs from failed machines.
                            • It allows you to specify version upgrade rollout strategy.
                            • Developers consume infrastructure via APIs. Nomad provides these "northbound" APIs.
                            • Ops manages infrastructure via APIs. Nomad provides these "southbound" APIs.
                            • Custom Driver Plugins (how to run and manage a task)
                            • Custom Device Plugins (custom resources that can be exposed). Could be useful for SGX maybe?

                            Example #

                            CircleCI #

                            • CircleCI uses Nomad as a Job Queue
                            • New commits from customers triggers an event
                            • This commit event is then submitted to Nomad as a Job (to test their code or w/e).
                            • Nomad can act like a Job queue and buffer Jobs until there is available capacity in the fleet. For example, CircleCI might get 2k+ jobs/min but only have 1k jobs/min hardware capacity during peak hours. Nomad will correctly buffer jobs until there is capacity.

                            Citadel #

                            • Citadel cares about how quickly, in absolute time, they can compute some job, rather than the total cost / number of cores / etc...
                            • Their issue is: how many containers can we run in a short period of time?
                            • Need to support bursty workloads (analysts want to run big models as quickly as possible).
                            • Need to work across existing DCs and "burst" to cloud on-demand.
                            • Want to run 40M containers in a short period.
                            • 2017 talk mentions 3k+ containers scheduled / sec.
                            • related blog post:
                              • HashiCorp Nomad scheduled 2,000,000 Docker containers on 6,100 hosts in 10 AWS regions in 22 minutes.
                              • 1.5k containers/sec
                              • https://www.hashicorp.com/c2m
                            \ No newline at end of file diff --git a/devops/o11y/index.html b/devops/o11y/index.html new file mode 100644 index 0000000000..cd97ab8b96 --- /dev/null +++ b/devops/o11y/index.html @@ -0,0 +1,91 @@ +devops/o11y | philip's notes

                            devops/o11y

                            jaeger oss e2e tracing →

                            2022-04-06 · 1 min read

                            \ No newline at end of file diff --git a/devops/o11y/jaeger oss e2e tracing/index.html b/devops/o11y/jaeger oss e2e tracing/index.html new file mode 100644 index 0000000000..6048c9e139 --- /dev/null +++ b/devops/o11y/jaeger oss e2e tracing/index.html @@ -0,0 +1,109 @@ +jaeger oss e2e tracing | philip's notes

                            jaeger oss e2e tracing

                            2022-04-06 · 1 min read

                            Site: https://www.jaegertracing.io/

                            Relevant crate: https://github.com/MystenLabs/mysten-infra/tree/main/telemetry_subscribers

                            \ No newline at end of file diff --git a/devops/secrets/1password - secrets automation/index.html b/devops/secrets/1password - secrets automation/index.html new file mode 100644 index 0000000000..05f032eeb4 --- /dev/null +++ b/devops/secrets/1password - secrets automation/index.html @@ -0,0 +1,112 @@ +1password - secrets automation | philip's notes

                            1password - secrets automation

                            2022-08-22 · 1 min read

                              Secure, orchestrate, and manage your company’s infrastructure secrets with 1Password Secrets Automation.

                              The Connect server is part of your environment, and communicates to Your Apps using access tokens and a REST API.

                              • Connect server appears to be closed source?

                              pricing (2022/08) #

                              Tiers are assigned daily, after analyzing credit usage for that day. Billing occurs monthly, as the sum of the price of each daily tier assigned during the previous month.

                              Scripts, services, and other entities need a token to access vaults, where secrets are stored. Each credit grants a token access to a vault. Using multiple credits across multiple tokens ensures the proper application of the Principle of Least Privilege.

                              up to # access creditsprice
                              3$0/mo
                              25$30/mo
                              100$100/mo
                              500$300/mo
                              \ No newline at end of file diff --git a/devops/secrets/doppler/index.html b/devops/secrets/doppler/index.html new file mode 100644 index 0000000000..1383d6ba76 --- /dev/null +++ b/devops/secrets/doppler/index.html @@ -0,0 +1,109 @@ +doppler | philip's notes

                              doppler

                              2022-08-22 · 1 min read

                                Sync env vars at scale

                                Some closed-source hosted solution.

                                \ No newline at end of file diff --git a/devops/secrets/ejson (Shopify)/index.html b/devops/secrets/ejson (Shopify)/index.html new file mode 100644 index 0000000000..1549b1a0d2 --- /dev/null +++ b/devops/secrets/ejson (Shopify)/index.html @@ -0,0 +1,109 @@ +ejson (Shopify) | philip's notes

                                ejson (Shopify)

                                2022-08-22 · 1 min read

                                  EJSON is a small library to manage encrypted secrets using asymmetric encryption.

                                  The main benefits provided by ejson are:

                                  • Secrets can be safely stored in a git repo.
                                  • Changes to secrets are auditable on a line-by-line basis with git blame.
                                  • Anyone with git commit access has access to write new secrets.
                                  • Decryption access can easily be locked down to production servers only.
                                  • Secrets change synchronously with application source (as opposed to secrets provisioned by Configuration Management).
                                  • Simple, well-tested, easily-auditable source.
                                  \ No newline at end of file diff --git a/devops/secrets/ejson-kms (AWS)/index.html b/devops/secrets/ejson-kms (AWS)/index.html new file mode 100644 index 0000000000..e8581b85d8 --- /dev/null +++ b/devops/secrets/ejson-kms (AWS)/index.html @@ -0,0 +1,112 @@ +ejson-kms (AWS) | philip's notes

                                  ejson-kms (AWS)

                                  2022-08-22 · 2 min read

                                    A utility for managing a collection of secrets in source control using AWS KMS.

                                    The secrets are encrypted using secret-key cryptography (NaCl Secretbox: XSalsa20 + Poly1305), using key wrapping with a master key stored on HSM-backed storage at AWS. Encrypted secrets are stored in a JSON file that can easily be shared and versioned.

                                    secret encryption #

                                    • For each secret, a data key is requested from AWS KMS (see GenerateDataKey).
                                    • The encryption context is sent along and is stored alongside the encrypted data key. The name of the secret is added to the context automatically under the key Secret
                                    • KMS returns the data key encrypted with the master key (stored on AWS servers) and the corresponding plaintext.
                                    • That data key is used to encrypt one secret.
                                    • A random nonce is generated and NaCL Secretbox is used for encryption.
                                    • Under the hood, Secretbox uses XSalsa20 and Poly1305 to encrypt and authenticate messages. The length of messages is not hidden.
                                    • Finally, the encrypted data key, the random nonce and the encrypted secret are each stored in the JSON file.

                                    secret decryption #

                                    • For each secret, the encrypted data key, random nonce and encrypted secret are extracted from the JSON file.
                                    • A request is made to AWS KMS to decrypt the encrypted data key (see Decrypt).
                                    • At this stage the encryption context is authenticated and logged. The name of the secret is added to the context automatically under the key Secret
                                    • Using the key plaintext and random nonce, the secret is decrypted using NaCL Secretbox.
                                    \ No newline at end of file diff --git a/devops/secrets/envkey/index.html b/devops/secrets/envkey/index.html new file mode 100644 index 0000000000..d63813d880 --- /dev/null +++ b/devops/secrets/envkey/index.html @@ -0,0 +1,109 @@ +envkey | philip's notes

                                    envkey

                                    2022-08-22 · 1 min read

                                      Magical secure app config

                                      • e2e encryption for API keys and other secrets
                                      • live reload for env vars
                                      • stop config sprawl and sloppy secrets mgmt
                                      • prevent config bugs
                                      • save time

                                      Github: https://github.com/envkey/envkey

                                      • Has open source "community" version
                                      \ No newline at end of file diff --git a/devops/secrets/fortanix DSM/index.html b/devops/secrets/fortanix DSM/index.html new file mode 100644 index 0000000000..4419e63592 --- /dev/null +++ b/devops/secrets/fortanix DSM/index.html @@ -0,0 +1,109 @@ +fortanix DSM | philip's notes

                                      fortanix DSM

                                      2022-08-22 · 1 min read

                                        \ No newline at end of file diff --git a/devops/secrets/index.html b/devops/secrets/index.html new file mode 100644 index 0000000000..7bb56a51b8 --- /dev/null +++ b/devops/secrets/index.html @@ -0,0 +1,91 @@ +devops/secrets | philip's notes

                                        devops/secrets

                                        1password - secrets automation →

                                        2022-08-22 · 1 min read

                                        doppler →

                                        2022-08-22 · 1 min read

                                        ejson (Shopify) →

                                        2022-08-22 · 1 min read

                                        ejson-kms (AWS) →

                                        2022-08-22 · 2 min read

                                        envkey →

                                        2022-08-22 · 1 min read

                                        fortanix DSM →

                                        2022-08-22 · 1 min read

                                        mozilla SOPS →

                                        2022-08-22 · 1 min read

                                        sops-nix →

                                        2022-08-22 · 1 min read

                                        sy - share secrets safely →

                                        2022-10-28 · 1 min read

                                        \ No newline at end of file diff --git a/devops/secrets/mozilla SOPS/index.html b/devops/secrets/mozilla SOPS/index.html new file mode 100644 index 0000000000..38a9db2e67 --- /dev/null +++ b/devops/secrets/mozilla SOPS/index.html @@ -0,0 +1,109 @@ +mozilla SOPS | philip's notes

                                        mozilla SOPS

                                        2022-08-22 · 1 min read

                                          Simple and flexible tool for managing secrets

                                          overview #

                                          • Store encrypted credentials in an ops git repo
                                          • DevOps manually "provisions" secrets by updating per-service encrypted credentials files
                                          • Credentials files are encrypted with a key also stored in e.g. Azure KMS (per-service creds encrypted w/ key only viewable by that service in Azure KMS?)
                                          • When service gets provisioned, on startup its credentials decryption key is pulled from KMS and the credentials are decrypted
                                          \ No newline at end of file diff --git a/devops/secrets/sops-nix/index.html b/devops/secrets/sops-nix/index.html new file mode 100644 index 0000000000..641183cddd --- /dev/null +++ b/devops/secrets/sops-nix/index.html @@ -0,0 +1,112 @@ +sops-nix | philip's notes

                                          sops-nix

                                          2022-08-22 · 1 min read

                                            Atomic secret provisioning for NixOS based on mozilla SOPS

                                            \ No newline at end of file diff --git a/devops/secrets/sy - share secrets safely/index.html b/devops/secrets/sy - share secrets safely/index.html new file mode 100644 index 0000000000..1c811980ef --- /dev/null +++ b/devops/secrets/sy - share secrets safely/index.html @@ -0,0 +1,112 @@ +sy - share secrets safely | philip's notes

                                            sy - share secrets safely

                                            2022-10-28 · 1 min read

                                              • Vault file stored in git repo.
                                              • Depends on gpg installed. GPGME (GPG Made Easy).
                                              • Encrypt secrets to a subset of your team members and tooling.
                                              \ No newline at end of file diff --git a/devops/service mesh/index.html b/devops/service mesh/index.html new file mode 100644 index 0000000000..a7cc5b7fa4 --- /dev/null +++ b/devops/service mesh/index.html @@ -0,0 +1,91 @@ +service mesh | philip's notes

                                              service mesh

                                              2022-03-25 · 2 min read

                                              Blog: https://linkerd.io/what-is-a-service-mesh/

                                              A service mesh like linkerd is a tool for adding observability, security, and reliability features to “cloud native” applications by transparently inserting this functionality at the platform layer rather than the application layer.

                                              • Deployed as a sidecar alongside application in each pod.
                                              • Transparently proxies all inbound and outbound requests to the application container.
                                              • The proxies comprise the service mesh's data plane.
                                              • The proxies are configured and controlled by the control plane.

                                              Pros: + Reduce complexity in application code. + Migrate common features needed by all your applications into the common service mesh layer. + Get useful features "for free" just by integrating a service mesh.

                                              Cons:

                                              • Added overhead from service mesh proxying all inbound and outbound requests.
                                              • Potentially added overall complexity by adding another moving part that needs its own configuration, monitoring, etc...

                                              Trace a request through Linkerd #

                                              1. Service Routing: Linkerd applies dynamic routing rules to determine which destination the requester actually intended.
                                                1. Should the call be routed to service on the local cluster? a remote cluster? the current service version? the canary service? failover? etc...
                                              2. Of the available destination services in (1.), do client-side load balancing to choose the "best" one (by factoring together various health metrics).'
                                              3. Manage connection pools to each service. New connections must go through mTLS (mutual auth) handshake.
                                              4. Record request latency and error metrics for each service as we send them requests.
                                              5. Expose recorded service and request metrics for collection to a central aggregator.
                                              • Proxygen
                                              • ServiceRouter
                                              \ No newline at end of file diff --git a/distributed systems/index.html b/distributed systems/index.html new file mode 100644 index 0000000000..62f872a447 --- /dev/null +++ b/distributed systems/index.html @@ -0,0 +1,73 @@ +distributed systems | philip's notes

                                              distributed systems

                                              the siren song of backpressure →

                                              2021-06-02 · 6 min read

                                              \ No newline at end of file diff --git a/distributed systems/papers/(2020) Semi-Fast Byzantine-tolerant Shared Register without Reliable Broadcast/index.html b/distributed systems/papers/(2020) Semi-Fast Byzantine-tolerant Shared Register without Reliable Broadcast/index.html new file mode 100644 index 0000000000..1d2391fadd --- /dev/null +++ b/distributed systems/papers/(2020) Semi-Fast Byzantine-tolerant Shared Register without Reliable Broadcast/index.html @@ -0,0 +1,156 @@ +(2020) Semi-Fast Byzantine-tolerant Shared Register without Reliable Broadcast | philip's notes

                                              (2020) Semi-Fast Byzantine-tolerant Shared Register without Reliable Broadcast

                                              2022-08-27 · 3 min read

                                                properties #

                                                • BFT shared register w/o reliable broadcast
                                                • leaderless
                                                • unauthenticated: doesn't require digital signatures
                                                • no reconfiguration
                                                • one-shot read: read from at least f+1
                                                • two-RTT write: (1) do read from f+1, then (2) send store request to all servers.

                                                core algorithm #

                                                • Store an (unauthenticated) tag version counter next to the register.
                                                • Client Writing:
                                                  • (1) request current tag version from all servers
                                                  • (2) determine the current honest tag $t$ to be the $(f + 1)$-th highest tag version.
                                                    • remember that the register is unauthenticated, so byzantine servers can just return any tag version.
                                                  • (3) send a store request with tag version $t + 1$
                                                • Client Reading:
                                                  • (1) Request the current register state from all servers
                                                  • (2) Return the value with the highest tag that was witnessed by at least $f + 1$ servers.

                                                client #

                                                client-write(S: Servers, w: Writer, v: Value):
                                                +	1. try to get the current tag for the register, t := client-get-tag(S, w)
                                                +	2. try to update the register, client-put-data(S, w, t, v)
                                                +
                                                +client-get-tag(S: Servers, w: Writer):
                                                +	1. send Query-Tag(w) message to servers in S
                                                +	2. wait for Query-Tag-Response(t, w) messages from (n - f) servers in S
                                                +	3. return t := (f + 1)-th highest tag among responses
                                                +
                                                +client-put-data(S: Servers, w: Writer, t: Tag, v: Value):
                                                +	1. create new tag, t' := t + 1
                                                +	2. send Put-Data(w, t', v) to servers in S
                                                +	3. wait for ACKs from (n - f) servers in S
                                                +
                                                +initial local client reader state:
                                                +	t_local := 0,
                                                +	v_local := v_0
                                                +
                                                +client-read(S: Server, r: Reader, t: Tag):
                                                +	1. send Query-Data(r) to servers in S
                                                +	2. wait for Query-Data-Response(r, t, v) messages from (n - f) servers in S
                                                +	3. W := set of all (r, t, v) tuples with >= f + 1 witnesses
                                                +	4. select tuple (t, v) from witnesses W with highest tag
                                                +	5. if W != {} && t > t_local, then ratchet the local state tag
                                                +	6.     (t_local, v_local) := (t, v)
                                                +	7. return v_local
                                                +

                                                server #

                                                initial local server state (per reader/writer register):
                                                +	t_max := 0
                                                +	v_max := v_0
                                                +
                                                +server(Query-Tag(w: Writer)):
                                                +	1. return Query-Tag-Response(t_max, w)
                                                +
                                                +server(Put-Data(w: Writer, t: Tag, v: Value)):
                                                +	1. if t > t_max, then ratchet local register value and ACK:
                                                +	2.     t_max := t
                                                +	3.     v_max := v
                                                +	4.     send ACK response to w
                                                +
                                                +server(Query-Data(r: Reader)):
                                                +	1. return Query-Data-Response(t_max, v_max) for Reader r
                                                +
                                                \ No newline at end of file diff --git a/distributed systems/papers/(2021) Leaderless Consensus/index.html b/distributed systems/papers/(2021) Leaderless Consensus/index.html new file mode 100644 index 0000000000..7ad1f26a14 --- /dev/null +++ b/distributed systems/papers/(2021) Leaderless Consensus/index.html @@ -0,0 +1,116 @@ +(2021) Leaderless Consensus | philip's notes

                                                (2021) Leaderless Consensus

                                                2022-08-27 · 1 min read

                                                  properties #

                                                  • leaderless
                                                  • alg. v3 provides BFT authenticated and unauthenticated versions
                                                  • time: O(n), optimal
                                                  • resilience: k < 3f + 1
                                                  • bits exchanged: O(n^4), same as PBFT
                                                  • messages exchanged: O(n^4), not optimal
                                                  • optimistic termination: 2 rounds, optimal

                                                  intuition #

                                                  Each "round", a process broadcasts his max x and observes everyone else's max x. If there are disagreements, a process "adopts" a new x = max(x_i) for x_i just observed. Otherwise, if everyone agrees, then commit the x.

                                                  inputs: [x_1, .., x_n]
                                                  +
                                                  +while true:
                                                  +	if contention:
                                                  +		adopt max(x_1, .., x_n))
                                                  +	else if x_1 == .. == x_n:
                                                  +		commit x
                                                  +
                                                  \ No newline at end of file diff --git a/distributed systems/papers/index.html b/distributed systems/papers/index.html new file mode 100644 index 0000000000..4e35f55730 --- /dev/null +++ b/distributed systems/papers/index.html @@ -0,0 +1,91 @@ +distributed systems/papers | philip's notes

                                                  distributed systems/papers

                                                  \ No newline at end of file diff --git a/distributed systems/the siren song of backpressure/index.html b/distributed systems/the siren song of backpressure/index.html new file mode 100644 index 0000000000..0656bdd431 --- /dev/null +++ b/distributed systems/the siren song of backpressure/index.html @@ -0,0 +1,113 @@ +the siren song of backpressure | philip's notes

                                                  the siren song of backpressure

                                                  2021-06-02 · 6 min read

                                                  The Pieces #

                                                  We have three major components that compose an async system: (1) Actors, which contain (2) Event Loops, which communicate with other Actors using (3) Channels.

                                                  Backpressure #

                                                  Backpressure in the real world is like a plumbing pipe. When the pipe is full, it admits no more water and the pipe "exerts backpressure" on its inputs (who will now start filling up because they can't push their water forward to their outputs). All the water sent into the pipe eventually ends up at the output.

                                                  Backpressure is compositional: a series of simple pipes hooked end-to-end itself exerts backpressure. We can break the total system backpressure with a leaky pipe in the middle, which loses some of the water.

                                                  In systems terms, a pipe is a bounded FIFO queue.

                                                  The Allure of Backpressure #

                                                  A system designed with all parts exerting backpressure promises: "use these simple tricks and your system will degrade gracefully under load! Lose no messages! Never OOM!"

                                                  A local system that fully exerts backpressure end-to-end provides a natural mechanism for propagating that backpressure to remote peers via TCP connections.

                                                  If an internal component is at capacity, it will eventually propagate to our local TCP connections for each peer, which will actually propagate to each remote peer's TCP socket. In other words, when we're under load, the system will naturally stop accepting new requests off the socket.

                                                  In the beginning, most advice looks like "Every queue should have a maximum size. Queues must not grow unbounded."

                                                  The average async fan replaces all their unbounded channels with bounded channels and thinks they're done.

                                                  The average async enjoyer ...

                                                  Deadlocks #

                                                  Problems start to arise when loop branches or handlers need to await on some shared and limited resource, particularly when the system is under load. These resources are most often

                                                  1. enqueueing messages on mpsc (multi-producer, single-consumer) bounded channels (for communication b/w actors)
                                                  2. acquiring permits from concurrency limiting semaphores (to limit concurrent requests or spawned tasks)
                                                  3. sending messages on a socket.

                                                  When there's a wait cycle (e.g. task A waits on task B waits on task C waits on task A), the system deadlocks. Especially problematic is that deadlock issues tend to only crop up non-deterministically when the system is under load and the bounded queues start hitting capacity.

                                                  If your queue sizes are large and you're not running load tests, these problems will manifest in production at 3 am during your on-call shift.

                                                  Trying to handle backpressure properly is difficult. It's not that hard to just throw bounded queues everywhere and pray, but this is not sufficient in my experience.

                                                  In fact, many systems decide to completely eschew handling backpressure internally. Erlang actors communicate exclusively using unbounded channels. Erlang also doesn't bound spawned tasks (until the process crashes or OOMs of course :)).

                                                  This approach almost completely avoids deadlocks at the cost of other problems like unbounded resource usage and exploding tail latencies when the system is under load. The request latency is the real killer; the system becomes unusable when all requests start timing out as the mean request service time exceeds the mean timeout.

                                                  In this sort of system, a typical approach is to bound external requests "at the edges" with the expectation that internal load will remain proportionally bounded. This could mean setting external request rate limits and total in-flight request limits at your loadbalancers, hoping that "internal" system utilization remains nominal.

                                                  The "ideal" way to avoid deadlocks with bounded channels is to design your system topology so there can never be wait cycles, i.e., all Actor communication follows a directed acyclic graph (DAG). Every node in this graph is an async event loop. Every directed edge in this graph is a bounded FIFO queue that starts from an mpsc::Sender and ends at an mpsc::Receiver. In a more perfect world, the Diem topology would be a DAG like:

                                                  flowchart LR;
                                                  +    I[Inbound Network Messages] --> M & C & S;
                                                  +
                                                  +	C[Consensus] --> S & M & O;
                                                  +
                                                  +	S[State Sync] --> M & O;
                                                  +
                                                  +	M[Shared Mempool] --> O;
                                                  +
                                                  +	O[Outbound Network Messages];
                                                  +

                                                  Unfortunately, the current system grew organically and currently looks something like (heavily simplified):

                                                  flowchart LR;
                                                  +	O[Sockets x N] --> P;
                                                  +
                                                  +	P[Peers x N] --> O & N;
                                                  +
                                                  +    N[Peer Manager] --> P & C & S & M;
                                                  +
                                                  +	M[Shared Mempool] --> N;
                                                  +
                                                  +	C[Consensus] --> S & M & N;
                                                  +
                                                  +	S[State Sync] --> C & M & N;
                                                  +

                                                  Wait a second. Didn't we just advise against cycles? How do you avoid deadlocks??

                                                  Here's a dirty little secret... Diem doesn't actually use bounded FIFO queues in most cases.

                                                  There's a lossy multi-queue implementation called diem_channel (very creative name, I know) which, if you squint a bit, looks like an Arc<Mutex<HashMap<K, VecDeque<V>>>> . Their most common use is actually to provide fairness and quality-of-service across multiple peers and application protocols (Consensus, State Sync, Shared Mempool). It's like each PeerId x ProtocolId pair gets its own exclusive mini-queue separate from the others. The receiver round-robins across all the mini-queues (to provide fairness) when dequeue'ing. If one peer starts sending our node lots of messages, their queue will fill up, but also leaves the others unaffected.

                                                  These diem_channels are used in almost all of the edges above. These queues actually drop messages when at capacity, according to an eviction policy.

                                                  More generally, dropping messages is the other alternative to backpressure: you can't deadlock if you never block! Dropping messages has a price, however: protocols are more difficult to develop since they need to be robust against messages dropping at any time.

                                                  The Diem Consensus protocol even uses size=1 LIFO message "slots" for each peer, since the protocol only cares about the absolute most recent message (when optimized for min latency).

                                                  Note that without backpressure, you don't have an obvious way to tell a peer to "backoff" and stop sending you messages when your system is under load. You must provide your own rate limits or ad-hoc protocol backoff messages.

                                                  It might not surprise you that distributed systems are not simple, and backpressure is not an exception. If there's anything you should take away from this article, it's that simple rules like "bounded FIFO queues everywhere" are just heuristics that should be followed with intention and understanding of the tradeoffs involved.

                                                  \ No newline at end of file diff --git a/elasticlunr.min.js b/elasticlunr.min.js new file mode 100644 index 0000000000..79dad65f52 --- /dev/null +++ b/elasticlunr.min.js @@ -0,0 +1,10 @@ +/** + * elasticlunr - http://weixsong.github.io + * Lightweight full-text search engine in Javascript for browser search and offline search. - 0.9.6 + * + * Copyright (C) 2017 Oliver Nightingale + * Copyright (C) 2017 Wei Song + * MIT Licensed + * @license + */ +!function(){function e(e){if(null===e||"object"!=typeof e)return e;var t=e.constructor();for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);return t}var t=function(e){var n=new t.Index;return n.pipeline.add(t.trimmer,t.stopWordFilter,t.stemmer),e&&e.call(n,n),n};t.version="0.9.5",lunr=t,t.utils={},t.utils.warn=function(e){return function(t){e.console&&console.warn&&console.warn(t)}}(this),t.utils.toString=function(e){return void 0===e||null===e?"":e.toString()},t.EventEmitter=function(){this.events={}},t.EventEmitter.prototype.addListener=function(){var e=Array.prototype.slice.call(arguments),t=e.pop(),n=e;if("function"!=typeof t)throw new TypeError("last argument must be a function");n.forEach(function(e){this.hasHandler(e)||(this.events[e]=[]),this.events[e].push(t)},this)},t.EventEmitter.prototype.removeListener=function(e,t){if(this.hasHandler(e)){var n=this.events[e].indexOf(t);-1!==n&&(this.events[e].splice(n,1),0==this.events[e].length&&delete this.events[e])}},t.EventEmitter.prototype.emit=function(e){if(this.hasHandler(e)){var t=Array.prototype.slice.call(arguments,1);this.events[e].forEach(function(e){e.apply(void 0,t)},this)}},t.EventEmitter.prototype.hasHandler=function(e){return e in this.events},t.tokenizer=function(e){if(!arguments.length||null===e||void 0===e)return[];if(Array.isArray(e)){var n=e.filter(function(e){return null===e||void 0===e?!1:!0});n=n.map(function(e){return t.utils.toString(e).toLowerCase()});var i=[];return n.forEach(function(e){var n=e.split(t.tokenizer.seperator);i=i.concat(n)},this),i}return e.toString().trim().toLowerCase().split(t.tokenizer.seperator)},t.tokenizer.defaultSeperator=/[\s\-]+/,t.tokenizer.seperator=t.tokenizer.defaultSeperator,t.tokenizer.setSeperator=function(e){null!==e&&void 0!==e&&"object"==typeof e&&(t.tokenizer.seperator=e)},t.tokenizer.resetSeperator=function(){t.tokenizer.seperator=t.tokenizer.defaultSeperator},t.tokenizer.getSeperator=function(){return t.tokenizer.seperator},t.Pipeline=function(){this._queue=[]},t.Pipeline.registeredFunctions={},t.Pipeline.registerFunction=function(e,n){n in t.Pipeline.registeredFunctions&&t.utils.warn("Overwriting existing registered function: "+n),e.label=n,t.Pipeline.registeredFunctions[n]=e},t.Pipeline.getRegisteredFunction=function(e){return e in t.Pipeline.registeredFunctions!=!0?null:t.Pipeline.registeredFunctions[e]},t.Pipeline.warnIfFunctionNotRegistered=function(e){var n=e.label&&e.label in this.registeredFunctions;n||t.utils.warn("Function is not registered with pipeline. This may cause problems when serialising the index.\n",e)},t.Pipeline.load=function(e){var n=new t.Pipeline;return e.forEach(function(e){var i=t.Pipeline.getRegisteredFunction(e);if(!i)throw new Error("Cannot load un-registered function: "+e);n.add(i)}),n},t.Pipeline.prototype.add=function(){var e=Array.prototype.slice.call(arguments);e.forEach(function(e){t.Pipeline.warnIfFunctionNotRegistered(e),this._queue.push(e)},this)},t.Pipeline.prototype.after=function(e,n){t.Pipeline.warnIfFunctionNotRegistered(n);var i=this._queue.indexOf(e);if(-1===i)throw new Error("Cannot find existingFn");this._queue.splice(i+1,0,n)},t.Pipeline.prototype.before=function(e,n){t.Pipeline.warnIfFunctionNotRegistered(n);var i=this._queue.indexOf(e);if(-1===i)throw new Error("Cannot find existingFn");this._queue.splice(i,0,n)},t.Pipeline.prototype.remove=function(e){var t=this._queue.indexOf(e);-1!==t&&this._queue.splice(t,1)},t.Pipeline.prototype.run=function(e){for(var t=[],n=e.length,i=this._queue.length,o=0;n>o;o++){for(var r=e[o],s=0;i>s&&(r=this._queue[s](r,o,e),void 0!==r&&null!==r);s++);void 0!==r&&null!==r&&t.push(r)}return t},t.Pipeline.prototype.reset=function(){this._queue=[]},t.Pipeline.prototype.get=function(){return this._queue},t.Pipeline.prototype.toJSON=function(){return this._queue.map(function(e){return t.Pipeline.warnIfFunctionNotRegistered(e),e.label})},t.Index=function(){this._fields=[],this._ref="id",this.pipeline=new t.Pipeline,this.documentStore=new t.DocumentStore,this.index={},this.eventEmitter=new t.EventEmitter,this._idfCache={},this.on("add","remove","update",function(){this._idfCache={}}.bind(this))},t.Index.prototype.on=function(){var e=Array.prototype.slice.call(arguments);return this.eventEmitter.addListener.apply(this.eventEmitter,e)},t.Index.prototype.off=function(e,t){return this.eventEmitter.removeListener(e,t)},t.Index.load=function(e){e.version!==t.version&&t.utils.warn("version mismatch: current "+t.version+" importing "+e.version);var n=new this;n._fields=e.fields,n._ref=e.ref,n.documentStore=t.DocumentStore.load(e.documentStore),n.pipeline=t.Pipeline.load(e.pipeline),n.index={};for(var i in e.index)n.index[i]=t.InvertedIndex.load(e.index[i]);return n},t.Index.prototype.addField=function(e){return this._fields.push(e),this.index[e]=new t.InvertedIndex,this},t.Index.prototype.setRef=function(e){return this._ref=e,this},t.Index.prototype.saveDocument=function(e){return this.documentStore=new t.DocumentStore(e),this},t.Index.prototype.addDoc=function(e,n){if(e){var n=void 0===n?!0:n,i=e[this._ref];this.documentStore.addDoc(i,e),this._fields.forEach(function(n){var o=this.pipeline.run(t.tokenizer(e[n]));this.documentStore.addFieldLength(i,n,o.length);var r={};o.forEach(function(e){e in r?r[e]+=1:r[e]=1},this);for(var s in r){var u=r[s];u=Math.sqrt(u),this.index[n].addToken(s,{ref:i,tf:u})}},this),n&&this.eventEmitter.emit("add",e,this)}},t.Index.prototype.removeDocByRef=function(e){if(e&&this.documentStore.isDocStored()!==!1&&this.documentStore.hasDoc(e)){var t=this.documentStore.getDoc(e);this.removeDoc(t,!1)}},t.Index.prototype.removeDoc=function(e,n){if(e){var n=void 0===n?!0:n,i=e[this._ref];this.documentStore.hasDoc(i)&&(this.documentStore.removeDoc(i),this._fields.forEach(function(n){var o=this.pipeline.run(t.tokenizer(e[n]));o.forEach(function(e){this.index[n].removeToken(e,i)},this)},this),n&&this.eventEmitter.emit("remove",e,this))}},t.Index.prototype.updateDoc=function(e,t){var t=void 0===t?!0:t;this.removeDocByRef(e[this._ref],!1),this.addDoc(e,!1),t&&this.eventEmitter.emit("update",e,this)},t.Index.prototype.idf=function(e,t){var n="@"+t+"/"+e;if(Object.prototype.hasOwnProperty.call(this._idfCache,n))return this._idfCache[n];var i=this.index[t].getDocFreq(e),o=1+Math.log(this.documentStore.length/(i+1));return this._idfCache[n]=o,o},t.Index.prototype.getFields=function(){return this._fields.slice()},t.Index.prototype.search=function(e,n){if(!e)return[];e="string"==typeof e?{any:e}:JSON.parse(JSON.stringify(e));var i=null;null!=n&&(i=JSON.stringify(n));for(var o=new t.Configuration(i,this.getFields()).get(),r={},s=Object.keys(e),u=0;u0&&t.push(e);for(var i in n)"docs"!==i&&"df"!==i&&this.expandToken(e+i,t,n[i]);return t},t.InvertedIndex.prototype.toJSON=function(){return{root:this.root}},t.Configuration=function(e,n){var e=e||"";if(void 0==n||null==n)throw new Error("fields should not be null");this.config={};var i;try{i=JSON.parse(e),this.buildUserConfig(i,n)}catch(o){t.utils.warn("user configuration parse failed, will use default configuration"),this.buildDefaultConfig(n)}},t.Configuration.prototype.buildDefaultConfig=function(e){this.reset(),e.forEach(function(e){this.config[e]={boost:1,bool:"OR",expand:!1}},this)},t.Configuration.prototype.buildUserConfig=function(e,n){var i="OR",o=!1;if(this.reset(),"bool"in e&&(i=e.bool||i),"expand"in e&&(o=e.expand||o),"fields"in e)for(var r in e.fields)if(n.indexOf(r)>-1){var s=e.fields[r],u=o;void 0!=s.expand&&(u=s.expand),this.config[r]={boost:s.boost||0===s.boost?s.boost:1,bool:s.bool||i,expand:u}}else t.utils.warn("field name in user configuration not found in index instance fields");else this.addAllFields2UserConfig(i,o,n)},t.Configuration.prototype.addAllFields2UserConfig=function(e,t,n){n.forEach(function(n){this.config[n]={boost:1,bool:e,expand:t}},this)},t.Configuration.prototype.get=function(){return this.config},t.Configuration.prototype.reset=function(){this.config={}},lunr.SortedSet=function(){this.length=0,this.elements=[]},lunr.SortedSet.load=function(e){var t=new this;return t.elements=e,t.length=e.length,t},lunr.SortedSet.prototype.add=function(){var e,t;for(e=0;e1;){if(r===e)return o;e>r&&(t=o),r>e&&(n=o),i=n-t,o=t+Math.floor(i/2),r=this.elements[o]}return r===e?o:-1},lunr.SortedSet.prototype.locationFor=function(e){for(var t=0,n=this.elements.length,i=n-t,o=t+Math.floor(i/2),r=this.elements[o];i>1;)e>r&&(t=o),r>e&&(n=o),i=n-t,o=t+Math.floor(i/2),r=this.elements[o];return r>e?o:e>r?o+1:void 0},lunr.SortedSet.prototype.intersect=function(e){for(var t=new lunr.SortedSet,n=0,i=0,o=this.length,r=e.length,s=this.elements,u=e.elements;;){if(n>o-1||i>r-1)break;s[n]!==u[i]?s[n]u[i]&&i++:(t.add(s[n]),n++,i++)}return t},lunr.SortedSet.prototype.clone=function(){var e=new lunr.SortedSet;return e.elements=this.toArray(),e.length=e.elements.length,e},lunr.SortedSet.prototype.union=function(e){var t,n,i;this.length>=e.length?(t=this,n=e):(t=e,n=this),i=t.clone();for(var o=0,r=n.toArray();o14Ba#1H&(%P{RubhEf9thF1v;3|2E37{m+a>4-RYr>4CJH@OX%|ctdh?== z0okd6`-~O31#@riLY7;{oS2gF~Y{UaQHtTAg;) zT)98QaZOG7)vB~Bl_^&$k}sPn^_3-DC{MavmUyWo{z9<*nv(d7#c>xr%;x1soh^tu z=V3Z8*nVwp_*oB=`Pm_-{{R1J;W{7G1`?d3h*Kwxv&0O_&UNYIsKJf$UV@&dPcgYXsNNfahI14-?i-FX2 z5N6z%C%zph$X?><>&pI&k%N<&<$BM5Q=rfqPZ!4!iOb0e42*7SX>2M74y{_e`gq%e z&BZTXy^<~{I{4#G+b*|bYRl4W3>f2zxxIt6v!$c$IOfM6ICt;V!HXv&1y(tnIC}N$ z-NTnpM@wiaJbLu__4B9l0vcSR0>zwMe4M=8{Q~V=9v*J5++2?zIp%pVXJX%VUOx{X zuW5~(Cr-V5wQR|PMbV3A&sHi{hsQbxdrO~U zV`vtap7in@PXW-~swJ)wB`Jv|saDBFsX&Us$iT=**T7KMz#_!J(#pWt%D_b1z`)AD zK<Cy& znOiTJTUc4xd$I_#u!2j2$>9`c<;@`qr*B+2apcSqnIr6{8$1?x=`p+#7cBYYWI7dS O1%s!npUXO@geCyarF^Ua literal 0 HcmV?d00001 diff --git a/favicon-32x32.png b/favicon-32x32.png new file mode 100644 index 0000000000000000000000000000000000000000..5cb9bf11bd1b70f9e2ca5e6976dfd602b87c6c35 GIT binary patch literal 1719 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 H5rg~>ba&GI literal 0 HcmV?d00001 diff --git a/fonts/fira-code-v17-latin-regular.woff2 b/fonts/fira-code-v17-latin-regular.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..9e5594bbe5e00891474695f94fd6a7e85cb3e7f1 GIT binary patch literal 21044 zcmV)7K*zs#Pew8T0RR9108%sn5C8xG0L45208!Hb0RR9100000000000000000000 z0000QQX3!~frlCfU_Vn-K~ydPgnkhS3W4D~fwdV6hXw!vHUcCAi&g|61%yZkAPff^ zcd7;Bm<2cw095(y--`iv7&Z=!GlsY*N=fS=WdEO%8!|-t0d*_L#IUQ7Kz1WCW`fr4 zB5M2WG+L>yv4sf>#;xi$6K;akgxSWMy1`Vjg9N9%pJ_x_++xS3Bl1;mlgnHW)4!d4 zzSq*Tx8@XA|K2o$Oa`2>nd0tE?VS6b z$RI=L3#F7W4#NA~vQbLU}#JDbNT-SA7^K)I-opoL3Q|C84Y_osrbVhCJN-+abL_sh}14K|1 zu>i$rL=+>zO2o*SORKhan~SwAM>crydC7S%P)HO18vP}Yzz{h%8eUIYJkT2vQPa{W)2?fNK9nvvg^<5tZctV3-Y0TA#ZTz&=aD113+z>>iuu&TVJwlSsIXrB6}9>nFHBg z0?Px@czJe@xeBqp=wnZCAm9sD;p(a|RzyvorrfR!RDea3qN-D-X!Cz+n(chdfcwGa zJds-InF^P3B^MQTomMA@RK-|SAHd9jAOJ0v7-C6D)P=a0dFK?k;5{2hUapiJ^4+<0 z(S(qSE{0xi-MQ%8x^vZ(h6>hJchEbe)1ua3y5TJbNH~0*MBlz@YW%O4jlL0QE+Qfp zXKmDfrn-rH&CAtn26%`O*LD59B4!XH!(=emVY19zAq8^WvqZHq24O?b$FI|v+Tlpk z{_k`w+aN=nilkTCL_>@Y~K^@w9O#{^y&wY|@_9+n247!Nx5sHp=on zZ_hjPNZykt@cw`Q&|Y?J+OALlR@z0!Uiu7~Fk``n11B!rxbxtRz!zDdAR$;HMdOIU z6E9JUbOJf@6)PiAsamaiOoY;B1rinHZxpB9UbY);4?I|(gxeaAt|S3Mb5`p9@g zr{RI9B7Ez4v)gQX$>Me1+5X%7o8V}z-h))p9taDM7KfGL&KDpjyvyD1CU8IBiFi8p z$Qw;XD{Gm+xQ?yoV{=>+XHJ&*GhvIcaEmp3Ww(>6AEAgyT*=BPZuh0lv^s70^U9wt zryJ?Mtdxy%T4v;WrW03WLs=phKA?P{Kab{<8?J#uGPoJviVo!;3U6aOX|6tZXqVUv z4{Huj?q~N)g{^QGGsSwjR}oXbtiPI2`lH3luIAK6t&>;O^Yv=I)tH*9X0(|-NELd; z;$efS71GMzs@H14TG`svI^SAm{mDkjCd@`)bIInZEzH*6w%2ySPT9`XF5gaO_sQ<3 zy{0|KKHvVP{Tm0Q1IdBmFy?R;stvV;ilNQWe#ZljE{^q%ha7*w)M3W3Tv#Qn+ezEW z)~V2`-C5oFfU~vp)T`EQxG~%rJ_f(+f_ycPg1n9VKS~#6k0PLwQKhJM)EMeE>ajc2 zo#GMWk?YauG3D{e=F0EY9%yA7I^DX*peS}8LN0$YHG5CuSxKKQ@~Si*e+P$#d%IJjkI52?Kdt0{r&&Y}?gI@0bMnwmp{-w+vrB z_o1ICV$-Mk&I|>;GId%|z;B5#id;SWOStx{16m~1b%ZW4{mj1!@Yz&GDkyD1qTn#$ ztp-j*4`W^Xxd~I{(@OBg1ibPID3QyjmK(wXzeubQ2t8@a$0u@x`b3N&e9YTVHx!1C zAOZ5@cSLiK=7;^bB*6Ky^8nj|Eg}f9_h?=$LBv*{W1`^>&Zf9LPO4O8|`|y#^j&E(<0jtL(P3F+Xs|Pq792X^taZ$KFPydU=4i z-s0s<4MyavOvv%p+&_IYYaprUCcrrguM21RU#_h5kfqK*Cv7- zkuUERxjOJ@sv<^6F@b1NgxCSr0t+j*#KolnLSFV9_3%#d3kP8dH!R-9n;36`k#2;MS^v~ zXQ06PPT3HU(=xNE)s$}_ksNAbT!O6h5aUbZZBq7P`%Je<$Ktq3*mfJ<=*Z{F6UXg1 zNddlsPaFr3Z=KwQgSc<0YHt2~1E&~0Rz{Fx8;rT}Vtii;ms26EP$&gOO98@N!efQr z;B#3*XNNrr@I7|fumYq0VeTs_8C0m})15CJqgyGnd*OQ-AmhFJL7TPlHX?US>VUGY zl8&R5^tc%j?nOz?-llVFAp^Mh_+vhCo|o)6CD#MMpn~V*Jxn{uIGizuI`_;6$~2B4 zX-~}+=AuN;DEfjI%~voR2Pd0rG^nxM+g zhu`|fhmxfP2))4E#M>2gtfRXaKsj~^BVhQed%!(UCq&Uo~NF;k4FR}3jGLP~n2oEo+1eU-KdBjlLCwdjJ<-&2Ll zs+CHRBE=D4UNB=DekERg7xIITN-4NM0?hgBoJ8J$BUg;Vg2PR!Y(VQ2txjHrWjbDH zRjsicrkN3I2BEr^RG5&J_I$Zk3|%`6fXEu3TZG$j6VSNIaZY2nj6<_EcG7^_POUMu ztOt@X1A;04e-wb%bw@26N4^>sS$?N^>-J)!1Snv)FU*iliP&wDLeex_aQHTMOC(Z6 z>!}~gBeKJr3znjw&{1<-CcN>f zF@VyAQbxw^tQdeU5;A6;XU@v4xw3gq$&eS22_zu@)+-Vt*;is3r3d<{^k;aa8^dXS zq(eW-gIiXJp0y!7R4wT^6y^)sFpURmp@)dDp6ajfcXsgw6dVqnIYWJRVp8gK>BFDx z;0sdMJ7q&Y6`4%}iE?Z<3T;ds6O+fqCnx-U?2nYFDL+KnM1_%RmjO1tM6pXcqA}T< zcI?GUJ4h_=MvEV7533LD3A}6GU2m&rrHoYW0{lCSJ8Z0E9-|1G0;)2%3R~E&Uwd)G zlg|hvF3zj+#4sadLwEvGNQ$rzV1JcFGKBpqDNxo(NdzJLv|~qp)%I}-5Z}XokRV6o ztNgTm8@@Ex%Ok@pBvOYVJi<~Wfx`T3?pr4#j^jX6Vfl3l5Ko|)DflO$V`B37+G&fN zRWD6QXn#CvB80|wE$=nqrZH>%d?ro6dD80^n73^_?vr3%bDAo5@|-K^IWIAzpyQN? z#Q7AskcJ9-=AMtw&E-!qm)A=;M?8hy+P(${9Bms$O_eTCdfg?R{;ol>sN{tzzVqeK)I+bgDj=+&w3s07k8Uyivo z6B zBU838LXHWpFJ6a2A$B2T`kC_+PpoAN65x8+6hV%t^;24%b^s>jvfUI$$cC_8B88+| zuwW&?o#sDd1-6Yzfbe45N01|GJgfY2TR-y4Qpt=^7{XFW3Q18>m?30IJ3k*5n&LYl zL^Bqv1UVw#b1$n%!tT_RXeCBSh7cZ7NQ&m6q?D+3eldhVu5}F10+styS2c)IjTfHZ zuy}kRcQwg#9{B7^#IaPU69a@jAhQF(NLUunWmu-~#N=u|8NjdF&2tVMf~=;V(S8g} zU+f3l2FQIEZ{;VIw|UlVrC-c+TAfU^s$T+C?vxmy8zsn!kgBEICj!>(pn%q|o`|j| z#n$O+!d1#jc?2_9;eKdo5jzrc_t#8f!8lQEy-s(`d@n(Ves;0SRkaLU%oWvaDjF zgCtgy?G5AW!gVukN5LE$OKBJtnoK4m$^&EelLQUW4Pi|zacwMM8Mk!@-N&+q*m5S@ zu#djacG}s>m8}|*$}Rw^?!s221`8xAtStoYTcyo%!>p!l?ez+~j$Y}b7S;U@<1pS* zz|exQ#Wr;3tku_X#BAebwZnVF2j!w}OpR}%A37iS&#m8Ufm3N0eZnfE$~udxGh-WC z=2|SC(RUkouR8}eZtKg)WM4^NIu zuOErq?CLb5Dtg2Ki*|w>(U`2_LCc&rvk5|7r!LB0#Ykqbn=_6LPZfE8bf%Sn=Idws ziDEcuoy-ONQN7U2rory_q)Icu{bxm*N?qP6!`qmX#VsGBo(#Ox6ynCoG{oN!Q@HPK zr_H_I=uFu=O*HLMS*KsB%@oiH7Mo~pfZX&sZ_bb!ox1iW(BsX$q()A72Z}H_IHuwD zmD}};Nm{TKxyB79MeAcSLXhT>fORoYG}Vs7!d0$%Q2#cA+K zYsln;3c`#aq~DRiykY=El;WlNsR{;6OpHV_dzAwyfXSe(m5Ys%Vu$}hoUme<0$RgQ zM3I2TI#mn@d;3BMmlnG=a3#XPbzULbQsFv(>FApi$<}Eiu8^hu>7xTUyq5Y!Wx(jV zI@n7hP#BX)Bw$#~)J|O&brNpE#hUKkS;z6)?^(Wo$Pg7}zDF zlu_m`#|-5c9*J)@re*-v>X@#Z&j4Yw4r$QcGd+8CYap))l9b{iW|eIc_PW?vwDD5R zr>inC$6Aa-kab;2NPItMTiF8PQPO`LQm*i~#G;ic1o*~2QAQxNPSXok{Weu{doj&2pFHJ75x*>(jw zi&mMa?4U&7F9zL-mWWUEQe_@BBvt(>xU)&S6&bF015l(2UX=>-^XRn^#aNq{P*3z@ zIsg+5peN@SHhJUEAG8&}^cURmo_z23At6 z=2HRJ<8qa7lT6iKMSCU1FA!Hg%p=opF}+hx>T2-bUc3`|1rhgNAIuYK{cK<`4Ff*i z`+b*sM(<~48HrgiZ6PL7gQ=y6xHAbeXJJ#<$_@?hyo9K@IhPwj@3Yw=P&LI!DH({x zEQ(Ubm|c1{H_i0cGdXoNxmnNnVg^##?Z9|vzukOk zMr=vDUd&-UZ*4o*L*OC2YvXPnId&ZuC>%>_FrRb^+<8`G9l29ilgsM$R%)S4DI>vv zi4u_-jFIu~>H;Kx=em^aEVC6;Uzy8(Bs1$Up6PAr{^#yfoU@IgrPgvu<@EzCN8tri z_X9Pi=ehn;kHtkEx?n)J22ePY0xRDBoZ5b|!e;Km5Ih!{1I%4Zk<_BG3 zz*-5iCgzu{(f!xVNdc{uCnB@tgmpR{eBnl#%Xu&XCMZ}WH$bu;zAD~E+OC-2XHe2s zZQJ~BO*Rxs6*K@tb`ezNh7piKiCDuZ#tLkz-l@Zyk+J8^HV9O)>tcYhOd_~qlCg_U z){Klcwvz%{*-yk+22R#ibMLSh`U;b5<>D%V1C%5DUFTYp@vk5&ub)D4ttN(BNR@W}GEQif_EVJuWe?a8#VA#pO8b)qnpL4zYNKQ`! zr||0eYj;t%zr*{;s`8TF|Il69?aTQO;==vOhS#M^=?8`zMM^MZ8|ccsfqFWAo~OA*!9M<}3G^F;JPgjm=3p|Gh0mb%6_^J{?;}TZUft|%|R0vvsauyPh}$~Eh?zx7_D zwj(G)C=xh$wCNKwZP|8#WCTiZwbxZ&yE@#-&ULLjmP6%I&J<~mx!1bB#Wu60?K&PU zrJZTQr79HA(+VRu(8>T#CWE!EZyr0l!T^D+9E75<7KJu_GXU;3URp`G_a_vjhkH;T z4bTvcuu8iQA>G1W)1%k#ylKd=NGOo0vqHe>X3%O)K4ft1G!r7bhMZB{T#YSQ^w~XH zgv1LcW}K~+@LaoJ#Ukh$NspQU^GtzKWE=hLE^9%yK#aPHV@P$gXPRY7#FkXdVDKkc zp|@D_k1&^Xdc8@?b z3nRvCA@m%)(6E4ANMJBeGMbZw8TPFOgF1 ztBJ_7uat#UzhP3u=3~aQqzABFk0I?}fD#V9=5PJMizz=xE4+P{(%F`wNsPVz=w*}W z7jOA6b{p2gJD_ppoiXn7LORz z!8)CSy8K?h0dM$|5mBR|K&XQ|$QVG&lVeDgF?$aKr z5_*o`FJgd>i)2S&mLha|EXc+;^<7wkF8?x1c}`wy`gVe}(V3nCV0i@5yD15j1~GFB z+PY292x`B2c1iWY_AIkndz?a;Nhz^1wUSt$T1mUbS%n7?Pb}8grhO-rR0OS^*476+ z659N8t_d1mOhaRy&GPpP8(P~`l>p3yX_JRX%>tjlQXKcJh%hP#N!^BRD}T7(76$wL z$@xQ*;HvjyzY(3i=FgU(3PrE`vzH!F{F;Lv-m%{d5%8q? z@bhwSZkJO5cDJd{5o|p@ZU03mSpfQ9*A;-S{R-rtJ=SwOWM?qN)Fg}?sl zy$C6(YD|b=NcKb&0GP{k)k1T5D$Bd&pjG2*uS#Qbfv4W9Akl0EX|e5 zqzb8CYA(D*w3HorrF^wwWM91df9CI`Sk)W&${%#m{Zf%s@(dsQUr7l7HUMz11a~v= z+W!^n(b{|$XFUc$)>Bq>)@WAD^C9cV^V7eF|K|T0{p)C~kpmbDu-GP`Yxw33(?vGp zJE|9xo?FOP82RJH-xk2;|IHkC+cAsAjOQvBA(+nZR{Y$$Vq%uV`eAlhXpVO{GZMd3)~|JW%~rOP0cEr&?HE75T^q|BMhTK2M$ zgMvum6aygkI26A{YK9^Nifm|Du*rd;1>Y_Q?6uE+ z8XRHCj5%u-Ib+3z6K8NJcG7tB;0ebI79L3ee`FL)!5BjLV&mb85id44akB7b63CS# zkBtPI9=UJBLl4M-Q6v=ry#N4v62MFW=)4LTx(M*;0JjnV026%^RWZO_Q%PS=*o=f6 znK-%4nr{I&drZWe6qQS1LP5!7X|XCr{iEA%{z|{f6#P_%)TEv+Zb21X3zJ2g z1}Vgp8mrfTGpUoJ<3mR`RM*Dc#fX6XjB+2wBL(_F$PugoA4Iu3T4G^hA;`Dg1aHuJOU(kXJtn@xPs1(-gn@yV1-v!PK zc4oDD)*5YTll7qo35!wuA-^Hus2aOC{l&IAMgg+oeX5JH8G;8%4c?gIg$*g#5W+tR zkSc5vFv?~hlQ|YF>sgy7Ba#&gsLL`kK?5P~cVB8eEqYN2O(S8<0SpMhDgHcy=(}`e zpxzf@)kIAc_^il(g?h;eJOf)yLO^dG-+t2Lzs~8P#V){k~-`W!(=*S$OW3z zQsCNnioyhmJ3NzvbMYvOl;}!0$=SLJRd`B6k01Qm>8xtYQYuBH36ck6aAQJcrWC22 z^8O}3iT5~j`Y)xt-y2r>|96mz&i#O@?bAx- zN*Qa(svS{Lb2+}kQvt$}>eM3@+o^<^l!zR<+y zy)yP`yfEarbx(677{e=EqtB;PRNTRe=}2M)Nj^S7!Bx;Kv_jS|ZemNY&QjfCah|Zj zXYr4G*X437IDL~R#hDRsW2+5cu5i7?&9#p~(S0kXk!p)V7DMHtMI9meknu7a&Z?s+ z%*1)HJh-X_EGzRNLRo|>j{9wNG&03__$Tg5t7i~02jvlbYd(U|#TA8Q-9c5{H`MQc zZEH-q|H>*(nrpLmXnM>A1tt88hk|dw_7@Gl9y3;}|6^Rq1f)o+Rn^JlB?)DQ{-;c; z>8NN{Ej_!KB3dmy6Y7_0Zvaw>IyR7T5{1dB91dEa8%!Ofp;SM7x_N2Kc$#^%Iqq=k zdUl(IY@4`mUO01%4ABpNNgc@v7*GdCZi0D|#kEYM-83VLDbL(9#GKWM>_Pt&D zqw~ZaiD+7V3cq+BY;paqfpEmBbT(28KlM#QP!5Db`$`WhKfs{c5S8?kf@R_B`*fmm zm6+5&sSQ;GO4R;HTP(JWWwfVxR#wTe$5SMlN*hWdkWB3PIdO#|QT3XZI}^;_yR}x- zFy25WrOvdd54L8@dK`vqLFi9_e}xnnrc z#8$4d84L{8-wM`~O8C}|)6-Jb;7#v<+MP}!#t=#$=<;p9!-na&dMxOt4E?)2jI~aK7q(%LJ#=oM;83)itI#d|i zMpB=5n`L6$y%5rk`?&$DB&zOtOqx){!{-5}fLApELPIQ?j7c`_( z#B<3X8&}$2;ZijM-5!Nr9?iid(`pl_TP%jE6HH&3E3~9v*p`!1tSu!WO~Q5L(67k1 z#`i|ThTlX;Vwr65U)GH+muVSnr^ z=>G5SmPnrZHZ>aVx1B(9-Iu*iKAF7r@RRQi<*O(*-hX`_lNm^sb zVm2%SwL1jFx;Ztw+FH~}M(TYzgvQ!@J-T%%PhK8+ssv+Js2?`3e)M32HI=c2p6wnV zjxsxknd!yp%)ILy4frVsN9K8HRB`E|z}%`1;vz=Du!}`dobD3C`$@kQ+Tfz^FQ!x5 zir;#)j0UdtA_(^i-TxQC0KOZE{GrC?<3fQ1Yylo{&W+FVL6Va;K}r-R-~X328V%$CXDTas|*#?VqLG{I`1NB~q6zox0K? zsKnjV+=ldA43?+)j)>;vF+S2#tn#h=5FU-)UWW#3QR9TYUk5omKfA+Er+SptyulMY zE|Lhsa1x3j-;#?K(Er@Vw8tlMjBR8ZFw!y+3fpoO`;2oeuwXeRlC3OI0iBQDTF8{U z8Oub}k*;?{Pz*5?Jh4gFg~>@H``v#r#JuE99+#rP!PcA?+teVJRVw7qB)V?h!WnXI z#vy@5Pn8DU@(w~JB&Q>p^a4n`2Z4HK33*w?DA?zKMX+TOmWFgRA}5^KbqSUlRU~Ax zoVcZ@s}PD*60Fju&LphEiR-=$^1injmGP~wf74+PYsVC{Gd0q`>WJ){gI^oS{c4)u zb|gTC{YDSxYBIOW>rK7?Z9)A5=|y?MD4OGTQg9*YsW}f%b*B7oqU#|=6m}TVC~x#Z z>6MoxT5g?r^CxNfXLSGx0?M*HA8W{XtvY6w97K=X!oskk8EU@iT?>72 zW#=DLO>2%M+ZTWL=izJA>iu1*7Hjj}@v>Nshgid?Ei`f()vV!}6_ikQ}0ryltK2fb{Td>Yqq0Z+aEFI21!feB4; zWRLc#L*>FHf)}=FaYfmE?6}<%b=+RQ6%l-=7Z+UgyQ|o7zTx<_G}7gTS$uixVxL@l zGm5vP8MEYNYxbCq{@3JyfF4v>9W?CPq@-J z%XfVP96uD3FKgR{`|E|1v2Bg&;G11feiQF%`^$+4!g$=CuH_V1tGhfKkHvlOo zNu=>B>}Vf z1pU96XqBPq+surrX$s9RG4(^OTPV2>l`i&vFmNU4$B;1Bx76gf5iQ-OJI#?!cZndf zLAhZZD00V1%A}`#08a~Uoio|FPWJ%IIqPvdL+y_x*Ukr5$6fHEV<-ZaTdSo|MsqxpOM(`xqW5_tAq?D{IRUD?x3<5>&N5gyP)z!LH9u-X2%>zW| z$vb@S7js7rzntQGtl#BhUoIRz@?x6rHNURYZZQ5L)XN#hjR$MUNZn66oe!D4^Khb8Sa~u1u zAp;!97FiHg&~>`?Z(XstEv4h|2Drks&+i!0o`zu+oVvw>RUZ3ow8xo|`iA^$WjH)v zKD#(u(fOwH&tw5`S6E63E^Kj)zCt_OD^!i-^_JtvCAk%AhUANP8a-z#zSEv6Ab=`Oo{8>U+S4V90o{pG1BI?P& zX@4)o{Ku&iXDd1c16RS-?%`a3-&K^8z3?o4u;cHD(BSwiAKVFQ5u?SG#b@H-Q4-&5 z(<-aWywujTgv^6i!zE3tv=DL}-w%7#J&asv?;l1)dxdn6#Foj13y~T9z;^ED&GDNP zZCblz0Q;3YT*qI#nO)a-Jtt+Yc6jV)pR}j43bp%=f{06d3B8jB>)bi~pVd>qKbxyz z!QE2X(o*?b>%F=KcS6NwNR=VKu5wRal`#aA5Zo&c+EDG&m3i}Tu7swAr=6O70wx)q zsa+5q+WFLJ{`4FOXuGT1R?y&3?%gc&Zv^P6H(p(5th4dTafCfYr0-Gxg#P*I*5QB0 zzx0F&%A<2!>h{qM?20*NMzODH<<*T&w~joVSPKu$h~_X6tbN`F4#habS~Ksgyl8_! zLt1&%P76kJnvlz*CE)Qf(XfaSjV#^P$Tt#Pu!m3+T+7 z?LS%2aA+M+R(IqDch~sR>0(C$l$!2`I*pC(dQijP9v;a2cB`Sj;#^_;n*n{pU8C#S zy`!q*7V<|LjsbY~W=IWW6H#c9sppZN9>TgGw@VW2bHwML@_$xicn#wefYWV&_u+Iq zR9N9Q5#`~DQG-(vMF^6LO37P8%W3-AjdvRJc34Jlrv)Auc6pSPd?fG(blOzxsUYg0D{(8-WO?`aan;-80iK>)HP~p>nR_=R(E#pWyHaA8^GY?57KU4)XA!Htva{=iMh; zr-9<;5umsNEDJ}1l{LhOrVeP(4U<8^c`_%<%(yJX0;Y?+BvtN0a1?fNNaF00&lxo$@_YE zFyY(PdYSB6Rs8nou&Z{xwzayt_UgSm)z=h|SzWEVN_Ow&E0xKpX@1I|FzmZ}>o8S& zU#*L<18D(@bv6-uVNqIZFsgsAcW>ypkkS_3vUY#%cj`Ers zGjWF#P$AZO6v5dN6eGPY$%>;qjRD&o@cKhle%qr5!@kcp)Ql(QZ9COonlz*++5pqF zlIfj4X!V68vP5!atrotJ6b|<4ZF-^nx&y)oU0!zD#6J9enG)daW+DQoA!rH!|Bl#) zq;>j-HXN%WZ;$qef1hnUUMZ2>x?7EyPi6&$m2oFEn+i!_?S&Ejkur0`@0hajh9-N0 zIttdN9A=g`ejGl2_I_Ez(rfMFmc6k6nw3`{PJx*cQ`|E2Qx6P~!ZIURywX{MsN^&b z3-ildYI2D$OrUr`?ek#C2Jr_v$sq+X{F2)1o|#QogYfR`^wj}R@SxsiVvjGgjDdCt z#(Urp8``J%EO*CTfK);EFo9Yk=KmH)BD>3ZRx;y*th)=@~+DGL*XMMk8eWA#VD zUR}tC#E^&xW_OG&e&-QLlSYF_;5;L$t9_{T7Z?&k_WljIxc3rdMn|W7_gXnvzp5-z zRKY90Q{Mp@Q;wZil{j8e`O9(oBpd;b=gaLFU#|RBwOw^S_`SsWw$Vj^XF&Fvo0})| zr{{#V8v83!cNO{hX6e(Adv`$QcE9S|J=_PngZ_Gr@+IaH^#jr^F>w3aAUWC6($X#l z?Ch{GODeJiUww6hSEjrV9DO`l3L8N_YSrlYt2W78RRC^C>YaRpQty^BILj3u&<{ zl@i{{VutbVy1P2|2`{9VwGR%Kb*876bZV-k{q`TYqGzu%LYc4l&z^4anW0-5Pby1V z)SY{b9^tCvy?jFRv%P=axQ+ZbSC9;|lj_HcJcIx`&jpI8BNFsEUs2b;`Ysza`Zd60 zUL;t;VPjFBDf~#g`GiDOoIf>=h0$X%mT0 zM<(<}2m4j!F?}^?iVaj&bBaiG_I_GZ))te>=0~^_hVYE$!FF+se`X0RNT^#*$LBbc zQ|N*YQEGUFC*CVEo*A^_4@`-oI`=)V5}sAIW-0t3~UMCmFN+*XQ65e*nAbyDy-YFnV%93Q0ZOL z099}ay?<4F>Xe923}j-&X>NWg!zIqK3a$98@woJq$*AP>t({pLD?(B6cy!7X?0eT% zZs67;xXJW7n#h(a>mAF07h^xKKq~O8bUS#Wl%F-d8YgYN6Q4SnUeZ2Mh)jj2w`Q>^ zmHEtOYXVtnEn<))J6n~aqEbeEQq60)f#@7&c5`K8b7!;3ta_j?s|p!u$aZD(qZ3Q> zaB^O;4+AH4dI4;iy$Mv^!!`YQJ!~K2bjX4Qz zSvW3eF))v3W@k+&@h;Z3imqLY2Y(F+>1==h;JEZ8dIrUx9^alBPUxtPh>Nd|Aa;aD z65Fa-@p08*gm%!jb}o?^YkVYA3|uo$czJWB>>|%N?OfZWe$H41Ho)HDA_~T_UExvk z>L)}vgX$wbaEz|H9$p6)r%*dOli z6@ENT+CG}fL@_87?ektlPyar4etA1LE6pz3hOH$s!&%Yof@xt+jwEA$i*RjDtnq%V zrJoPh9Ju4hbeCurVYXZgB2HjS3?ujk^J?Jqwh?LR($6ViFdN|%u|F7)859~R2;l^$ z*n{h99?7_u0G$lzzxt6NWP?owVy9^(ZvI!)#VF{7ZB)1;a#>darp=gW3<03f@2ZZ=%Ry5XPESNEvm8-`( zF!3AynSK>Vu?F}?CXy0>LZc0dqEOLJ6B0>X%|n4+7M0q9MAid#dR#f3o(?&DkCJYx zdsT2lHt3EbQ;}}u0MN&l8?pk_==K)Qv!XG7$m@4BBptIr4vbB zsc9Y&lH-|1A_AxZAa$uwmlaex_lYyNy(+j{0au7HK?VgFVBRP|1vk5&91_pl1U1_S znb|!!{o+Z?dM(MUT|l#AfF-%10Rxi0lV-Pi7GUSH3XQ0IU4aEk?YjuikY7kJ{?MW| zcI53|#CFonfu-bVX2f9m8@>FHS6cwp2PLehu&pXd*Il+jz2J18%N}%HNMVPDB(H_7 zSHSvEIR%oVg`0?JwdYio`{fvT6Dc-b%E1#9I}qM4)qp#BKw?v{#V?F}bQ$i+19jqpBPWD)Xyh z1OqTc>uE5`{c`lN#3-9C?R3vkGkimz7deDKLtNkGv7|$InJOB?Ym`t?ydFO^;`Iu!kor*wf%a#z>f$ zmY#VHY@ad4O`3pL=<%DB;V?-RU@Qyp3=8)14hj3(e==h*tb(3idVP|}@MKovKo|cy z&P(Fzbxb&NaiGCm}mmLo1NJI%9|o8!PrqGHNGOy9P%fFx04amzn$mmsy1b zIh0_5y$tX?Q;<8t-abf|E-dQcErHVC~0cJ_CW z0YsZ7)Y|fQ?(e4E4@kn=-FXA2HMb11#L3U;uw-eM&D*OD`K}D4&Z$vSYDjpNR1eZO z%Ok(-#Ek?F1bFj(Uc1&`bE5f<-?MATQsr7D~4jv60b)ln^Hdo_2d2Y<&G}+9L7zNcNRuJIgnsy%T3^ zO0f}a4~W1LBBDt|2J3ZvZJ~|?sypBcY1qH?Fdr3&RklvUSb>_EU23 zQZo7WaF&^!Ef&75J#l|=r=)gKmB@W&0sbS>I1K;8W5r$aPm`O}$8zl&;8|cl(;IoxdZ}(sFrpiNQ^A4hBN0F&xbiqUi%cjiM>q%z4A2s72 zS%B<-q+HqT_QTgac_3ZfBX(_xE$c1=t`EXs;ME!$2tT8qIxUykU#8@jp=$m{vp4XN z_Ip#jhqce|DUAB>ZTS7njnr`e-~!g8yGMS-AVCUW<%hi6a;?2f@z-77mALt6+-lp{ z_GWm&@~r2}G^_dXEUxxfuFVQ}!Gdwsf_HU(UIXY@$u?x*dqg+(VBzOs@QI;*`PWg> zS?Nr{dBDx2u#N;eZ=}bi$AB2pkg5x20^g2-BW9vO1F^$%N|qFexX(kfxaj%}B~Hty zTCavj1Z4KXHRF(!o} zp+kMX>g~EH9X%NBk5Z2T{1F50bUmxm0;wTp_r^wj3^nH1`0XK`0k&dMrrM{#j!M^$BMC$MuJbP%bZU_FdaYLj^TD_`XqPb8!a7O+DO9TOC5n^i#? zl<#EXykpZp_cFLUZ6{D?7wYIV=}=srs)Mr7;m_;Vw;5rg?+57`i5v!r!cDUW508ox zW%f9GMqVu62qQi|U~u}QLDr*_bNbmWdr$XHNTZrP7bY}XY@+V|qiFi|q<(g@{E12Z ztRef)n*V~T5K-zvATA;^1R`+tOG(cc{n4M@|2@dQKEQ5Nr!l5Fa6g`+73Tqlo*e)&dbCHDA>1Vy~U=NO?*EjmEwk?QjtjLD7Vz7AknTlatk?{ zlY~`UV1pa0N`bcS2yE9Q4|bMk06L!{t#o;6d5)F;ZF3CR%HX!f4aROmZt=6VH82~L zzLbLfvnCnqq!vEKt%Hr?SXK($H|g2=0V35u)~)Z`1Z-WK^7xBd4>cdo>D&ND2)UhL zb_~SS(wOknbK(4y!vCZQ#iL1--tkB*Xr6I&TfVzY#q`>V=@ z-6ez|6{I1kWi6oWGLFuCa}3U~Q(31p+5s#o-1rVWKGqU)wvl{@+<^AB_qNPkz;^C4 zrSTXrz(SMU{F(1<;c%{r0?e{SJ@+Cj2Yv79|F7WxP)gBAo+k^93g6FBP=?^bQru~2 z<=N=p$`yb6wL~g`1ltFuTJV2ZIl`m#4l6t@Z8G}KI(0Oumb*nN;j=R;g!_2=N@`+P zF2oqfhztyg=4BgnTIusGVEQ^cd=N!v@gi(e-N;Eve3l0`F~f^sUp{MmKQUw&Bka8- ziaedrGqlofs1&Z77-lc@WJSo1h6|^^Czf$AjlRC_WrcxpjB-~oAhvOV(qCPAfK~JY zC?$01y&ndTU1_sve8Iwtl*7QPO_bj6j&-C7j^x@iLXrZ!9nz9rc_u@M#)=$zR4LXf z%sa^^JVrc5$V@+i@rKd)M~m$kAzA)7Xkik9XFTNEQX!(VOR(0tp2>uWc=2(f3u4_V z+}7O{C&Sb@&-LxyT(Pa5;K9-LvCoH!4~&fg6ukZCp^^j)-1M100un4qBz8uCzI9+~ zenUk<5yLge!V$}9%|bF7mo6+7vJT5as0}S=>!LrkG?RX|HUK$MpPE}z)6diai;DI7 z*EN-I8tN;zURTxEzp1L)s!tABtgBz7CPrl~WF(%>5+t5nNYBceOIKZxmEW=FGMb9F zk9t!AnvQ=g@7O>-6u`$q(PLij-<^U0sf{c5N%B$2m-+V+oI;#{Bzu$5>Kj?d<3-lD`Z9uA{i5pPW20(Yed#$4bZch@4(}XFw{ak) zM90RYuz{_cGC06#=NiD)GT?IiWffjfm?7x;`rOfiqqE}K;|0g(fXlARqSYecvRk3} zUh&#z*%M&0A)e2S@<)dYRM@?~f?d~|Q}|A3u&1oDuj!RBQtrIDR4N+1O!?+#DfF&04=rz*s6LgKlj7x-(QeEIj zY^~aDSX2AKVMR!``kKg)LbL(YAU-nGizvHG*!N#$fBoL@`U++#r%M151LfP9rJ}>T;w@Qjj=&GWTcY_l^ex%L~d+C^)(OFmRH}c#N?HNYo5+3|a35*z_~X zfBGsEC<)r>Vg`l_+vT|)OwM1)Is~#pOP1mA21fT+sCP6uZ`-?Gz1lxl)bi7fH?p=z z-lA>@6j3iRV`#;pF5t!-H0;He6hDV8KL=WWXAKrc5OVnXc&!$Ud9D3fg+cmwRbYV@ zVwZ41++k?E--!fj9mrI|7n1}v%ccy%>vnAf6(&hm38QnkmG8F)Ry>yyl6VwB=%tLB z)$LR$A5r>z%RB)$0xs^E;F6+UZQh&_ioJJ0CCK_h7SV}gOp-gKfH$lEe;9;7m`M!N*Tld}>3sVV70n#y)UT`iB@d^NloBno{t`qq!>6N|q`! z)%i&A=SQ|()$V_Gx!GPOd4_LDG1KVA;@`;~EsT-km*IX$#sy6&Uh3jh*aLfczirhD zlZvX6W3R@yBnulTb(J?(#oraLN0${OEv_$q1pY1u6nx%`bbMO>m^BNl@`E?xT2h1! zZfk>)H%4E^3ONr7-qHO6@q-gTeMfoHkD7jMyG1`Wx`(iEp925I7O%6*3O@@_ zoQ<@()U4ol*O~X_k=oOzrKbvHYOlTIvnxm{gz;v8x0OUDq0xZsb(w4r>({s2e&UKM_xQZgVz;Ix8Tb&%Iqg0uc0`%om^`yt#z`Xr$jIVU^k z{Dy!=d21J$OZlFcoUVL+)8P|zznu{wXp)EiY5`j{_1d$5jTJ=wz8~ZN2Y(*)XK3CBR@*zpp>oh5XQ13` zAqm-G6a)vv5+DG)+$qJUuli1dz7ul(lm0XOEayz0i{-q&Q?S0%wtXk;_{pYF-!JqF z{X#gjK9rl5WBtpygw*-flx6YD{IZtJFhASWkYD51_%)d>wxOP5dbt#H$1#t(^uhjd zf6PDTzs%#DI6d*m{rWDQ`N#b+K9&VhL*XCy$NX>cu`Il?dqnNdGmn~%gL9gf;2-zL z+_5;VpA3J7Kf|Aqi(+G%%#F#r*${$5lh@&8$Z|vOD{hzjs@n~}fq!|J-Phn{*qw*q zzT$Sl$oh1n1W`iIT{gw$-;*-(9XAD21kaSm`SKn$ ztdYEBO84Ede$i`~Q8{(`4+{7o~ua^Ll+)0-_vPj?rAl%7~5(*hi)uyr&;?R(#!m&na-s? zYg5kBtZNf%H%X3~xbM{Vhs^gKc+4bgHG7aI)wnwTkv}z?a&R6|gCEuiuIy2uA-K{* zeJ?5VZDw|_{Pu?mFb`d9CjuLpx7wWSuYDR)$;?};(-v0R4Eeir$1ALiAg-ca!^*JA zr^k=TSqDpSu;3nY5cDe0?y?e^`4wOjv(E5@Xq(psscWJ|t`%LhE!K8XP9ulg$ia<6 zg3Pq+U-QxWT@RPKxs)9wx3E{hJi^(keDn1s$Z(ZA4;df{-n`3ofhgf;UciF}W@kycj#OdcoK4+~j#tPJB-1a^%s*_sH#!my<)h$P}Dd>z-=PbVJmfVx!f zGtXBP5k^ysC9nhK8@9hIe8APA0aLF`WiJ50uUUsZ0Qhq>k*KkYeH(2% z>0^KSZyf%5c38kh_?tR6*UfcY zyyf;UTdB_0@G+*l#`)Vp-(w~ZGcu+Nd@JpFxg>H0vhjQ~CvBW1hXk74t;Izoswiky zG~t337Pw)J7yAFQjJXd_0PP=(Y|`z23kn{FF6Pw{@E-AQV%Dp?X)RomZ%MQ|-@88n z+Q;cfGD05<+5rC@8C=2GSo_9vk2#q3BhkZ#vveE9n0ff{nG?DeF%?}t!%wW3)fqkK z6OY~&`$Nz=UmVZm6^q;wF}hDqpvhwGLhBJ`Ma$yMea<(egkrp!mnYYHawL);YC4M$ zhnN{>oCd6UznkkbKrVea1&4NTu6VNPC;ol&1qzG{jT9o}H0}a9j0BvFh)52&j&ZQO5$A7Q= z@10$d9&YX9SPQe3HP4OzzTNwR1h4O#0lVDZTYnyy&aflp&f66+eNR+A&fiu5YJ|@? z9OF^eSQ#J7>ma$S(Mb8R$dm>j^U{;%?2n~M<0S=m)lEexQug0QN$@mou9Y~#OQt>`x<#AG@ z?U77xme}K9e6y?|d0A>F?PLkN%>$88FvXRlDGb)ju?sS$}11i2EIti;JlMU}Q{WwpbnS;vIsaoL5u*Q&Le^UqGzEzg5r{hZjPel})4 zF_D_aB$2aw+iwVp+R&iv{)zMcd?JDQiC&vtSo&2~-2r3(-HZlU6Fy;DZe0#GMp(oI zf1n>pUoysSnV7mks`!=?mA|fIRqEi#AkSH!Y0+@A7Bb`=Vcqvuw)FRKet8q$^?bdCl?{g%$ zgurLDX;INGBP}g9LFO6hxPU{_cZIzymI5# z;CX~JyB-SdSR#AcJ&5>%nko?8S^53rB{%~VEqDM5Tf{TaG$`L23?xUEp&OhEd4D1X zo#-NgxL=xtUfF4Une&)xm;hb&(wRaxm)qTx>ZZ^|5!FstZ=r)`=4rXo@{DseFhRHc z-;u68e8M*`&)7|;Lh{Vbd<6!+u{hC_zjKCeCVMA_?uxo`hDvCaf^WveFHrF9(?*_X zCeT45BYE*|=j8ZQ2Y2pR-`e}s%!P*9bK%ck%OPm41nG{3B8|hr9_>I6K0}&k!aOJ< zrC@Q{hyNk}%j}GVxf}blXJsK3(P30X)PHZ{@_Q;XrUgT0k?*?k!-sf{f4qi{${$CX zW^#EgHUP*1T%ZuxP?+O5!C{J!x+bhT5pKhP*rci^LDx-??*jyr5eSnREF%C?U_cN@ zz%Y{%MQuZnPzpp;BoP6m*>D0;@6}g;!@=z@B^LyTBtIh{VErYF2-1QeKw!`UqpAi3 ziV=x}pQt#+!`yvWfyd-6gNehN#jY4j9Vo?fMM-=VZ1L1w+@l54~IVM5QQpAG(%R`kI4zGP?1s?6O$3|*ecE);E52N5M$x$ zk8-3iQg)7nCyb2QY%nE*@_iaoquyj>Q-#fj6Cp#)hD%(IBwKQ3e{jv`7YGy*jVMJY z-2st^wtn2`Ayw0`1Vl2aL`kA)mMo)n;-O5(^OgHNVW=`kN&2E0Og6KHqf9l6ZbzlI z{WMIkZO3tq7oO*JnE7W}4~xNKoVu>(VYP4fW6pbs@9RR{rZ|*C0^4y(lD+3SD@8Mi z2I(}jI%CFG@9F9hS1?nC6UB|xq3I3`ID#u~9#^3ym`k7&$(i|BbeVXhIJ?-QA8(lX z2rNm9db>N)x7pulj_ll_>Im_niDuBKs)%FP7TOa}om}~qYIo+tgE(($Ine-m|rVwN|cVc+w^P{{^KnikZrBgA&0_6m+(2m)+**=P2SGvbaYz?fCRS%gjqzqAF;Y9Sb}Q*i=?dT9~(>MyHER%+CBa-5c+i zG1sHC57fr=uJ6X}h*72*j$kmP@vxD;cyY85ca2(q$@5+Wg(D$O;aExPyNPOKrXM;F z%Do7FW?z7SQ6b%8)bV{er%*@DidoiMtEd^?C8bugvtkt!Xaow0D8(md{$E8F)v;I^ z{Z$we#SJ6wa*|YyNYC7vz#ldP1PK@vGA~>1J{B=^a+c<{=RM7?BA?I9sd-$->BArU zJ4iQMB5C9Rz7Z|zUfP&xdMv*ADh>BgYwcvkTps_C4qfXS-JPw!jB2U^N}vVugZ)wQu{foA^>~hn=<6m9CNt z_DUBY?@M-tGoFO*&;flFxrNku9QKY)eA;}Sgr~^L{<_yj#l6AhOW&dsl9O~_Hus4s z7eXJd)>sBgm+`Jsfdw|q{OCS+Z-_au)__*7;KQZfVYdmZgjzxjePo3ohtaSX}H zKA`mSaD9*>85^^jcw??@EMM!;(lsb~P32A6kFveDx!b0_MZtz3_TaPV(rz?6lhzCc z!1186Gf8Lv8r7b&6jQd;D-9T~1n<*Ia=|f*CG$_Gkx5-$8D9Ct2C;&YEKWYf(3hc< zh|XX8_V5#=KBYxICg2f@99HzFp~(=dxD>((!k|R#=o04&kMZ9tg>jJ?&o4UHMJv&M zI%x`rz@pf7e^#{kq0Hb)8irv$Qej0DZk?DB9hNk7Rgls)tJyy3({dv*=xE;8N6=vm;r?KUSv(`6BcA%VG-|*Ka{=Amo7T`$wHNxue{=(*tGlA{;RcY_K=(yo> zB(k=dD-|P3neUMQ=$+vq7n6n{DqJe+2mmh4(c5=Zt+WF^t@<5KXi+`0f*6gP0K6c(1Q9Q zrj^S1;EC7GuiQxO$@ov__Ys&aq~C6b-Vxgz@(ySZgiTnNb8Wo2Vci`C(){+$cAnkx z_uInt$Y)rcI!sSLdV=SKrr-jUmOJM$?75vxeiKg)S^IGH{x@^+%0L6OozJna^faMO zez1!TCYw~UW!8(+$wr|>Mh%t9`fYj9BaZtvTv>Lba?O&Pcq{pQcJa(Dy9ISeSv#7X`5 zV2;Dg%uae%UpS&-2sr`@V)`9G?AX2lkOgYJ5$r{nw0&wt2*N4}P9`jO18W8@TF?zA z0wdP}i-`bm@Gg`HvBortq;p3~DHHJEF&50|uZV0%W~4b9?REtl{cf`^{(eTbkG1c- zpiVn8W6oSw1i#6`M#k;gdp@@SqZ(~W0nLYj;tVK3|BjCFJ)ksrIubxLb{G}56#4cy z4hS6ASq;IwKjAd8&cQ=7x(!!93d&`EiOc=|vdsRp?HLC5TIFnY1PYL1IEW;dd@PCv zcptH!GOPv+si(9W+0}6M0(sc}eg#8F&oZ8O1#k#wLH)i@?x#xxGTN<57B!|VBQuyR zhGM5T-SidBiE%s{0cgh=B}IxL(i!*jbWh{DfDXjQav zmq+t+l>=XTfEf@d?%xIgYd{6^67`JD2PGr!H9rYy9cWs7RLR5sFC`}*BAUNun;M|w z-tS`la;S0m6m5@46N(sGE@oMo-nczMXxPVKeeuMq3!{DK-fPPP)w;{Jwcl{3MRt`&M`D zO%lMPkajH|b^a9AWL8uFMZmGtB9Lvc49C%s+xDrg9 z;QZLZq_LB)lrSJdjiQ`B#fx^DY89D>9HI?R{16(+Pdocs}3+!-mhAvK~2o8DuSg%#oCZG?K+}f_Tlna3a6I zGR?Vu|HvPifFz<#=kOP&f(YZBM$*hKD*DvUttLJ8?Q;S~@K@3hX<;?boCho4%EVdr zo%S(TepvFoCX`Qf;fo}2r5>*yE!~tau5d2bloU}<7x8j^W%ZO7LjRT=G^(}jwY!?R z(Lx0FA{ykABzHhjG;N^^)0U>uPHelv=$SQbec+zEEr4yXEBGcuUJ+rg?eM&FhyY$A za;E?uWBWMRHfL@}G;=seq`?X0Zsks68;*%LKw@8DRL6&>|XUH!{l zHXVi1*7#;>tk7?VSqd3X-y{-JNg#lJ?>pZQSA!jyRhm+TUb=T$F^J4s&4)>fJ$}_S z9e3fJ$(HG_rEIQGlE8Yl^Yl{!$)x|do6ulrA-PqKR#!}8h)~x$pea(jKLbdOiON8D zZHfK34hTUMj(uYElJ{r<5kXNh7nK4`U5r7NQHh#=V$H=7bkAgoDx-;0Fi@I;_F+tM zSk9V*T&+#v#@Y1c`6-%^Qw`gbb>pat)lwDLRJD62`U;Z&^g>k?V^=hRNv)bEC}oO3 zZTA*mZG@D$N|CkaKXg~SgSks}b9QoTFIHQ*2aBN0e58`hmMtx7^#zkPw-;=pZp4@@Rt(GTnd@D;mJIyRg&8JZ+ zVr?uFb+2s;E8>{fFwr^(ci~*KSy5;Po%Rt0uZd&LAqq&yA`wa0M?Ns`K**^iC1ve+Dx{33pG`=X zFnO=nOPIL^Hgb<9X1^fNoe;-3ZXxO3qVCQ-_4h;dr};PZI6J`2@)P#r&CSe6B&Cu- z00Q22zrGFZYGVgs%>IwBy=rcPVtRafI)+5@e-*pm_0GdTK4pMnPS40lB%zc<0sz?c zzI!@SG?EiD6#GBHJ}aZ?5Je2Z85x+8Nl7Gt0Q)^}yDjrq?|^E$h6ErCds&z;V8H_d z2q1z8K?D#%{~wo!_doPOzv1J#IS&NQ*OaHe%kGzkQ{?v>iVY(Jl0=7NS=~UtN)bus zkgVI52h4-ZPn|8%!UXQCA&|Iy26I3;Es+kbXe!!$Acz@`>CBrdKrlD9`*{LYLm2vn zHrI>D=!k*X1OqwNFW3}o+g-r2hs=i28|h!ej#c}(sNQ0%hjo|PlhCIfOB%dg$J3G> zc>~hUCY329-s#-LpydcgBCOm~Y?uq_H_nyS*44tlUHn>BUM==Q1naGU`p$#ejcY$!T^F5l<5jK~@-x-rOqB^+uGz9Li0waV2$R7X(Mr*5kqbOvzJXRVvtE4HC{2q!X z1D)~>tsDN=2G#~d>_mQjz0*7PI;duE8@>2XVz)4|jwzH{J4}J?4nbf({6q^BaEMR> z9w^B)F9t-iI>b~0DB#L~j|pgf%L~FygcPV$9s&{A{3F%r&g1avm1FK$TtzBm56K18 z%O<}vkx;U+y+uG|nuYlN&d#|SIe{pZjY=bhP%mxoz|}q5TRNNu`hrP`;!x{Pu6?@@ zj)J62Bn7fal~SB?G8TQOS$vZDUpCxBHr^9n4T?;$wnPZcuCs-Y<0lZ1wb+FZNe0PK zPK8oXi#cT|k=Hcf^NcGkZ73}_@@JZ40<=DR=3M=NA)Op$;_h1e}-rQmI9Xj)I zJvIVdWTR|#wr`y1UA2qS_2;948hxE1jJYG zJSb97)k;6zMd?)it_+Ay!a6z;kG7)qZgFKar6vFnMxwsHKe$#jJ{cA!d2S%{)FnfR znBzM8tB~T%r^SiOAmYbE6yK`k3sSk!?4di=N+IRWqqfK;t9Be{ zDVKZV4n|EQ>83&EQXC;1mArt`JxY_6YK2?nyCl^*sP$wCn*ce^U>gKF zRW?9pkA&um1Qm5xjf`j5lJ>PjU`RXMjFP|2s5bZFh^U1dj;eAz3zT^0ERgg21BO;! zm<2II8+|A^Jmmr`Sz~`Ug2W{ok)I1$vC=er;ko%~3Q;MSEdW{wB$E{jQwD4$545Sh zt#6eZNuTxY)Ne=RS1w|e6kEft2! z0V72ixFQ5Po!CJGAG=?*l}pJbpkmLdLq>XZhJQQeMQ z*LACSFHq>~<{3V^t`nx%FN2b&DEkz#^i(6FsQC>YFO*rKywn<$pr%|3qBVj^4ruDs+% zFf`#opD@8^yc~hB0|r2*J%EG&SSKMtJ~mScfb)G~jLZ?$6iBAt`Z*5t(S*lq?wJ2{ z-_zbc_QT9OP%rCVB>mCXYo~Tm49Uim-f%=$W6;f%LMwxk7znvB4E}_ zaJyRD$MGnpI>r)?gWNw@!e)Kxf3ocRt#nd5l~p0Iy>@lNH$$w?k&TY$3+#}0k;;p5 zZH7~~==??SnMrKk4O*mnO5wEXdfl?qxgG&k@>#oHai5U~Y*zUPL(~N68e)7$wL8i|>G5o_y-ih9+8pI1) zRR>pJT{;$)A|KkxX1EB;GV@@=Yyw_D!+!HO02q&G`8ohmmH?zNHm7aBg7r;R@U?12_(&Brby6D#fC%q|BayI()4hnIhP@88fP-sD&Pv^i zwAna_3H)7x9f9mtgTb_D){Rnf5?!;Mc;HWuPRNQnHv**aFwrh`(Qz~0J3ZUG#4osM ziAo|J!(qBDnh#;d*JkU$aV+x-*jZ1>6k%2e-RjHd)f{4lS_7-*W!XAJZYFk|?9IdQ zC=W|cW(kxfI<@|e`O6B=$4&_(h1wi?4bNUekHFzSF~lpb&p z6hIaFJGGsrFkyzqLOWn!{V_h1FEQ7dm$iGjtnL=AdPZB?$X@e8PkQO%CJ=o-cou`$ znCPNNc;{M2YT7dOmR)f?M7r{gw%@IfTYdr1tV~HL#1%(AneYTg)ruq%U9FR_1aT%8 zw-2MM!+N&rVsNUc+ayxUMk*WNO3p_dWzJ?W`{j);X!6JM#v@xLk0zg9NqVBx%X?U# z9f4mce2urN!EV>Q$e^8~qcVQ}0(A-&goQ|hqT7Vk!sv}FXMTTYj~7Es6L>p0=$L>P zJy%DvQp;m!4j-K&YG%nWn$2ERj&OSy&2EiYyGw5&+GL~F$94|_q3F)Q&P=kbe28Rk z(SR}@Sr))#;~n~X-{lH}7AKc@O!ueMxqO4*At9Vl2s5qx1f>+4`XJwF`tV5tZIxA^ zzW^@WUvY=F6(*!RelMKsa8q_Xc!$=H%cO^n@takoa@*a+yG}6aWzhlV z!%f5)yhi;HIpT_~a$QR4bh+^DJ8HmGEhu~>*hD|vN-&dryeXa8l@8Rae)l~x) z6{*B()(e~o8EtXBxtiT!EgL=SK}^a{9Z;KW6NJ{|YHw1O62rzLks?leZ&w_(OX`q( z)hinT3s(7@6A9|oNIJA;wN%`7aGWU(HW)UlAmSvURdP=(F3FmTs5UqvIkZ^m>G;yb z%l3B?-7dK;+;oo_`oUSxS&;Amm$;RI*t9zztZ(7pKz6B|Jbh9lLj{dzOBqYYl&S|J zlVF{4AZyQn!|w3pXFGg$Ol+t6#i<&YWUnK?t5{5hEn9_b|5n;M%sv@%4@<;(%j5Ls z6MXTAE-z=GfoR?4Rxz(htM6@3kwMP>`k0~4itZ58sY);Arx9M;PH)K_|1xQiuf|L= z7GCHs5)vO+TM^Z9sF!}{*Q~n#lSg!uax1X-{>!IP8+UM0RCsx~*Oag~ z(92gAkCPz1N%JiWY$Ntrc99YplA|>joPn)9n0w8Dffx!Mp$3L-Y6SH?*-Ky*v<{ZJ-I^T}Szmdar=fbM-c}k#zA?Svi71z=cRU8ZN{Rmonb0Yrnjm#D5=W9&!>9iZmkj1pFvi6*<6Qfu0&Q4sv6eW&-E& zfFlNCS=trjnkXf&Ji2HR9x3X7PBWFB1w8u4G6NfyegK9Fdn85EauXFdDh-eAKGNgJ zkQJ6p*J}Rjv6$)B9zpims3qQcu{TVAg_4R}W{t`9=dy%`h@1v}O;S%492y>5B=*Wb zUkPJ9X*(ae$l=WCX0Dr|ny|7QyLHh)P0XS zhMGE+FD_0Q(5^9jr6ok^H;SG?#?&LaD7(qj0N>ep-?t{#Se4yTJ|v8r+Tg@T`D?sV zvf<70L%A=>w=mJjoXT9??vz2fIBr21^+e0NwHQ`H)TX4GXvmmk4r_SE%TpO$k^0r^ zIpkUCxFT)iLI1U|tZ@_ft%Mb@&8d?~JHXd9?F!}HwB{DrLYiZ#~DhPdygkDJMEGf~r`SDD(o=MAC^OIch#t`;I~e&aA|O$Yw|Ewu`nSia(*QYv77>$1>YHvOSV^Rr@}Qj-HvI(RmXg` zVwMxKj(mE^XlGk#L??;MSA82hxV^2@iTCaz{>|QY;oEs128W9vgkL-Ly5m%T^lzFN z@k{w--(Ssn_3TQ}qV~%?cEHax1ygR%ql240(f@3Ei8sRs0r94ZyLaUsm6oA@A<#+A zM=1b!heH6wKHNOv6Knl!_hG&J2HK_)BA{>;lU^Z_nlM~wpC*6cHn!t^d~Ei5{b>lO zwpA=_IwyN@g-!C${j7A2`QagXjEZ?MC|c_wQu3?k{2$)&^ZxSfqZiMy^`@Mq(tXLr zLd|M(FZ_-uS-d_9w!g&{ls%h#86xz*Ao3EG$0w8BZO6&Z3bxmuy|Lo_I`~n3>YNrM zzxK^)I8=E6SblDO%n#oU4F(r2G*D$eI)$;6AY z+ksN>NXjPC11Ks#myks-#~t9|+tLUAy!UT=eM}|J#?#ky%B!8wQhO}h;o4gn1FLHtgbYydV^IBF>R9O`I_^ z`^gvD<*AHRf4tU3389-MVxFW?STjHsbtvp(_`p@ZJq}z4+7cItgjX)_*DS2|nraom z3nfs^kqx3LMg-Nh@?#3j2naC)!3NcIjN_o_<5zaV%y z?JpGk<)WXDC7-BgW-8h=aTZo?@2}6JxVWnoJ2g=#|N;}G?t@oJ-hiXx(gyQfKY2A zeBIdV7Xg=812PB)Am#v;MSdtM4i8`O#du&nc;RQND9oJ6X-H5Z=*T94Oony*7(S~C z>>`%sGjM^S8OZ%=MacI)NxnI8Y+bdY+|`P<4A}Ve`WJ?{tyNKS>C_mi0&g)=_FJ!l zupIB~KB+n?iOqk0=L*q40@(qw%G!ZozfY&7BgH>O4dU~(Cm)r_>o5SvA1%sJunpW< zdX7@|EzyPI;Bb3Q^2x~5QZDzatL5v}A;-^7sb>9(L%OQ4?#)W2qIbGwOz?B~suq6L z1}x<9?3b;^{xZ0P?F<@+r$vaRNTmiW`gALcIoD`(F$ACa`95j3U-8K|_B$we?qhCY z;;iCgVl8fB!=r8@BCTR#Vr=dqW7!WtTr)GVc%dUew2L#bV&Thv!DYGVre%h{;?wnZ z?&9E7x1%j6MIY1r7akEXl@(;-jF}b%v`Wu)QT4{UF17xnf>H=QLhkA_9jG}lhxFji z4Qb$?VVs9swuR@3fkSV&AB{$$k#xIK&A=ey8Cb)8R_3?or8*B)i>O@8>D)ghzAn%3 zp|Pkw_hC%|VagCA)H(|gE$1P>8n!T6Rupn~KEl5e4o<(mFLM$2;y?Cl56DPYAR*kQ zM&C}ln+L<2#{s4e0KxHu(q|i6_+=Uc(pyufu&~_o=2)sAFDn_-Vs`g8VPuaxr6gp0 zL;ole$k`|3@{*W&VXVWB#LlV?i|5IWpGU2t#mZHlqKFPj@(s_MHnHsWiO`c2rpR~s zCU?@Vl91unN^m&d-gTT}|!5Zi8FBJ=*m?7zP1PdBhq}1EhHMzKwW00vX$>>HC{} zY7YZ3c>aNugVg&YyZ-_BKWEy#Dt74x3KCVFS3a5cbXqk{SRVOx6nXuu4CBXaTJ$Vz z7AjJyyQqUY;wVf$HE|0`q1tMztvW?GpPT?fTX}-tKSYxn4eHnuUBAuF@_|~MtExFu z`7d$q{#lz+0?pQBQw3*!<{sWF@f2Xm0bZ_)AhscBlNB#{RFAWCqSesi7w;^i3et8M zma7MNv|fh7cq>VxU_%g?I?g84jVXFp{*OwQS0#-QO}-4%Lu|pg(;oqZX%$AJtLOWLA~O2A z_<1qDK+DxmzWGzu#C)lkI3Qa&d!~Q>w0Q@Y6y%|4vfMhVOMCZ8ole8ydd=A8OwW_3 zdv^)+ zMXwMa6eW8zGFrIvj;q`;2S=Sb!jeSk%4icoK^oD5-94^D4b;RlyvE2AP*rl#ZuWcl z>aaE38S5~?_0Y8uEhyVk9>xLK7X-!E*Z@-6S)H?K^Kv5L{AXPBob@H~CqPWFHW%aT zUgc3QLZR_pR#JENvJk8l9fj|5K$(sE>s9|8WOVFgQc>m)hR`&(?EZ|@;XyY`I;0-8 zx2d7UG_M0NZoJP2nvORuUr`3IaoY(WyuixZ{*HO|+UL@PAOh}0-FZ*e9MmUUbBL0k zFRVS%YNNrl*`cdSqpFA2-d#&ht`GxV5tM8ez@|<`kfgMPIeg#(61pM+DF+0#sg62* zWR|qFL{BCS8;aY{1>mi9!1}u2+S3QDvdj*&-?0FQp}r|VO_^30Pd!JB@-Ga**h|YH zSldYwch5d>M?1f&N!z^fX$)1Ch}F2|Vv2uORv>p^g^Rl37No|;GP9~T56;X!btC&z ztS~A}>@fCc*)X|#^nw*_S}X&u#o;aZegS3gudjmPeMd=)=r80^Wywar<#Y}u!5iEh z0M;C3l8U7-1UBv}#~yDD7W=(Wa(Vg+=9wOj=qs9g!ZQ=$`?-8dpl_EoE%5A9dOPpO zd=^=6`{H$>XB%zDiWow2WpMdB&c)jW&Hj5TY$)>Wc>N>G>M!RAIZe$sSt~i{R7BJ7 zi53&HVrJrf<2xt-Th@}m9Z2qi<=+=ojc-Lr-ua@793oI5RZiQPPf6r(L z4!_st#oU9`up@(fynNcJkCw)vOFJVgV>L;r9rpDBfCdAIQ{iK~1sSU5H`W4T(+Vuj zKi%kS{yY*{zN$_$i44EH?pPK+Fp&S;G(R@?Zfl*%?|sK&?`=v9OZ)N@j#!C%{`2uI zjiB!GbWhd56-NY^CLV0PDF%LM&s9hwd{V_kcEy|OOfKt#y1}$~HQ7xEUyUn$Z}$oP zMa2GI8B?(-8)YOp$K>{8!pR9yV7iptn6(*iyy|z2q??t`GxlYzq_>`juXQ&_&9yDc z|9;22cVQ=rN-KwRE|~#gw5Uqlr2y+s*Ixui!+-M~-%5ZLZTk|pSm6F;Q5phD%Y*7Y zrWiz@jvr9zesHR}E`s?%nP=F3Y&|~3H0}=tRuSJ=M{EkP3RqwWQ=kDA?*={A$YA|q z!vIBB<4hG32T?~SI69&N3ZmT5g;pN#8QbHLxz<_fMaFBG-hM^ROg1K^5M!Um@R6(1 zSrXLowVQ=7Xzvtn%H|1n3K}jFA@_bN{Utrt`UP$V4(@r5;uWfl)gz>g80ZTDnH?qa zhB|(mdv>xPAlt9eb5r0XEeF3(7(Hf3$;?eqQz+fH^excb*n3vAe46f3%A>vrH37FK z0L)>h=LxakDzox=7=g;VRC4$tE+5v(6EUe*0!}2m|BviZ(6Zfz0qRCzVE2!+$;WK& zoDw=c+?xu<7D`8yjMpIL-mR-z0=<|?OZ}xLtLv8Q&5g2ZEqnFg^~8jBCpv}cAf5gi zjrQZd>{&jCCD)tbOg3w?xZca?0tqghZ60+B3V~~s;U@ZwnV4kf;eJG~D)%W#&>sNu z6`ZTz^li2+dv$BvP;oT*WYfo$bmDev&+60c_obr8f3M8$RKGj`*}V^Mt0twYS0(EO z1nOYjmZZ#einkzGfEKoFiJD7-#tc1DO%NWQ`i3Y!T~?*RUOtd#s*56WsARFxR8r&-Q-2wMNQ}fZOfV#a+vw1!iF~KHM>0 zK0jEyJqL9J?nvFK7*X7jyYId+mV}<7(EZ^4YB6eXcK9rH^-+c?ouT#CIus@3(sVyn35;=xUBVgi2Mi7EK)o;~Ubp;sM@R|yv z@l_=OUUz*r2@DKz-SHx&awsBWDX}b9s^-$0F{9+forCSG9)@#Qo+gIT7YpAs=fcz) zHQ~s@7WEEfUJ!&`nr3zisD9ePMX1yTtlA4+rX9A5TO%+qb73i9Z zBxA{;wNHzxk{=CQzy*Wo+>C&(L%4zPuD>JGX zb|Nk{9LZ(Zrpa|XXqBCAa1$ z)JSdrCabr0(`?24M)#Y&n6#X+7UCad5R8#O+gQW|o<9so@?7nv297^{lkKxVLs`7o zLx!?aK{z^(4K?_hG`Rew1=m)Pxa@c#J=N_bT>O8LT9LTfF-hT$7_rHh_}7-Cr~mXugw?^pb)e`_E%?!ODcS*)Tk)kGFZ?INg#*ZZ9W4M5 zW%DB|6?{p|8L6!q$=R(1B@AgyIEmTKrEoTGXE;1=-eWH7194KTxePi6JFJ(Y9Q(AINIgesw&xOPYtv~K4C9M> zW!F9Ix{csO(xgd-3hJ7J?|85#Ii5uGP5B#f)ls8pyhb=%)S2Iqkd;e>vM zPiF7|bhr+Cfvx?TkH{Wi)o2?-Cu^~GvXy%>I=RN&ip&D-MIBi{=tXC#Pjt`tJb7pl z{HOhgke3n=U7RXT0(6u3as|+MAqQ>@Iy!YgDR;6U+7}R7LL>L#B))kI4S6C@v>5!h z9BjdrSf+5r3Y}f)gQ-EY@-j};RUR^1R{78muBybiuEa`N0J<}wuQRbXvn7qz)SNI; zU+rf%qJSlcA&VVY0yyQ=694ue`8y~;@Z<#SP|(A3=1M@{!Z0yEL(d2rA1$cG5u;0u z&LAd?Oq9P@YxPUi5#giYe@2U$rhfTXpoC`BKdgK%B!cx&kRUM^vFH=! zFhbctzMKVJ!8E@(D!$VlDPwD! zD51OwtbbbHFTsbP?RKZ1EMqHYCl#}bra#xs_x5>c4b|Te{e#;cw++XUa-gxG zuk~12h%+1=Ro2#B*sQZhy178OIg$a97?iNbxVaHJ|Mv*=RbU)1G@+P65l8=OpHq2I zF_OWqUMJH|g=S&g>!%>?rhna+H5KpTOysGQ!)zP${bmI(^MFTX!NKTSS$gze4FY4Y zPgik2KF)$tVN*VZ?QBmkpT1jVnS*9mv2s&` zdX8|T%JdMP-FlMdxEO1c^&UPv+-xwpfiVeGg9z6TfEfZW!EL=V!!v<%t_;?&nFc@+crN_P;b4eHy`WXesxJ1R;^dSu;1mHV*@6WC8 znG*f9tf1~;)KHzfTapfSY=a7&uL!SVP{gJs;)O^NM1$)arTXk7aMA%Bcy8=W@`b#s z!vYH2x9!|c`aF#1x zBw(^h(zc3>ng|P1u}bXJB%zUy($RTaq!_QhjE+OYA%#EEOX)=1M1I7XM3Pcm%#TPw zy-7uL+becud>8r@sUGB3nLl6AD++nO(Pd$Ubu9|>TWZ4L(m2ruFeK0nJQ~^OY&jN5#@y%)wV6Pv|{9AYxORDBgthT+ZJJ z&8I=i!QnuINZGgouX$P<$KGxkyzK}v;G{6Heayg7yuq(x|Fw}|&$|x868S_{po*E6 zrSjw#MLYI4-F5DJj(G=7iw(8Y)V0(ctIg6ivT?d|9*TS9RB3w0+>WVKw9di}`d%c` ze;Xw0+GZZq^a{;!XueJ*BWt-&-#yLs)&20}mPC4bhdm|VVWlNJvpwI5Ne=cK8q;ak zeeTg`XUYhekuyV2_qm{qh`pc%SJvI%L)yWQmzn5KNR_ALySkIMHae4M+l-s6hrW*% ziY-PLyP-~6X_giO1zhRQXn1rgTC@Qdt3p0#xW3H*+=~8PN#Be@@h97DrD?yF=r*xR zPoQt9&QkgA`;*?o*C$&i0md1Lx({ZhFLo$;He)PkKZbZ@B>@BZTZ};l&^2Q;A^?$W54(t;Ktmi|0-}!4sj$x z%w{6>7u7>r>{7Xpc#%;8aK_$Jet)?3Z_IRXcA$hD=o}jq%gaJ@yXBArz7@=NT1-h7 zIMhrLFZ_Cuefnh~p0zrz-oiug{rG&1pzviWl(||DjnW$0d2rjqIvC>MT3CtqH6%6E z3j(>bEDV6gj)L>--}A)U@AtNxgKOt3c9{b^9n=;3w*k>l|C1{_X=!yhIuO|&PbIZ! zVHH`Bgm=f)rI|hfQ1$q$2Q23~zSQtdnYF6A+ttU-A4Z+!oFV3BmBJ>_VrgyJ>q;@D zv30CoBMQrK5AzB*Wk-qO8+i0ZJMwq3mOIvifGXR0-I|1N%7Ip6OwqG(5fq)* z+<}7i|LGUboy)%i5#OWs4!FMq@*BD=&|^OE_!9#^!!wEa7fqb&+YB3Rf+|7w4!~oC z>Icpd^nvLcfbYEp$>M16=n2qy~Myg=0XeGH9m`ii0(srCWfg=2gNFRNY-xeG6IzCax*^ zFCf)*7`3#*tG2UGn~f+$09__;Tp`yE6cc)|VwUSC9&&Y_0W=m;!2Ww5FXc$#%h)NZ zND*{g{Rh4%hLu7UsAxwFA%UCSwJ3@(6rST#h$xX=Z;O_YU{yj~{>^^C$li{@RJBc23I`hj%PL zY_0P1z!;mmpCEVE)SnUwYt|}+H!dC39ZCVzm|=M58tr=XK*D>pE|vZq(rs#9mt5XA zNw<9m(l#v))6V?=0%HW6`_A8Lx0|6* zZTZbp$kj%Aj|m9B#&PEOBq~kf#oknY^^t000{l(Vw~EDM65oyct3huP;9gIh(t~_> zFvy^L!6tBEgqdvNb;?`G9?aE7m0uEEJ~Idt32TSs+vRgYL=_M}rsVG@mmkk&IlPQc zxFD`;JQ!}alUr0%$`zifvF^Z^`c&n)R0K5Ro?+!o!xp@9Vy|;hRcKeSuz60Q={~g8v{QN%T;dk}e7Lx=vK%iiN0Dlq3 z=>O*+kBm$OWd00_ZTI~49T}gGe2+Lt&(?V06mnQOm?&CTvOGzt<`Hw2?5)&7{dH7d z+=^+M&8v%UBoFhZa;IyFlhvtEzT23+8{VCg)2FoUr1V0|4hkBHrFwD8IrlT6{eukm ztVpGcAS4v{_we_+rtmq((h2zd$*J04abOPdYp&2WL-=<-%`A&4aGpk+V z>Y~gQJJNOcC+v7Volo8e6ikM_>sJTbOV=gSj@DM+-ttzJH9gzTl`CkGT;$Hxdzx?T zJUc*7cs1xP`s?m%nkzLA=v%qO)->dlD6}ask%{Ex74^v8BPs3k+uQq@9tk>&z@kj@ zo!6TxvQwx>d@8d+TcGUY!Tvf7rLs{hWE>JP0_0aP!4hRPAcXs$<`NMjwhWs0l{r*OSVd41g2xqicp1^S5)3{m@p@3`k&OTC)z*LTJe zOP17-Xxf4DZYtjN&#$CR4wTO*Z)OD5AR(p>Nmzf|y~-44g%za~SN#@E8Y1eTkenvG zM4~E=yms=hAn}#JKfiIWKLk~R;Kbvf`DH6v0fGfe#=P=Bc_Hsw-SmW?b;56zn?q?mQ^k9Gl^#%B zeeB!OjgtJjr%KGt+v7~{k)j{GJ8($C_AZb%up_3Cixmlt1~`!}OylgSk7Ow}Qdn)J zRnqY}5`R*B;V-m2KTneM$rXNaArz7&ST5c(UZOF6$^P%)|H#Nq;L2U4Y*CO%(0rSUYQ!QDin4DgkworC!a5M_Bzc^G18 bNG^AGrFHvG1>%1j(xR&8bMa&Qzi|x!$r%Px literal 0 HcmV?d00001 diff --git a/fonts/source-sans-pro-v19-latin-700.woff2 b/fonts/source-sans-pro-v19-latin-700.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..cd6bfd0f4b5e5e4b1382139664aa7867dadbabb7 GIT binary patch literal 12924 zcmV-?GK0-`Pew8T0RR9105W_44FCWD0CjKx05T>30RR9100000000000000000000 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 literal 0 HcmV?d00001 diff --git a/fonts/source-sans-pro-v19-latin-700italic.woff2 b/fonts/source-sans-pro-v19-latin-700italic.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..b413356f73ba0ff60670b2478eeaaf24c65b4cf9 GIT binary patch literal 12612 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 literal 0 HcmV?d00001 diff --git a/fonts/source-sans-pro-v19-latin-italic.woff2 b/fonts/source-sans-pro-v19-latin-italic.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..9448cd526e701238d1dc01cfdafe0afe5a4f3205 GIT binary patch literal 12580 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

                                                  _~p+106u^pK0IL2 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%0DSOb;3fck`YJ{G z=K0u@NL+Od6buwV0M!To{|G?mFcq{dyMZfCTT>u_=MOlqp^Nr)$9+^G;uwYUt50Rlip!M#{2qyZ39IowN` z{x@##Y%56}^e_e@5P}kf;DAohf{YaCFgjjR96vZW#e%6!edVh298w_x;DCkX=XeB` zJn2DG_d7iYuCo8(io-{_o~z=9p794b!y22vH(Lgt$1i4OZFR$Ztw$Yn1a`s=xC1}b z~P|>lm7RKPaS~#}zwPC6h*M_4L%h;I(uF`30W>Mhv?NF&*eJndQ z#ML32ylhP?)#CB8aPh0`T9qqR^9yOw!H1L9io>o`NRxV%f~vJ^$yRnU0s$^QISHjY z$WAapqB~2ju&q$3SxBSmo2>EfY}EiENZc$EfZSs#LC6jv8wg$-UpqY$123g3UL(D0 zj9Il518R?H#rM@gz+pk=>Q#|WMZKIeWoM+CReJ1NRK~7m6)Gf=RdYOg&s5K@gDa$} zxC*kF$uh7JR%E?SbqI1)M^~I~Rb}Y_bmlxlnk{YSPO7(W-kmhS1qJeVAa4_TI*TzM zP@$lr$wbG%#KOkG#q<566cQ1W$RZ^pr=X;wW?~*o=UuUj`;zqw$Q6_)Ux7kJij_Fv znkx>fP-#My8>(G(Jwg4X+*adLANklJwI&^Qw>c|yzV)^5HK^C9S(6r9v}!Z!E&Xe? zOQ&uFDJ?5!G@AS`o97ip(2B~c>YCcR`i91)=9bpB z_Kwc3ZsieOE%kh%ND8YdtFd}#SajuJA#Nz@_hnhehczQxTdF6*ojt7zVFt(6j>;Gw ztD5S&*I%Ziem3Su=LP!C`M@0XMMqenqia?NPH->~6hEbKRZA-qf^aYp6v9AI91ISE zpyILrKF@69IIYDc+Bb+Jedl~Xb^pBnSbm1gk-@+T2ExHWPzb_6aWFUtf)el*ioy99 zILASy!b7((9)5dm_%A}RXTC6@P#{5cG=)0qxb~0ch){cO^=zuBF*B{>%58j+kbtO` zFXHo~nz)rqsGv$fg;hc-suDS3sML|IStWDy#gp_wp%e=a`-Vb{lmTIq$4g?1G8VJN G0ssK9UqeO! literal 0 HcmV?d00001 diff --git a/fonts/source-sans-pro-v19-latin-regular.woff2 b/fonts/source-sans-pro-v19-latin-regular.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..e49928e8297a96a91c41824c0362e354e6a5c867 GIT binary patch literal 13036 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 - fuzzing + property testing | philip's notes

                                                  \ No newline at end of file diff --git a/fuzzing/fuzzcheck-rs/index.html b/fuzzing/fuzzcheck-rs/index.html new file mode 100644 index 0000000000..b1fed4ddb6 --- /dev/null +++ b/fuzzing/fuzzcheck-rs/index.html @@ -0,0 +1,94 @@ +fuzzcheck-rs | philip's notes

                                                  fuzzcheck-rs

                                                  2022-08-21 · 2 min read

                                                  Coverage-guided, in-process, structure-aware, mutation-based fuzzing without the intermediate raw bytes serde step.

                                                  potential improvements #

                                                  • from a maintainence standpoint, it's a pain to support both proptest and fuzzcheck-rs simultaneously.
                                                    • can fuzzcheck-rs completely subsume the use cases where we normally use proptest?
                                                    • as normal, I can run cargo fuzzcheck <my-fuzz-test> for continuous fuzzing.
                                                    • however, I should be able to hit cargo test and all my fuzzers run in a "simplified" checking/testing mode where:
                                                      • there is a default max duration (5 sec?) / max test cases value (10,000 execs?).
                                                      • generated corpus values/artifacts aren't saved to disk (unless something fails).
                                                      • IF a failing test case is found, either:
                                                        1. immediately start minifying the test input for some duration (15 sec?).
                                                        2. print out a copy-pasteable command the will minify that specific test.
                                                      • If coverage is too expensive to track during tests, it wouldn't even be that bad to just disable it when cargo test'ing.
                                                        • in fact, I'm not sure how coverage would work if the tests are run in the same process.
                                                        • a #[fuzzcheck::test] annotation could mandate tests use something like rusty-fork to fork the test process before running.
                                                    • One advantage of proptest is that you can easily generate complex test inputs by composing the generator combinators.
                                                      • in contrast, it wasn't clear how to build a custom mutator composed of submutators (from my very brief look).
                                                    • By using the same fuzzers for both continuous fuzzing and unit testing, we prevent fuzzers from going stale or otherwise drifting from the implementation.
                                                      • This was a very real problem in a previous project. The continous fuzzers ran out-of-band from the CI-blocking test suite, meaning PRs weren't blocked when they accidentally broke a fuzzer. People often forgot to add a #[test] that ran the fuzz test on a few inputs.
                                                    • People seemed to adopt proptest when writing tests, but getting people to write fuzzers was a challenge.
                                                  • is there some way to avoid spamming the #[no_coverage] attribute everywhere?
                                                  • can we simplify the on-boarding process and reduce the amount of #[cfg(fuzzing)] needed?
                                                  \ No newline at end of file diff --git a/fuzzing/fuzzing/index.html b/fuzzing/fuzzing/index.html new file mode 100644 index 0000000000..25861b62c6 --- /dev/null +++ b/fuzzing/fuzzing/index.html @@ -0,0 +1,91 @@ +fuzzing | philip's notes

                                                  fuzzing

                                                  2022-03-29 · 4 min read

                                                  1. Rust
                                                    1. bolero - fuzzing + property testing

                                                  Fuzzing #

                                                  A fuzzer can be categorized in several ways:

                                                  1. A fuzzer can be generation-based or mutation-based depending on whether inputs are generated from scratch or by modifying existing inputs.
                                                  2. A fuzzer can be dumb (unstructured) or smart (structured) depending on whether it is aware of input structure.
                                                  3. A fuzzer can be white-, grey-, or black-box, depending on whether it is aware of program structure.

                                                  https://news.ycombinator.com/item?id=20830846

                                                  "Generating Software Tests" (https://www.fuzzingbook.org/) is pretty great (independent of your programming language) - arguably a must read for anyone interested in software testing.

                                                  John Regehr (the author of the blog post) has written more great posts:

                                                  In terms of software, DeepState (https://github.com/trailofbits/deepstate) may be a good place to start for C and C++. Relevant links:

                                                  In terms of choosing among fuzzing solutions, https://blog.trailofbits.com/2018/10/05/how-to-spot-good-fuz... is also worth a read -- as well as the article it refers to, http://www.pl-enthusiast.net/2018/08/23/evaluating-empirical.... For a broad survey, see "The Art, Science, and Engineering of Fuzzing": https://arxiv.org/abs/1812.00140, https://jiliac.com/pdf/fuzzing_survey19.pdf

                                                  More resources:

                                                  \ No newline at end of file diff --git a/fuzzing/index.html b/fuzzing/index.html new file mode 100644 index 0000000000..eecdd2833b --- /dev/null +++ b/fuzzing/index.html @@ -0,0 +1,73 @@ +fuzzing | philip's notes

                                                  fuzzing

                                                  fuzzcheck-rs →

                                                  2022-08-21 · 2 min read

                                                  fuzzing →

                                                  2022-03-29 · 4 min read

                                                  \ No newline at end of file diff --git a/index.html b/index.html new file mode 100644 index 0000000000..cd62148b36 --- /dev/null +++ b/index.html @@ -0,0 +1,53 @@ +_index | philip's notes

                                                  hey! welcome to my notes

                                                  my name's philip. i do stuff. it's usually related to oneof { Rust, Cryptography, Distributed Systems, Blockchains }.

                                                  i used to work on Libra Diem Aptos.

                                                  my current project's TBA, but it's Lightning Network related : )

                                                  \ No newline at end of file diff --git a/ios/index.html b/ios/index.html new file mode 100644 index 0000000000..597a93706d --- /dev/null +++ b/ios/index.html @@ -0,0 +1,73 @@ +ios | philip's notes

                                                  ios

                                                  ios setup →

                                                  2023-01-09 · 2 min read

                                                  \ No newline at end of file diff --git a/ios/ios setup/index.html b/ios/ios setup/index.html new file mode 100644 index 0000000000..572da85d18 --- /dev/null +++ b/ios/ios setup/index.html @@ -0,0 +1,114 @@ +ios setup | philip's notes

                                                  ios setup

                                                  2023-01-09 · 2 min read

                                                  install Xcode #

                                                  Either download the app directly from https://developer.apple.com/xcode/download/ or install it from the Mac App Store.

                                                  Once installed, run

                                                  $ sudo xcode-select \
                                                  +	--switch /Applications/Xcode.app/Contents/Developer
                                                  +$ sudo xcodebuild -runFirstLaunch
                                                  +

                                                  install CocoaPods #

                                                  From the "Sudo-less Install" section: https://guides.cocoapods.org/using/getting-started.html#installation

                                                  Ensure your .bashrc contains something like:

                                                  export GEM_HOME=$HOME/.local/gem
                                                  +GEM_BIN=$GEM_HOME/bin
                                                  +
                                                  +export PATH=$PATH:$GEM_BIN
                                                  +

                                                  Then install the cocoapods gem:

                                                  # sanity check
                                                  +$ gem --version
                                                  +3.0.3.1
                                                  +
                                                  +$ gem install cocoapods
                                                  +
                                                  +# sanity check
                                                  +$ pod --version
                                                  +1.11.3
                                                  +

                                                  ensure the iOS Simulator app works #

                                                  Search for "Simulator" in Spotlight and then open it. An emulated iPhone should pop up after a minute or so.

                                                  If the Simulator app isn't there (which it wasn't for me, even after installing Xcode), try opening and running a sample iOS app in Xcode first.

                                                  running a flutter app #

                                                  Run the iPhone simulator or attach a real device. Once hooked up, it should be visible in flutter devices:

                                                  $ flutter devices
                                                  +3 connected devices:
                                                  +
                                                  +Pixel 5a (mobile)  android-arm64 • Android 13 (API 33)
                                                  +iPhone 14 Pro (mobile)  ios • iOS-16-2 (simulator)
                                                  +macOS (desktop)  macos • darwin-arm64 • macOS 13.1 darwin-arm
                                                  +

                                                  Since I have multiple devices attached, I'll need to also specify which one to run on:

                                                  $ flutter run -d iPhone
                                                  +
                                                  \ No newline at end of file diff --git a/js/elasticlunr.min.js b/js/elasticlunr.min.js new file mode 100644 index 0000000000..94b20dd2ef --- /dev/null +++ b/js/elasticlunr.min.js @@ -0,0 +1,10 @@ +/** + * elasticlunr - http://weixsong.github.io + * Lightweight full-text search engine in Javascript for browser search and offline search. - 0.9.5 + * + * Copyright (C) 2017 Oliver Nightingale + * Copyright (C) 2017 Wei Song + * MIT Licensed + * @license + */ +!function(){function e(e){if(null===e||"object"!=typeof e)return e;var t=e.constructor();for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);return t}var t=function(e){var n=new t.Index;return n.pipeline.add(t.trimmer,t.stopWordFilter,t.stemmer),e&&e.call(n,n),n};t.version="0.9.5",lunr=t,t.utils={},t.utils.warn=function(e){return function(t){e.console&&console.warn&&console.warn(t)}}(this),t.utils.toString=function(e){return void 0===e||null===e?"":e.toString()},t.EventEmitter=function(){this.events={}},t.EventEmitter.prototype.addListener=function(){var e=Array.prototype.slice.call(arguments),t=e.pop(),n=e;if("function"!=typeof t)throw new TypeError("last argument must be a function");n.forEach(function(e){this.hasHandler(e)||(this.events[e]=[]),this.events[e].push(t)},this)},t.EventEmitter.prototype.removeListener=function(e,t){if(this.hasHandler(e)){var n=this.events[e].indexOf(t);-1!==n&&(this.events[e].splice(n,1),0==this.events[e].length&&delete this.events[e])}},t.EventEmitter.prototype.emit=function(e){if(this.hasHandler(e)){var t=Array.prototype.slice.call(arguments,1);this.events[e].forEach(function(e){e.apply(void 0,t)},this)}},t.EventEmitter.prototype.hasHandler=function(e){return e in this.events},t.tokenizer=function(e){if(!arguments.length||null===e||void 0===e)return[];if(Array.isArray(e)){var n=e.filter(function(e){return null===e||void 0===e?!1:!0});n=n.map(function(e){return t.utils.toString(e).toLowerCase()});var i=[];return n.forEach(function(e){var n=e.split(t.tokenizer.seperator);i=i.concat(n)},this),i}return e.toString().trim().toLowerCase().split(t.tokenizer.seperator)},t.tokenizer.defaultSeperator=/[\s\-]+/,t.tokenizer.seperator=t.tokenizer.defaultSeperator,t.tokenizer.setSeperator=function(e){null!==e&&void 0!==e&&"object"==typeof e&&(t.tokenizer.seperator=e)},t.tokenizer.resetSeperator=function(){t.tokenizer.seperator=t.tokenizer.defaultSeperator},t.tokenizer.getSeperator=function(){return t.tokenizer.seperator},t.Pipeline=function(){this._queue=[]},t.Pipeline.registeredFunctions={},t.Pipeline.registerFunction=function(e,n){n in t.Pipeline.registeredFunctions&&t.utils.warn("Overwriting existing registered function: "+n),e.label=n,t.Pipeline.registeredFunctions[n]=e},t.Pipeline.getRegisteredFunction=function(e){return e in t.Pipeline.registeredFunctions!=!0?null:t.Pipeline.registeredFunctions[e]},t.Pipeline.warnIfFunctionNotRegistered=function(e){var n=e.label&&e.label in this.registeredFunctions;n||t.utils.warn("Function is not registered with pipeline. This may cause problems when serialising the index.\n",e)},t.Pipeline.load=function(e){var n=new t.Pipeline;return e.forEach(function(e){var i=t.Pipeline.getRegisteredFunction(e);if(!i)throw new Error("Cannot load un-registered function: "+e);n.add(i)}),n},t.Pipeline.prototype.add=function(){var e=Array.prototype.slice.call(arguments);e.forEach(function(e){t.Pipeline.warnIfFunctionNotRegistered(e),this._queue.push(e)},this)},t.Pipeline.prototype.after=function(e,n){t.Pipeline.warnIfFunctionNotRegistered(n);var i=this._queue.indexOf(e);if(-1===i)throw new Error("Cannot find existingFn");this._queue.splice(i+1,0,n)},t.Pipeline.prototype.before=function(e,n){t.Pipeline.warnIfFunctionNotRegistered(n);var i=this._queue.indexOf(e);if(-1===i)throw new Error("Cannot find existingFn");this._queue.splice(i,0,n)},t.Pipeline.prototype.remove=function(e){var t=this._queue.indexOf(e);-1!==t&&this._queue.splice(t,1)},t.Pipeline.prototype.run=function(e){for(var t=[],n=e.length,i=this._queue.length,o=0;n>o;o++){for(var r=e[o],s=0;i>s&&(r=this._queue[s](r,o,e),void 0!==r&&null!==r);s++);void 0!==r&&null!==r&&t.push(r)}return t},t.Pipeline.prototype.reset=function(){this._queue=[]},t.Pipeline.prototype.get=function(){return this._queue},t.Pipeline.prototype.toJSON=function(){return this._queue.map(function(e){return t.Pipeline.warnIfFunctionNotRegistered(e),e.label})},t.Index=function(){this._fields=[],this._ref="id",this.pipeline=new t.Pipeline,this.documentStore=new t.DocumentStore,this.index={},this.eventEmitter=new t.EventEmitter,this._idfCache={},this.on("add","remove","update",function(){this._idfCache={}}.bind(this))},t.Index.prototype.on=function(){var e=Array.prototype.slice.call(arguments);return this.eventEmitter.addListener.apply(this.eventEmitter,e)},t.Index.prototype.off=function(e,t){return this.eventEmitter.removeListener(e,t)},t.Index.load=function(e){e.version!==t.version&&t.utils.warn("version mismatch: current "+t.version+" importing "+e.version);var n=new this;n._fields=e.fields,n._ref=e.ref,n.documentStore=t.DocumentStore.load(e.documentStore),n.pipeline=t.Pipeline.load(e.pipeline),n.index={};for(var i in e.index)n.index[i]=t.InvertedIndex.load(e.index[i]);return n},t.Index.prototype.addField=function(e){return this._fields.push(e),this.index[e]=new t.InvertedIndex,this},t.Index.prototype.setRef=function(e){return this._ref=e,this},t.Index.prototype.saveDocument=function(e){return this.documentStore=new t.DocumentStore(e),this},t.Index.prototype.addDoc=function(e,n){if(e){var n=void 0===n?!0:n,i=e[this._ref];this.documentStore.addDoc(i,e),this._fields.forEach(function(n){var o=this.pipeline.run(t.tokenizer(e[n]));this.documentStore.addFieldLength(i,n,o.length);var r={};o.forEach(function(e){e in r?r[e]+=1:r[e]=1},this);for(var s in r){var u=r[s];u=Math.sqrt(u),this.index[n].addToken(s,{ref:i,tf:u})}},this),n&&this.eventEmitter.emit("add",e,this)}},t.Index.prototype.removeDocByRef=function(e){if(e&&this.documentStore.isDocStored()!==!1&&this.documentStore.hasDoc(e)){var t=this.documentStore.getDoc(e);this.removeDoc(t,!1)}},t.Index.prototype.removeDoc=function(e,n){if(e){var n=void 0===n?!0:n,i=e[this._ref];this.documentStore.hasDoc(i)&&(this.documentStore.removeDoc(i),this._fields.forEach(function(n){var o=this.pipeline.run(t.tokenizer(e[n]));o.forEach(function(e){this.index[n].removeToken(e,i)},this)},this),n&&this.eventEmitter.emit("remove",e,this))}},t.Index.prototype.updateDoc=function(e,t){var t=void 0===t?!0:t;this.removeDocByRef(e[this._ref],!1),this.addDoc(e,!1),t&&this.eventEmitter.emit("update",e,this)},t.Index.prototype.idf=function(e,t){var n="@"+t+"/"+e;if(Object.prototype.hasOwnProperty.call(this._idfCache,n))return this._idfCache[n];var i=this.index[t].getDocFreq(e),o=1+Math.log(this.documentStore.length/(i+1));return this._idfCache[n]=o,o},t.Index.prototype.getFields=function(){return this._fields.slice()},t.Index.prototype.search=function(e,n){if(!e)return[];e="string"==typeof e?{any:e}:JSON.parse(JSON.stringify(e));var i=null;null!=n&&(i=JSON.stringify(n));for(var o=new t.Configuration(i,this.getFields()).get(),r={},s=Object.keys(e),u=0;u0&&t.push(e);for(var i in n)"docs"!==i&&"df"!==i&&this.expandToken(e+i,t,n[i]);return t},t.InvertedIndex.prototype.toJSON=function(){return{root:this.root}},t.Configuration=function(e,n){var e=e||"";if(void 0==n||null==n)throw new Error("fields should not be null");this.config={};var i;try{i=JSON.parse(e),this.buildUserConfig(i,n)}catch(o){t.utils.warn("user configuration parse failed, will use default configuration"),this.buildDefaultConfig(n)}},t.Configuration.prototype.buildDefaultConfig=function(e){this.reset(),e.forEach(function(e){this.config[e]={boost:1,bool:"OR",expand:!1}},this)},t.Configuration.prototype.buildUserConfig=function(e,n){var i="OR",o=!1;if(this.reset(),"bool"in e&&(i=e.bool||i),"expand"in e&&(o=e.expand||o),"fields"in e)for(var r in e.fields)if(n.indexOf(r)>-1){var s=e.fields[r],u=o;void 0!=s.expand&&(u=s.expand),this.config[r]={boost:s.boost||0===s.boost?s.boost:1,bool:s.bool||i,expand:u}}else t.utils.warn("field name in user configuration not found in index instance fields");else this.addAllFields2UserConfig(i,o,n)},t.Configuration.prototype.addAllFields2UserConfig=function(e,t,n){n.forEach(function(n){this.config[n]={boost:1,bool:e,expand:t}},this)},t.Configuration.prototype.get=function(){return this.config},t.Configuration.prototype.reset=function(){this.config={}},lunr.SortedSet=function(){this.length=0,this.elements=[]},lunr.SortedSet.load=function(e){var t=new this;return t.elements=e,t.length=e.length,t},lunr.SortedSet.prototype.add=function(){var e,t;for(e=0;e1;){if(r===e)return o;e>r&&(t=o),r>e&&(n=o),i=n-t,o=t+Math.floor(i/2),r=this.elements[o]}return r===e?o:-1},lunr.SortedSet.prototype.locationFor=function(e){for(var t=0,n=this.elements.length,i=n-t,o=t+Math.floor(i/2),r=this.elements[o];i>1;)e>r&&(t=o),r>e&&(n=o),i=n-t,o=t+Math.floor(i/2),r=this.elements[o];return r>e?o:e>r?o+1:void 0},lunr.SortedSet.prototype.intersect=function(e){for(var t=new lunr.SortedSet,n=0,i=0,o=this.length,r=e.length,s=this.elements,u=e.elements;;){if(n>o-1||i>r-1)break;s[n]!==u[i]?s[n]u[i]&&i++:(t.add(s[n]),n++,i++)}return t},lunr.SortedSet.prototype.clone=function(){var e=new lunr.SortedSet;return e.elements=this.toArray(),e.length=e.elements.length,e},lunr.SortedSet.prototype.union=function(e){var t,n,i;this.length>=e.length?(t=this,n=e):(t=e,n=this),i=t.clone();for(var o=0,r=n.toArray();o 0 ? index-1 : 0; + focusableSuggestions[nextIndex].focus(); + } + else if (e.keyCode === 40) { + e.preventDefault(); + nextIndex= index+1 < focusable.length ? index+1 : index; + focusableSuggestions[nextIndex].focus(); + } + +} + +/* +Source: + - https://github.com/nextapps-de/flexsearch#index-documents-field-search + - https://raw.githack.com/nextapps-de/flexsearch/master/demo/autocomplete.html + - http://elasticlunr.com/ + - https://github.com/getzola/zola/blob/master/docs/static/search.js +*/ +(function(){ + var index = elasticlunr.Index.load(window.searchIndex); + opensearch.addEventListener('click', open_search_bar, false); + userinput.addEventListener('input', show_results, true); + suggestions.addEventListener('click', accept_suggestion, true); + + function show_results(){ + var value = this.value.trim(); + var options = { + bool: "OR", + fields: { + title: {boost: 2, expand: true}, + body: {boost: 1, expand: true}, + expand: true + } + }; + var results = index.search(value, options); + + var entry, childs = suggestions.childNodes; + var i = 0, len = results.length; + var items = value.split(/\s+/); + suggestions.classList.remove('d-none'); + + results.forEach(function(page) { + if (page.doc.body !== '') { + entry = document.createElement('div'); + + entry.innerHTML = ''; + + a = entry.querySelector('a'), + t = entry.querySelector('span:first-child'), + d = entry.querySelector('span:nth-child(2)'); + a.href = page.ref; + t.textContent = page.doc.title; + d.innerHTML = makeTeaser(page.doc.body, items); + + suggestions.appendChild(entry); + } + }); + + while(childs.length > len){ + suggestions.removeChild(childs[i]) + } + + } + + function accept_suggestion(){ + + while(suggestions.lastChild){ + + suggestions.removeChild(suggestions.lastChild); + } + + return false; + } + + // Taken from mdbook + // The strategy is as follows: + // First, assign a value to each word in the document: + // Words that correspond to search terms (stemmer aware): 40 + // Normal words: 2 + // First word in a sentence: 8 + // Then use a sliding window with a constant number of words and count the + // sum of the values of the words within the window. Then use the window that got the + // maximum sum. If there are multiple maximas, then get the last one. + // Enclose the terms in . + function makeTeaser(body, terms) { + var TERM_WEIGHT = 40; + var NORMAL_WORD_WEIGHT = 2; + var FIRST_WORD_WEIGHT = 8; + var TEASER_MAX_WORDS = 30; + + var stemmedTerms = terms.map(function (w) { + return elasticlunr.stemmer(w.toLowerCase()); + }); + var termFound = false; + var index = 0; + var weighted = []; // contains elements of ["word", weight, index_in_document] + + // split in sentences, then words + var sentences = body.toLowerCase().split(". "); + for (var i in sentences) { + var words = sentences[i].split(/[\s\n]/); + var value = FIRST_WORD_WEIGHT; + for (var j in words) { + + var word = words[j]; + + if (word.length > 0) { + for (var k in stemmedTerms) { + if (elasticlunr.stemmer(word).startsWith(stemmedTerms[k])) { + value = TERM_WEIGHT; + termFound = true; + } + } + weighted.push([word, value, index]); + value = NORMAL_WORD_WEIGHT; + } + + index += word.length; + index += 1; // ' ' or '.' if last word in sentence + } + + index += 1; // because we split at a two-char boundary '. ' + } + + if (weighted.length === 0) { + if (body.length !== undefined && body.length > TEASER_MAX_WORDS * 10) { + return body.substring(0, TEASER_MAX_WORDS * 10) + '...'; + } else { + return body; + } + } + + var windowWeights = []; + var windowSize = Math.min(weighted.length, TEASER_MAX_WORDS); + // We add a window with all the weights first + var curSum = 0; + for (var i = 0; i < windowSize; i++) { + curSum += weighted[i][1]; + } + windowWeights.push(curSum); + + for (var i = 0; i < weighted.length - windowSize; i++) { + curSum -= weighted[i][1]; + curSum += weighted[i + windowSize][1]; + windowWeights.push(curSum); + } + + // If we didn't find the term, just pick the first window + var maxSumIndex = 0; + if (termFound) { + var maxFound = 0; + // backwards + for (var i = windowWeights.length - 1; i >= 0; i--) { + if (windowWeights[i] > maxFound) { + maxFound = windowWeights[i]; + maxSumIndex = i; + } + } + } + + var teaser = []; + var startIndex = weighted[maxSumIndex][2]; + for (var i = maxSumIndex; i < maxSumIndex + windowSize; i++) { + var word = weighted[i]; + if (startIndex < word[2]) { + // missing text from index to start of `word` + teaser.push(body.substring(startIndex, word[2])); + startIndex = word[2]; + } + + if (word[1] === TERM_WEIGHT) { + teaser.push(""); + } + + startIndex = word[2] + word[0].length; + // Check the string is ascii characters or not + var re = /^[\x00-\xff]+$/ + if (word[1] !== TERM_WEIGHT && word[0].length >= 12 && !re.test(word[0])) { + // If the string's length is too long, it maybe a Chinese/Japance/Korean article + // if using substring method directly, it may occur error codes on emoji chars + var strBefor = body.substring(word[2], startIndex); + var strAfter = substringByByte(strBefor, 12); + teaser.push(strAfter); + } else { + teaser.push(body.substring(word[2], startIndex)); + } + + if (word[1] === TERM_WEIGHT) { + teaser.push(""); + } + } + teaser.push("…"); + return teaser.join(""); + } +}()); + + +// Get substring by bytes +// If using JavaScript inline substring method, it will return error codes +// Source: https://www.52pojie.cn/thread-1059814-1-1.html +function substringByByte(str, maxLength) { + var result = ""; + var flag = false; + var len = 0; + var length = 0; + var length2 = 0; + for (var i = 0; i < str.length; i++) { + var code = str.codePointAt(i).toString(16); + if (code.length > 4) { + i++; + if ((i + 1) < str.length) { + flag = str.codePointAt(i + 1).toString(16) == "200d"; + } + } + if (flag) { + len += getByteByHex(code); + if (i == str.length - 1) { + length += len; + if (length <= maxLength) { + result += str.substr(length2, i - length2 + 1); + } else { + break + } + } + } else { + if (len != 0) { + length += len; + length += getByteByHex(code); + if (length <= maxLength) { + result += str.substr(length2, i - length2 + 1); + length2 = i + 1; + } else { + break + } + len = 0; + continue; + } + length += getByteByHex(code); + if (length <= maxLength) { + if (code.length <= 4) { + result += str[i] + } else { + result += str[i - 1] + str[i] + } + length2 = i + 1; + } else { + break + } + } + } + return result; +} + +// Get the string bytes from binary +function getByteByBinary(binaryCode) { + // Binary system, starts with `0b` in ES6 + // Octal number system, starts with `0` in ES5 and starts with `0o` in ES6 + // Hexadecimal, starts with `0x` in both ES5 and ES6 + var byteLengthDatas = [0, 1, 2, 3, 4]; + var len = byteLengthDatas[Math.ceil(binaryCode.length / 8)]; + return len; +} + +// Get the string bytes from hexadecimal +function getByteByHex(hexCode) { + return getByteByBinary(parseInt(hexCode, 16).toString(2)); +} diff --git a/keyboards/index.html b/keyboards/index.html new file mode 100644 index 0000000000..f6569c11c2 --- /dev/null +++ b/keyboards/index.html @@ -0,0 +1,73 @@ +keyboards | philip's notes

                                                  keyboards

                                                  moergo glove80 →

                                                  2023-08-28 · 3 min read

                                                  \ No newline at end of file diff --git a/keyboards/moergo glove80/index.html b/keyboards/moergo glove80/index.html new file mode 100644 index 0000000000..60869f47b2 --- /dev/null +++ b/keyboards/moergo glove80/index.html @@ -0,0 +1,97 @@ +moergo glove80 | philip's notes

                                                  moergo glove80

                                                  2023-08-28 · 3 min read

                                                  getting started #

                                                  1. make sure both halves are charged
                                                    • you can power on both sides and hit the "magic" key to see rgb battery level display
                                                  2. hit power button on both halves
                                                  3. plug in left half to device

                                                  update keymap/firmware #

                                                  1. Go to latest layout on: https://my.glove80.com/#/my_layouts/
                                                  2. At the bottom, hit "build firmware". This will build and then download the latest firmware version to a file like b7530b80-c12e-496f-b7bc-9e2857f705d4_v0.9.9_phlipkey-mk1.uf2
                                                  3. Hit Magic + Esc (or whatever key is 3 up from the left) to enter bootloader mode. The left half should now show mount as a USB drive called GLV80LHBOOT.
                                                  4. Copy the firmware .uf2 into the drive. You don't need to rename the file or anything. Just copy it over. The drive will automatically unmount and the keyboard will restart.
                                                  5. Unplug the USB-C cable from the left and plug in to the right.
                                                  6. Hit Magic + ' (or whatever key is 3 up from the right) to get the right half to enter bootloader mode. The right half will now mount as GLV80RHBOOT.
                                                  7. Again, just copy the firmware .uf2 onto the drive. It will then auto reboot.
                                                  8. Unplug the USB-C cable.

                                                  bluetooth pairing #

                                                  1. hit Magic + <purple button> on the left thumb cluster to select an unused bluetooth profile slot.
                                                  2. on the host, go to bluetooth settings and pair with Glove80 Left.

                                                  layout #

                                                  • programming symbol & number layer
                                                  • swap up/down to match vim jk
                                                  • hold tab -> ALT TAB?

                                                  hard keys to press #

                                                  • far keys on thumb cluster
                                                  • anything on f-key row
                                                  • left: +, 1, 4, 5 (fingers don't reach when others on home row)
                                                  • right: 6, 7, 0, -
                                                  • left: bottom left corner, right: bottom right corner

                                                  hard words #

                                                  • people
                                                  • increase
                                                  • have
                                                  • him
                                                  • number
                                                  • home
                                                  • look
                                                  • turn
                                                  • between
                                                  • around
                                                  • symbol
                                                  • anxious

                                                  keyboard magic &behaviors #

                                                  These behavior &tag codes are used when configuring specific keys on the keyboard. They determine the behavior of the key when pressed, held, double-tapped, etc...

                                                  &ht_{hp,bl,tp} hold tap #

                                                  When held, trigger one key. When tapped, trigger another. Comes in different "flavors" depending on which key should take precedence in different situations.

                                                  See: https://zmk.dev/docs/behaviors/hold-tap

                                                  &ht_hp LSHIFT F
                                                  +

                                                  &mt modifier tap #

                                                  When held, becomes a modifier. When tapped, sends a keypress. This is just &ht_hp with tapping-term-ms of 200.

                                                  &mt LCTRL ESC
                                                  +

                                                  layers #

                                                  See: https://zmk.dev/docs/behaviors/layers

                                                  &mo momentary layer #

                                                  Move to the target layer only while the layer key is pressed.

                                                  &mo LOWER
                                                  +

                                                  &lt layer tap #

                                                  Move to the target layer while held, press another key when tapped.

                                                  &lt LOWER SPACE
                                                  +

                                                  &to to layer #

                                                  Enable layer and disable all other layers while held.

                                                  &to 3
                                                  +

                                                  &tog toggle layer #

                                                  Toggle a layer until the key is pressed again.

                                                  &tog MAGIC
                                                  +
                                                  \ No newline at end of file diff --git a/lang/ATS/ATS2 Notes/index.html b/lang/ATS/ATS2 Notes/index.html new file mode 100644 index 0000000000..a12de05a8e --- /dev/null +++ b/lang/ATS/ATS2 Notes/index.html @@ -0,0 +1,411 @@ +ATS2 Notes | philip's notes

                                                  ATS2 notes

                                                  2022-01-17 · 17 min read

                                                  Syntax #

                                                  abstype 			define an abstract type
                                                  +vtypedef
                                                  +viewtypedef 		define a viewtype
                                                  +typedef             define binding b/w name and sort (eff. an alias)
                                                  +stadef              define _static_ binding b/w name and sort
                                                  +
                                                  +fun foo(..): res = "#mac"
                                                  +					compile to C function without name mangling? often
                                                  +					seen with `extern` before `fun`. is the `extern`
                                                  +					necessary?
                                                  +
                                                  +lam (..): res => expr
                                                  +					an anonymous lambda function
                                                  +
                                                  +fix foo(..): res => val
                                                  +					a recursive, anonymous function named `foo`
                                                  +
                                                  +{...} 				universal quantification
                                                  +[...] 				existential quantification
                                                  +(... | ...) 		(proof | value)
                                                  +@(_, _, ...) 		flat tuple
                                                  +.<...>. 			termination metric
                                                  +
                                                  +@[T][N]     		flat array of N values of type T
                                                  +@[T][N]()   		array instance
                                                  +@[T][N](x)  		array initialized with N x's
                                                  +
                                                  +sortdef nat = {a: int | a >= 0}
                                                  +
                                                  +type				a sort for w/ machine word size types (boxed types)
                                                  +t@ype 				a sort for unspecified length types (unboxed types)
                                                  +viewtype 			a sort for a linear view + type sort
                                                  +viewt@ype           a sort for a linear view + unboxed t@ype sort
                                                  +

                                                  staload #

                                                  Static load: creates a namespace containing loaded package

                                                  staload FOO = "foo.sats"
                                                  +
                                                  +val a: $FOO.foo_t = $FOO.A()
                                                  +
                                                  +(* like `use foo::*;` in rust *)
                                                  +staload = "foo.sats"
                                                  +
                                                  +val a: foo_t = A()
                                                  +
                                                  +(* only load package; useful for pulling in DATS file containing *)
                                                  +(* implementations of forward declared fns/types/etc... *)
                                                  +staload _ = "bar.dats"
                                                  +

                                                  dynload #

                                                  TL;DR: if you get a link-time error about some undefined reference to a variable ending in __dynloadflag, you probably need a dynload <pkg>.dats somewhere.

                                                  Libraries #

                                                  • $PATSHOME/prelude: prelude library targetting C codegen
                                                  • $PATSHOME/libats: libats library targetting C codegen

                                                  If a function is implemented as a template, the ATS compiler needs to access the source of the function implementation in order to generate code for each instance call of the function.

                                                  This is why we #include "share/atspre_staload.hats", which is basically a list of #staload _ = "prelude/DATS/<prelude-file>.dats", pulling in all the template function sources.

                                                  Mutual Recursion #

                                                  iseven and isodd are mutually recursive; you need the and keyword before isodd so that it's visible inside isevn

                                                  fun isevn (n: int): bool =
                                                  +  if n > 0 then isodd (n-1) else true
                                                  +and isodd (n: int): bool =
                                                  +  if n > 0 then isevn (n-1) else false
                                                  +

                                                  ATS won't be able to tail-call optimize the above as-is. instead you need to replace fun with fxn to indicate that the functions need to be combined. Then ATS will place a copy of isodd inside isevn.

                                                  Tail-call Optimization #

                                                  A classic list_append that is not tail-recursive

                                                  fun {a: t@ype} list_append {m, n: nat} (
                                                  +	xs: list(a, m),
                                                  +	ys: list(a, n)
                                                  +) : list(a, m + n) =
                                                  +	case+ xs of
                                                  +	| list_nil() => ys
                                                  +	| list_cons(x, xs) => list_cons(x, list_append(xs, ys))
                                                  +

                                                  Translating to a tail-recursive apparently requires "separating" the allocation of the new list element from initiailizing it with x and (inductive step).

                                                  fun {a: t@ype} list_append2 {m, n: nat} (
                                                  +	xs: list(a, m),
                                                  +	ys: list(a, n)
                                                  +) : list(a, m+n) =
                                                  +	let (* tail recursive inner loop *)
                                                  +		fun loop {m: nat} (
                                                  +			xs: list(a, m),
                                                  +			ys: list(a, n),
                                                  +			res: &ptr? >> list(a, m+n)
                                                  +		) : void =
                                                  +			case+ xs of
                                                  +			| list_nil() => res := ys
                                                  +			| list_cons(x, xs1) =>
                                                  +				let (* allocate a list node with an _uninitialized_ *)
                                                  +					(* tail (hole) *)
                                                  +					val () = res := list_cons{a}{0}(x, _)
                                                  +					(* pattern match on res to grab a handle to the *)
                                                  +					(* tail *)
                                                  +					val+list_cons(_, res1) = res
                                                  +					(* recurse, which places xs1 || ys into res1, *)
                                                  +					(* which  means res now contains the full xs || ys *)
                                                  +					val () = loop(xs1, ys, res1)
                                                  +				in  (* folding translates into a no-op at run-time *)
                                                  +					fold@(res)
                                                  +				end
                                                  +		(* uninitialized result (stack allocated?) *)
                                                  +		var res: ptr
                                                  +		val () = loop (xs, ys, res)
                                                  +  	in res
                                                  +	end
                                                  +

                                                  This technique is called "tail-recursion modulo allocation"

                                                  // TODO: wtf is fold@(_)???

                                                  Function Types #

                                                  Two kinds of functions in ATS (like Rust), env-less and closure functions.

                                                  • env-less: like a function ptr; doesn't capture any variables in the scope/environment
                                                  • closure: a function ptr + a captured environment (represented as a tuple of values apparently)

                                                  Syntax #

                                                  • env-less: + (int) -<fun1> void + (int) -> void (shorthand)
                                                  • closure: + (int) -<cloref1> void + cfun(int, void) (shorthand) (from libats/ML)

                                                  Operators #

                                                  Can refer to operator function w/o infix via op keyword, e.g., op+(1,2) vs 1 + 2.

                                                  Local Bindings #

                                                  Let #

                                                  Introduces bindings for use in subsequent bindings and inside the final in .. end expression

                                                  val area =
                                                  +  let
                                                  +    val pi = 3.1415
                                                  +    val radius = 10.0
                                                  +  in
                                                  +    pi * radius * radius
                                                  +  end
                                                  +

                                                  Where #

                                                  Introduces bindings inside the expression immediately before where

                                                  val area = pi * radius * radius where {
                                                  +  val pi = 3.1415
                                                  +  val radius = 10.0
                                                  +}
                                                  +

                                                  Local #

                                                  Forms a sequence of declarations rather than an expression at the end

                                                  local
                                                  +  val pi = 3.1415
                                                  +  val radius = 10.0
                                                  +in
                                                  +  (* visible in the containing scope *)
                                                  +  val area = pi * radius * radius
                                                  +end
                                                  +

                                                  On Types #

                                                  • Rather than viewing a type as the set of values it classifies, consider a type as a set of static, semantics meanings.
                                                  • an expression that can be assigned type T has the set of semantics implied by that type.
                                                  • an expression is "well-typed" if there exists a type T that can be assigned to the expression
                                                  • In other words, there can be many types and many different and possibly disjoint static semantics assignable to an expression.
                                                  • In this way, choosing a type for an expression is a statement of which static semantics are important or useful in the current context.

                                                  Property (Preservation): Consider an expression expr0 which can be assigned type T. If expr1 := eval(expr0), then expr1 can also be assigned type T. In other words, static type meaning is preserved under evaluation.

                                                  Property (Progress): Evaluation of an expression always "makes progress" towards a value. In other words, calling eval on an expression (and then on the result and so on) should eventually become a value.

                                                  I Imagine progress is necessary for the compiler to prove that certain inductive types or recursive functions terminate or become structurally simpler with every inductive step.

                                                  Tuples #

                                                  (* unboxed, flat tuple *)
                                                  +val xy = (123, "abc")
                                                  +val x = xy.0 and y = xy.1
                                                  +
                                                  +(* boxed tuple (ptr sized) *)
                                                  +val zw = '( -1.0, "foo")
                                                  +val z = zw.0 and w = zw.1
                                                  +

                                                  Note that the space b/w '( and -1.0 is required for boxed tuples. Tuples are also sometimes written with @ in front like @("foo", 123)

                                                  Records #

                                                  (* unboxed record *)
                                                  +typedef point2D = @{
                                                  +  x = double,
                                                  +  y = double
                                                  +}
                                                  +
                                                  +val origin = @{ x = 0.0, y = 0.0 } : point2D
                                                  +
                                                  +val x = origin.x and y = origin.y
                                                  +
                                                  +val @{ x = x, y = y } = origin
                                                  +
                                                  +val @{ y = y, ... } = origin
                                                  +
                                                  +(* boxed record *)
                                                  +typedef point2D = '{
                                                  +  x = double,
                                                  +  y = double
                                                  +}
                                                  +

                                                  Sequence Expressions #

                                                  (
                                                  +  print 'Hi'; (* return value must be void *)
                                                  +  123 + 456 (* result of expression is result of whole block *)
                                                  +) (* has type int *)
                                                  +
                                                  +(* can also use begin .. end *)
                                                  +begin
                                                  +  print 'Hi';
                                                  +  123 + 456
                                                  +end
                                                  +
                                                  +(* or let .. in .. end *)
                                                  +let
                                                  +  val () = print 'Hi'
                                                  +  val () = print 'asdf'
                                                  +in
                                                  +  123 + 456
                                                  +end
                                                  +

                                                  Datatypes #

                                                  datatypes == garbage collectable objects?

                                                  seem to be auto boxed

                                                  Templates #

                                                  templates are bound via first-find rather than best-find

                                                  Termination Metric #

                                                  .<expr>. in function signature tells that compiler that expr must be strictly decreasing on each function call

                                                  Case Expressions #

                                                  TL;DR: prefer case+ and val+ in almost all cases to mandate exhaustive pattern matches everywhere.

                                                  dataviewtype int_list_vt =
                                                  +  | nil_vt of ()
                                                  +  | cons_vt of (int, int_list_vt)
                                                  +
                                                  +// xs: int_list_vt
                                                  +// ~ is for freeing linear int_list_vt resource
                                                  +case xs of
                                                  +  | ~nil_vt() => ..
                                                  +  | ~cons_vt(_, xs) => ..
                                                  +
                                                  +// just plain `case` with non-exhaustive pattern
                                                  +// ==> WARNING: pattern match is non-exhaustive
                                                  +case xs of
                                                  +  | ~nil_vt() => ..
                                                  +
                                                  +// `case+` with non-exhaustive pattern
                                                  +// ==> ERROR: pattern match is non-exhaustive
                                                  +case+ xs of
                                                  +  | ~nil_vt() => ..
                                                  +
                                                  +// `case-` with non-exhaustive pattern means:
                                                  +// "ignore this problem compiler, I know what I'm doing : )"
                                                  +case- xs of
                                                  +  | ~nil_vt() => ..
                                                  +
                                                  +// you can also add pattern guard conditions
                                                  +case xs of
                                                  +  | ~cons_vt(x, xs) when x < 10 => ..
                                                  +

                                                  One detail to note is that while matching happens sequentially at runtime, typechecking of case clauses actually happens non-deterministically.

                                                  You can force a pattern to typecheck sequentially by using =>>. For example, this won't typecheck w/o using =>>:

                                                  fun {T, U: t@ype} {V: t@ype}
                                                  +list_zipwith {n: nat} (
                                                  +  xs1: list (T, n),
                                                  +  xs2: list (U, n),
                                                  +  f: (T, U) -<cloref1> V
                                                  +) : list (V, n) =
                                                  +  case+ (xs1, xs2) of
                                                  +  | (list_cons (x1, xs1), list_cons (x2, xs2)) =>
                                                  +      list_cons (f (x1, x2), list_zipwith (xs1, xs2, f))
                                                  +  | (_, _) =>> list_nil ()
                                                  +

                                                  Mutate In-place (fold@) #

                                                  Let's say we're matching on a linear list list_vt and want to modify the entry in-place. We don't to be free'ing and alloc'ing garbage cons nodes just to change the entry.

                                                  (ERROR) For example, we might try to do this first:

                                                  fun list_vt_add1 {n: nat} (xs: !list_vt(int, n)): void =
                                                  +	case+ xs of
                                                  +	| cons_vt(x, xs1) =>
                                                  +		let
                                                  +		  // ERROR: an l-value is required
                                                  +		  val () = x := x + 1
                                                  +		in
                                                  +		  // ..
                                                  +		end
                                                  +	| nil_vt() => // ..
                                                  +

                                                  Since x and xs1 are only treadted as values when we use a plain pattern (i.e., not an l-value) and are not allowed to be modified into other values or types.

                                                  (CORRECT) Instead, the right syntax here looks like this:

                                                  fun list_vt_add1 {n: nat} (xs: !list_vt(int, n)): void =
                                                  +	case+ xs of
                                                  +//    .----- this is important
                                                  +//    v
                                                  +	| @cons_vt(x, xs1) =>
                                                  +		let
                                                  +		  // CORRECT
                                                  +		  val () = x := x + 1
                                                  +		  prval () = fold@(xs) // <--- this is important
                                                  +		in
                                                  +		  // ..
                                                  +		end
                                                  +	| nil_vt() => // ..
                                                  +

                                                  The @ in the pattern unfolds the dataviewtype variant, which binds x and xs1 to pointers to each field. This @ binding also implicitly view-changes xs to viewtype list_vt_cons_unfold(l_0, l_1, l_2). These *_unfold(l_0, ..) viewtype definitions an autogenerated for all dataviewtype variants, where l_0 points to the outer dataviewtype and l_i points to field_i, where field_1 is the first field.

                                                  After modifying x in the above let-block, notice that we also need this fold@(xs) proof statement. This built-in proof function "folds" the xs: list_vt_cons_unfold(l_0, l_1, l_2) back into a list_vt.

                                                  Val Expressions #

                                                  Just like case/case+/case-, you can pattern match in val expressions with exhaustiveness or not.

                                                  // ==> WARNING: non-exhaustive
                                                  +val ~cons_vt(x, xs1) = xs
                                                  +
                                                  +// ==> ERROR: non-exhaustive
                                                  +val+~const_vt(x, xs1) = xs
                                                  +
                                                  +// silent : )
                                                  +val-~cons_vt(x, xs1) = xs
                                                  +

                                                  Templates #

                                                  templates are monomorphized at compile time

                                                  fun {a,b: t@ype} swap(xy: (a, b)): (b, a) =
                                                  +  (xy.1, xy.0)
                                                  +

                                                  Note: the template parameters come before the function name

                                                  {a,b: t@ype} are the template parameters

                                                  t@ype: a sort for static terms representing size-unspecified (== unsized?) types type: machine word-sized types (usually boxed types)

                                                  Polymorphic Functions/Datatypes #

                                                  polymorphic functions/datatypes allow for dynamic dispatch. obv. polymorphic functions/datatypes are not monomorphized.

                                                  fun swap_boxed {T: type}{U: type} (xy: (T, U)): (U, T) =
                                                  +	(xy.1, xy.0)
                                                  +

                                                  Note: the polymorphic parameters come after the function name

                                                  Note: if we used t@ype here, we would get a C compiler error (not a typechecking error!) since the arguments have unspecified size.

                                                  References #

                                                  references in ATS are just heap allocated boxed values. they're really only useful in GC'd programs or as top-level program state since you need to manually free them (no linearity assistance).

                                                  the key interface is

                                                  val int_ref = ref<int>(123)
                                                  +val () = !int_ref := 69
                                                  +val () = println!("int_ref = ", !int_ref)
                                                  +// > int_ref = 69
                                                  +

                                                  Arrays #

                                                  There are a few "variants" of arrays

                                                  • array: (TODO) static stack allocated array?
                                                  • array_v: (TODO) array view?
                                                  • arrayptr: (TODO): linear?
                                                  • arrayref: GC'd array reference (w/o size attached)
                                                  • arrayszref: GC'd array reference (with size attached, like a fat pointer)

                                                  usage:

                                                  val size = g0int2uint_int_size(10)
                                                  +val xs = arrszref_make_elt(size, 42069)
                                                  +val x_3 = xs[3]
                                                  +val () = xs[4] := 123
                                                  +
                                                  
                                                  +

                                                  Matrices #

                                                  Note: row-major layout! (rather than column-major like C)

                                                  • matrixptr
                                                  • matrixref
                                                  • mtrxszref
                                                  postfix sz
                                                  +#define sz(x) g0int2uint_int_size(x)
                                                  +
                                                  +val X = mtrxszref_make_elt(10sz (*nrow*), 5sz (*ncol*), 0 (*fill*))
                                                  +val X_ij = X[i,j]
                                                  +val () = X[i,j] := 123
                                                  +

                                                  Abstract Types #

                                                  Types w/ encapsulation, i.e., structure is not visible to the user

                                                  abstype: boxed abstract type (pointer-sized)

                                                  // declares abstract boxed intset type of size ptr
                                                  +abstype intset = ptr
                                                  +

                                                  abst@ype: unboxed abstract type

                                                  // declares abstract unboxed rational type of size 2*sizeof(int)
                                                  +abst@ype rational = (int, int)
                                                  +

                                                  Use assume to "concretize" the abstract type. This can happen at-most-once, globally.

                                                  assume my_abstract_type = my_concrete_type

                                                  Theorem Proving #

                                                  • ATS/LF component supports interactive theorem proving

                                                  prop: a builtin sort representing all proof types dataprop: a prop type declared in a manner similar to datatype defs.

                                                  A dataprop representing the fibonnacci relation fib(n) = r

                                                  dataprop FIB(int, int) =
                                                  +  | FIB0(0, 0) of ()
                                                  +  | FIB1(1, 1) of ()
                                                  +  | {n: nat} {r0, r1: int} FIB2(n+2, r0+r1) of (FIB(n, r0), FIB(n+1, r1))
                                                  +

                                                  The sort assigned to FIB is (int, int) -> prop, i.e., FIB takes two ints and returns a proof. FIB0 and FIB1 constructors both take () and return a proof.

                                                  A dataprop for multiplication:

                                                  // int * int = int
                                                  +dataprop MUL(int, int, int) =
                                                  +  // 0 * n = 0
                                                  +  | {n: int} MULbase(0, n, 0) of ()
                                                  +  // (m+1) * n = m*n + n
                                                  +  | {m: nat}{n: int}{p: int} MULind(m+1, n, p+n) of MUL(m, n, p)
                                                  +  // (-m) * n = -(m * n)
                                                  +  | {m: pos}{n: int}{p: int} MULneg(~(m), n, ~(p)) of MUL(m, n, p)
                                                  +

                                                  To prove this relation, we want to construct values of MUL for each parameter. The most common way to do this is to construct a total function over all parameters:

                                                  // ∀ m ∈ ℕ, n ∈ ℤ, ∃ p ∈ ℤ : m * n = p
                                                  +prfun mul_nat_is_total {m: nat; n: int} .<m>. (): [p: int] MUL(m, n, p) =
                                                  +  sif m == 0 then
                                                  +    MULbas()
                                                  +  else
                                                  +    MULind(mul_nat_is_total{m-1, n}())
                                                  +
                                                  +// ∀ m, n ∈ ℤ, ∃ p ∈ ℤ : m * n = p
                                                  +prfn mul_is_total {m, n: int} (): [p: int] MUL(m, n, p) =
                                                  +  sif m >= 0 then
                                                  +    mul_nat_is_total{m, n}()
                                                  +  else
                                                  +    MULneg(mul_nat_is_total{~m, n}())
                                                  +

                                                  Note: the second proof function uses prfn rather than prfun for a specific reason: prfuns define recursive proof functions and thus require a termination metric. prfns must be non-recursive and therefore don't need a termination metric.

                                                  datasort: like a datatype but static. doesn't support any dependent type stuff i think. you must also use scase instead of case to match on datasorts.

                                                  Q: what is the difference b/w a dataprop and a datasort??

                                                  Views #

                                                  A view is a linear prop (linear as in must consume exactly once). views power ATS's pointer ownership checking.

                                                  For example, an owned pointer with a view to an a at location l looks like

                                                  {a: t@ype} {l: addr} (pf: a @ l | p: ptr l)
                                                  +

                                                  or a maybe uninitialized a

                                                  (pf: a? @ l | p: ptr l)

                                                  While managing these linear views can be done by threading the proofs through the in-params and out-params of each function, ATS provides a convenient syntactic sugar for modifying the view in-place. Consider the ptr_set function:

                                                  fun {a: t@ype} ptr_set {l: addr} (
                                                  +  pf: !a? @ l >> a @ l
                                                  +| p: ptr l,
                                                  +  x: a
                                                  +): void
                                                  +

                                                  We can read the pf as "the function takes a proof of a maybe-uninit a at location l and will modify this proof (in the caller's context) to a definitely-init a at location l".

                                                  In general, the format looks like !V >> V' to mean that the function changes the view V to V' upon its return. If V = V', then you can just write !V or !V >> _ (TODO: what does this mean? does typechecker fill the hole?).

                                                  Manipulating Pointers #

                                                  Manually pass the proof in and out:

                                                  // (pf: a @ l | p: ptr l)
                                                  +val x = ptr_get<int>(pf | p)
                                                  +val () = ptr_set<int>(pf | p, 123)
                                                  +

                                                  Or use the pointer syntax:

                                                  // these modify pf in-place
                                                  +val x = !p
                                                  +val () = !p := 123
                                                  +

                                                  Viewtypes #

                                                  viewtypes are linear types in ATS. The name view + type suggests that a viewtype consists of a linear view V and type T. Usually we refer to viewtypes by their definition VT but you can actually split viewtypes into their component view V and type T (via pattern matching.)

                                                  • This interpretation of a VT as a (V | T) could be thought of as encumbering a concrete, runtime value of type T with a linear tag V (which can also assert other properties ofc).

                                                  • Given the viewtype VT we can compactly refer to the type portion by the syntax VT?!

                                                  • viewtype and viewt@ype are two sorts with the type portion in sorts type and t@ype resp.

                                                  http://blog.vmchale.com/article/ats-linear https://bluishcoder.co.nz/2011/04/25/sharing-linear-resources-in-ats.html

                                                  L-Values and Call-by-Reference #

                                                  • An l-value is a pointer and linear at-view proof / "value + address"
                                                  • Like C/C++, l-values can appear on the left-hand side of assignments
                                                  • Simplest l-value is !p where p is a ptr l. the typechecker must also find an at-view proof a @ l somewhere in the context.
                                                  • Normally, ATS uses call-by-value; however, you can pass l-values by reference. When this happens, the address (and not the value) is passed.
                                                  • Function can take reference with & like fun foo(x: &a). Note that you don't use ! to deref or assign, just the plain x.

                                                  Stack-Allocated Variables #

                                                  • Use var x: T to declare uninit stack variable or var y: T = val to init with val.
                                                  • Use view@(x) to get the view-type at the location inside x
                                                  • Use addr@(x) to get the location that x points to.
                                                  • Interestingly, you can see the the uninit decl. actually has type view@(x) = T? @ x while the init decl. has type view@(y) = T @ x
                                                  • var z: int with pfz = 69 will bind pfz = view@(z) for you
                                                  • ATS ensures there are no dangling or escaped stack pointers by requiring that the linear at-view proof must be present in the context when the function returns.
                                                  • Can also stack allocate flat arrays in the obvious way
                                                  var A = @[double][10]()				// uninit stack array
                                                  +var B = @[double][10](42.0)			// size=10 stack array init w/ 42.0
                                                  +var C = @[double](1.0, 2.0, 3.0)    // size=3 init w/ (1.0, ..)
                                                  +
                                                  • Can also stack allocate closures via lam@ (non-rec) and fix@ (rec)
                                                  var x: int = 123
                                                  +var y: int = 69
                                                  +
                                                  +var mul = lam@ (): int => x * y
                                                  +

                                                  Variance (Rust) #

                                                  The variance property of a generic type is relative to its generic arguments. For example, a generic type F has variance relative to its generic parameters (say F<T>, so F has variance relative to T). Variance tells us how/how not e.g. traits impls "pass through" the inner parameter type T to/from the outer generic type F.

                                                  subtype: T: U, T is "at least as useful as" U. For example, 'static: 'a since you can use static lifetimes anywhere some stricter lifetime 'a is needed.

                                                  There are three cases for variance: covariant, contravariant, and invariant.

                                                  1. covariant:

                                                    have fn foo(&'a str), can call foo(&'static str). we can provide foo with a stronger type than it requires. in this case, F<_> = &'_ str.

                                                  2. contravariant:

                                                    have fn foo(Fn(&'a str) -> ()), can't provide foo(fn(&'static str) {}). need to provide foo with a weaker type than it expects.

                                                  3. invariant:

                                                    no additional subtyping relation can be derived

                                                  Variance (ATS) #

                                                  You can express covariance and contravariance (I believe?) in some parameter by adding a + or - to certain keyword types or something

                                                  Confirmed this is true for view+ and prop+ for covariance. Just guessing on the rest.

                                                  prop+ prop-
                                                  +view+ view-
                                                  +
                                                  +type+ type-
                                                  +tbox+ tbox-
                                                  +tflt+ tflt-
                                                  +
                                                  +types+ types-
                                                  +
                                                  +vtype+ vtype-
                                                  +vtbox+ vtbox-
                                                  +vtflt+ vtflt-
                                                  +
                                                  +t0ype+ t0ype-
                                                  +vt0ype+ vt0ype-
                                                  +
                                                  +viewtype+ viewtype-
                                                  +viewt0ype+ viewt0ype-
                                                  +

                                                  opt #

                                                  There's a type constructor opt(T, B) where T is a type and B is a bool. If B = true then opt(T, B) is T and T? if B = false.

                                                  llam (..) => .. appears to be a linear lambda closure?

                                                  (..) -<lin,prf> .. appears to be type of linear, prfun closure?

                                                  \ No newline at end of file diff --git a/lang/ATS/Install ATS2/index.html b/lang/ATS/Install ATS2/index.html new file mode 100644 index 0000000000..0417837114 --- /dev/null +++ b/lang/ATS/Install ATS2/index.html @@ -0,0 +1,134 @@ +Install ATS2 | philip's notes

                                                  install ATS2

                                                  2022-01-11 · 1 min read

                                                  $ git clone --depth=1 git@github.com:githwxi/ATS-Anairiats.git ats1
                                                  +$ git clone git@github.com:githwxi/ATS-Postiats.git ats2
                                                  +$ git clone git@github.com:githwxi/ATS-Postiats-contrib.git ats2-contrib
                                                  +
                                                  +$ sudo apt install build-essential automake-1.15 jgawk libgmp-dev libgc-dev libjson-c-dev
                                                  +
                                                  +$ echo "export PATSHOME=\$HOME/dev/ats2" >> ~/.bashrc
                                                  +$ echo "export PATSCONTRIB=\$HOME/dev/ats2-contrib" >> ~/.bashrc
                                                  +$ echo "export PATH=\$PATH:\$PATSHOME/bin" >> ~/.bashrc
                                                  +
                                                  +$ cd ats1
                                                  +$ mkdir bootstrap1
                                                  +$ ./configure && make all
                                                  +
                                                  +$ cd ../ats2
                                                  +$ make -f Makefile_devl all
                                                  +

                                                  Make ctags in ATS src

                                                  $ cd ~/dev/ats2
                                                  +$ ctags \
                                                  +    --languages=ATS \
                                                  +    --exclude="*atscc2*" \
                                                  +    --exclude="doc*" \
                                                  +    --exclude="npm-utils*" \
                                                  +    --exclude="*CODEGEN*" \
                                                  +    --exclude="*DOCUGEN*" \
                                                  +    --exclude="*TEST*"
                                                  +
                                                  \ No newline at end of file diff --git a/lang/ATS/index.html b/lang/ATS/index.html new file mode 100644 index 0000000000..e4702777c8 --- /dev/null +++ b/lang/ATS/index.html @@ -0,0 +1,91 @@ +lang/ATS | philip's notes

                                                  lang/ATS

                                                  ATS2 Notes →

                                                  2022-01-17 · 17 min read

                                                  Install ATS2 →

                                                  2022-01-11 · 1 min read

                                                  \ No newline at end of file diff --git a/lang/flutter/dart lang/index.html b/lang/flutter/dart lang/index.html new file mode 100644 index 0000000000..f0b0e6b54e --- /dev/null +++ b/lang/flutter/dart lang/index.html @@ -0,0 +1,500 @@ +dart lang | philip's notes

                                                  dart lang

                                                  2022-12-05 · 12 min read

                                                  variables #

                                                  mutable #

                                                  var name = 'Bob';
                                                  +Object name = 'Bob';
                                                  +String name = 'Bob';
                                                  +var name = const 'Bob';
                                                  +name = 'Alice';
                                                  +

                                                  immutable #

                                                  final name = 'Bob';
                                                  +final String name = 'Bob';
                                                  +name = 'Alice'; // << compile error: final var can only be set once
                                                  +final String name = const 'Bob';
                                                  +

                                                  comptime #

                                                  const bar = 1000000;
                                                  +const double atm = 1.01325 * bar;
                                                  +const p1 = [bar, atm];
                                                  +const p2 = const [bar, atm]; // << style: const-value is redundant
                                                  +

                                                  If you enable null safety, then you must initialize the values of non-nullable variables before you use them.

                                                  The compiler can sometimes determine a lazy-init val is not null before use:

                                                  int foo;
                                                  +if (isFooable) {
                                                  +	foo = 123;
                                                  +} else {
                                                  +	foo = 0;
                                                  +}
                                                  +
                                                  +print(foo);
                                                  +

                                                  late init #

                                                  Use the late modifier if dart can't prove non-null-before-use. You will get a runtime panic if it's null on use:

                                                  late String desc;
                                                  +
                                                  +void main() {
                                                  +	desc = 'hello';
                                                  +	print(desc);
                                                  +}
                                                  +

                                                  lazy init #

                                                  You can also use late for lazy-init:

                                                  // only computed on first use
                                                  +late String expensiveValue = computeExpensive();
                                                  +

                                                  built-in types #

                                                  numbers (num, int, double) #

                                                  • class num
                                                  • (native) int := i64
                                                  • (native) double := double
                                                  • both int extends num and double extends num

                                                  strings (String) #

                                                  String is a sequence of UTF-16 code points. You can use either '' or "" to create a string:

                                                  var s1 = 'hello';
                                                  +var s2 = "world";
                                                  +

                                                  Dart also supports string interpolation:

                                                  var inner = "world";
                                                  +var s1 = "hello $inner";
                                                  +var s2 = "HELLO ${inner.toUpperCase()}";
                                                  +

                                                  lists (List<T>) #

                                                  List<int> list = [1, 2, 3];
                                                  +assert(list.length == 3);
                                                  +assert(list[1] == 2);
                                                  +
                                                  +var list = const [1, 2, 3];
                                                  +list[1] = 1; // << error
                                                  +

                                                  spread operator #

                                                  • spread operator ...
                                                  • null-aware spread operator ...?
                                                  var xs = [1, 2, 3];
                                                  +var ys = [0, ...xs];
                                                  +assert(ys == [0, 1, 2, 3]);
                                                  +
                                                  +var zs = null;
                                                  +var ws = [0, ...?zs];
                                                  +assert(ws == [0]);
                                                  +

                                                  collection control flow operators #

                                                  var nav = ["Home", "Furniture", "Plants", if (promo) "Outlet"];
                                                  +var ints = [1, 2, 3];
                                                  +var strs = ["#0", for (var i in ints) "#$i"];
                                                  +assert(strs == ["#0", "#1", "#2", "#3"]);
                                                  +

                                                  sets (Set<T>) #

                                                  var halogens = {"F", "Cl", "Br", "I", "At"};
                                                  +var names = <String>{};
                                                  +Set<String> names = {};
                                                  +names.add("Alice");
                                                  +names.addAll({"Bob", "Charlie"});
                                                  +

                                                  maps (Map<K, V>) #

                                                  var halogens = {
                                                  +	9: "F",
                                                  +	17: "Cl",
                                                  +};
                                                  +
                                                  +assert(halogens.length == 2);
                                                  +assert(halogens[9] == "F");
                                                  +assert(halogens[2] == null);
                                                  +

                                                  symbols (Symbol) #

                                                  • Represents an operator or identifier in a dart program.
                                                  #radix
                                                  +#bar
                                                  +

                                                  example using Function.apply:

                                                  abstract class Function {
                                                  +	external static apply(
                                                  +		Function function,
                                                  +		List<dynamic>? positionalArguments,
                                                  +		[Map<Symbol, dynamic>? namedArguments],
                                                  +	);
                                                  +}
                                                  +
                                                  +void printWineDetails(int vintage, {String? country, String? name}) {
                                                  +  print('Name: $name, Country: $country, Vintage: $vintage');
                                                  +}
                                                  +
                                                  +Function.apply(printWineDetails, [2018], {#country: "USA", #name: "Casocco"});
                                                  +

                                                  functions (Function) #

                                                  Dart functions are first-class objects and can be assigned to variables and passed as arguments.

                                                  bool isNoble(int n) {
                                                  +	return _nobleGases[n] != null;
                                                  +}
                                                  +
                                                  +// can omit type annotations...
                                                  +isNoble(n) {
                                                  +	return _nobleGases[n] != null;
                                                  +}
                                                  +
                                                  +// single-expressions shorthand syntax
                                                  +bool isNoble(int n) => _nobleGases[n] != null;
                                                  +

                                                  parameters #

                                                  • Functions can have required positional parameters, followed by named parameters xor optional positional parameters.
                                                  named parameters #
                                                  • Named params are null by default (hence the bool? for each param in this example):
                                                  void enableFlags({bool? bold, bool? hidden}) { /* .. */ }
                                                  +
                                                  +enableFlags(bold: true, hidden: false);
                                                  +
                                                  • You can specify default values:
                                                  void enableFlags({bool bold = false, bool hidden = false}) { /* .. */ }
                                                  +
                                                  +enableFlags(hidden: true); // bold = false
                                                  +
                                                  • You can use the required keyword to make a named param non-optional:
                                                  const Scrollbar({super.key, required Widget child});
                                                  +
                                                  optional positional parameters #
                                                  void say(String from, String msg, [String? device]) {
                                                  +  final tail = (device != null) ? "on their $device" : "";
                                                  +  print("$from says $msg$tail");
                                                  +}
                                                  +
                                                  +void main() {
                                                  +  say("Bob", "hello");
                                                  +  say("Alice", "goodbye", "Android");
                                                  +}
                                                  +

                                                  main #

                                                  void main() {}
                                                  +void main(List<String> arguments) {}
                                                  +
                                                  • You can use the args package for arg parsing.

                                                  closures #

                                                  syntax:

                                                  ([[Type] param1[, ...]]) { codeBlock; }
                                                  +([[Type] param1[, ...]]) => expression;
                                                  +
                                                  +const printer = (val) { print("this is $val"); };
                                                  +
                                                  +["bob", "Alice"]
                                                  +	.map((name) => name.toUpperCase())
                                                  +	.forEach((name) => print("big name: $name"));
                                                  +
                                                  +Function makeAdder(int addend) => (int i) => i + addend;
                                                  +

                                                  operators #

                                                  (only highlighting interesting or non-standard operators)

                                                  • ~/ integer division, e.g., 5 ~/ 2 == 2.
                                                  • x is T is true if value x impls T. x is Object? is always true.
                                                  • x is! T == !(x is T)
                                                  • x ??= value assigns value iff x is null.

                                                  ints are always signed, so shifts are sign-extended as well. To do a bit-wise unsigned right shift, use >>>.

                                                  • expr1 ?? expr2 returns expr1 if it's non-null, otherwise expr2.

                                                  cascade notation lets you make a sequence of operations on one object:

                                                  var paint = Paint()
                                                  +  ..color = Colors.black
                                                  +  ..strokeCap = StrokeCap.round
                                                  +  ..strokeWidth = 5.0;
                                                  +
                                                  +// if the object is possibly null, then use `?..` for the first operation
                                                  +querySelector("#confirm")
                                                  +  ?..text = "Confirm"
                                                  +  ..classes.add("important")
                                                  +  ..onClick.listen((e) => window.alert("Confirmed"))
                                                  +  ..scrollIntoView();
                                                  +

                                                  other maybe-null operators

                                                  xs?[1] == xs.map(|xs| xs[1])
                                                  +paint?.color == paint.map(|p| p.color)
                                                  +paint! == paint.unwrap()
                                                  +paint!.color == paint.unwrap().color
                                                  +

                                                  you can override operators on classes

                                                  class Vec3d {
                                                  +  final double x, y, z;
                                                  +
                                                  +  const Vec3d(this.x, this.y, this.z);
                                                  +
                                                  +  Vec3d operator +(Vec3d v) => Vec3d(x + v.x, y + v.y, z + v.z);
                                                  +}
                                                  +

                                                  control flow #

                                                  for (var i = 0; i < 10; i++) { /* .. */ }
                                                  +for (final cb in callbacks) { /* .. */ }
                                                  +callbacks.forEach((cb) => /* .. */);
                                                  +while (foo) { /* .. */}
                                                  +
                                                  • supports c-style switch-case blocks...

                                                  All of Dart’s exceptions are unchecked exceptions. Methods don’t declare which exceptions they might throw, and you aren’t required to catch any exceptions.

                                                  try {
                                                  +  breedMoreLlamas();
                                                  +} on OutOfLlamasException {
                                                  +  // A specific exception
                                                  +  buyMoreLlamas();
                                                  +} on Exception catch (err) {
                                                  +  // Anything else that is an exception
                                                  +  print('Unknown exception: $err');
                                                  +} catch (err, backtrace) {
                                                  +  // No specified type, handles all
                                                  +  print('unknown error:\n$err\ntrace:\n$backtrace');
                                                  +  rethrow;
                                                  +} finally {
                                                  +  cleanup();
                                                  +}
                                                  +

                                                  classes #

                                                  The root of the Dart object hierarchy is Object? := { null U Object }:

                                                  				Object?
                                                  +				|     |
                                                  +			  null  Object
                                                  +			        / / \ \
                                                  +			    <normal classes>
                                                  +

                                                  Classes have one superclass (by extends) and zero or more mixin interfaces.

                                                  constructors #

                                                  import "dart:math";
                                                  +
                                                  +class Point {
                                                  +  final double x;
                                                  +  final double y;
                                                  +  final double z;
                                                  +
                                                  +  // initializing with "formal" parameters
                                                  +  const Point({required this.x, required this.y, this.z = 0.0});
                                                  +
                                                  +  // initializing with C++-style initializer list
                                                  +  Point.fromPolar({required double r, required double theta})
                                                  +      : x = r * cos(theta),
                                                  +        y = r * sin(theta),
                                                  +        z = 0.0;
                                                  +
                                                  +  // can also redirect to another constructor
                                                  +  Point.fromPolar2({required double r, required double theta})
                                                  +      : this(x: r * cos(theta), y: r * sin(theta));
                                                  +
                                                  +
                                                  +  // if you need to do some work before construction, use `factory`.
                                                  +  // this also works for objects retrieved from e.g. an internal cache.
                                                  +  factory Point.fromPolar3d({
                                                  +    required double r,
                                                  +    required double theta,
                                                  +    required double phi,
                                                  +  }) {
                                                  +    final rSinPhi = r * sin(phi);
                                                  +    final x = rSinPhi * cos(theta);
                                                  +    final y = rSinPhi * sin(theta);
                                                  +    final z = r * cos(phi);
                                                  +    return Point(x: x, y: y, z: z);
                                                  +  }
                                                  +
                                                  +  @override
                                                  +  String toString() => "{ $x, $y, $z }";
                                                  +}
                                                  +
                                                  +print(Point(x: 1, y: 2)); // { 1.0, 2.0, 0.0 }
                                                  +print(Point(x: 1, y: 2, z: 3)); // { 1.0, 2.0, 3.0 }
                                                  +print(Point.fromPolar(r: 3.0, theta: 0.25 * pi)); // { 2.121, 2.121, 0.0 }
                                                  +print(Point.fromPolar3d( // { 0.812, 0.812, 2.772 }
                                                  +  r: 3.0,
                                                  +  theta: 0.25 * pi,
                                                  +  phi: 0.125 * pi,
                                                  +));
                                                  +

                                                  getters and setters #

                                                  class Point {
                                                  +  const Point(this.x, this.y, this.x);
                                                  +  final double x, y, z;
                                                  +
                                                  +  double get length => sqrt(x * x + y * y + z * z);
                                                  +  set length(double newLen) {
                                                  +    final mult = newLen / length;
                                                  +    x *= mult;
                                                  +    y *= mult;
                                                  +    z *= mult;
                                                  +  }
                                                  +}
                                                  +
                                                  +bool approxEq(double x, double y) => abs(x - y) <= 1e-10;
                                                  +
                                                  +final point = Point(0, sqrt(2)/2, sqrt(2)/2);
                                                  +assert(approxEq(1.0, point.length));
                                                  +

                                                  implicit interfaces #

                                                  All classes define an implicit interface containing all its instance members and implemented interfaces.

                                                  // A person. The implicit interface contains greet().
                                                  +class Person {
                                                  +  // In the interface, but visible only in this library.
                                                  +  final String _name;
                                                  +
                                                  +  // Not in the interface, since this is a constructor.
                                                  +  Person(this._name);
                                                  +
                                                  +  // In the interface.
                                                  +  String greet(String who) => 'Hello, $who. I am $_name.';
                                                  +}
                                                  +
                                                  +// An implementation of the Person interface.
                                                  +class Impostor implements Person {
                                                  +  String get _name => '';
                                                  +
                                                  +  String greet(String who) => 'Hi $who. Do you know who I am?';
                                                  +}
                                                  +

                                                  extension methods #

                                                  extension methods == point-free function -> dot method

                                                  Extension methods are pure syntactic sugar. They let us define faux-methods on a type (using dot notation) when we would otherwise be restricted to a static point-free function. In the following example, we can use extension methods to make parseInt("123") into a faux-method on String, like "123".parseInt().

                                                  // point free version
                                                  +int parseInt(String s) => int.parse(s);
                                                  +
                                                  +// a named extension on String
                                                  +extension NumberParsing on String {
                                                  +  int parseInt() => int.parse(this);
                                                  +}
                                                  +
                                                  +// an unnamed, module-local extension
                                                  +extension on String {
                                                  +  int parseInt() => int.parse(this);
                                                  +}
                                                  +
                                                  +assert(int.parse("123") == 123);
                                                  +assert(parseInt("123") == 123);
                                                  +assert("123".parseInt() == 123);
                                                  +

                                                  You can't invoke extension methods on values with type dynamic.

                                                  If two modules provide two extension methods of the same name on the same type, you will need to either (1) hide the extension for one of the modules or (2) namespace one of the modules with as.

                                                  import "string_apis.dart"; // defs String.parseInt() extension
                                                  +import "string_apis_2.dart" hide NumberParsing2; // need to hide the second ext
                                                  +
                                                  +"42".parseInt();
                                                  +
                                                  import "string_apis.dart"; // defs NumberParsing ext
                                                  +import "string_apis_3.dart" as foo; // defs NumberParsing ext
                                                  +
                                                  +"42".parseInt(); // << ERROR
                                                  +NumberParsing("42").parseInt();
                                                  +foo.NumberParsing("42").parseInt();
                                                  +

                                                  enums #

                                                  Dart has basic C-style enums, like:

                                                  enum Color { red, green, blue }
                                                  +

                                                  There's also "enhanced enums" which are NOT like real discriminated unions. This feature just allows enums to have methods and a fixed set of fields shared across all variants.

                                                  Update(2023/07/14): dart 3 now includes sealed and final classes, plus exhaustive pattern matching. These two features let us mostly emulate real discriminated unions. For example, consider an enum like Rust's Result<T, E>:

                                                  pub enum Result<T, E> {
                                                  +  Ok(T),
                                                  +  Err(E),
                                                  +}
                                                  +

                                                  We can now mostly emulate this in dart 3:

                                                  sealed class Result<T, E> {
                                                  +  const Result();
                                                  +
                                                  +  T? get ok;
                                                  +  E? get err;
                                                  +}
                                                  +
                                                  +final class Ok<T, E>(this.ok) extends Result<T, E> {
                                                  +  const Ok(this.ok);
                                                  +
                                                  +  @override
                                                  +  final T ok;
                                                  +  @override
                                                  +  E? get err => null;
                                                  +}
                                                  +
                                                  +final class Err<T, E>(this.ok) extends Result<T, E> {
                                                  +  const Err(this.err);
                                                  +
                                                  +  @override
                                                  +  final E err;
                                                  +  @override
                                                  +  T? get ok => null;
                                                  +}
                                                  +

                                                  Using it isn't too bad with exhaustive pattern matching:

                                                  final Result<int, String> result = Ok(123);
                                                  +
                                                  +// using switch-expressions:
                                                  +
                                                  +final bool isOk123 = switch (result) {
                                                  +  Ok(:final ok) => ok == 123,
                                                  +  Err() => false,
                                                  +};
                                                  +
                                                  +assert(isOk123);
                                                  +
                                                  +// or switch-statements:
                                                  +
                                                  +final int value;
                                                  +switch (result) {
                                                  +  case Ok(:final ok):
                                                  +    value = ok;
                                                  +  case Err(:final err):
                                                  +    print("Error: $err");
                                                  +    return;
                                                  +}
                                                  +
                                                  +print("value = $value");
                                                  +// value = 123
                                                  +

                                                  mixins #

                                                  mixins are like abstract classes that can neither be extended nor constructed.

                                                  (philip): looking through dart-lang std, it appears that mixins are almost never used? even interface-only cases, like Comparable<T>, are just abstract classes. consumers provide the interface by e.g. class X implements Comparable<X>.

                                                  (philip): more std: main use case in std seems to be type-specialization? like "implement List<int> more efficiently for Uint8List".

                                                  enum Ordering { less, equal, greater }
                                                  +
                                                  +mixin PartialOrd<T> {
                                                  +  Ordering? partialCmp(T other);
                                                  +}
                                                  +
                                                  +mixin Ord<T> on PartialOrd<T> {
                                                  +  Ordering cmp(T other);
                                                  +}
                                                  +
                                                  +class BigInt with PartialOrd<BigInt>, Ord<BigInt> {
                                                  +  final List<int> limbs;
                                                  +
                                                  +  const BigInt() : this.limbs = const [];
                                                  +
                                                  +  @override
                                                  +  Ordering? partialCmp(BigInt other) => cmp(other);
                                                  +
                                                  +  @override
                                                  +  Ordering cmp(BigInt other) {
                                                  +    final lenThis = this.limbs.length;
                                                  +    final lenOther = other.limbs.length;
                                                  +
                                                  +    if (lenThis < lenOther) {
                                                  +      return Ordering.less;
                                                  +    } else if (lenThis > lenOther) {
                                                  +      return Ordering.greater;
                                                  +    } else {
                                                  +	  for (var i = lenThis - 1; i >= 0; i--) {
                                                  +        final limbThis = this.limbs[i];
                                                  +        final limbOther = other.limbs[i];
                                                  +
                                                  +        if (limbThis < limbOther) {
                                                  +          return Ordering.less;
                                                  +        } else if (limbThis > limbOther) {
                                                  +          return Ordering.greater;
                                                  +        }
                                                  +      }
                                                  +
                                                  +      return Ordering.equal;
                                                  +    }
                                                  +  }
                                                  +}
                                                  +

                                                  libraries #

                                                  // dart-core packages are prefixed with "dart:"
                                                  +// like: `use std::collect::*;`
                                                  +import "dart:collection";
                                                  +// external packages are prefixed with "package:"
                                                  +// like: `use serde::de::*;`
                                                  +import "package:lib1/lib1.dart";
                                                  +
                                                  +// namespace import
                                                  +// like: `use std::collection as std_collection;`
                                                  +import "dart:collection" as stdCollection;
                                                  +
                                                  +// only import parts of library
                                                  +// like: `use std::collection::{VecDeque, BTreeMap};`
                                                  +import "dart:collection" show Queue, Set;
                                                  +
                                                  +// import all but hide some things
                                                  +import "dart::collection" hide Queue, Set;
                                                  +

                                                  async/await #

                                                  Future<String> lookup() async => "123";
                                                  +Future<String> lookup() async => await http.fetch("google.com");
                                                  +

                                                  Dart uses a single-threaded async runtime, though you can spawn background workers with no shared state that communicate solely through message passing.

                                                  enable the unawaited_futures lint #

                                                  In stock dart, you can call async methods without awaiting them, which is super suprising to me. Enabling the unawaited_futures lint will tell the compiler to yell at you if you accidentally call an async method without awaiting it. This is like the #[must_use] attribute in Rust but only for dart's Futures.

                                                  Be sure to enable this lint early on in a project, since a lot of standard flutter code likes to play fast and loose with ignoring futures.

                                                  Note that there are some occasions where you want to call an async function but not await the returned future, like Navigator.push(), which actually returns a Future<T?> for the value the new route eventually yields when it Navigator.pop()s. In this particular case, the method synchronously pushes the new route onto the navigation stack and just returns a future for the popped value. If you don't care about the value, use the dart:async unawaited() function, which ignores the returned future:

                                                  unawaited(Navigator.push(context, route));
                                                  +

                                                  You should only use unawaited on a future if you're sure it won't return an error. If you don't care about the result regardless, you can use FutureExtensions.ignore like:

                                                  import 'dart:async' show FutureExtensions;
                                                  +
                                                  +Navigator.push(context, route).ignore();
                                                  +

                                                  Unfortunately, this lint only tells you about unawaited futures... in async code. Which is why you should also...

                                                  enable the discarded_futures lint #

                                                  This is like unawaited_futures but also works in sync code. It should be renamed to unawaited_futures_sync IMO. Or unawaited_futures should just work in both contexts...

                                                  \ No newline at end of file diff --git a/lang/flutter/flutter setup/index.html b/lang/flutter/flutter setup/index.html new file mode 100644 index 0000000000..707d4ca601 --- /dev/null +++ b/lang/flutter/flutter setup/index.html @@ -0,0 +1,165 @@ +flutter setup | philip's notes

                                                  flutter setup

                                                  2022-12-02 · 3 min read

                                                  prereqs #

                                                  1. (Optional, android) android cli setup
                                                  2. (Optional, iOS, macOS-only) ios setup
                                                  3. (macOS, apple silicon) sudo softwareupdate --install-rosetta --agree-to-license

                                                  install flutter #

                                                  https://docs.flutter.dev/get-started/install

                                                  $ git clone --branch="stable" \
                                                  +	https://github.com/flutter/flutter.git \
                                                  +	~/.local/flutter
                                                  +
                                                  +# ensure .bashrc contains these lines:
                                                  +#
                                                  +# ```
                                                  +# # Flutter
                                                  +# FLUTTER_HOME=$HOME/.local/flutter
                                                  +# export PATH=$PATH:$FLUTTER_HOME/bin
                                                  +# ```
                                                  +

                                                  setup flutter #

                                                  # disable their pesky telemetry : )
                                                  +$ flutter config --suppress-analytics --no-analytics
                                                  +$ dart --disable-analytics
                                                  +
                                                  +# run the flutter sanity checker
                                                  +$ flutter doctor
                                                  +
                                                  +Doctor summary (to see all details, run flutter doctor -v):
                                                  +[!] Flutter (Channel unknown, 3.3.9, on Pop!_OS 22.04 LTS 6.0.6-76060006-generic, locale en_US.UTF-8)
                                                  +    ! Flutter version 3.3.9 on channel unknown at /home/phlip9/.local/flutter
                                                  +    ! Upstream repository unknown
                                                  +[✓] Android toolchain - develop for Android devices (Android SDK version 33.0.1)
                                                  +[✗] Chrome - develop for the web (Cannot find Chrome executable at google-chrome)
                                                  +    ! Cannot find Chrome. Try setting CHROME_EXECUTABLE to a Chrome executable.
                                                  +[✗] Linux toolchain - develop for Linux desktop
                                                  +     GTK 3.0 development libraries are required for Linux development.
                                                  +      They are likely available from your distribution (e.g.: apt install libgtk-3-dev)
                                                  +[!] Android Studio (not installed)
                                                  +[✓] Connected device (1 available)
                                                  +[✓] HTTP Host Availability
                                                  +
                                                  +! Doctor found issues in 4 categories.
                                                  +

                                                  Once you've setup your devices (e.g. android cli setup > (optional) setup wireless debugging on device), verify that flutter actually picks up the mobile device.

                                                  On my linux desktop:

                                                  $ flutter devices
                                                  +
                                                  +Pixel 5a (mobile)  android-arm64 • Android 13 (API 33)
                                                  +Linux (desktop)  linux-x64 • Pop!_OS 22.04 LTS
                                                  +

                                                  On my M1 MBP:

                                                  $ flutter devices
                                                  +3 connected devices:
                                                  +
                                                  +Pixel 5a (mobile)  android-arm64 • Android 13 (API 33)
                                                  +iPhone 14 Pro (mobile)  ios • iOS-16-2 (simulator)
                                                  +macOS (desktop)  macos • darwin-arm64 • macOS 13.1 darwin-arm
                                                  +

                                                  (linux pop_OS!) install libstdc++-12-dev #

                                                  If you want to run linux desktop apps:

                                                  $ sudo apt install libstdc++-12-dev
                                                  +

                                                  test sample app #

                                                  $ flutter create --platforms android my_app
                                                  +$ cd my_app
                                                  +
                                                  +# this should build, install, and launch the sample app on your phone
                                                  +$ flutter run -d pixel
                                                  +$ flutter run -d iphone
                                                  +

                                                  editor (nvim) #

                                                  For all the nvim chads out there using coc.nvim, just do:

                                                  :CocInstall coc-flutter
                                                  +

                                                  Probably set "dart.showTodos": false in your coc-settings.json.

                                                  Maybe peep these keybinds too:

                                                  nnoremap <silent> <leader>fd :CocCommand flutter.devices<CR>
                                                  +nnoremap <silent> <leader>fr :CocCommand flutter.run<CR>
                                                  +nnoremap <silent> <leader>ft :CocCommand flutter.dev.hotRestart<CR>
                                                  +nnoremap <silent> <leader>fs :CocCommand flutter.dev.quit<CR>
                                                  +nnoremap <silent> <leader>fl :CocCommand flutter.dev.openDevLog<CR>
                                                  +

                                                  Now instead of running flutter run to build the app, just use <leader>fr or :CocCommand flutter.run. This will setup a live-reload session; whenever you save a .dart file, the app UI will live reload with any UI-related changes. State changes still need a "hot restart" (<leader>ft). Pretty sick though.

                                                  \ No newline at end of file diff --git a/lang/flutter/index.html b/lang/flutter/index.html new file mode 100644 index 0000000000..2e3dc75b78 --- /dev/null +++ b/lang/flutter/index.html @@ -0,0 +1,91 @@ +lang/flutter | philip's notes

                                                  lang/flutter

                                                  dart lang →

                                                  2022-12-05 · 12 min read

                                                  flutter setup →

                                                  2022-12-02 · 3 min read

                                                  \ No newline at end of file diff --git a/lang/gdb ref/index.html b/lang/gdb ref/index.html new file mode 100644 index 0000000000..4b7790d502 --- /dev/null +++ b/lang/gdb ref/index.html @@ -0,0 +1,124 @@ +gdb ref | philip's notes

                                                  gdb ref

                                                  2022-12-11 · 2 min read

                                                    run and immediately break at main #

                                                    (gdb) start
                                                    +
                                                    +(gdb) help start
                                                    +Start the debugged program stopping at the beginning of the main procedure.
                                                    +You may specify arguments to give it.
                                                    +Args may include "*", or "[...]"; they are expanded using the
                                                    +shell that will start the program (specified by the "$SHELL" environment
                                                    +variable).  Input and output redirection with ">", "<", or ">>"
                                                    +are also allowed.
                                                    +

                                                    hexdump memory view #

                                                    define xxd
                                                    +dump binary memory dump.bin $arg0 $arg0+$arg1
                                                    +shell xxd dump.bin
                                                    +end
                                                    +
                                                    (gdb) xxd buf.data_ptr 256
                                                    +00000000: 9c55 5555 0500 0000 785a 65e9 81fc 4510  .UUU....xZe...E.
                                                    +00000010: 0000 0000 0000 0000 0000 0000 0000 0000  ................
                                                    +00000020: 0000 0000 0000 0000 0000 0000 0000 0000  ................
                                                    +00000030: 0000 0000 0000 0000 0000 0000 0000 0000  ................
                                                    +00000040: 0000 0000 0000 0000 0000 0000 0000 0000  ................
                                                    +00000050: 0000 0000 0000 0000 0000 0000 0000 0000  ................
                                                    +00000060: 0000 0000 0000 0000 0000 0000 0000 0000  ................
                                                    +00000070: 0000 0000 0000 0000 0000 0000 0000 0000  ................
                                                    +00000080: 0000 0000 0000 0000 0000 0000 0000 0000  ................
                                                    +00000090: 0000 0000 0000 0000 0000 0000 0000 0000  ................
                                                    +000000a0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
                                                    +000000b0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
                                                    +000000c0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
                                                    +000000d0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
                                                    +000000e0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
                                                    +000000f0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
                                                    +

                                                    rust syntax #

                                                    (gdb) p 0x55585380 as *mut u8
                                                    +

                                                    TUI mode #

                                                    Tired of pressing l (list)? Can't tell wtf is going on? Try TUI mode!

                                                    (gdb) tui enable
                                                    +

                                                    TUI Commands: https://sourceware.org/gdb/current/onlinedocs/gdb.html/TUI-Commands.html

                                                    TUI keybindings not working #

                                                    gdb's TUI mode has some keybindings (ex: <CTRL-X a> to open TUI, <Ctrl-X l> to clear screen).

                                                    However, if you're like me and have vi mode enabled in your ~/.inputrc, then these keybinds won't work unless you're in emacs mode. Fortunately there's a keybind to switch modes:

                                                    vi mode (normal) -> emacs mode: <Ctrl-e> emacs mode -> vi mode: <Ctrl-Alt-j>

                                                    TUI Keybindings: https://sourceware.org/gdb/current/onlinedocs/gdb.html/TUI-Keys.html

                                                    stdout filling screen with junk #

                                                    Repaint the TUI:

                                                    (gdb) <CTRL-l>
                                                    +
                                                    \ No newline at end of file diff --git a/lang/index.html b/lang/index.html new file mode 100644 index 0000000000..ea826b8460 --- /dev/null +++ b/lang/index.html @@ -0,0 +1,73 @@ +lang | philip's notes

                                                    lang

                                                    gdb ref →

                                                    2022-12-11 · 2 min read

                                                    koka-lang →

                                                    2021-12-31 · 1 min read

                                                    lua →

                                                    2021-12-03 · 7 min read

                                                    operator fixity and precedence →

                                                    2022-01-11 · 4 min read

                                                    \ No newline at end of file diff --git a/lang/koka-lang/index.html b/lang/koka-lang/index.html new file mode 100644 index 0000000000..f4af467c19 --- /dev/null +++ b/lang/koka-lang/index.html @@ -0,0 +1,94 @@ +koka-lang | philip's notes

                                                    koka-lang

                                                    2021-12-31 · 1 min read

                                                    Koka Book: https://koka-lang.github.io/koka/doc/book.html

                                                    • functions literally all the way down (mod some primitives)
                                                    • algebraic effects nicely integrated into the language at all levels
                                                    • first-class effect type, composes nicely, allows user-defined control flow, almost all control syntax (e.g. while, for, ..) is actually just functions + fun for ( start : int, end : int, action : (int) -> e ()) : e () + fun while( pred : () -> <div|e> bool, action : () -> <div|e> () ) : <div|e> () + note: <div|e> means polymorphic effect e union effect div (divergent, possibly non-terminating)
                                                    • universal dot call syntax! myint.double == double(myint)
                                                    • effects effectively specify an "interface" of handlers, which can be overridden
                                                    • very curious how extensive non-linear control flow affects performance : )
                                                    \ No newline at end of file diff --git a/lang/lua/index.html b/lang/lua/index.html new file mode 100644 index 0000000000..bb957d8eb8 --- /dev/null +++ b/lang/lua/index.html @@ -0,0 +1,367 @@ +lua | philip's notes

                                                    lua

                                                    2021-12-03 · 7 min read

                                                      Syntax #

                                                      function foo(x)
                                                      +  -- <body>
                                                      +end
                                                      +
                                                      +-- local to the scope
                                                      +local function bar()
                                                      +  -- <body>
                                                      +end
                                                      +
                                                      +-- anonymous function (all fns are technically anonymous)
                                                      +local max = function (x, y)
                                                      +  return (a > b) and a or b
                                                      +end
                                                      +
                                                      +-- simulate "named" args
                                                      +function rename(args) do
                                                      +  os.rename(args.old, args.new)
                                                      +end
                                                      +-- can call w/o parens
                                                      +rename{ new = "perm.lua", old = "temp.lua" }
                                                      +
                                                      if x then
                                                      +  -- <case 1>
                                                      +elseif y then
                                                      +  -- <case 2>
                                                      +else
                                                      +  -- <case 3>
                                                      +end
                                                      +
                                                      while x do
                                                      +  -- <block>
                                                      +end
                                                      +
                                                      repeat
                                                      +  -- <block>
                                                      +until x
                                                      +
                                                      -- note end is _inclusive_
                                                      +for i = 1, 3 do
                                                      +  print(i)
                                                      +end
                                                      +
                                                      +-- output:
                                                      +-- > 1
                                                      +-- > 2
                                                      +-- > 3
                                                      +
                                                      for i = 3, 1, -1 do
                                                      +  print(i)
                                                      +end
                                                      +
                                                      +-- output:
                                                      +-- > 3
                                                      +-- > 2
                                                      +-- > 1
                                                      +
                                                      -- iterate over an _array_
                                                      +local a = { 1, 3, 5 }
                                                      +for i, x in ipairs(a) do
                                                      +  print(i, x)
                                                      +end
                                                      +
                                                      +-- output:
                                                      +-- > 1	1
                                                      +-- > 2	3
                                                      +-- > 3	5
                                                      +
                                                      -- iterate over a table (order not guaranteed)
                                                      +local a = { 1, 3, 5 }
                                                      +for i, x in ipairs(a) do
                                                      +  print(i, x)
                                                      +end
                                                      +
                                                      +-- output:
                                                      +-- > 1	10
                                                      +-- > 2	foo
                                                      +-- > x	5
                                                      +-- > y	3
                                                      +
                                                      -- creates a new scope
                                                      +do
                                                      +  -- <block>
                                                      +end
                                                      +
                                                      -- multiple assignment
                                                      +a, b = 10, 20
                                                      +
                                                      -- this is a block comment
                                                      +--[[
                                                      +print(x)
                                                      +--]]
                                                      +
                                                      -- new table
                                                      +x = {}
                                                      +x["foo"] = 5
                                                      +
                                                      -- array (note 1-indexed)
                                                      +local a = {}
                                                      +for i = 1, 5 do
                                                      +  a[i] = math.random(10)
                                                      +end
                                                      +

                                                      Semantics #

                                                      • undefined variables default to nil
                                                      • _ALL_CAPS variables are reserved for lua
                                                      • types: nil, boolean, number (double), string (immutable, just dumb byte vec), table (map type), function, userdata (opaque blobs from external libs), thread (but actually coroutine, not OS thread)
                                                      • all values are true except false and nil
                                                      • arrays are just tables with number keys
                                                      • variables are global by default, need to declare with local to restrict to lexical scoping
                                                      • arrays cannot have holes, but can be partially filled until used

                                                      Idioms #

                                                      -- default value
                                                      +x = x or "default"
                                                      +

                                                      Strings #

                                                      -- string concat
                                                      +"foo" .. " bar"
                                                      +
                                                      -- string length
                                                      +#"foo"
                                                      +
                                                      -- multiline strings
                                                      +escapes = [[
                                                      +  \f (form feed)
                                                      +  \n (newline)
                                                      +  \r (carriage return)
                                                      +]]
                                                      +print("|" .. escapes .. "|")
                                                      +
                                                      +-- output:
                                                      +-- > |  \f (form feed)
                                                      +-- >   \n (newline)
                                                      +-- >   \r (carriage return)
                                                      +-- > |
                                                      +

                                                      Arrays #

                                                      -- remove last entry
                                                      +a[#a] = nil
                                                      +-- or
                                                      +table.remove(a, #a)
                                                      +
                                                      +-- append entry
                                                      +a[#a + 1] = "foo"
                                                      +-- or
                                                      +table.insert(a, #a + 1, "foo")
                                                      +
                                                      +-- insert (shifting other elts)
                                                      +table.insert(a, 1, "foo")
                                                      +
                                                      +-- sort
                                                      +table.sort({ 5, 3, 9, 1, 7})
                                                      +-- > { 1, 3, 5, 7, 9 }
                                                      +
                                                      +-- concat
                                                      +table.concat({ 1, 2, 3 }, " ")
                                                      +-- > "1 2 3"
                                                      +

                                                      Structs #

                                                      point = { x = 10, y = 20 }
                                                      +print(point.x)
                                                      +

                                                      Iterators #

                                                      • an iterator is just a function with some local state. each time you call the function it returns the next value and nil when finished.

                                                      example:

                                                      -- returning a closure that modifies the outer fn args each call
                                                      +function fromto(a, b)
                                                      +  return function ()
                                                      +    if a > b then
                                                      +	  return nil
                                                      +	else
                                                      +	  a = a + 1
                                                      +	  return a - 1
                                                      +    end
                                                      +  end
                                                      +end
                                                      +
                                                      +for x in fromto(2, 5) do
                                                      +  print(x)
                                                      +end
                                                      +
                                                      +-- > 2
                                                      +-- > 3
                                                      +-- > 4
                                                      +-- > 5
                                                      +
                                                      • there are also stateless iterators
                                                      function fromto(a, b)
                                                      +  return function (state, seed)
                                                      +    if seed >= state then
                                                      +	  return nil
                                                      +	else
                                                      +	  return seed + 1
                                                      +	end
                                                      +  end, b, a - 1 -- notice the state, seed returned here
                                                      +end
                                                      +
                                                      • and "seedless" iterators
                                                      function fromto(a, b)
                                                      +  return function(state)
                                                      +    if state[1] > state[2] then
                                                      +	  return nil
                                                      +	else
                                                      +	  state[1] = state[1] + 1
                                                      +	  return state[1] - 1
                                                      +	end
                                                      +  end, { a, b } -- this is the initial state
                                                      +end
                                                      +

                                                      Errors #

                                                      expressing errors:

                                                      1. can return out, err, where out is nil if there was an error and err is an error message
                                                      2. can raise an exception with e.g. assert(cond) or error("error message") + error has an optional 2nd arg that specifies the "error-level", where error("..", 1) means "this function is to blame", error("..", 2) means "the calling function is to blame", error("..", 3) means the caller's caller, etc...

                                                      catching errors:

                                                      pcall(function, arg1, arg2, ..) will return ok, result where ok: boolean and result is the succesful output or the error message.

                                                      also

                                                      xpcall(
                                                      +	function ()
                                                      +	  -- do fallible thing
                                                      +	end,
                                                      +	function (err)
                                                      +	  -- handle error
                                                      +	end
                                                      +)
                                                      +

                                                      debug.traceback() returns the traceback as a string

                                                      Modules #

                                                      • modules are just tables
                                                      • some standard modules: table, io, string, math, os, coroutine, package, debug, all included in the prelude
                                                      • "import" a module with mymodule = require "mymodule"
                                                      • require searches package.path to find modules
                                                        • can (usually) modify the path with LUA_PATH env var
                                                        • lua replaces ";;" in the env var with the pre-compiled default
                                                        • the format is a series of ";" separated template strings, where "?" is replaced with the module name
                                                        • e.g., "/usr/local/share/lua/5.2/?.lua;/usr/local/share/lua/5.2/?/init.lua;./?.lua"
                                                        • lua replaces "." in the module name with platform path separator. used to import from packages with many modules

                                                      defining a module

                                                      -- file: complex.lua
                                                      +local complex = {}
                                                      +
                                                      +function complex.new(r, i)
                                                      +  return { real = r or 0, im = i or 0 }
                                                      +end
                                                      +
                                                      +complex.i = complex.new(0, 1)
                                                      +
                                                      +function complex.add(c1, c2)
                                                      +  return complex.new(c1.real + c2.real, c1.im + c2.im)
                                                      +end
                                                      +
                                                      +function complex.tostring(c)
                                                      +  return tostring(c.real) .. "+" .. tostring(c.im) .. "i"
                                                      +end
                                                      +
                                                      +return complex
                                                      +

                                                      Metatables #

                                                      • can set metatable for a table to override built-in behaviours, e.g., arithmetic, tostring, equality, iteration, call table as fn, etc...
                                                      • use setmetatable and getmetatable functions
                                                      • metamethods: __add, __sub, __mul, __div, __mod, __pow, __unm, __concat, __len, __eq, __lt, __le, __index, __newindex, __call, __tostring, __ipairs, __pairs, __gc
                                                      • __index and __newindex can be tables, used for single-inheritance OO

                                                      augmenting complex.lua defined above with metatables

                                                      local complex = {}
                                                      +local mt = {}
                                                      +
                                                      +function complex.new(r, i)
                                                      +  return setmetatable({ real = r or 0, im = i or 0 }, mt)
                                                      +end
                                                      +
                                                      +function complex.is_complex(c)
                                                      +  return getmetatable(c) == mt
                                                      +end
                                                      +
                                                      +complex.i = complex.new(0, 1)
                                                      +
                                                      +function complex.add(c1, c2)
                                                      +  return complex.new(c1.real + c2.real, c1.im + c2.im)
                                                      +end
                                                      +mt.__add = complex.add
                                                      +
                                                      +function complex.eq(c1, c2)
                                                      +  return (c1.real == c2.real) and (c1.im == c2.im)
                                                      +end
                                                      +mt.__eq = complex.eq
                                                      +
                                                      +function complex.norm(c)
                                                      +  return math.sqrt(c.real * c.real + c.im * c.im)
                                                      +end
                                                      +mt.__len = complex.norm
                                                      +
                                                      +function complex.tostring(c)
                                                      +  return tostring(c.real) .. "+" .. tostring(c.im) .. "i"
                                                      +end
                                                      +mt.__tostring = complex.tostring
                                                      +
                                                      +return complex
                                                      +

                                                      OO #

                                                      • using dot-notation doesn't add implicit self to call. you need to include it manually like obj.method(obj, args)
                                                      • to avoid this duplication, lua has colon-notation which adds this implicit self as the first arg: obj:method(args).
                                                      • declaring functions using a obj:method adds implicit self parameter
                                                      function point:norm()
                                                      +  return math.sqrt(self.x * self.x + self.y * self.y)
                                                      +end
                                                      +

                                                      can define prototype-style classes

                                                      local Complex = {}
                                                      +Complex.__index = Complex
                                                      +
                                                      +function Complex:new(r, i)
                                                      +  return setmetatable({ real = r or 0, im = i or 0 }, self)
                                                      +end
                                                      +
                                                      +function Complex:norm()
                                                      +  return math.sqrt(self.real * self.real + self.im * self.im)
                                                      +end
                                                      +
                                                      +-- etc...
                                                      +
                                                      +return Complex
                                                      +

                                                      adding other fields to Complex makes them default values for new instances

                                                      local Complex = { real = 0, im = 0 }
                                                      +

                                                      single inheritance (Point extends Shape)

                                                      local Shape = {}
                                                      +Shape.__index = Shape
                                                      +
                                                      +function Shape:new(x, y)
                                                      +  return setmetatable({ x = x, y = y }, self)
                                                      +end
                                                      +
                                                      +function Shape:move(dx, dy)
                                                      +  self.x = self.x + dx
                                                      +  self.y = self.y + dy
                                                      +end
                                                      +
                                                      +return Shape
                                                      +
                                                      local Shape = require "shape"
                                                      +local Point = setmetatable({}, Shape)
                                                      +Point.__index = Point
                                                      +
                                                      +function Point:area()
                                                      +  return 0
                                                      +end
                                                      +
                                                      +return Point
                                                      +
                                                      local Point = require "point"
                                                      +p = Point:new(5, 10)
                                                      +print(p:area())
                                                      +-- > 0
                                                      +p:move(-3, 7)
                                                      +print(p.x, p.y)
                                                      +-- > 2    17
                                                      +

                                                      this is a simple version of OO in lua (there are more sophisticated versions). some disadvantages of this approach: 1. class methods (e.g. new) visible in instance namespace, 2. metamethods are not automatically inherited (need to be explicitly set)

                                                      \ No newline at end of file diff --git a/lang/operator fixity and precedence/index.html b/lang/operator fixity and precedence/index.html new file mode 100644 index 0000000000..0ef3738c73 --- /dev/null +++ b/lang/operator fixity and precedence/index.html @@ -0,0 +1,143 @@ +operator fixity and precedence | philip's notes

                                                      operator fixity and precedence

                                                      2022-01-11 · 4 min read

                                                        You come across a Haskell/Idris/LEAN file littered with custom operators (read "delicious operator soup"):

                                                        parseJson = withObject "Foo" $
                                                        +    \v -> Foo <$> v .:  "name"
                                                        +              <*> v .:  "owner"
                                                        +              <*> v .:  "deadline"
                                                        +              <*> v .:  "status"
                                                        +              <*> v .:? "reco"
                                                        +              <*> v .:  "benefit"
                                                        +              <*> v .:  "cost"
                                                        +              <*> v .:  "residual"
                                                        +

                                                        How do you parse this without tearing your eyes out?

                                                        If setting fire to your computer and becoming a wheat farmer doesn't sound like a viable career path, then you should start by finding the list of operators for your language. Here are the ones defined in Idris' prelude:

                                                        module Prelude.Ops
                                                        +
                                                        +-- Numerical operators
                                                        +infix 6 ==, /=, <, <=, >, >=
                                                        +infixl 8 +, -
                                                        +infixl 9 *, /
                                                        +
                                                        +-- Boolean operators
                                                        +infixr 5 &&
                                                        +infixr 4 ||
                                                        +
                                                        +-- List and String operators
                                                        +infixr 7 ::, ++
                                                        +infixl 7 :<
                                                        +
                                                        +-- Functor/Applicative/Monad/Algebra operators
                                                        +infixl 1 >>=, =<<, >>, >=>, <=<, <&>
                                                        +infixr 2 <|>
                                                        +infixl 3 <*>, *>, <*
                                                        +infixr 4 <$>, $>, <$
                                                        +infixl 8 <+>
                                                        +
                                                        +-- Utility operators
                                                        +infixr 9 ., .:
                                                        +infixr 0 $
                                                        +
                                                        +infixl 9 `div`, `mod`
                                                        +

                                                        and the documentation for infix(r|l):

                                                        > :doc infix
                                                        +Fixity declarations:
                                                        +
                                                        +  Operators can be assigned a priority level and associativity.
                                                        +  During parsing operators with a higher priority will collect their
                                                        +  arguments first and the declared associativity will inform how subterms
                                                        +  are grouped.
                                                        +
                                                        +  For instance the expression `a + b * c * d + e` is parsed as
                                                        +
                                                        +  `(a + ((b * c) * d)) + e` because:
                                                        +    `(+)` is at level 8 and associates to the left
                                                        +    `(*)` is at level 9 and associates to the left
                                                        +

                                                        To understand how these expressions are parsed, we need to understand the properties of all operators.

                                                        1. Arity (the number of inputs)
                                                        2. Fixity (infix, prefix, postfix)
                                                        3. Associativity (how parentheses are placed)
                                                        4. Precedence (the order of operations between different operators)

                                                        Arity #

                                                        Operator arity refers to the number of inputs of an operator. The most common arities with some examples:

                                                        1. Nullary (zero inputs): less of an operator and more of a constant.
                                                        2. Unary (one input): e.g., boolean negation ! or bitwise-not ~.
                                                        3. Binary (two inputs): e.g., arithmetic +,-,*,/

                                                        Fixity #

                                                        Operator fixity describes the operator's position in the list of arguments. There are three fixities:

                                                        1. Prefix (operator comes before arguments): e.g., typical function application plus 3 4 or forced prefix form (+) 3 4
                                                        2. Infix (operator comes between arguments): e.g., all arithmetic 3 + 4
                                                        3. Postfix (operator comes after arguments): e.g., RPN (Reverse Polish Notation) or concatinative languages 3 4 +

                                                        Associativity #

                                                        Operator associativity determines how the inner-most parentheses are placed when parsing an expression with the same operator (or same precedence).

                                                        For example, if you have the expression a ◯ b ◯ c ◯ d with some operator , there are 5 ways we can parse it:

                                                        1. ((a ◯ b) ◯ c) ◯ d <-- left associative
                                                        2. a ◯ (b ◯ (c ◯ d)) <-- right associative
                                                        3. (a ◯ b) ◯ (c ◯ d)
                                                        4. a ◯ ((b ◯ c) ◯ d)
                                                        5. (a ◯ (b ◯ c)) ◯ d

                                                        In other words, left associative means we place the inner-most parentheses around the left-most pair, while right associative prefers the right-most pair.

                                                        Operators can also be non-associative, which means a ◯ b ◯ c should fail to parse. An example would be relational operators like x <= y <= z, since (x <= y) <= z would fail to type check, as you would be comparing a boolean to a z.

                                                        Precedence #

                                                        Operator precedence allows us to parse expressions containing multiple different operators without ambiguity. Precedence is a number; higher numbers mean higher priority when parsing.

                                                        I like to imagine parsing precedence for an expression in passes. The first pass we parse only operators of precedence 10. The next pass parses precedence 9, and so on. In each pass we ignore all operators below the current precedence level.

                                                        From school, we know that * has a higher precedence than +. In Idris2 you can see * has precedence 9 while + has precedence 8. Consequently, the expression 100 - 5 * 9 + 111 is parsed like

                                                           base expr:    100 - 5 * 9 + 111
                                                        +precedence 9:   100 - (5 * 9) + 111
                                                        +precedence 8:  (100 - (5 * 9)) + 111
                                                        +
                                                        \ No newline at end of file diff --git a/lang/rust/index.html b/lang/rust/index.html new file mode 100644 index 0000000000..86965ebb88 --- /dev/null +++ b/lang/rust/index.html @@ -0,0 +1,91 @@ +lang/rust | philip's notes

                                                        lang/rust

                                                        optimizing binary size →

                                                        2022-02-20 · 6 min read

                                                        rr with rust →

                                                        2022-07-30 · 4 min read

                                                        rust verification tools →

                                                        2022-01-13 · 1 min read

                                                        rust x SGX →

                                                        2022-02-17 · 1 min read

                                                        self-referencing structs →

                                                        2022-04-06 · 1 min read

                                                        sycamore x futures →

                                                        2022-03-29 · 2 min read

                                                        \ No newline at end of file diff --git a/lang/rust/optimizing binary size/index.html b/lang/rust/optimizing binary size/index.html new file mode 100644 index 0000000000..ac2d4f6ce6 --- /dev/null +++ b/lang/rust/optimizing binary size/index.html @@ -0,0 +1,307 @@ +optimizing binary size | philip's notes

                                                        optimizing binary size

                                                        2022-02-20 · 6 min read

                                                        Setup #

                                                        # for running cargo bloat
                                                        +$ RUSTFLAGS="-C target-cpu=native" c install cargo-bloat
                                                        +
                                                        +# for running cargo size (among other things)
                                                        +$ rustup component add llvm-tools-preview
                                                        +$ rustup +nightly component add llvm-tools-preview # (for strip=symbols)
                                                        +$ RUSTFLAGS="-C target-cpu=native" c install cargo-binutils
                                                        +

                                                        TL;DR #

                                                        # compile and sort functions by binary size
                                                        +$ cargo bloat --release -n 100
                                                        +
                                                        +# only like 20-25% of the binary size seems to be our code or other relevant
                                                        +# stuff like ndarray. The rest seems to be mostly panic and fmt
                                                        +# infrastructure...
                                                        +
                                                        +# compile and sort crates by binary size
                                                        +$ cargo bloat --release --crates
                                                        +
                                                        +# print the size of each section in the binary
                                                        +$ cargo size --bin my-bin --release -- -A
                                                        +
                                                        +# if you already have a built rust binary, you can run
                                                        +# rust-size directly:
                                                        +$ rust-size -A target/release/my-bin
                                                        +
                                                        +# rust-size with nice sorted and human-readable output:
                                                        +$ rust-size -A target/release/my-bin \
                                                        +	| tail -n +2 \
                                                        +	| sort --numeric-sort --key=2 \
                                                        +	| numfmt --header=3 --to=iec-i --suffix=B --field=2
                                                        +
                                                        +# strip debug info and all symbols (requires nightly) then print section size
                                                        +$ RUSTFLAGS="-Z strip=symbols -C target-cpu=native" cargo +nightly \
                                                        +	size --bin my-bin --release -- -A
                                                        +
                                                        +# before: 1.8 MiB! looking at the sections, it's mostly debug info.
                                                        +# "-Z strip=symbols" brings this down to like 330-400 KiB (depending on
                                                        +# other flags etc...)
                                                        +
                                                        +# TODO: cargo-binutils also installed `cargo strip`; maybe that's helpful?
                                                        +

                                                        Cargo.toml #

                                                        [profile.release]
                                                        +codegen-units = 1
                                                        +lto = true
                                                        +panic = "abort"
                                                        +# opt-level = "s" # optimize for size, but still unroll
                                                        +# opt-level = "z" # optimize for size, no unrolling at all
                                                        +opt-level = 3
                                                        +debug = 0
                                                        +

                                                        Compile std with panic = "abort" #

                                                        • shaves off maybe 150 KiB?
                                                        • removes a decent chunk of the backtrace/unwind infrastructure
                                                        # .cargo/config.toml
                                                        +[unstable]
                                                        +build-std = ["std", "panic_abort"]
                                                        +build-std-features = [] # <- turns off backtrace+unwind features
                                                        +

                                                        WASM #

                                                        https://rustwasm.github.io/twiggy/

                                                        Example: fixing bloat #

                                                        Let me just run a quick smoketest (which depends on almost every crate in the monorepo)...

                                                        $ cargo test -p smoketest
                                                        +# ..
                                                        +    Finished test [unoptimized + debuginfo] target(s) in 1m 28s
                                                        +     Running unittests src/lib.rs (target/debug/deps/smoketest-bd637d7668a0b714)
                                                        +# ..
                                                        +

                                                        Man that sure took a while to link, I wonder how big the binary is?

                                                        $ ls -lah target/debug/deps/smoketest-bd637d7668a0b714
                                                        +-rwxrwxr-x 1 phlip9 phlip9 880M May  4 11:19 target/debug/deps/smoketest-bd637d7668a0b714
                                                        +

                                                        JESUS. RIP MY SSD.

                                                        $ rustup component add llvm-tools-preview
                                                        +$ rust-size -A target/debug/deps/smoketest-bd637d7668a0b714 \
                                                        +	| tail -n +2 \
                                                        +	| sort --numeric-sort --key=2 \
                                                        +	| numfmt --header=3 --to=iec-i --suffix=B --field=2
                                                        +section                     size       addr
                                                        +.fini_array                    8   63669912
                                                        +.fini                         13   52345408
                                                        +.init_array                   16   63669896
                                                        +.plt.got                     24B    3608704
                                                        +.init                        27B    3608576
                                                        +.interp                      28B        848
                                                        +.note.ABI-tag                32B        948
                                                        +.note.gnu.property           32B        880
                                                        +.debug_gdb_scripts           34B   55423896
                                                        +.note.gnu.build-id           36B        912
                                                        +.comment                     43B          0
                                                        +.gnu.hash                    48B        984
                                                        +.tdata                       72B   63669824
                                                        +.plt                         96B    3608608
                                                        +.rela.plt                   120B    3605536
                                                        +.gnu.version                318B       7088
                                                        +.gnu.version_r              432B       7408
                                                        +.dynamic                    544B   64809064
                                                        +.tbss                       696B   63669896
                                                        +.bss                      2.1KiB   65535456
                                                        +.dynstr                   2.2KiB       4848
                                                        +.dynsym                   3.8KiB       1032
                                                        +.debug_macro               12KiB          0
                                                        +.data                      24KiB   65511424
                                                        +.got                      686KiB   64809608
                                                        +.data.rel.ro              1.1MiB   63669920
                                                        +.gcc_except_table         1.4MiB   62213696
                                                        +.eh_frame_hdr             1.5MiB   55423932
                                                        +.debug_abbrev             2.3MiB          0
                                                        +.rodata                   3.0MiB   52346880
                                                        +.rela.dyn                 3.5MiB       7840
                                                        +.debug_loc                3.5MiB          0
                                                        +.debug_aranges            4.9MiB          0
                                                        +.eh_frame                 5.1MiB   56953128
                                                        +.debug_ranges              15MiB          0
                                                        +.debug_line                28MiB          0
                                                        +.text                      47MiB    3608768
                                                        +.debug_pubnames           112MiB          0
                                                        +.debug_str                175MiB          0
                                                        +.debug_info               175MiB          0
                                                        +.debug_pubtypes           275MiB          0
                                                        +Total                     851MiB
                                                        +

                                                        WTF IS GOING ON WITH THE .debug_pubtypes SECTION???

                                                        Ok ok, let's take a look at what we're working with...

                                                        $ sudo apt install dwarfdump
                                                        +
                                                        +$ dwarfdump --print-type --format-suppress-offsets target/debug/deps/smoketest-bd637d7668a0b714 \
                                                        +	| head -n 10
                                                        +
                                                        +.debug_pubtypes
                                                        + 'ErrorData<alloc::boxed::Box<std::io::error::Custom, alloc::alloc::Global>>'
                                                        + 'alloc::boxed::Box<std::io::error::Custom, alloc::alloc::Global>'
                                                        + 'alloc::boxed::Box<(dyn core::error::Error + core::marker::Send + core::marker::Sync), alloc::alloc::Global>'
                                                        + 'Result<(), std::io::error::Error>'
                                                        + 'NonNull<u8>'
                                                        + 'u8'
                                                        + 'SimpleMessage'
                                                        + 'ErrorKind'
                                                        +

                                                        How many types we got?

                                                        $ dwarfdump --print-type --format-suppress-offsets target/debug/deps/smoketest-bd637d7668a0b714 \
                                                        +	| wc -l
                                                        +	| numfmt --to=si
                                                        +2.3M
                                                        +

                                                        Maybe there's some giga types?

                                                        $ dwarfdump --print-type --format-suppress-offsets target/debug/deps/smoketest-bd637d7668a0b714 \
                                                        +	| awk '{ print length, $0 }' \
                                                        +	| sort -n -r \
                                                        +	> smoketest_debug_pubtypes
                                                        +
                                                        +$ head -n 10 smoketest_debug_pubtypes
                                                        +72011  '{closure_env#0}<&str, &str, n ..
                                                        +71962  '&mut (nom::sequence::terminat ..
                                                        +71957  '(nom::sequence::terminated::{ ..
                                                        +71957  '(nom::sequence::terminated::{ ..
                                                        +66740  '&mut nom::branch::alt::{closu ..
                                                        +66717  '{closure_env#0}<&str, &str, n ..
                                                        +66717  '{closure_env#0}<&str, &str, n ..
                                                        +66668  '&mut (nom::sequence::terminat ..
                                                        +66663  '(nom::sequence::terminated::{ ..
                                                        +66663  '(nom::sequence::terminated::{ ..
                                                        +

                                                        Ok despite nom taking to top 10, it looks like the primary culprit is my arch nemesis warp. CURSE YOU WARP AND YOUR COMPOSABLE GENERICS.

                                                        Let's see what proportion of our .debug_pubtypes is warp...

                                                        $ cat smoketest_debug_pubtypes \
                                                        +	| cut -d " " -f1 - \
                                                        +	| awk '{sum += $1} END {print sum}' \
                                                        +	| numfmt --to=iec-i --suffix=B
                                                        +271MiB
                                                        +
                                                        +$ grep "nom" smoketest_debug_pubtypes \
                                                        +	| cut -d " " -f1 - \
                                                        +	| awk '{sum += $1} END {print sum}' \
                                                        +	| numfmt --to=iec-i --suffix=B
                                                        +3.3MiB
                                                        +
                                                        +$ grep "warp" smoketest_debug_pubtypes \
                                                        +	| cut -d " " -f1 - \
                                                        +	| awk '{sum += $1} END {print sum}' \
                                                        +	| numfmt --to=iec-i --suffix=B
                                                        +82MiB
                                                        +
                                                        +$ grep "lightning" smoketest_debug_pubtypes \
                                                        +	| cut -d " " -f1 - \
                                                        +	| awk '{sum += $1} END {print sum}' \
                                                        +	| numfmt --to=iec-i --suffix=B
                                                        +45MiB
                                                        +
                                                        +$ grep "proptest" smoketest_debug_pubtypes \
                                                        +	| cut -d " " -f1 - \
                                                        +	| awk '{sum += $1} END {print sum}' \
                                                        +	| numfmt --to=iec-i --suffix=B
                                                        +5MiB
                                                        +
                                                        +$ grep "Vec" smoketest_debug_pubtypes \
                                                        +	| cut -d " " -f1 - \
                                                        +	| awk '{sum += $1} END {print sum}' \
                                                        +	| numfmt --to=iec-i --suffix=B
                                                        +71MiB
                                                        +
                                                        +$ grep "hyper" smoketest_debug_pubtypes \
                                                        +	| cut -d " " -f1 - \
                                                        +	| awk '{sum += $1} END {print sum}' \
                                                        +	| numfmt --to=iec-i --suffix=B
                                                        +95MiB
                                                        +
                                                        +$ grep "tokio" smoketest_debug_pubtypes \
                                                        +	| cut -d " " -f1 - \
                                                        +	| awk '{sum += $1} END {print sum}' \
                                                        +	| numfmt --to=iec-i --suffix=B
                                                        +95MiB
                                                        +

                                                        A bunch of duplicates...

                                                        Checking out the .debug_str section:

                                                        $ dwarfdump --print-strings --format-suppress-offsets target/debug/deps/smoketest-bafe2762ec60a400 | sort --numeric-sort --key=3 | cut -b -80 | tail -n 10
                                                        +name: length 67206 is 'pin<futures_util::future::try_future::into_future::IntoFu
                                                        +name: length 67220 is 'get_unchecked_mut<futures_util::future::try_future::into_
                                                        +name: length 67222 is 'leak<alloc::sync::ArcInner<warp::filter::boxed::BoxingFil
                                                        +name: length 67229 is 'from<futures_util::future::try_future::into_future::IntoF
                                                        +name: length 67233 is 'into_pin<futures_util::future::try_future::into_future::I
                                                        +name: length 67240 is 'new<alloc::boxed::Box<alloc::sync::ArcInner<warp::filter:
                                                        +name: length 67257 is 'new_unchecked<alloc::boxed::Box<futures_util::future::try
                                                        +name: length 71736 is 'choice<&str, &str, nom::error::Error<&str>, nom::sequence
                                                        +name: length 134431 is 'into<&mut alloc::sync::ArcInner<warp::filter::boxed::Box
                                                        +name: length 134508 is 'into<alloc::boxed::Box<futures_util::future::try_future:
                                                        +
                                                        \ No newline at end of file diff --git a/lang/rust/rr with rust/index.html b/lang/rust/rr with rust/index.html new file mode 100644 index 0000000000..0f55a9794a --- /dev/null +++ b/lang/rust/rr with rust/index.html @@ -0,0 +1,154 @@ +rr with rust | philip's notes

                                                        rr with rust

                                                        2022-07-30 · 4 min read

                                                        github: https://github.com/rr-debugger/rr site: https://rr-project.org/

                                                        what #

                                                        • rr is a lightweight tool for recording, replaying, and debugging applications.
                                                        • rr records deterministic traces of the entire program execution (including all child processes and spawned threads), which can be replayed many times or even run in reverse.
                                                        • rr models a single-threaded machine. It creates a deterministic trace by intercepting and recording all Linux syscalls for later replay. rr also controls the thread and process scheduling so we can even determinstically replay concurrent programs.

                                                        why #

                                                        • you have a flaky concurrency bug that only manifests occasionally.
                                                          • ==> use rr to record 1000s of execution traces (also try --chaos mode!) until a lucky one finally triggers the bug. Later, replay the failing trace as many times as you please.
                                                        • if you're like me, you're terrible at setting breakpoints.
                                                          • ==> with rr you can just replay the same exact execution with better breakpoints; no state changing under your feet between runs.
                                                        • you have a backtrace but the offending code isn't in any of the backtrace frames
                                                          • ==> just execute the program backwards until you hit the problem.
                                                        • your fuzzer sometimes finds a bug after 10 hr, but when you run again the bug ain't there
                                                          • ==> run your fuzzers inside rr. when the fuzzer hits a bug, you can easily replay it.

                                                        Better yet, use rr as a general purpose gdb enhancement : )

                                                        requirements #

                                                        • Linux kernel >= 3.11
                                                          • Works inside a VM if the VM supports virtualization of hardware perf counters. (incl. VMware and KVM; does not incl. Xen).
                                                        • One of:

                                                        setup #

                                                        $ sudo apt install rr
                                                        +

                                                        You will also need gdb installed, since rr replay is "just" a wrapper around gdb.

                                                        $ sudo apt install gdb
                                                        +

                                                        When debugging rust code, there are a few extra command flags that rr needs. Tests are also slightly more annoying to debug, since cargo runs your test binary in a sub-process. The cargo rr tool makes the debugging process painless.

                                                        $ cargo install cargo-rr
                                                        +

                                                        record a trace for deterministic replay #

                                                        # Record a test
                                                        +$ cargo rr test my_failing_test
                                                        +
                                                        +# Record a binary
                                                        +$ cargo rr run --bin=foo -- --arg=bar
                                                        +

                                                        NOTE: if you get an error message like rr needs /proc/sys/kernel/perf_event_paranoid <= 1, but it is 2. then try:

                                                        $ echo 1 | sudo tee /proc/sys/kernel/perf_event_paranoid
                                                        +

                                                        replay last trace #

                                                        $ cargo rr replay
                                                        +

                                                        If you prefer a more visual debugging experience and hate the letter l, try the TUI debugger:

                                                        (rr) <CTRL-X a>
                                                        +
                                                        +# if that doesn't work, try
                                                        +(rr) tui enable
                                                        +

                                                        See: gdb ref > TUI keybindings not working

                                                        debugging #

                                                        Debugging with rr looks the same as debugging with gdb, except you have a few extra commands for executing backwards.

                                                        (rr) help reverse-continue
                                                        +reverse-continue, rc
                                                        +Continue program being debugged but run it in reverse.
                                                        +If proceeding from breakpoint, a number N may be used as an argument,
                                                        +which means to set the ignore count of that breakpoint to N - 1 (so that
                                                        +the breakpoint won't break until the Nth time it is reached).
                                                        +
                                                        +(rr) help reverse-step
                                                        +reverse-step, rs
                                                        +Step program backward until it reaches the beginning of another source line.
                                                        +Argument N means do this N times (or till program stops for another reason).
                                                        +
                                                        +(rr) help reverse-next
                                                        +reverse-next, rn
                                                        +Step program backward, proceeding through subroutine calls.
                                                        +Like the "reverse-step" command as long as subroutine calls do not happen;
                                                        +when they do, the call is treated as one instruction.
                                                        +Argument N means do this N times (or till program stops for another reason).
                                                        +
                                                        +...
                                                        +
                                                        +(rr) help r<TAB>
                                                        +rbreak                    return                    rr-history-push
                                                        +rc                        reverse-continue          rr-hook-run
                                                        +record                    reverse-finish            rr-set-suppress-run-hook
                                                        +refresh                   reverse-next              rr-where
                                                        +remote                    reverse-nexti             rsi
                                                        +remove-inferiors          reverse-search            run
                                                        +remove-symbol-file        reverse-step              running
                                                        +restart                   reverse-stepi             rwatch
                                                        +restore                   rni
                                                        +

                                                        misc #

                                                        \ No newline at end of file diff --git a/lang/rust/rust verification tools/index.html b/lang/rust/rust verification tools/index.html new file mode 100644 index 0000000000..d0f6e222f3 --- /dev/null +++ b/lang/rust/rust verification tools/index.html @@ -0,0 +1,109 @@ +rust verification tools | philip's notes

                                                        rust verification tools

                                                        2022-01-13 · 1 min read

                                                        Rudra #

                                                        Github: https://github.com/sslab-gatech/Rudra

                                                        Rudra is a static analyzer to detect common undefined behaviors in Rust programs. It is capable of analyzing single Rust packages as well as all the packages on crates.io.

                                                        Prusti #

                                                        Github: https://github.com/viperproject/prusti-dev

                                                        Prusti is a prototype verifier for Rust, built upon the Viper verification infrastructure.

                                                        By default Prusti verifies absence of integer overflows and panics by proving that statements such as unreachable!() and panic!() are unreachable. Overflow checking can be disabled with a configuration flag, treating all integers as unbounded. In Prusti, the functional behaviour of a function can be specified by using annotations, among which are preconditions, postconditions, and loop invariants. The tool checks them, reporting error messages when the code does not adhere to the provided specification.

                                                        MIRAI #

                                                        Github: https://github.com/facebookexperimental/MIRAI

                                                        MIRAI is an abstract interpreter for the Rust compiler's mid-level intermediate representation (MIR). It is intended to become a widely used static analysis tool for Rust.

                                                        \ No newline at end of file diff --git a/lang/rust/rust x SGX/index.html b/lang/rust/rust x SGX/index.html new file mode 100644 index 0000000000..7497dfe240 --- /dev/null +++ b/lang/rust/rust x SGX/index.html @@ -0,0 +1,109 @@ +rust x SGX | philip's notes

                                                        rust x SGX

                                                        2022-02-17 · 1 min read

                                                        Trusted Compute with Rust and SGX (Tutorial) Video

                                                        Teaclave SGX SDK Teaclave Github

                                                        signalapp/sgx_common

                                                        rust-lang/rust - std::sys::sgx

                                                        fortanix/rust-sgx edp.fortanix.com

                                                        \ No newline at end of file diff --git a/lang/rust/self-referencing structs/index.html b/lang/rust/self-referencing structs/index.html new file mode 100644 index 0000000000..bb31250199 --- /dev/null +++ b/lang/rust/self-referencing structs/index.html @@ -0,0 +1,112 @@ +self-referencing structs | philip's notes

                                                        self-referencing structs

                                                        2022-04-06 · 1 min read

                                                        yoke #

                                                        ouroboros #

                                                        gsrs - UNMAINTAINED #

                                                        rental - DEPRECATED #

                                                        \ No newline at end of file diff --git a/lang/rust/sycamore x futures/index.html b/lang/rust/sycamore x futures/index.html new file mode 100644 index 0000000000..bc32dfc4a5 --- /dev/null +++ b/lang/rust/sycamore x futures/index.html @@ -0,0 +1,116 @@ +sycamore x futures | philip's notes

                                                        sycamore x futures

                                                        2022-03-29 · 2 min read

                                                        Can use gloo / gloo_timers crate for web-compatible futures. For example, gloo_timers::sleep(duration) -> TimeoutFuture.

                                                        Spawn a future on the current thread. Must be 'static and so can't contain any ScopeRefs or w/e:

                                                        sycamore::futures::spawn_local(future)
                                                        +

                                                        Spawn a !Send future (which can contain ScopeRefs) using ctx.spawn_future:

                                                        use sycamore::futures::ScopeSpawnFuture;
                                                        +
                                                        +ctx.spawn_future(future);
                                                        +

                                                        Convert a Future<U> to a Signal<U> using ctx.create_resource:

                                                        use sycamore::futures::ScopeFuturesExt;
                                                        +
                                                        +ctx.create_resource(future);
                                                        +

                                                        Web Workers #

                                                        Like threads for browser (but worse lol). No shared memory allowed; only serialized message passing. Workers can't manipulate the DOM.

                                                        1. SharedWorkers (also "Public" workers) are a special kind of worker that can be accessed from multiple browser windows, tabs, or other workers. There can only exist one instance at a time.
                                                        2. "Private" workers can be fired up and down at-will. Good for farming out work.

                                                        Communicating with workers:

                                                        1. Bridges allow bidi comms b/w worker and component (or other workers).
                                                        2. Dispatchers allow uni comms from component to worker.
                                                        \ No newline at end of file diff --git a/lang/rust/understanding sycamore reactivity/index.html b/lang/rust/understanding sycamore reactivity/index.html new file mode 100644 index 0000000000..731835f0a6 --- /dev/null +++ b/lang/rust/understanding sycamore reactivity/index.html @@ -0,0 +1,129 @@ +understanding sycamore reactivity | philip's notes

                                                        understanding sycamore reactivity

                                                        2022-03-29 · 2 min read

                                                        Docs: https://sycamore-rs.netlify.app/docs/basics/reactivity

                                                        Whenever reactivity is used, there must be a reactive scope.

                                                        What is a reactive scope? Ex: Scope provides a reactive scope.

                                                        A Signal wraps a value and lets you listen for changes to that value.

                                                        To actually listen on a Signal, you need to call signal.get() inside a listener scope (which is not the same as a reactive scope).

                                                        Notably, #[component] function bodies do not provide a listener scope, so calling signal.get() in a component won't re-render the component if the signal changes. However, the view! { ctx, _ } macro body provides an implicit listener scope when interpolating.
                                                        methodargsreturnsdescription
                                                        ctx.create_effectFnMut()()calls closure when a signal changes (signal.get() must be called in the closure to register it). used to impl most other methods here
                                                        ctx.create_memoFnMut() -> U&ReadSignal<U>calls closure when a registered signal changes and wraps the return value as a derived signal.
                                                        ctx.create_selectorFnMut() -> U&ReadSignal<U>calls closure when a registered signal changes. like create_memo but the derived signal only notifies if the return value is actually different from the previous value (Note: U must impl PartialEq).
                                                        ctx.create_reducerU, FnMut(&U, Msg) -> U(&ReadSignal<U>, Fn(Msg))calls closure whenver the message handler Fn(Msg) gets called. kind of like an async fold, where the closure is an actor message handler.
                                                        signal.mapctx, FnMut(&T) -> U&ReadSignal<U>calls closure with signal value whenever signal changes. returns derived signal with return value.

                                                        For (all?) of the above methods, we always call the closure once initially. This also allows us to observe all the signal.get()s inside the closure, which we need to register which signals to listen on.

                                                        For example, to see how reactivity works with the view! macro, we can look at how it (approximately) is expanded:

                                                        // before expansion
                                                        +let state = ctx.create_signal(0);
                                                        +view! { ctx,
                                                        +	p {
                                                        +		(state.get())
                                                        +	}
                                                        +}
                                                        +
                                                        +// after expansion
                                                        +let state = ctx.create_signal(0);
                                                        +{
                                                        +    let element = GenericNode::element(p);
                                                        +    let text = GenericNode::text(String::new());
                                                        +	// Update text when `state` changes.
                                                        +    ctx.create_effect(move || {
                                                        +        text.update_text(Some(&state.get()));
                                                        +	});
                                                        +    element.append(&text);
                                                        +    element
                                                        +}
                                                        +

                                                        As you can see, interpolations happen inside an implicit create_effect, which does not happen for signals retrieved outside a view! macro.

                                                        \ No newline at end of file diff --git a/main.css b/main.css new file mode 100644 index 0000000000..20183e7e6b --- /dev/null +++ b/main.css @@ -0,0 +1,6 @@ +/*! + * Bootstrap v5.0.0-beta3 (https://getbootstrap.com/) + * Copyright 2011-2021 The Bootstrap Authors + * Copyright 2011-2021 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) + */:root{--bs-blue: #0d6efd;--bs-indigo: #6610f2;--bs-purple: #45458c;--bs-pink: #d63384;--bs-red: #dc3545;--bs-orange: #fd7e14;--bs-yellow: #ffe000;--bs-green: #198754;--bs-teal: #20c997;--bs-cyan: #0dcaf0;--bs-white: #fff;--bs-gray: #6c757d;--bs-gray-dark: #343a40;--bs-primary: #45458c;--bs-secondary: #6c757d;--bs-success: #198754;--bs-info: #0dcaf0;--bs-warning: #ffe000;--bs-danger: #dc3545;--bs-light: #fbfffe;--bs-dark: #1e1e21;--bs-font-sans-serif: "Source Sans Pro", system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", "Liberation Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--bs-font-monospace: "Fira Code", SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;--bs-gradient: linear-gradient(180deg, rgba(255,255,255,0.15), rgba(255,255,255,0))}*,*::before,*::after{box-sizing:border-box}@media (prefers-reduced-motion: no-preference){:root{scroll-behavior:smooth}}body{margin:0;font-family:"Source Sans Pro",system-ui,-apple-system,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans","Liberation Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-size:1rem;font-weight:400;line-height:1.5;color:#1d2d35;background-color:#fff;-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:rgba(29,45,53,0)}hr{margin:1rem 0;color:inherit;background-color:currentColor;border:0;opacity:.25}hr:not([size]){height:1px}h6,.h6,h5,.h5,h4,.h4,h3,.h3,h2,.h2,h1,.h1{margin-top:0;margin-bottom:.5rem;font-family:"Inter",-apple-system,blinkmacsystemfont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-weight:700;line-height:1.2}h1,.h1{font-size:calc(1.325rem + .9vw)}@media (min-width: 1200px){h1,.h1{font-size:2rem}}h2,.h2{font-size:calc(1.275rem + .3vw)}@media (min-width: 1200px){h2,.h2{font-size:1.5rem}}h3,.h3{font-size:1.125rem}h4,.h4{font-size:1rem}h5,.h5{font-size:.875rem}h6,.h6{font-size:.625rem}p{margin-top:0;margin-bottom:1rem}abbr[title],abbr[data-bs-original-title]{text-decoration:underline dotted;cursor:help;text-decoration-skip-ink:none}address{margin-bottom:1rem;font-style:normal;line-height:inherit}ol,ul{padding-left:2rem}ol,ul,dl{margin-top:0;margin-bottom:1rem}ol ol,ul ul,ol ul,ul ol{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}b,strong{font-weight:bolder}small,.small{font-size:.875em}mark,.mark{padding:.2em;background-color:#fcf8e3}sub,sup{position:relative;font-size:.75em;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:#45458c;text-decoration:none}a:hover{color:#373770}a:not([href]):not([class]),a:not([href]):not([class]):hover{color:inherit;text-decoration:none}pre,code,kbd,samp{font-family:var(--bs-font-monospace);font-size:1em;direction:ltr /* rtl:ignore */;unicode-bidi:bidi-override}pre{display:block;margin-top:0;margin-bottom:1rem;overflow:auto;font-size:.875em}pre code{font-size:inherit;color:inherit;word-break:normal}code{font-size:.875em;color:#d63384;word-wrap:break-word}a>code{color:inherit}kbd{padding:.2rem .4rem;font-size:.875em;color:#fff;background-color:#1e1e21;border-radius:.2rem}kbd kbd{padding:0;font-size:1em;font-weight:700}figure{margin:0 0 1rem}img,svg{vertical-align:middle}table{caption-side:bottom;border-collapse:collapse}caption{padding-top:.5rem;padding-bottom:.5rem;color:#6c757d;text-align:left}th{text-align:inherit;text-align:-webkit-match-parent}thead,tbody,tfoot,tr,td,th{border-color:inherit;border-style:solid;border-width:0}label{display:inline-block}button{border-radius:0}button:focus:not(:focus-visible){outline:0}input,button,select,optgroup,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,select{text-transform:none}[role="button"]{cursor:pointer}select{word-wrap:normal}select:disabled{opacity:1}[list]::-webkit-calendar-picker-indicator{display:none}button,[type="button"],[type="reset"],[type="submit"]{-webkit-appearance:button}button:not(:disabled),[type="button"]:not(:disabled),[type="reset"]:not(:disabled),[type="submit"]:not(:disabled){cursor:pointer}::-moz-focus-inner{padding:0;border-style:none}textarea{resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{float:left;width:100%;padding:0;margin-bottom:.5rem;font-size:calc(1.275rem + .3vw);line-height:inherit}@media (min-width: 1200px){legend{font-size:1.5rem}}legend+*{clear:left}::-webkit-datetime-edit-fields-wrapper,::-webkit-datetime-edit-text,::-webkit-datetime-edit-minute,::-webkit-datetime-edit-hour-field,::-webkit-datetime-edit-day-field,::-webkit-datetime-edit-month-field,::-webkit-datetime-edit-year-field{padding:0}::-webkit-inner-spin-button{height:auto}[type="search"]{outline-offset:-2px;-webkit-appearance:textfield}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-color-swatch-wrapper{padding:0}::file-selector-button{font:inherit}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}output{display:inline-block}iframe{border:0}summary{display:list-item;cursor:pointer}progress{vertical-align:baseline}[hidden]{display:none !important}.lead{font-size:1.25rem;font-weight:400}.display-1{font-size:calc(1.625rem + 4.5vw);font-weight:300;line-height:1.2}@media (min-width: 1200px){.display-1{font-size:5rem}}.display-2{font-size:calc(1.575rem + 3.9vw);font-weight:300;line-height:1.2}@media (min-width: 1200px){.display-2{font-size:4.5rem}}.display-3{font-size:calc(1.525rem + 3.3vw);font-weight:300;line-height:1.2}@media (min-width: 1200px){.display-3{font-size:4rem}}.display-4{font-size:calc(1.475rem + 2.7vw);font-weight:300;line-height:1.2}@media (min-width: 1200px){.display-4{font-size:3.5rem}}.display-5{font-size:calc(1.425rem + 2.1vw);font-weight:300;line-height:1.2}@media (min-width: 1200px){.display-5{font-size:3rem}}.display-6{font-size:calc(1.375rem + 1.5vw);font-weight:300;line-height:1.2}@media (min-width: 1200px){.display-6{font-size:2.5rem}}.list-unstyled,.comment-list{padding-left:0;list-style:none}.list-inline{padding-left:0;list-style:none}.list-inline-item{display:inline-block}.list-inline-item:not(:last-child){margin-right:.5rem}.initialism{font-size:.875em;text-transform:uppercase}.blockquote{margin-bottom:1rem;font-size:1.25rem}.blockquote>:last-child{margin-bottom:0}.blockquote-footer{margin-top:-1rem;margin-bottom:1rem;font-size:.875em;color:#6c757d}.blockquote-footer::before{content:"\2014\00A0"}.img-fluid{max-width:100%;height:auto}img{max-width:100%;height:auto}.img-thumbnail{padding:.25rem;background-color:#fff;border:1px solid #d4d4d4;border-radius:.25rem;max-width:100%;height:auto}.figure{display:inline-block}.figure-img{margin-bottom:.5rem;line-height:1}.figure-caption{font-size:.875em;color:#6c757d}.container,.container-fluid,.container-xxl,.container-xl,.container-lg,.container-md,.container-sm{width:100%;padding-right:var(--bs-gutter-x, 48px);padding-left:var(--bs-gutter-x, 48px);margin-right:auto;margin-left:auto}@media (min-width: 576px){.container-sm,.container{max-width:540px}}@media (min-width: 768px){.container-md,.container-sm,.container{max-width:720px}}@media (min-width: 992px){.container-lg,.container-md,.container-sm,.container{max-width:960px}}@media (min-width: 1200px){.container-xl,.container-lg,.container-md,.container-sm,.container{max-width:1240px}}@media (min-width: 1400px){.container-xxl,.container-xl,.container-lg,.container-md,.container-sm,.container{max-width:1320px}}.row{--bs-gutter-x: 96px;--bs-gutter-y: 0;display:flex;flex-wrap:wrap;margin-top:calc(var(--bs-gutter-y) * -1);margin-right:calc(var(--bs-gutter-x) / -2);margin-left:calc(var(--bs-gutter-x) / -2)}.row>*{flex-shrink:0;width:100%;max-width:100%;padding-right:calc(var(--bs-gutter-x) / 2);padding-left:calc(var(--bs-gutter-x) / 2);margin-top:var(--bs-gutter-y)}.col{flex:1 0 0%}.row-cols-auto>*{flex:0 0 auto;width:auto}.row-cols-1>*{flex:0 0 auto;width:100%}.row-cols-2>*{flex:0 0 auto;width:50%}.row-cols-3>*{flex:0 0 auto;width:33.33333%}.row-cols-4>*{flex:0 0 auto;width:25%}.row-cols-5>*{flex:0 0 auto;width:20%}.row-cols-6>*{flex:0 0 auto;width:16.66667%}.col-auto{flex:0 0 auto;width:auto}.col-1{flex:0 0 auto;width:6.25%}.col-2{flex:0 0 auto;width:12.5%}.col-3{flex:0 0 auto;width:18.75%}.col-4{flex:0 0 auto;width:25%}.col-5{flex:0 0 auto;width:31.25%}.col-6{flex:0 0 auto;width:37.5%}.col-7{flex:0 0 auto;width:43.75%}.col-8{flex:0 0 auto;width:50%}.col-9{flex:0 0 auto;width:56.25%}.col-10{flex:0 0 auto;width:62.5%}.col-11{flex:0 0 auto;width:68.75%}.col-12{flex:0 0 auto;width:75%}.col-13{flex:0 0 auto;width:81.25%}.col-14{flex:0 0 auto;width:87.5%}.col-15{flex:0 0 auto;width:93.75%}.col-16{flex:0 0 auto;width:100%}.offset-1{margin-left:6.25%}.offset-2{margin-left:12.5%}.offset-3{margin-left:18.75%}.offset-4{margin-left:25%}.offset-5{margin-left:31.25%}.offset-6{margin-left:37.5%}.offset-7{margin-left:43.75%}.offset-8{margin-left:50%}.offset-9{margin-left:56.25%}.offset-10{margin-left:62.5%}.offset-11{margin-left:68.75%}.offset-12{margin-left:75%}.offset-13{margin-left:81.25%}.offset-14{margin-left:87.5%}.offset-15{margin-left:93.75%}.g-0,.gx-0{--bs-gutter-x: 0}.g-0,.gy-0{--bs-gutter-y: 0}.g-1,.gx-1{--bs-gutter-x: .25rem}.g-1,.gy-1{--bs-gutter-y: .25rem}.g-2,.gx-2{--bs-gutter-x: .5rem}.g-2,.gy-2{--bs-gutter-y: .5rem}.g-3,.gx-3{--bs-gutter-x: 1rem}.g-3,.gy-3{--bs-gutter-y: 1rem}.g-4,.gx-4{--bs-gutter-x: 1.5rem}.g-4,.gy-4{--bs-gutter-y: 1.5rem}.g-5,.gx-5{--bs-gutter-x: 3rem}.g-5,.gy-5{--bs-gutter-y: 3rem}@media (min-width: 576px){.col-sm{flex:1 0 0%}.row-cols-sm-auto>*{flex:0 0 auto;width:auto}.row-cols-sm-1>*{flex:0 0 auto;width:100%}.row-cols-sm-2>*{flex:0 0 auto;width:50%}.row-cols-sm-3>*{flex:0 0 auto;width:33.33333%}.row-cols-sm-4>*{flex:0 0 auto;width:25%}.row-cols-sm-5>*{flex:0 0 auto;width:20%}.row-cols-sm-6>*{flex:0 0 auto;width:16.66667%}.col-sm-auto{flex:0 0 auto;width:auto}.col-sm-1{flex:0 0 auto;width:6.25%}.col-sm-2{flex:0 0 auto;width:12.5%}.col-sm-3{flex:0 0 auto;width:18.75%}.col-sm-4{flex:0 0 auto;width:25%}.col-sm-5{flex:0 0 auto;width:31.25%}.col-sm-6{flex:0 0 auto;width:37.5%}.col-sm-7{flex:0 0 auto;width:43.75%}.col-sm-8{flex:0 0 auto;width:50%}.col-sm-9{flex:0 0 auto;width:56.25%}.col-sm-10{flex:0 0 auto;width:62.5%}.col-sm-11{flex:0 0 auto;width:68.75%}.col-sm-12{flex:0 0 auto;width:75%}.col-sm-13{flex:0 0 auto;width:81.25%}.col-sm-14{flex:0 0 auto;width:87.5%}.col-sm-15{flex:0 0 auto;width:93.75%}.col-sm-16{flex:0 0 auto;width:100%}.offset-sm-0{margin-left:0}.offset-sm-1{margin-left:6.25%}.offset-sm-2{margin-left:12.5%}.offset-sm-3{margin-left:18.75%}.offset-sm-4{margin-left:25%}.offset-sm-5{margin-left:31.25%}.offset-sm-6{margin-left:37.5%}.offset-sm-7{margin-left:43.75%}.offset-sm-8{margin-left:50%}.offset-sm-9{margin-left:56.25%}.offset-sm-10{margin-left:62.5%}.offset-sm-11{margin-left:68.75%}.offset-sm-12{margin-left:75%}.offset-sm-13{margin-left:81.25%}.offset-sm-14{margin-left:87.5%}.offset-sm-15{margin-left:93.75%}.g-sm-0,.gx-sm-0{--bs-gutter-x: 0}.g-sm-0,.gy-sm-0{--bs-gutter-y: 0}.g-sm-1,.gx-sm-1{--bs-gutter-x: .25rem}.g-sm-1,.gy-sm-1{--bs-gutter-y: .25rem}.g-sm-2,.gx-sm-2{--bs-gutter-x: .5rem}.g-sm-2,.gy-sm-2{--bs-gutter-y: .5rem}.g-sm-3,.gx-sm-3{--bs-gutter-x: 1rem}.g-sm-3,.gy-sm-3{--bs-gutter-y: 1rem}.g-sm-4,.gx-sm-4{--bs-gutter-x: 1.5rem}.g-sm-4,.gy-sm-4{--bs-gutter-y: 1.5rem}.g-sm-5,.gx-sm-5{--bs-gutter-x: 3rem}.g-sm-5,.gy-sm-5{--bs-gutter-y: 3rem}}@media (min-width: 768px){.col-md{flex:1 0 0%}.row-cols-md-auto>*{flex:0 0 auto;width:auto}.row-cols-md-1>*{flex:0 0 auto;width:100%}.row-cols-md-2>*{flex:0 0 auto;width:50%}.row-cols-md-3>*{flex:0 0 auto;width:33.33333%}.row-cols-md-4>*{flex:0 0 auto;width:25%}.row-cols-md-5>*{flex:0 0 auto;width:20%}.row-cols-md-6>*{flex:0 0 auto;width:16.66667%}.col-md-auto{flex:0 0 auto;width:auto}.col-md-1{flex:0 0 auto;width:6.25%}.col-md-2{flex:0 0 auto;width:12.5%}.col-md-3{flex:0 0 auto;width:18.75%}.col-md-4{flex:0 0 auto;width:25%}.col-md-5{flex:0 0 auto;width:31.25%}.col-md-6{flex:0 0 auto;width:37.5%}.col-md-7{flex:0 0 auto;width:43.75%}.col-md-8{flex:0 0 auto;width:50%}.col-md-9{flex:0 0 auto;width:56.25%}.col-md-10{flex:0 0 auto;width:62.5%}.col-md-11{flex:0 0 auto;width:68.75%}.col-md-12{flex:0 0 auto;width:75%}.col-md-13{flex:0 0 auto;width:81.25%}.col-md-14{flex:0 0 auto;width:87.5%}.col-md-15{flex:0 0 auto;width:93.75%}.col-md-16{flex:0 0 auto;width:100%}.offset-md-0{margin-left:0}.offset-md-1{margin-left:6.25%}.offset-md-2{margin-left:12.5%}.offset-md-3{margin-left:18.75%}.offset-md-4{margin-left:25%}.offset-md-5{margin-left:31.25%}.offset-md-6{margin-left:37.5%}.offset-md-7{margin-left:43.75%}.offset-md-8{margin-left:50%}.offset-md-9{margin-left:56.25%}.offset-md-10{margin-left:62.5%}.offset-md-11{margin-left:68.75%}.offset-md-12{margin-left:75%}.offset-md-13{margin-left:81.25%}.offset-md-14{margin-left:87.5%}.offset-md-15{margin-left:93.75%}.g-md-0,.gx-md-0{--bs-gutter-x: 0}.g-md-0,.gy-md-0{--bs-gutter-y: 0}.g-md-1,.gx-md-1{--bs-gutter-x: .25rem}.g-md-1,.gy-md-1{--bs-gutter-y: .25rem}.g-md-2,.gx-md-2{--bs-gutter-x: .5rem}.g-md-2,.gy-md-2{--bs-gutter-y: .5rem}.g-md-3,.gx-md-3{--bs-gutter-x: 1rem}.g-md-3,.gy-md-3{--bs-gutter-y: 1rem}.g-md-4,.gx-md-4{--bs-gutter-x: 1.5rem}.g-md-4,.gy-md-4{--bs-gutter-y: 1.5rem}.g-md-5,.gx-md-5{--bs-gutter-x: 3rem}.g-md-5,.gy-md-5{--bs-gutter-y: 3rem}}@media (min-width: 992px){.col-lg{flex:1 0 0%}.row-cols-lg-auto>*{flex:0 0 auto;width:auto}.row-cols-lg-1>*{flex:0 0 auto;width:100%}.row-cols-lg-2>*{flex:0 0 auto;width:50%}.row-cols-lg-3>*{flex:0 0 auto;width:33.33333%}.row-cols-lg-4>*{flex:0 0 auto;width:25%}.row-cols-lg-5>*{flex:0 0 auto;width:20%}.row-cols-lg-6>*{flex:0 0 auto;width:16.66667%}.col-lg-auto{flex:0 0 auto;width:auto}.col-lg-1{flex:0 0 auto;width:6.25%}.col-lg-2{flex:0 0 auto;width:12.5%}.col-lg-3{flex:0 0 auto;width:18.75%}.col-lg-4{flex:0 0 auto;width:25%}.col-lg-5{flex:0 0 auto;width:31.25%}.col-lg-6{flex:0 0 auto;width:37.5%}.col-lg-7{flex:0 0 auto;width:43.75%}.col-lg-8{flex:0 0 auto;width:50%}.col-lg-9{flex:0 0 auto;width:56.25%}.col-lg-10{flex:0 0 auto;width:62.5%}.col-lg-11{flex:0 0 auto;width:68.75%}.col-lg-12{flex:0 0 auto;width:75%}.col-lg-13{flex:0 0 auto;width:81.25%}.col-lg-14{flex:0 0 auto;width:87.5%}.col-lg-15{flex:0 0 auto;width:93.75%}.col-lg-16{flex:0 0 auto;width:100%}.offset-lg-0{margin-left:0}.offset-lg-1{margin-left:6.25%}.offset-lg-2{margin-left:12.5%}.offset-lg-3{margin-left:18.75%}.offset-lg-4{margin-left:25%}.offset-lg-5{margin-left:31.25%}.offset-lg-6{margin-left:37.5%}.offset-lg-7{margin-left:43.75%}.offset-lg-8{margin-left:50%}.offset-lg-9{margin-left:56.25%}.offset-lg-10{margin-left:62.5%}.offset-lg-11{margin-left:68.75%}.offset-lg-12{margin-left:75%}.offset-lg-13{margin-left:81.25%}.offset-lg-14{margin-left:87.5%}.offset-lg-15{margin-left:93.75%}.g-lg-0,.gx-lg-0{--bs-gutter-x: 0}.g-lg-0,.gy-lg-0{--bs-gutter-y: 0}.g-lg-1,.gx-lg-1{--bs-gutter-x: .25rem}.g-lg-1,.gy-lg-1{--bs-gutter-y: .25rem}.g-lg-2,.gx-lg-2{--bs-gutter-x: .5rem}.g-lg-2,.gy-lg-2{--bs-gutter-y: .5rem}.g-lg-3,.gx-lg-3{--bs-gutter-x: 1rem}.g-lg-3,.gy-lg-3{--bs-gutter-y: 1rem}.g-lg-4,.gx-lg-4{--bs-gutter-x: 1.5rem}.g-lg-4,.gy-lg-4{--bs-gutter-y: 1.5rem}.g-lg-5,.gx-lg-5{--bs-gutter-x: 3rem}.g-lg-5,.gy-lg-5{--bs-gutter-y: 3rem}}@media (min-width: 1200px){.col-xl{flex:1 0 0%}.row-cols-xl-auto>*{flex:0 0 auto;width:auto}.row-cols-xl-1>*{flex:0 0 auto;width:100%}.row-cols-xl-2>*{flex:0 0 auto;width:50%}.row-cols-xl-3>*{flex:0 0 auto;width:33.33333%}.row-cols-xl-4>*{flex:0 0 auto;width:25%}.row-cols-xl-5>*{flex:0 0 auto;width:20%}.row-cols-xl-6>*{flex:0 0 auto;width:16.66667%}.col-xl-auto{flex:0 0 auto;width:auto}.col-xl-1{flex:0 0 auto;width:6.25%}.col-xl-2{flex:0 0 auto;width:12.5%}.col-xl-3{flex:0 0 auto;width:18.75%}.col-xl-4{flex:0 0 auto;width:25%}.col-xl-5{flex:0 0 auto;width:31.25%}.col-xl-6{flex:0 0 auto;width:37.5%}.col-xl-7{flex:0 0 auto;width:43.75%}.col-xl-8{flex:0 0 auto;width:50%}.col-xl-9{flex:0 0 auto;width:56.25%}.col-xl-10{flex:0 0 auto;width:62.5%}.col-xl-11{flex:0 0 auto;width:68.75%}.col-xl-12{flex:0 0 auto;width:75%}.col-xl-13{flex:0 0 auto;width:81.25%}.col-xl-14{flex:0 0 auto;width:87.5%}.col-xl-15{flex:0 0 auto;width:93.75%}.col-xl-16{flex:0 0 auto;width:100%}.offset-xl-0{margin-left:0}.offset-xl-1{margin-left:6.25%}.offset-xl-2{margin-left:12.5%}.offset-xl-3{margin-left:18.75%}.offset-xl-4{margin-left:25%}.offset-xl-5{margin-left:31.25%}.offset-xl-6{margin-left:37.5%}.offset-xl-7{margin-left:43.75%}.offset-xl-8{margin-left:50%}.offset-xl-9{margin-left:56.25%}.offset-xl-10{margin-left:62.5%}.offset-xl-11{margin-left:68.75%}.offset-xl-12{margin-left:75%}.offset-xl-13{margin-left:81.25%}.offset-xl-14{margin-left:87.5%}.offset-xl-15{margin-left:93.75%}.g-xl-0,.gx-xl-0{--bs-gutter-x: 0}.g-xl-0,.gy-xl-0{--bs-gutter-y: 0}.g-xl-1,.gx-xl-1{--bs-gutter-x: .25rem}.g-xl-1,.gy-xl-1{--bs-gutter-y: .25rem}.g-xl-2,.gx-xl-2{--bs-gutter-x: .5rem}.g-xl-2,.gy-xl-2{--bs-gutter-y: .5rem}.g-xl-3,.gx-xl-3{--bs-gutter-x: 1rem}.g-xl-3,.gy-xl-3{--bs-gutter-y: 1rem}.g-xl-4,.gx-xl-4{--bs-gutter-x: 1.5rem}.g-xl-4,.gy-xl-4{--bs-gutter-y: 1.5rem}.g-xl-5,.gx-xl-5{--bs-gutter-x: 3rem}.g-xl-5,.gy-xl-5{--bs-gutter-y: 3rem}}@media (min-width: 1400px){.col-xxl{flex:1 0 0%}.row-cols-xxl-auto>*{flex:0 0 auto;width:auto}.row-cols-xxl-1>*{flex:0 0 auto;width:100%}.row-cols-xxl-2>*{flex:0 0 auto;width:50%}.row-cols-xxl-3>*{flex:0 0 auto;width:33.33333%}.row-cols-xxl-4>*{flex:0 0 auto;width:25%}.row-cols-xxl-5>*{flex:0 0 auto;width:20%}.row-cols-xxl-6>*{flex:0 0 auto;width:16.66667%}.col-xxl-auto{flex:0 0 auto;width:auto}.col-xxl-1{flex:0 0 auto;width:6.25%}.col-xxl-2{flex:0 0 auto;width:12.5%}.col-xxl-3{flex:0 0 auto;width:18.75%}.col-xxl-4{flex:0 0 auto;width:25%}.col-xxl-5{flex:0 0 auto;width:31.25%}.col-xxl-6{flex:0 0 auto;width:37.5%}.col-xxl-7{flex:0 0 auto;width:43.75%}.col-xxl-8{flex:0 0 auto;width:50%}.col-xxl-9{flex:0 0 auto;width:56.25%}.col-xxl-10{flex:0 0 auto;width:62.5%}.col-xxl-11{flex:0 0 auto;width:68.75%}.col-xxl-12{flex:0 0 auto;width:75%}.col-xxl-13{flex:0 0 auto;width:81.25%}.col-xxl-14{flex:0 0 auto;width:87.5%}.col-xxl-15{flex:0 0 auto;width:93.75%}.col-xxl-16{flex:0 0 auto;width:100%}.offset-xxl-0{margin-left:0}.offset-xxl-1{margin-left:6.25%}.offset-xxl-2{margin-left:12.5%}.offset-xxl-3{margin-left:18.75%}.offset-xxl-4{margin-left:25%}.offset-xxl-5{margin-left:31.25%}.offset-xxl-6{margin-left:37.5%}.offset-xxl-7{margin-left:43.75%}.offset-xxl-8{margin-left:50%}.offset-xxl-9{margin-left:56.25%}.offset-xxl-10{margin-left:62.5%}.offset-xxl-11{margin-left:68.75%}.offset-xxl-12{margin-left:75%}.offset-xxl-13{margin-left:81.25%}.offset-xxl-14{margin-left:87.5%}.offset-xxl-15{margin-left:93.75%}.g-xxl-0,.gx-xxl-0{--bs-gutter-x: 0}.g-xxl-0,.gy-xxl-0{--bs-gutter-y: 0}.g-xxl-1,.gx-xxl-1{--bs-gutter-x: .25rem}.g-xxl-1,.gy-xxl-1{--bs-gutter-y: .25rem}.g-xxl-2,.gx-xxl-2{--bs-gutter-x: .5rem}.g-xxl-2,.gy-xxl-2{--bs-gutter-y: .5rem}.g-xxl-3,.gx-xxl-3{--bs-gutter-x: 1rem}.g-xxl-3,.gy-xxl-3{--bs-gutter-y: 1rem}.g-xxl-4,.gx-xxl-4{--bs-gutter-x: 1.5rem}.g-xxl-4,.gy-xxl-4{--bs-gutter-y: 1.5rem}.g-xxl-5,.gx-xxl-5{--bs-gutter-x: 3rem}.g-xxl-5,.gy-xxl-5{--bs-gutter-y: 3rem}}.table,table{--bs-table-bg: rgba(0,0,0,0);--bs-table-striped-color: #1d2d35;--bs-table-striped-bg: rgba(29,45,53,0.05);--bs-table-active-color: #1d2d35;--bs-table-active-bg: rgba(29,45,53,0.1);--bs-table-hover-color: #1d2d35;--bs-table-hover-bg: rgba(29,45,53,0.075);width:100%;margin-bottom:1rem;color:#1d2d35;vertical-align:top;border-color:#e9ecef}.table>:not(caption)>*>*,table>:not(caption)>*>*{padding:.5rem .5rem;background-color:var(--bs-table-bg);border-bottom-width:1px;box-shadow:inset 0 0 0 9999px var(--bs-table-accent-bg)}.table>tbody,table>tbody{vertical-align:inherit}.table>thead,table>thead{vertical-align:bottom}.table>:not(:last-child)>:last-child>*,table>:not(:last-child)>:last-child>*{border-bottom-color:currentColor}.caption-top{caption-side:top}.table-sm>:not(caption)>*>*{padding:.25rem .25rem}.table-bordered>:not(caption)>*{border-width:1px 0}.table-bordered>:not(caption)>*>*{border-width:0 1px}.table-borderless>:not(caption)>*>*{border-bottom-width:0}.table-striped>tbody>tr:nth-of-type(odd){--bs-table-accent-bg: var(--bs-table-striped-bg);color:var(--bs-table-striped-color)}.table-active{--bs-table-accent-bg: var(--bs-table-active-bg);color:var(--bs-table-active-color)}.table-hover>tbody>tr:hover{--bs-table-accent-bg: var(--bs-table-hover-bg);color:var(--bs-table-hover-color)}.table-primary{--bs-table-bg: #dadae8;--bs-table-striped-bg: #d1d1df;--bs-table-striped-color: #1d2d35;--bs-table-active-bg: #c7c9d6;--bs-table-active-color: #1d2d35;--bs-table-hover-bg: #cccddb;--bs-table-hover-color: #1d2d35;color:#1d2d35;border-color:#c7c9d6}.table-secondary{--bs-table-bg: #e2e3e5;--bs-table-striped-bg: #d8dadc;--bs-table-striped-color: #1d2d35;--bs-table-active-bg: #ced1d3;--bs-table-active-color: #1d2d35;--bs-table-hover-bg: #d3d5d8;--bs-table-hover-color: #1d2d35;color:#1d2d35;border-color:#ced1d3}.table-success{--bs-table-bg: #d1e7dd;--bs-table-striped-bg: #c8ded5;--bs-table-striped-color: #1d2d35;--bs-table-active-bg: #bfd4cc;--bs-table-active-color: #1d2d35;--bs-table-hover-bg: #c4d9d0;--bs-table-hover-color: #1d2d35;color:#1d2d35;border-color:#bfd4cc}.table-info{--bs-table-bg: #cff4fc;--bs-table-striped-bg: #c6eaf2;--bs-table-striped-color: #1d2d35;--bs-table-active-bg: #bde0e8;--bs-table-active-color: #1d2d35;--bs-table-hover-bg: #c2e5ed;--bs-table-hover-color: #1d2d35;color:#1d2d35;border-color:#bde0e8}.table-warning{--bs-table-bg: #fff9cc;--bs-table-striped-bg: #f4efc4;--bs-table-striped-color: #1d2d35;--bs-table-active-bg: #e8e5bd;--bs-table-active-color: #1d2d35;--bs-table-hover-bg: #eeeac1;--bs-table-hover-color: #1d2d35;color:#1d2d35;border-color:#e8e5bd}.table-danger{--bs-table-bg: #f8d7da;--bs-table-striped-bg: #edcfd2;--bs-table-striped-color: #1d2d35;--bs-table-active-bg: #e2c6ca;--bs-table-active-color: #1d2d35;--bs-table-hover-bg: #e8cace;--bs-table-hover-color: #1d2d35;color:#1d2d35;border-color:#e2c6ca}.table-light{--bs-table-bg: #fbfffe;--bs-table-striped-bg: #f0f5f4;--bs-table-striped-color: #1d2d35;--bs-table-active-bg: #e5eaea;--bs-table-active-color: #1d2d35;--bs-table-hover-bg: #eaefef;--bs-table-hover-color: #1d2d35;color:#1d2d35;border-color:#e5eaea}.table-dark,body.dark table{--bs-table-bg: #1e1e21;--bs-table-striped-bg: #29292c;--bs-table-striped-color: #fff;--bs-table-active-bg: #353537;--bs-table-active-color: #fff;--bs-table-hover-bg: #2f2f32;--bs-table-hover-color: #fff;color:#fff;border-color:#353537}.table-responsive{overflow-x:auto;-webkit-overflow-scrolling:touch}@media (max-width: 575.98px){.table-responsive-sm{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media (max-width: 767.98px){.table-responsive-md{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media (max-width: 991.98px){.table-responsive-lg{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media (max-width: 1199.98px){.table-responsive-xl{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media (max-width: 1399.98px){.table-responsive-xxl{overflow-x:auto;-webkit-overflow-scrolling:touch}}.form-label{margin-bottom:.5rem}.col-form-label{padding-top:calc(.375rem + 1px);padding-bottom:calc(.375rem + 1px);margin-bottom:0;font-size:inherit;line-height:1.5}.col-form-label-lg{padding-top:calc(.5rem + 1px);padding-bottom:calc(.5rem + 1px);font-size:1rem}.col-form-label-sm{padding-top:calc(.25rem + 1px);padding-bottom:calc(.25rem + 1px);font-size:.875rem}.form-text{margin-top:.25rem;font-size:.875em;color:#6c757d}.form-control,.search-form .search-field,.comment-form input[type="text"],.comment-form input[type="email"],.comment-form input[type="url"],.comment-form textarea{display:block;width:100%;padding:.375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:#1d2d35;background-color:#fff;background-clip:padding-box;border:1px solid #ced4da;appearance:none;border-radius:.25rem;transition:border-color 0.15s ease-in-out,box-shadow 0.15s ease-in-out}@media (prefers-reduced-motion: reduce){.form-control,.search-form .search-field,.comment-form input[type="text"],.comment-form input[type="email"],.comment-form input[type="url"],.comment-form textarea{transition:none}}.form-control[type="file"],.search-form .search-field[type="file"],.comment-form input[type="file"][type="text"],.comment-form input[type="file"][type="email"],.comment-form input[type="file"][type="url"],.comment-form textarea[type="file"]{overflow:hidden}.form-control[type="file"]:not(:disabled):not([readonly]),.search-form .search-field[type="file"]:not(:disabled):not([readonly]),.comment-form input[type="file"][type="text"]:not(:disabled):not([readonly]),.comment-form input[type="file"][type="email"]:not(:disabled):not([readonly]),.comment-form input[type="file"][type="url"]:not(:disabled):not([readonly]),.comment-form textarea[type="file"]:not(:disabled):not([readonly]){cursor:pointer}.form-control:focus,.search-form .search-field:focus,.comment-form input[type="text"]:focus,.comment-form input[type="email"]:focus,.comment-form input[type="url"]:focus,.comment-form textarea:focus{color:#1d2d35;background-color:#fff;border-color:#a2a2c6;outline:0;box-shadow:0 0 0 .25rem rgba(69,69,140,0.25)}.form-control::-webkit-date-and-time-value,.search-form .search-field::-webkit-date-and-time-value,.comment-form input[type="text"]::-webkit-date-and-time-value,.comment-form input[type="email"]::-webkit-date-and-time-value,.comment-form input[type="url"]::-webkit-date-and-time-value,.comment-form textarea::-webkit-date-and-time-value{height:1.5em}.form-control::placeholder,.search-form .search-field::placeholder,.comment-form input[type="text"]::placeholder,.comment-form input[type="email"]::placeholder,.comment-form input[type="url"]::placeholder,.comment-form textarea::placeholder{color:#6c757d;opacity:1}.form-control:disabled,.search-form .search-field:disabled,.comment-form input[type="text"]:disabled,.comment-form input[type="email"]:disabled,.comment-form input[type="url"]:disabled,.comment-form textarea:disabled,.form-control[readonly],.search-form .search-field[readonly],.comment-form input[readonly][type="text"],.comment-form input[readonly][type="email"],.comment-form input[readonly][type="url"],.comment-form textarea[readonly]{background-color:#e9ecef;opacity:1}.form-control::file-selector-button,.search-form .search-field::file-selector-button,.comment-form input[type="text"]::file-selector-button,.comment-form input[type="email"]::file-selector-button,.comment-form input[type="url"]::file-selector-button,.comment-form textarea::file-selector-button{padding:.375rem .75rem;margin:-.375rem -.75rem;margin-inline-end:.75rem;color:#1d2d35;background-color:#e9ecef;pointer-events:none;border-color:inherit;border-style:solid;border-width:0;border-inline-end-width:1px;border-radius:0;transition:color 0.15s ease-in-out,background-color 0.15s ease-in-out,border-color 0.15s ease-in-out,box-shadow 0.15s ease-in-out}@media (prefers-reduced-motion: reduce){.form-control::file-selector-button,.search-form .search-field::file-selector-button,.comment-form input[type="text"]::file-selector-button,.comment-form input[type="email"]::file-selector-button,.comment-form input[type="url"]::file-selector-button,.comment-form textarea::file-selector-button{transition:none}}.form-control:hover:not(:disabled):not([readonly])::file-selector-button,.search-form .search-field:hover:not(:disabled):not([readonly])::file-selector-button,.comment-form input[type="text"]:hover:not(:disabled):not([readonly])::file-selector-button,.comment-form input[type="email"]:hover:not(:disabled):not([readonly])::file-selector-button,.comment-form input[type="url"]:hover:not(:disabled):not([readonly])::file-selector-button,.comment-form textarea:hover:not(:disabled):not([readonly])::file-selector-button{background-color:#dde0e3}.form-control::-webkit-file-upload-button,.search-form .search-field::-webkit-file-upload-button,.comment-form input[type="text"]::-webkit-file-upload-button,.comment-form input[type="email"]::-webkit-file-upload-button,.comment-form input[type="url"]::-webkit-file-upload-button,.comment-form textarea::-webkit-file-upload-button{padding:.375rem .75rem;margin:-.375rem -.75rem;margin-inline-end:.75rem;color:#1d2d35;background-color:#e9ecef;pointer-events:none;border-color:inherit;border-style:solid;border-width:0;border-inline-end-width:1px;border-radius:0;transition:color 0.15s ease-in-out,background-color 0.15s ease-in-out,border-color 0.15s ease-in-out,box-shadow 0.15s ease-in-out}@media (prefers-reduced-motion: reduce){.form-control::-webkit-file-upload-button,.search-form .search-field::-webkit-file-upload-button,.comment-form input[type="text"]::-webkit-file-upload-button,.comment-form input[type="email"]::-webkit-file-upload-button,.comment-form input[type="url"]::-webkit-file-upload-button,.comment-form textarea::-webkit-file-upload-button{transition:none}}.form-control:hover:not(:disabled):not([readonly])::-webkit-file-upload-button,.search-form .search-field:hover:not(:disabled):not([readonly])::-webkit-file-upload-button,.comment-form input[type="text"]:hover:not(:disabled):not([readonly])::-webkit-file-upload-button,.comment-form input[type="email"]:hover:not(:disabled):not([readonly])::-webkit-file-upload-button,.comment-form input[type="url"]:hover:not(:disabled):not([readonly])::-webkit-file-upload-button,.comment-form textarea:hover:not(:disabled):not([readonly])::-webkit-file-upload-button{background-color:#dde0e3}.form-control-plaintext{display:block;width:100%;padding:.375rem 0;margin-bottom:0;line-height:1.5;color:#1d2d35;background-color:transparent;border:solid transparent;border-width:1px 0}.form-control-plaintext.form-control-sm,.form-control-plaintext.form-control-lg{padding-right:0;padding-left:0}.form-control-sm{min-height:calc(1.5em + .5rem + 2px);padding:.25rem .5rem;font-size:.875rem;border-radius:.2rem}.form-control-sm::file-selector-button{padding:.25rem .5rem;margin:-.25rem -.5rem;margin-inline-end:.5rem}.form-control-sm::-webkit-file-upload-button{padding:.25rem .5rem;margin:-.25rem -.5rem;margin-inline-end:.5rem}.form-control-lg{min-height:calc(1.5em + 1rem + 2px);padding:.5rem 1rem;font-size:1rem;border-radius:.3rem}.form-control-lg::file-selector-button{padding:.5rem 1rem;margin:-.5rem -1rem;margin-inline-end:1rem}.form-control-lg::-webkit-file-upload-button{padding:.5rem 1rem;margin:-.5rem -1rem;margin-inline-end:1rem}textarea.form-control,.search-form textarea.search-field{min-height:calc(1.5em + .75rem + 2px)}textarea.form-control-sm{min-height:calc(1.5em + .5rem + 2px)}textarea.form-control-lg{min-height:calc(1.5em + 1rem + 2px)}.form-control-color{max-width:3rem;height:auto;padding:.375rem}.form-control-color:not(:disabled):not([readonly]){cursor:pointer}.form-control-color::-moz-color-swatch{height:1.5em;border-radius:.25rem}.form-control-color::-webkit-color-swatch{height:1.5em;border-radius:.25rem}.form-select{display:block;width:100%;padding:.375rem 2.25rem .375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:#1d2d35;background-color:#fff;background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M2 5l6 6 6-6'/%3e%3c/svg%3e");background-repeat:no-repeat;background-position:right .75rem center;background-size:16px 12px;border:1px solid #ced4da;border-radius:.25rem;appearance:none}.form-select:focus{border-color:#a2a2c6;outline:0;box-shadow:0 0 0 .25rem rgba(69,69,140,0.25)}.form-select[multiple],.form-select[size]:not([size="1"]){padding-right:.75rem;background-image:none}.form-select:disabled{background-color:#e9ecef}.form-select:-moz-focusring{color:transparent;text-shadow:0 0 0 #1d2d35}.form-select-sm{padding-top:.25rem;padding-bottom:.25rem;padding-left:.5rem;font-size:.875rem}.form-select-lg{padding-top:.5rem;padding-bottom:.5rem;padding-left:1rem;font-size:1rem}.form-check{display:block;min-height:1.5rem;padding-left:1.5em;margin-bottom:.125rem}.form-check .form-check-input{float:left;margin-left:-1.5em}.form-check-input{width:1em;height:1em;margin-top:.25em;vertical-align:top;background-color:#fff;background-repeat:no-repeat;background-position:center;background-size:contain;border:1px solid rgba(0,0,0,0.25);appearance:none;color-adjust:exact}.form-check-input[type="checkbox"]{border-radius:.25em}.form-check-input[type="radio"]{border-radius:50%}.form-check-input:active{filter:brightness(90%)}.form-check-input:focus{border-color:#a2a2c6;outline:0;box-shadow:0 0 0 .25rem rgba(69,69,140,0.25)}.form-check-input:checked{background-color:#45458c;border-color:#45458c}.form-check-input[type="checkbox"]:checked{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='M6 10l3 3l6-6'/%3e%3c/svg%3e")}.form-check-input[type="radio"]:checked{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='2' fill='%23fff'/%3e%3c/svg%3e")}.form-check-input[type="checkbox"]:indeterminate{background-color:#45458c;border-color:#45458c;background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='M6 10h8'/%3e%3c/svg%3e")}.form-check-input:disabled{pointer-events:none;filter:none;opacity:.5}.form-check-input[disabled]~.form-check-label,.form-check-input:disabled~.form-check-label{opacity:.5}.form-switch{padding-left:2.5em}.form-switch .form-check-input{width:2em;margin-left:-2.5em;background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='rgba%280,0,0,0.25%29'/%3e%3c/svg%3e");background-position:left center;border-radius:2em;transition:background-position 0.15s ease-in-out}@media (prefers-reduced-motion: reduce){.form-switch .form-check-input{transition:none}}.form-switch .form-check-input:focus{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%23a2a2c6'/%3e%3c/svg%3e")}.form-switch .form-check-input:checked{background-position:right center;background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%23fff'/%3e%3c/svg%3e")}.form-check-inline{display:inline-block;margin-right:1rem}.btn-check{position:absolute;clip:rect(0, 0, 0, 0);pointer-events:none}.btn-check[disabled]+.btn,.search-form .btn-check[disabled]+.search-submit,.comment-form .btn-check[disabled]+input[type="submit"],.btn-check:disabled+.btn,.search-form .btn-check:disabled+.search-submit,.comment-form .btn-check:disabled+input[type="submit"]{pointer-events:none;filter:none;opacity:.65}.form-range{width:100%;height:1.5rem;padding:0;background-color:transparent;appearance:none}.form-range:focus{outline:0}.form-range:focus::-webkit-slider-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .25rem rgba(69,69,140,0.25)}.form-range:focus::-moz-range-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .25rem rgba(69,69,140,0.25)}.form-range::-moz-focus-outer{border:0}.form-range::-webkit-slider-thumb{width:1rem;height:1rem;margin-top:-.25rem;background-color:#45458c;border:0;border-radius:1rem;transition:background-color 0.15s ease-in-out,border-color 0.15s ease-in-out,box-shadow 0.15s ease-in-out;appearance:none}@media (prefers-reduced-motion: reduce){.form-range::-webkit-slider-thumb{transition:none}}.form-range::-webkit-slider-thumb:active{background-color:#c7c7dd}.form-range::-webkit-slider-runnable-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:#d4d4d4;border-color:transparent;border-radius:1rem}.form-range::-moz-range-thumb{width:1rem;height:1rem;background-color:#45458c;border:0;border-radius:1rem;transition:background-color 0.15s ease-in-out,border-color 0.15s ease-in-out,box-shadow 0.15s ease-in-out;appearance:none}@media (prefers-reduced-motion: reduce){.form-range::-moz-range-thumb{transition:none}}.form-range::-moz-range-thumb:active{background-color:#c7c7dd}.form-range::-moz-range-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:#d4d4d4;border-color:transparent;border-radius:1rem}.form-range:disabled{pointer-events:none}.form-range:disabled::-webkit-slider-thumb{background-color:#adb5bd}.form-range:disabled::-moz-range-thumb{background-color:#adb5bd}.form-floating{position:relative}.form-floating>.form-control,.search-form .form-floating>.search-field,.comment-form .form-floating>input[type="text"],.comment-form .form-floating>input[type="email"],.comment-form .form-floating>input[type="url"],.comment-form .form-floating>textarea,.form-floating>.form-select{height:calc(3.5rem + 2px);padding:1rem .75rem}.form-floating>label{position:absolute;top:0;left:0;height:100%;padding:1rem .75rem;pointer-events:none;border:1px solid transparent;transform-origin:0 0;transition:opacity 0.1s ease-in-out,transform 0.1s ease-in-out}@media (prefers-reduced-motion: reduce){.form-floating>label{transition:none}}.form-floating>.form-control::placeholder,.search-form .form-floating>.search-field::placeholder,.comment-form .form-floating>input[type="text"]::placeholder,.comment-form .form-floating>input[type="email"]::placeholder,.comment-form .form-floating>input[type="url"]::placeholder,.comment-form .form-floating>textarea::placeholder{color:transparent}.form-floating>.form-control:focus,.search-form .form-floating>.search-field:focus,.comment-form .form-floating>input[type="text"]:focus,.comment-form .form-floating>input[type="email"]:focus,.comment-form .form-floating>input[type="url"]:focus,.comment-form .form-floating>textarea:focus,.form-floating>.form-control:not(:placeholder-shown),.search-form .form-floating>.search-field:not(:placeholder-shown),.comment-form .form-floating>input[type="text"]:not(:placeholder-shown),.comment-form .form-floating>input[type="email"]:not(:placeholder-shown),.comment-form .form-floating>input[type="url"]:not(:placeholder-shown),.comment-form .form-floating>textarea:not(:placeholder-shown){padding-top:1.625rem;padding-bottom:.625rem}.form-floating>.form-control:-webkit-autofill,.search-form .form-floating>.search-field:-webkit-autofill,.comment-form .form-floating>input[type="text"]:-webkit-autofill,.comment-form .form-floating>input[type="email"]:-webkit-autofill,.comment-form .form-floating>input[type="url"]:-webkit-autofill,.comment-form .form-floating>textarea:-webkit-autofill{padding-top:1.625rem;padding-bottom:.625rem}.form-floating>.form-select{padding-top:1.625rem;padding-bottom:.625rem}.form-floating>.form-control:focus~label,.search-form .form-floating>.search-field:focus~label,.comment-form .form-floating>input[type="text"]:focus~label,.comment-form .form-floating>input[type="email"]:focus~label,.comment-form .form-floating>input[type="url"]:focus~label,.comment-form .form-floating>textarea:focus~label,.form-floating>.form-control:not(:placeholder-shown)~label,.search-form .form-floating>.search-field:not(:placeholder-shown)~label,.comment-form .form-floating>input[type="text"]:not(:placeholder-shown)~label,.comment-form .form-floating>input[type="email"]:not(:placeholder-shown)~label,.comment-form .form-floating>input[type="url"]:not(:placeholder-shown)~label,.comment-form .form-floating>textarea:not(:placeholder-shown)~label,.form-floating>.form-select~label{opacity:.65;transform:scale(0.85) translateY(-0.5rem) translateX(0.15rem)}.form-floating>.form-control:-webkit-autofill~label,.search-form .form-floating>.search-field:-webkit-autofill~label,.comment-form .form-floating>input[type="text"]:-webkit-autofill~label,.comment-form .form-floating>input[type="email"]:-webkit-autofill~label,.comment-form .form-floating>input[type="url"]:-webkit-autofill~label,.comment-form .form-floating>textarea:-webkit-autofill~label{opacity:.65;transform:scale(0.85) translateY(-0.5rem) translateX(0.15rem)}.input-group{position:relative;display:flex;flex-wrap:wrap;align-items:stretch;width:100%}.input-group>.form-control,.search-form .input-group>.search-field,.comment-form .input-group>input[type="text"],.comment-form .input-group>input[type="email"],.comment-form .input-group>input[type="url"],.comment-form .input-group>textarea,.input-group>.form-select{position:relative;flex:1 1 auto;width:1%;min-width:0}.input-group>.form-control:focus,.search-form .input-group>.search-field:focus,.comment-form .input-group>input[type="text"]:focus,.comment-form .input-group>input[type="email"]:focus,.comment-form .input-group>input[type="url"]:focus,.comment-form .input-group>textarea:focus,.input-group>.form-select:focus{z-index:3}.input-group .btn,.input-group .search-form .search-submit,.search-form .input-group .search-submit,.input-group .comment-form input[type="submit"],.comment-form .input-group input[type="submit"]{position:relative;z-index:2}.input-group .btn:focus,.input-group .search-form .search-submit:focus,.search-form .input-group .search-submit:focus,.input-group .comment-form input[type="submit"]:focus,.comment-form .input-group input[type="submit"]:focus{z-index:3}.input-group-text{display:flex;align-items:center;padding:.375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:#1d2d35;text-align:center;white-space:nowrap;background-color:#e9ecef;border:1px solid #ced4da;border-radius:.25rem}.input-group-lg>.form-control,.search-form .input-group-lg>.search-field,.comment-form .input-group-lg>input[type="text"],.comment-form .input-group-lg>input[type="email"],.comment-form .input-group-lg>input[type="url"],.comment-form .input-group-lg>textarea,.input-group-lg>.form-select,.input-group-lg>.input-group-text,.input-group-lg>.btn,.search-form .input-group-lg>.search-submit,.comment-form .input-group-lg>input[type="submit"]{padding:.5rem 1rem;font-size:1rem;border-radius:.3rem}.input-group-sm>.form-control,.search-form .input-group-sm>.search-field,.comment-form .input-group-sm>input[type="text"],.comment-form .input-group-sm>input[type="email"],.comment-form .input-group-sm>input[type="url"],.comment-form .input-group-sm>textarea,.input-group-sm>.form-select,.input-group-sm>.input-group-text,.input-group-sm>.btn,.search-form .input-group-sm>.search-submit,.comment-form .input-group-sm>input[type="submit"]{padding:.25rem .5rem;font-size:.875rem;border-radius:.2rem}.input-group-lg>.form-select,.input-group-sm>.form-select{padding-right:3rem}.input-group:not(.has-validation)>:not(:last-child):not(.dropdown-toggle):not(.dropdown-menu),.input-group:not(.has-validation)>.dropdown-toggle:nth-last-child(n + 3){border-top-right-radius:0;border-bottom-right-radius:0}.input-group.has-validation>:nth-last-child(n + 3):not(.dropdown-toggle):not(.dropdown-menu),.input-group.has-validation>.dropdown-toggle:nth-last-child(n + 4){border-top-right-radius:0;border-bottom-right-radius:0}.input-group>:not(:first-child):not(.dropdown-menu):not(.valid-tooltip):not(.valid-feedback):not(.invalid-tooltip):not(.invalid-feedback){margin-left:-1px;border-top-left-radius:0;border-bottom-left-radius:0}.valid-feedback{display:none;width:100%;margin-top:.25rem;font-size:.875em;color:#198754}.valid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:.875rem;color:#fff;background-color:rgba(25,135,84,0.9);border-radius:.25rem}.was-validated :valid~.valid-feedback,.was-validated :valid~.valid-tooltip,.is-valid~.valid-feedback,.is-valid~.valid-tooltip{display:block}.was-validated .form-control:valid,.was-validated .search-form .search-field:valid,.search-form .was-validated .search-field:valid,.was-validated .comment-form input[type="text"]:valid,.comment-form .was-validated input[type="text"]:valid,.was-validated .comment-form input[type="email"]:valid,.comment-form .was-validated input[type="email"]:valid,.was-validated .comment-form input[type="url"]:valid,.comment-form .was-validated input[type="url"]:valid,.was-validated .comment-form textarea:valid,.comment-form .was-validated textarea:valid,.form-control.is-valid,.search-form .is-valid.search-field,.comment-form input.is-valid[type="text"],.comment-form input.is-valid[type="email"],.comment-form input.is-valid[type="url"],.comment-form textarea.is-valid{border-color:#198754;padding-right:calc(1.5em + .75rem);background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%23198754' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e");background-repeat:no-repeat;background-position:right calc(.375em + .1875rem) center;background-size:calc(.75em + .375rem) calc(.75em + .375rem)}.was-validated .form-control:valid:focus,.was-validated .search-form .search-field:valid:focus,.search-form .was-validated .search-field:valid:focus,.was-validated .comment-form input[type="text"]:valid:focus,.comment-form .was-validated input[type="text"]:valid:focus,.was-validated .comment-form input[type="email"]:valid:focus,.comment-form .was-validated input[type="email"]:valid:focus,.was-validated .comment-form input[type="url"]:valid:focus,.comment-form .was-validated input[type="url"]:valid:focus,.was-validated .comment-form textarea:valid:focus,.comment-form .was-validated textarea:valid:focus,.form-control.is-valid:focus,.search-form .is-valid.search-field:focus,.comment-form input.is-valid[type="text"]:focus,.comment-form input.is-valid[type="email"]:focus,.comment-form input.is-valid[type="url"]:focus,.comment-form textarea.is-valid:focus{border-color:#198754;box-shadow:0 0 0 .25rem rgba(25,135,84,0.25)}.was-validated textarea.form-control:valid,.was-validated .search-form textarea.search-field:valid,.search-form .was-validated textarea.search-field:valid,textarea.form-control.is-valid,.search-form textarea.is-valid.search-field{padding-right:calc(1.5em + .75rem);background-position:top calc(.375em + .1875rem) right calc(.375em + .1875rem)}.was-validated .form-select:valid,.form-select.is-valid{border-color:#198754;padding-right:4.125rem;background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M2 5l6 6 6-6'/%3e%3c/svg%3e"),url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%23198754' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e");background-position:right .75rem center,center right 2.25rem;background-size:16px 12px,calc(.75em + .375rem) calc(.75em + .375rem)}.was-validated .form-select:valid:focus,.form-select.is-valid:focus{border-color:#198754;box-shadow:0 0 0 .25rem rgba(25,135,84,0.25)}.was-validated .form-check-input:valid,.form-check-input.is-valid{border-color:#198754}.was-validated .form-check-input:valid:checked,.form-check-input.is-valid:checked{background-color:#198754}.was-validated .form-check-input:valid:focus,.form-check-input.is-valid:focus{box-shadow:0 0 0 .25rem rgba(25,135,84,0.25)}.was-validated .form-check-input:valid~.form-check-label,.form-check-input.is-valid~.form-check-label{color:#198754}.form-check-inline .form-check-input~.valid-feedback{margin-left:.5em}.was-validated .input-group .form-control:valid,.was-validated .input-group .search-form .search-field:valid,.search-form .was-validated .input-group .search-field:valid,.was-validated .input-group .comment-form input[type="text"]:valid,.comment-form .was-validated .input-group input[type="text"]:valid,.was-validated .input-group .comment-form input[type="email"]:valid,.comment-form .was-validated .input-group input[type="email"]:valid,.was-validated .input-group .comment-form input[type="url"]:valid,.comment-form .was-validated .input-group input[type="url"]:valid,.was-validated .input-group .comment-form textarea:valid,.comment-form .was-validated .input-group textarea:valid,.input-group .form-control.is-valid,.input-group .search-form .is-valid.search-field,.search-form .input-group .is-valid.search-field,.input-group .comment-form input.is-valid[type="text"],.comment-form .input-group input.is-valid[type="text"],.input-group .comment-form input.is-valid[type="email"],.comment-form .input-group input.is-valid[type="email"],.input-group .comment-form input.is-valid[type="url"],.comment-form .input-group input.is-valid[type="url"],.input-group .comment-form textarea.is-valid,.comment-form .input-group textarea.is-valid,.was-validated .input-group .form-select:valid,.input-group .form-select.is-valid{z-index:3}.invalid-feedback{display:none;width:100%;margin-top:.25rem;font-size:.875em;color:#dc3545}.invalid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:.875rem;color:#fff;background-color:rgba(220,53,69,0.9);border-radius:.25rem}.was-validated :invalid~.invalid-feedback,.was-validated :invalid~.invalid-tooltip,.is-invalid~.invalid-feedback,.is-invalid~.invalid-tooltip{display:block}.was-validated .form-control:invalid,.was-validated .search-form .search-field:invalid,.search-form .was-validated .search-field:invalid,.was-validated .comment-form input[type="text"]:invalid,.comment-form .was-validated input[type="text"]:invalid,.was-validated .comment-form input[type="email"]:invalid,.comment-form .was-validated input[type="email"]:invalid,.was-validated .comment-form input[type="url"]:invalid,.comment-form .was-validated input[type="url"]:invalid,.was-validated .comment-form textarea:invalid,.comment-form .was-validated textarea:invalid,.form-control.is-invalid,.search-form .is-invalid.search-field,.comment-form input.is-invalid[type="text"],.comment-form input.is-invalid[type="email"],.comment-form input.is-invalid[type="url"],.comment-form textarea.is-invalid{border-color:#dc3545;padding-right:calc(1.5em + .75rem);background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23dc3545'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e");background-repeat:no-repeat;background-position:right calc(.375em + .1875rem) center;background-size:calc(.75em + .375rem) calc(.75em + .375rem)}.was-validated .form-control:invalid:focus,.was-validated .search-form .search-field:invalid:focus,.search-form .was-validated .search-field:invalid:focus,.was-validated .comment-form input[type="text"]:invalid:focus,.comment-form .was-validated input[type="text"]:invalid:focus,.was-validated .comment-form input[type="email"]:invalid:focus,.comment-form .was-validated input[type="email"]:invalid:focus,.was-validated .comment-form input[type="url"]:invalid:focus,.comment-form .was-validated input[type="url"]:invalid:focus,.was-validated .comment-form textarea:invalid:focus,.comment-form .was-validated textarea:invalid:focus,.form-control.is-invalid:focus,.search-form .is-invalid.search-field:focus,.comment-form input.is-invalid[type="text"]:focus,.comment-form input.is-invalid[type="email"]:focus,.comment-form input.is-invalid[type="url"]:focus,.comment-form textarea.is-invalid:focus{border-color:#dc3545;box-shadow:0 0 0 .25rem rgba(220,53,69,0.25)}.was-validated textarea.form-control:invalid,.was-validated .search-form textarea.search-field:invalid,.search-form .was-validated textarea.search-field:invalid,textarea.form-control.is-invalid,.search-form textarea.is-invalid.search-field{padding-right:calc(1.5em + .75rem);background-position:top calc(.375em + .1875rem) right calc(.375em + .1875rem)}.was-validated .form-select:invalid,.form-select.is-invalid{border-color:#dc3545;padding-right:4.125rem;background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M2 5l6 6 6-6'/%3e%3c/svg%3e"),url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23dc3545'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e");background-position:right .75rem center,center right 2.25rem;background-size:16px 12px,calc(.75em + .375rem) calc(.75em + .375rem)}.was-validated .form-select:invalid:focus,.form-select.is-invalid:focus{border-color:#dc3545;box-shadow:0 0 0 .25rem rgba(220,53,69,0.25)}.was-validated .form-check-input:invalid,.form-check-input.is-invalid{border-color:#dc3545}.was-validated .form-check-input:invalid:checked,.form-check-input.is-invalid:checked{background-color:#dc3545}.was-validated .form-check-input:invalid:focus,.form-check-input.is-invalid:focus{box-shadow:0 0 0 .25rem rgba(220,53,69,0.25)}.was-validated .form-check-input:invalid~.form-check-label,.form-check-input.is-invalid~.form-check-label{color:#dc3545}.form-check-inline .form-check-input~.invalid-feedback{margin-left:.5em}.was-validated .input-group .form-control:invalid,.was-validated .input-group .search-form .search-field:invalid,.search-form .was-validated .input-group .search-field:invalid,.was-validated .input-group .comment-form input[type="text"]:invalid,.comment-form .was-validated .input-group input[type="text"]:invalid,.was-validated .input-group .comment-form input[type="email"]:invalid,.comment-form .was-validated .input-group input[type="email"]:invalid,.was-validated .input-group .comment-form input[type="url"]:invalid,.comment-form .was-validated .input-group input[type="url"]:invalid,.was-validated .input-group .comment-form textarea:invalid,.comment-form .was-validated .input-group textarea:invalid,.input-group .form-control.is-invalid,.input-group .search-form .is-invalid.search-field,.search-form .input-group .is-invalid.search-field,.input-group .comment-form input.is-invalid[type="text"],.comment-form .input-group input.is-invalid[type="text"],.input-group .comment-form input.is-invalid[type="email"],.comment-form .input-group input.is-invalid[type="email"],.input-group .comment-form input.is-invalid[type="url"],.comment-form .input-group input.is-invalid[type="url"],.input-group .comment-form textarea.is-invalid,.comment-form .input-group textarea.is-invalid,.was-validated .input-group .form-select:invalid,.input-group .form-select.is-invalid{z-index:3}.btn,.search-form .search-submit,.comment-form input[type="submit"]{display:inline-block;font-weight:400;line-height:1.5;color:#1d2d35;text-align:center;vertical-align:middle;cursor:pointer;user-select:none;background-color:transparent;border:1px solid transparent;padding:.375rem .75rem;font-size:1rem;border-radius:.25rem;transition:color 0.15s ease-in-out,background-color 0.15s ease-in-out,border-color 0.15s ease-in-out,box-shadow 0.15s ease-in-out}@media (prefers-reduced-motion: reduce){.btn,.search-form .search-submit,.comment-form input[type="submit"]{transition:none}}.btn:hover,.search-form .search-submit:hover,.comment-form input[type="submit"]:hover{color:#1d2d35}.btn-check:focus+.btn,.search-form .btn-check:focus+.search-submit,.comment-form .btn-check:focus+input[type="submit"],.btn:focus,.search-form .search-submit:focus,.comment-form input[type="submit"]:focus{outline:0;box-shadow:0 0 0 .25rem rgba(69,69,140,0.25)}.btn:disabled,.search-form .search-submit:disabled,.comment-form input[type="submit"]:disabled,.btn.disabled,.search-form .disabled.search-submit,.comment-form input.disabled[type="submit"],fieldset:disabled .btn,fieldset:disabled .search-form .search-submit,.search-form fieldset:disabled .search-submit,fieldset:disabled .comment-form input[type="submit"],.comment-form fieldset:disabled input[type="submit"]{pointer-events:none;opacity:.65}.btn-primary{color:#fff;background-color:#45458c;border-color:#45458c}.btn-primary:hover{color:#fff;background-color:#3b3b77;border-color:#373770}.btn-check:focus+.btn-primary,.btn-primary:focus{color:#fff;background-color:#3b3b77;border-color:#373770;box-shadow:0 0 0 .25rem rgba(97,97,157,0.5)}.btn-check:checked+.btn-primary,.btn-check:active+.btn-primary,.btn-primary:active,.btn-primary.active,.show>.btn-primary.dropdown-toggle{color:#fff;background-color:#373770;border-color:#343469}.btn-check:checked+.btn-primary:focus,.btn-check:active+.btn-primary:focus,.btn-primary:active:focus,.btn-primary.active:focus,.show>.btn-primary.dropdown-toggle:focus{box-shadow:0 0 0 .25rem rgba(97,97,157,0.5)}.btn-primary:disabled,.btn-primary.disabled{color:#fff;background-color:#45458c;border-color:#45458c}.btn-secondary,.search-form .search-submit,.comment-form input[type="submit"]{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-secondary:hover,.search-form .search-submit:hover,.comment-form input[type="submit"]:hover{color:#fff;background-color:#5c636a;border-color:#565e64}.btn-check:focus+.btn-secondary,.search-form .btn-check:focus+.search-submit,.comment-form .btn-check:focus+input[type="submit"],.btn-secondary:focus,.search-form .search-submit:focus,.comment-form input[type="submit"]:focus{color:#fff;background-color:#5c636a;border-color:#565e64;box-shadow:0 0 0 .25rem rgba(130,138,145,0.5)}.btn-check:checked+.btn-secondary,.search-form .btn-check:checked+.search-submit,.comment-form .btn-check:checked+input[type="submit"],.btn-check:active+.btn-secondary,.search-form .btn-check:active+.search-submit,.comment-form .btn-check:active+input[type="submit"],.btn-secondary:active,.search-form .search-submit:active,.comment-form input[type="submit"]:active,.btn-secondary.active,.search-form .active.search-submit,.comment-form input.active[type="submit"],.show>.btn-secondary.dropdown-toggle,.search-form .show>.dropdown-toggle.search-submit,.comment-form .show>input.dropdown-toggle[type="submit"]{color:#fff;background-color:#565e64;border-color:#51585e}.btn-check:checked+.btn-secondary:focus,.search-form .btn-check:checked+.search-submit:focus,.comment-form .btn-check:checked+input[type="submit"]:focus,.btn-check:active+.btn-secondary:focus,.search-form .btn-check:active+.search-submit:focus,.comment-form .btn-check:active+input[type="submit"]:focus,.btn-secondary:active:focus,.search-form .search-submit:active:focus,.comment-form input[type="submit"]:active:focus,.btn-secondary.active:focus,.search-form .active.search-submit:focus,.comment-form input.active[type="submit"]:focus,.show>.btn-secondary.dropdown-toggle:focus,.search-form .show>.dropdown-toggle.search-submit:focus,.comment-form .show>input.dropdown-toggle[type="submit"]:focus{box-shadow:0 0 0 .25rem rgba(130,138,145,0.5)}.btn-secondary:disabled,.search-form .search-submit:disabled,.comment-form input[type="submit"]:disabled,.btn-secondary.disabled,.search-form .disabled.search-submit,.comment-form input.disabled[type="submit"]{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-success{color:#fff;background-color:#198754;border-color:#198754}.btn-success:hover{color:#fff;background-color:#157347;border-color:#146c43}.btn-check:focus+.btn-success,.btn-success:focus{color:#fff;background-color:#157347;border-color:#146c43;box-shadow:0 0 0 .25rem rgba(60,153,110,0.5)}.btn-check:checked+.btn-success,.btn-check:active+.btn-success,.btn-success:active,.btn-success.active,.show>.btn-success.dropdown-toggle{color:#fff;background-color:#146c43;border-color:#13653f}.btn-check:checked+.btn-success:focus,.btn-check:active+.btn-success:focus,.btn-success:active:focus,.btn-success.active:focus,.show>.btn-success.dropdown-toggle:focus{box-shadow:0 0 0 .25rem rgba(60,153,110,0.5)}.btn-success:disabled,.btn-success.disabled{color:#fff;background-color:#198754;border-color:#198754}.btn-info{color:#1d2d35;background-color:#0dcaf0;border-color:#0dcaf0}.btn-info:hover{color:#1d2d35;background-color:#31d2f2;border-color:#25cff2}.btn-check:focus+.btn-info,.btn-info:focus{color:#1d2d35;background-color:#31d2f2;border-color:#25cff2;box-shadow:0 0 0 .25rem rgba(15,178,212,0.5)}.btn-check:checked+.btn-info,.btn-check:active+.btn-info,.btn-info:active,.btn-info.active,.show>.btn-info.dropdown-toggle{color:#1d2d35;background-color:#3dd5f3;border-color:#25cff2}.btn-check:checked+.btn-info:focus,.btn-check:active+.btn-info:focus,.btn-info:active:focus,.btn-info.active:focus,.show>.btn-info.dropdown-toggle:focus{box-shadow:0 0 0 .25rem rgba(15,178,212,0.5)}.btn-info:disabled,.btn-info.disabled{color:#1d2d35;background-color:#0dcaf0;border-color:#0dcaf0}.btn-warning{color:#1d2d35;background-color:#ffe000;border-color:#ffe000}.btn-warning:hover{color:#1d2d35;background-color:#ffe526;border-color:#ffe31a}.btn-check:focus+.btn-warning,.btn-warning:focus{color:#1d2d35;background-color:#ffe526;border-color:#ffe31a;box-shadow:0 0 0 .25rem rgba(221,197,8,0.5)}.btn-check:checked+.btn-warning,.btn-check:active+.btn-warning,.btn-warning:active,.btn-warning.active,.show>.btn-warning.dropdown-toggle{color:#1d2d35;background-color:#ffe633;border-color:#ffe31a}.btn-check:checked+.btn-warning:focus,.btn-check:active+.btn-warning:focus,.btn-warning:active:focus,.btn-warning.active:focus,.show>.btn-warning.dropdown-toggle:focus{box-shadow:0 0 0 .25rem rgba(221,197,8,0.5)}.btn-warning:disabled,.btn-warning.disabled{color:#1d2d35;background-color:#ffe000;border-color:#ffe000}.btn-danger{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-danger:hover{color:#fff;background-color:#bb2d3b;border-color:#b02a37}.btn-check:focus+.btn-danger,.btn-danger:focus{color:#fff;background-color:#bb2d3b;border-color:#b02a37;box-shadow:0 0 0 .25rem rgba(225,83,97,0.5)}.btn-check:checked+.btn-danger,.btn-check:active+.btn-danger,.btn-danger:active,.btn-danger.active,.show>.btn-danger.dropdown-toggle{color:#fff;background-color:#b02a37;border-color:#a52834}.btn-check:checked+.btn-danger:focus,.btn-check:active+.btn-danger:focus,.btn-danger:active:focus,.btn-danger.active:focus,.show>.btn-danger.dropdown-toggle:focus{box-shadow:0 0 0 .25rem rgba(225,83,97,0.5)}.btn-danger:disabled,.btn-danger.disabled{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-light{color:#1d2d35;background-color:#fbfffe;border-color:#fbfffe}.btn-light:hover{color:#1d2d35;background-color:#fcfffe;border-color:#fbfffe}.btn-check:focus+.btn-light,.btn-light:focus{color:#1d2d35;background-color:#fcfffe;border-color:#fbfffe;box-shadow:0 0 0 .25rem rgba(218,224,224,0.5)}.btn-check:checked+.btn-light,.btn-check:active+.btn-light,.btn-light:active,.btn-light.active,.show>.btn-light.dropdown-toggle{color:#1d2d35;background-color:#fcfffe;border-color:#fbfffe}.btn-check:checked+.btn-light:focus,.btn-check:active+.btn-light:focus,.btn-light:active:focus,.btn-light.active:focus,.show>.btn-light.dropdown-toggle:focus{box-shadow:0 0 0 .25rem rgba(218,224,224,0.5)}.btn-light:disabled,.btn-light.disabled{color:#1d2d35;background-color:#fbfffe;border-color:#fbfffe}.btn-dark{color:#fff;background-color:#1e1e21;border-color:#1e1e21}.btn-dark:hover{color:#fff;background-color:#1a1a1c;border-color:#18181a}.btn-check:focus+.btn-dark,.btn-dark:focus{color:#fff;background-color:#1a1a1c;border-color:#18181a;box-shadow:0 0 0 .25rem rgba(64,64,66,0.5)}.btn-check:checked+.btn-dark,.btn-check:active+.btn-dark,.btn-dark:active,.btn-dark.active,.show>.btn-dark.dropdown-toggle{color:#fff;background-color:#18181a;border-color:#171719}.btn-check:checked+.btn-dark:focus,.btn-check:active+.btn-dark:focus,.btn-dark:active:focus,.btn-dark.active:focus,.show>.btn-dark.dropdown-toggle:focus{box-shadow:0 0 0 .25rem rgba(64,64,66,0.5)}.btn-dark:disabled,.btn-dark.disabled{color:#fff;background-color:#1e1e21;border-color:#1e1e21}.btn-outline-primary{color:#45458c;border-color:#45458c}.btn-outline-primary:hover{color:#fff;background-color:#45458c;border-color:#45458c}.btn-check:focus+.btn-outline-primary,.btn-outline-primary:focus{box-shadow:0 0 0 .25rem rgba(69,69,140,0.5)}.btn-check:checked+.btn-outline-primary,.btn-check:active+.btn-outline-primary,.btn-outline-primary:active,.btn-outline-primary.active,.btn-outline-primary.dropdown-toggle.show{color:#fff;background-color:#45458c;border-color:#45458c}.btn-check:checked+.btn-outline-primary:focus,.btn-check:active+.btn-outline-primary:focus,.btn-outline-primary:active:focus,.btn-outline-primary.active:focus,.btn-outline-primary.dropdown-toggle.show:focus{box-shadow:0 0 0 .25rem rgba(69,69,140,0.5)}.btn-outline-primary:disabled,.btn-outline-primary.disabled{color:#45458c;background-color:transparent}.btn-outline-secondary{color:#6c757d;border-color:#6c757d}.btn-outline-secondary:hover{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-check:focus+.btn-outline-secondary,.btn-outline-secondary:focus{box-shadow:0 0 0 .25rem rgba(108,117,125,0.5)}.btn-check:checked+.btn-outline-secondary,.btn-check:active+.btn-outline-secondary,.btn-outline-secondary:active,.btn-outline-secondary.active,.btn-outline-secondary.dropdown-toggle.show{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-check:checked+.btn-outline-secondary:focus,.btn-check:active+.btn-outline-secondary:focus,.btn-outline-secondary:active:focus,.btn-outline-secondary.active:focus,.btn-outline-secondary.dropdown-toggle.show:focus{box-shadow:0 0 0 .25rem rgba(108,117,125,0.5)}.btn-outline-secondary:disabled,.btn-outline-secondary.disabled{color:#6c757d;background-color:transparent}.btn-outline-success{color:#198754;border-color:#198754}.btn-outline-success:hover{color:#fff;background-color:#198754;border-color:#198754}.btn-check:focus+.btn-outline-success,.btn-outline-success:focus{box-shadow:0 0 0 .25rem rgba(25,135,84,0.5)}.btn-check:checked+.btn-outline-success,.btn-check:active+.btn-outline-success,.btn-outline-success:active,.btn-outline-success.active,.btn-outline-success.dropdown-toggle.show{color:#fff;background-color:#198754;border-color:#198754}.btn-check:checked+.btn-outline-success:focus,.btn-check:active+.btn-outline-success:focus,.btn-outline-success:active:focus,.btn-outline-success.active:focus,.btn-outline-success.dropdown-toggle.show:focus{box-shadow:0 0 0 .25rem rgba(25,135,84,0.5)}.btn-outline-success:disabled,.btn-outline-success.disabled{color:#198754;background-color:transparent}.btn-outline-info{color:#0dcaf0;border-color:#0dcaf0}.btn-outline-info:hover{color:#1d2d35;background-color:#0dcaf0;border-color:#0dcaf0}.btn-check:focus+.btn-outline-info,.btn-outline-info:focus{box-shadow:0 0 0 .25rem rgba(13,202,240,0.5)}.btn-check:checked+.btn-outline-info,.btn-check:active+.btn-outline-info,.btn-outline-info:active,.btn-outline-info.active,.btn-outline-info.dropdown-toggle.show{color:#1d2d35;background-color:#0dcaf0;border-color:#0dcaf0}.btn-check:checked+.btn-outline-info:focus,.btn-check:active+.btn-outline-info:focus,.btn-outline-info:active:focus,.btn-outline-info.active:focus,.btn-outline-info.dropdown-toggle.show:focus{box-shadow:0 0 0 .25rem rgba(13,202,240,0.5)}.btn-outline-info:disabled,.btn-outline-info.disabled{color:#0dcaf0;background-color:transparent}.btn-outline-warning{color:#ffe000;border-color:#ffe000}.btn-outline-warning:hover{color:#1d2d35;background-color:#ffe000;border-color:#ffe000}.btn-check:focus+.btn-outline-warning,.btn-outline-warning:focus{box-shadow:0 0 0 .25rem rgba(255,224,0,0.5)}.btn-check:checked+.btn-outline-warning,.btn-check:active+.btn-outline-warning,.btn-outline-warning:active,.btn-outline-warning.active,.btn-outline-warning.dropdown-toggle.show{color:#1d2d35;background-color:#ffe000;border-color:#ffe000}.btn-check:checked+.btn-outline-warning:focus,.btn-check:active+.btn-outline-warning:focus,.btn-outline-warning:active:focus,.btn-outline-warning.active:focus,.btn-outline-warning.dropdown-toggle.show:focus{box-shadow:0 0 0 .25rem rgba(255,224,0,0.5)}.btn-outline-warning:disabled,.btn-outline-warning.disabled{color:#ffe000;background-color:transparent}.btn-outline-danger{color:#dc3545;border-color:#dc3545}.btn-outline-danger:hover{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-check:focus+.btn-outline-danger,.btn-outline-danger:focus{box-shadow:0 0 0 .25rem rgba(220,53,69,0.5)}.btn-check:checked+.btn-outline-danger,.btn-check:active+.btn-outline-danger,.btn-outline-danger:active,.btn-outline-danger.active,.btn-outline-danger.dropdown-toggle.show{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-check:checked+.btn-outline-danger:focus,.btn-check:active+.btn-outline-danger:focus,.btn-outline-danger:active:focus,.btn-outline-danger.active:focus,.btn-outline-danger.dropdown-toggle.show:focus{box-shadow:0 0 0 .25rem rgba(220,53,69,0.5)}.btn-outline-danger:disabled,.btn-outline-danger.disabled{color:#dc3545;background-color:transparent}.btn-outline-light{color:#fbfffe;border-color:#fbfffe}.btn-outline-light:hover{color:#1d2d35;background-color:#fbfffe;border-color:#fbfffe}.btn-check:focus+.btn-outline-light,.btn-outline-light:focus{box-shadow:0 0 0 .25rem rgba(251,255,254,0.5)}.btn-check:checked+.btn-outline-light,.btn-check:active+.btn-outline-light,.btn-outline-light:active,.btn-outline-light.active,.btn-outline-light.dropdown-toggle.show{color:#1d2d35;background-color:#fbfffe;border-color:#fbfffe}.btn-check:checked+.btn-outline-light:focus,.btn-check:active+.btn-outline-light:focus,.btn-outline-light:active:focus,.btn-outline-light.active:focus,.btn-outline-light.dropdown-toggle.show:focus{box-shadow:0 0 0 .25rem rgba(251,255,254,0.5)}.btn-outline-light:disabled,.btn-outline-light.disabled{color:#fbfffe;background-color:transparent}.btn-outline-dark{color:#1e1e21;border-color:#1e1e21}.btn-outline-dark:hover{color:#fff;background-color:#1e1e21;border-color:#1e1e21}.btn-check:focus+.btn-outline-dark,.btn-outline-dark:focus{box-shadow:0 0 0 .25rem rgba(30,30,33,0.5)}.btn-check:checked+.btn-outline-dark,.btn-check:active+.btn-outline-dark,.btn-outline-dark:active,.btn-outline-dark.active,.btn-outline-dark.dropdown-toggle.show{color:#fff;background-color:#1e1e21;border-color:#1e1e21}.btn-check:checked+.btn-outline-dark:focus,.btn-check:active+.btn-outline-dark:focus,.btn-outline-dark:active:focus,.btn-outline-dark.active:focus,.btn-outline-dark.dropdown-toggle.show:focus{box-shadow:0 0 0 .25rem rgba(30,30,33,0.5)}.btn-outline-dark:disabled,.btn-outline-dark.disabled{color:#1e1e21;background-color:transparent}.btn-link{font-weight:400;color:#45458c;text-decoration:none}.btn-link:hover{color:#373770}.btn-link:disabled,.btn-link.disabled{color:#6c757d}.btn-lg{padding:.5rem 1rem;font-size:1rem;border-radius:.3rem}.btn-sm{padding:.25rem .5rem;font-size:.875rem;border-radius:.2rem}.nav{display:flex;flex-wrap:wrap;padding-left:0;margin-bottom:0;list-style:none}.nav-link,.banner .nav a{display:block;padding:.5rem 1rem;transition:color 0.15s ease-in-out,background-color 0.15s ease-in-out,border-color 0.15s ease-in-out}@media (prefers-reduced-motion: reduce){.nav-link,.banner .nav a{transition:none}}.nav-link.disabled,.banner .nav a.disabled{color:#6c757d;pointer-events:none;cursor:default}.nav-tabs{border-bottom:1px solid #d4d4d4}.nav-tabs .nav-link,.nav-tabs .banner .nav a,.banner .nav .nav-tabs a{margin-bottom:-1px;background:none;border:1px solid transparent;border-top-left-radius:.25rem;border-top-right-radius:.25rem}.nav-tabs .nav-link:hover,.nav-tabs .banner .nav a:hover,.banner .nav .nav-tabs a:hover,.nav-tabs .nav-link:focus,.nav-tabs .banner .nav a:focus,.banner .nav .nav-tabs a:focus{border-color:#e9ecef #e9ecef #d4d4d4;isolation:isolate}.nav-tabs .nav-link.disabled,.nav-tabs .banner .nav a.disabled,.banner .nav .nav-tabs a.disabled{color:#6c757d;background-color:transparent;border-color:transparent}.nav-tabs .nav-link.active,.nav-tabs .banner .nav a.active,.banner .nav .nav-tabs a.active,.nav-tabs .nav-item.show .nav-link,.nav-tabs .nav-item.show .banner .nav a,.banner .nav .nav-tabs .nav-item.show a,.nav-tabs .banner .nav li.show .nav-link,.nav-tabs .banner .nav li.show a,.banner .nav .nav-tabs li.show .nav-link,.banner .nav .nav-tabs li.show a{color:#495057;background-color:#fff;border-color:#d4d4d4 #d4d4d4 #fff}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-left-radius:0;border-top-right-radius:0}.nav-pills .nav-link,.nav-pills .banner .nav a,.banner .nav .nav-pills a{background:none;border:0;border-radius:.25rem}.nav-pills .nav-link.active,.nav-pills .banner .nav a.active,.banner .nav .nav-pills a.active,.nav-pills .show>.nav-link,.nav-pills .banner .nav .show>a,.banner .nav .nav-pills .show>a{color:#fff;background-color:#45458c}.nav-fill>.nav-link,.banner .nav .nav-fill>a,.nav-fill .nav-item,.nav-fill .banner .nav li,.banner .nav .nav-fill li{flex:1 1 auto;text-align:center}.nav-justified>.nav-link,.banner .nav .nav-justified>a,.nav-justified .nav-item,.nav-justified .banner .nav li,.banner .nav .nav-justified li{flex-basis:0;flex-grow:1;text-align:center}.nav-fill .nav-item .nav-link,.nav-fill .nav-item .banner .nav a,.banner .nav .nav-fill .nav-item a,.nav-fill .banner .nav li .nav-link,.nav-fill .banner .nav li a,.banner .nav .nav-fill li .nav-link,.banner .nav .nav-fill li a,.nav-justified .nav-item .nav-link,.nav-justified .nav-item .banner .nav a,.banner .nav .nav-justified .nav-item a,.nav-justified .banner .nav li .nav-link,.nav-justified .banner .nav li a,.banner .nav .nav-justified li .nav-link,.banner .nav .nav-justified li a{width:100%}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.navbar{position:relative;display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;padding-top:.5rem;padding-bottom:.5rem}.navbar>.container,.navbar>.container-fluid,.navbar>.container-sm,.navbar>.container-md,.navbar>.container-lg,.navbar>.container-xl,.navbar>.container-xxl{display:flex;flex-wrap:inherit;align-items:center;justify-content:space-between}.navbar-brand{padding-top:.5rem;padding-bottom:.5rem;margin-right:1rem;font-size:1rem;white-space:nowrap}.navbar-nav{display:flex;flex-direction:column;padding-left:0;margin-bottom:0;list-style:none}.navbar-nav .nav-link,.navbar-nav .banner .nav a,.banner .nav .navbar-nav a{padding-right:0;padding-left:0}.navbar-nav .dropdown-menu{position:static}.navbar-text{padding-top:.5rem;padding-bottom:.5rem}.navbar-collapse{flex-basis:100%;flex-grow:1;align-items:center}.navbar-toggler{padding:.25rem .75rem;font-size:1rem;line-height:1;background-color:transparent;border:1px solid transparent;border-radius:.25rem;transition:box-shadow 0.15s ease-in-out}@media (prefers-reduced-motion: reduce){.navbar-toggler{transition:none}}.navbar-toggler:hover{text-decoration:none}.navbar-toggler:focus{text-decoration:none;outline:0;box-shadow:0 0 0 .25rem}.navbar-toggler-icon{display:inline-block;width:1.5em;height:1.5em;vertical-align:middle;background-repeat:no-repeat;background-position:center;background-size:100%}.navbar-nav-scroll{max-height:var(--bs-scroll-height, 75vh);overflow-y:auto}@media (min-width: 576px){.navbar-expand-sm{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-sm .navbar-nav{flex-direction:row}.navbar-expand-sm .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-sm .navbar-nav .nav-link,.navbar-expand-sm .navbar-nav .banner .nav a,.banner .nav .navbar-expand-sm .navbar-nav a{padding-right:.5rem;padding-left:.5rem}.navbar-expand-sm .navbar-nav-scroll{overflow:visible}.navbar-expand-sm .navbar-collapse{display:flex !important;flex-basis:auto}.navbar-expand-sm .navbar-toggler{display:none}}@media (min-width: 768px){.navbar-expand-md{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-md .navbar-nav{flex-direction:row}.navbar-expand-md .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-md .navbar-nav .nav-link,.navbar-expand-md .navbar-nav .banner .nav a,.banner .nav .navbar-expand-md .navbar-nav a{padding-right:.5rem;padding-left:.5rem}.navbar-expand-md .navbar-nav-scroll{overflow:visible}.navbar-expand-md .navbar-collapse{display:flex !important;flex-basis:auto}.navbar-expand-md .navbar-toggler{display:none}}@media (min-width: 992px){.navbar-expand-lg{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-lg .navbar-nav{flex-direction:row}.navbar-expand-lg .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-lg .navbar-nav .nav-link,.navbar-expand-lg .navbar-nav .banner .nav a,.banner .nav .navbar-expand-lg .navbar-nav a{padding-right:.5rem;padding-left:.5rem}.navbar-expand-lg .navbar-nav-scroll{overflow:visible}.navbar-expand-lg .navbar-collapse{display:flex !important;flex-basis:auto}.navbar-expand-lg .navbar-toggler{display:none}}@media (min-width: 1200px){.navbar-expand-xl{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-xl .navbar-nav{flex-direction:row}.navbar-expand-xl .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-xl .navbar-nav .nav-link,.navbar-expand-xl .navbar-nav .banner .nav a,.banner .nav .navbar-expand-xl .navbar-nav a{padding-right:.5rem;padding-left:.5rem}.navbar-expand-xl .navbar-nav-scroll{overflow:visible}.navbar-expand-xl .navbar-collapse{display:flex !important;flex-basis:auto}.navbar-expand-xl .navbar-toggler{display:none}}@media (min-width: 1400px){.navbar-expand-xxl{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-xxl .navbar-nav{flex-direction:row}.navbar-expand-xxl .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-xxl .navbar-nav .nav-link,.navbar-expand-xxl .navbar-nav .banner .nav a,.banner .nav .navbar-expand-xxl .navbar-nav a{padding-right:.5rem;padding-left:.5rem}.navbar-expand-xxl .navbar-nav-scroll{overflow:visible}.navbar-expand-xxl .navbar-collapse{display:flex !important;flex-basis:auto}.navbar-expand-xxl .navbar-toggler{display:none}}.navbar-expand{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand .navbar-nav{flex-direction:row}.navbar-expand .navbar-nav .dropdown-menu{position:absolute}.navbar-expand .navbar-nav .nav-link,.navbar-expand .navbar-nav .banner .nav a,.banner .nav .navbar-expand .navbar-nav a{padding-right:.5rem;padding-left:.5rem}.navbar-expand .navbar-nav-scroll{overflow:visible}.navbar-expand .navbar-collapse{display:flex !important;flex-basis:auto}.navbar-expand .navbar-toggler{display:none}.navbar-light .navbar-brand{color:#45458c}.navbar-light .navbar-brand:hover,.navbar-light .navbar-brand:focus{color:#45458c}.navbar-light .navbar-nav .nav-link,.navbar-light .navbar-nav .banner .nav a,.banner .nav .navbar-light .navbar-nav a{color:#1d2d35}.navbar-light .navbar-nav .nav-link:hover,.navbar-light .navbar-nav .banner .nav a:hover,.banner .nav .navbar-light .navbar-nav a:hover,.navbar-light .navbar-nav .nav-link:focus,.navbar-light .navbar-nav .banner .nav a:focus,.banner .nav .navbar-light .navbar-nav a:focus{color:#45458c}.navbar-light .navbar-nav .nav-link.disabled,.navbar-light .navbar-nav .banner .nav a.disabled,.banner .nav .navbar-light .navbar-nav a.disabled{color:rgba(29,45,53,0.3)}.navbar-light .navbar-nav .show>.nav-link,.navbar-light .navbar-nav .banner .nav .show>a,.banner .nav .navbar-light .navbar-nav .show>a,.navbar-light .navbar-nav .nav-link.active,.navbar-light .navbar-nav .banner .nav a.active,.banner .nav .navbar-light .navbar-nav a.active{color:#45458c}.navbar-light .navbar-toggler{color:#1d2d35;border-color:rgba(29,45,53,0.1)}.navbar-light .navbar-toggler-icon{background-image:none}.navbar-light .navbar-text{color:#1d2d35}.navbar-light .navbar-text a,.navbar-light .navbar-text a:hover,.navbar-light .navbar-text a:focus{color:#45458c}.navbar-dark .navbar-brand{color:#fff}.navbar-dark .navbar-brand:hover,.navbar-dark .navbar-brand:focus{color:#fff}.navbar-dark .navbar-nav .nav-link,.navbar-dark .navbar-nav .banner .nav a,.banner .nav .navbar-dark .navbar-nav a{color:rgba(255,255,255,0.55)}.navbar-dark .navbar-nav .nav-link:hover,.navbar-dark .navbar-nav .banner .nav a:hover,.banner .nav .navbar-dark .navbar-nav a:hover,.navbar-dark .navbar-nav .nav-link:focus,.navbar-dark .navbar-nav .banner .nav a:focus,.banner .nav .navbar-dark .navbar-nav a:focus{color:rgba(255,255,255,0.75)}.navbar-dark .navbar-nav .nav-link.disabled,.navbar-dark .navbar-nav .banner .nav a.disabled,.banner .nav .navbar-dark .navbar-nav a.disabled{color:rgba(255,255,255,0.25)}.navbar-dark .navbar-nav .show>.nav-link,.navbar-dark .navbar-nav .banner .nav .show>a,.banner .nav .navbar-dark .navbar-nav .show>a,.navbar-dark .navbar-nav .nav-link.active,.navbar-dark .navbar-nav .banner .nav a.active,.banner .nav .navbar-dark .navbar-nav a.active{color:#fff}.navbar-dark .navbar-toggler{color:rgba(255,255,255,0.55);border-color:rgba(255,255,255,0.1)}.navbar-dark .navbar-toggler-icon{background-image:none}.navbar-dark .navbar-text{color:rgba(255,255,255,0.55)}.navbar-dark .navbar-text a,.navbar-dark .navbar-text a:hover,.navbar-dark .navbar-text a:focus{color:#fff}.card{position:relative;display:flex;flex-direction:column;min-width:0;word-wrap:break-word;background-color:#fff;background-clip:border-box;border:1px solid #e9ecef;border-radius:.25rem}.card>hr{margin-right:0;margin-left:0}.card>.list-group{border-top:inherit;border-bottom:inherit}.card>.list-group:first-child{border-top-width:0;border-top-left-radius:calc(.25rem - 1px);border-top-right-radius:calc(.25rem - 1px)}.card>.list-group:last-child{border-bottom-width:0;border-bottom-right-radius:calc(.25rem - 1px);border-bottom-left-radius:calc(.25rem - 1px)}.card>.card-header+.list-group,.card>.list-group+.card-footer{border-top:0}.card-body{flex:1 1 auto;padding:1rem 1rem}.card-title{margin-bottom:.5rem}.card-subtitle{margin-top:-.25rem;margin-bottom:0}.card-text:last-child{margin-bottom:0}.card-link:hover{text-decoration:none}.card-link+.card-link{margin-left:1rem}.card-header{padding:.5rem 1rem;margin-bottom:0;background-color:rgba(29,45,53,0.03);border-bottom:1px solid #e9ecef}.card-header:first-child{border-radius:calc(.25rem - 1px) calc(.25rem - 1px) 0 0}.card-footer{padding:.5rem 1rem;background-color:rgba(29,45,53,0.03);border-top:1px solid #e9ecef}.card-footer:last-child{border-radius:0 0 calc(.25rem - 1px) calc(.25rem - 1px)}.card-header-tabs{margin-right:-.5rem;margin-bottom:-.5rem;margin-left:-.5rem;border-bottom:0}.card-header-pills{margin-right:-.5rem;margin-left:-.5rem}.card-img-overlay{position:absolute;top:0;right:0;bottom:0;left:0;padding:1rem;border-radius:calc(.25rem - 1px)}.card-img,.card-img-top,.card-img-bottom{width:100%}.card-img,.card-img-top{border-top-left-radius:calc(.25rem - 1px);border-top-right-radius:calc(.25rem - 1px)}.card-img,.card-img-bottom{border-bottom-right-radius:calc(.25rem - 1px);border-bottom-left-radius:calc(.25rem - 1px)}.card-group>.card{margin-bottom:48px}@media (min-width: 576px){.card-group{display:flex;flex-flow:row wrap}.card-group>.card{flex:1 0 0%;margin-bottom:0}.card-group>.card+.card{margin-left:0;border-left:0}.card-group>.card:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.card-group>.card:not(:last-child) .card-img-top,.card-group>.card:not(:last-child) .card-header{border-top-right-radius:0}.card-group>.card:not(:last-child) .card-img-bottom,.card-group>.card:not(:last-child) .card-footer{border-bottom-right-radius:0}.card-group>.card:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.card-group>.card:not(:first-child) .card-img-top,.card-group>.card:not(:first-child) .card-header{border-top-left-radius:0}.card-group>.card:not(:first-child) .card-img-bottom,.card-group>.card:not(:first-child) .card-footer{border-bottom-left-radius:0}}.pagination{display:flex;padding-left:0;list-style:none}.page-link{position:relative;display:block;color:#45458c;background-color:#fff;border:1px solid #d4d4d4;transition:color 0.15s ease-in-out,background-color 0.15s ease-in-out,border-color 0.15s ease-in-out,box-shadow 0.15s ease-in-out}@media (prefers-reduced-motion: reduce){.page-link{transition:none}}.page-link:hover{z-index:2;color:#373770;background-color:#e9ecef;border-color:#d4d4d4}.page-link:focus{z-index:3;color:#373770;background-color:#e9ecef;outline:0;box-shadow:0 0 0 .25rem rgba(69,69,140,0.25)}.page-item:not(:first-child) .page-link{margin-left:-1px}.page-item.active .page-link{z-index:3;color:#fff;background-color:#45458c;border-color:#45458c}.page-item.disabled .page-link{color:#6c757d;pointer-events:none;background-color:#fff;border-color:#d4d4d4}.page-link{padding:.375rem .75rem}.page-item:first-child .page-link{border-top-left-radius:.25rem;border-bottom-left-radius:.25rem}.page-item:last-child .page-link{border-top-right-radius:.25rem;border-bottom-right-radius:.25rem}.pagination-lg .page-link{padding:.75rem 1.5rem;font-size:1rem}.pagination-lg .page-item:first-child .page-link{border-top-left-radius:.3rem;border-bottom-left-radius:.3rem}.pagination-lg .page-item:last-child .page-link{border-top-right-radius:.3rem;border-bottom-right-radius:.3rem}.pagination-sm .page-link{padding:.25rem .5rem;font-size:.875rem}.pagination-sm .page-item:first-child .page-link{border-top-left-radius:.2rem;border-bottom-left-radius:.2rem}.pagination-sm .page-item:last-child .page-link{border-top-right-radius:.2rem;border-bottom-right-radius:.2rem}.clearfix::after{display:block;clear:both;content:""}.link-primary{color:#45458c}.link-primary:hover,.link-primary:focus{color:#373770}.link-secondary{color:#6c757d}.link-secondary:hover,.link-secondary:focus{color:#565e64}.link-success{color:#198754}.link-success:hover,.link-success:focus{color:#146c43}.link-info{color:#0dcaf0}.link-info:hover,.link-info:focus{color:#3dd5f3}.link-warning{color:#ffe000}.link-warning:hover,.link-warning:focus{color:#ffe633}.link-danger{color:#dc3545}.link-danger:hover,.link-danger:focus{color:#b02a37}.link-light{color:#fbfffe}.link-light:hover,.link-light:focus{color:#fcfffe}.link-dark{color:#1e1e21}.link-dark:hover,.link-dark:focus{color:#18181a}.ratio{position:relative;width:100%}.ratio::before{display:block;padding-top:var(--bs-aspect-ratio);content:""}.ratio>*{position:absolute;top:0;left:0;width:100%;height:100%}.ratio-1x1{--bs-aspect-ratio: 100%}.ratio-4x3{--bs-aspect-ratio: calc(3 / 4 * 100%)}.ratio-16x9{--bs-aspect-ratio: calc(9 / 16 * 100%)}.ratio-21x9{--bs-aspect-ratio: calc(9 / 21 * 100%)}.fixed-top{position:fixed;top:0;right:0;left:0;z-index:1030}.fixed-bottom{position:fixed;right:0;bottom:0;left:0;z-index:1030}.sticky-top{position:sticky;top:0;z-index:1020}@media (min-width: 576px){.sticky-sm-top{position:sticky;top:0;z-index:1020}}@media (min-width: 768px){.sticky-md-top{position:sticky;top:0;z-index:1020}}@media (min-width: 992px){.sticky-lg-top{position:sticky;top:0;z-index:1020}}@media (min-width: 1200px){.sticky-xl-top{position:sticky;top:0;z-index:1020}}@media (min-width: 1400px){.sticky-xxl-top{position:sticky;top:0;z-index:1020}}.visually-hidden,.visually-hidden-focusable:not(:focus):not(:focus-within){position:absolute !important;width:1px !important;height:1px !important;padding:0 !important;margin:-1px !important;overflow:hidden !important;clip:rect(0, 0, 0, 0) !important;white-space:nowrap !important;border:0 !important}.stretched-link::after{position:absolute;top:0;right:0;bottom:0;left:0;z-index:1;content:""}.text-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.align-baseline{vertical-align:baseline !important}.align-top{vertical-align:top !important}.align-middle{vertical-align:middle !important}.align-bottom{vertical-align:bottom !important}.align-text-bottom{vertical-align:text-bottom !important}.align-text-top{vertical-align:text-top !important}.float-start{float:left !important}.float-end{float:right !important}.float-none{float:none !important}.overflow-auto{overflow:auto !important}.overflow-hidden{overflow:hidden !important}.overflow-visible{overflow:visible !important}.overflow-scroll{overflow:scroll !important}.d-inline{display:inline !important}.d-inline-block{display:inline-block !important}.d-block{display:block !important}.d-grid{display:grid !important}.d-table{display:table !important}.d-table-row{display:table-row !important}.d-table-cell{display:table-cell !important}.d-flex{display:flex !important}.d-inline-flex{display:inline-flex !important}.d-none{display:none !important}.shadow{box-shadow:0 0.5rem 1rem rgba(29,45,53,0.15) !important}.shadow-sm{box-shadow:0 0.125rem 0.25rem rgba(29,45,53,0.075) !important}.shadow-lg{box-shadow:0 1rem 3rem rgba(29,45,53,0.175) !important}.shadow-none{box-shadow:none !important}.position-static{position:static !important}.position-relative{position:relative !important}.position-absolute{position:absolute !important}.position-fixed{position:fixed !important}.position-sticky{position:sticky !important}.top-0{top:0 !important}.top-50{top:50% !important}.top-100{top:100% !important}.bottom-0{bottom:0 !important}.bottom-50{bottom:50% !important}.bottom-100{bottom:100% !important}.start-0{left:0 !important}.start-50{left:50% !important}.start-100{left:100% !important}.end-0{right:0 !important}.end-50{right:50% !important}.end-100{right:100% !important}.translate-middle{transform:translate(-50%, -50%) !important}.translate-middle-x{transform:translateX(-50%) !important}.translate-middle-y{transform:translateY(-50%) !important}.border{border:1px solid #e9ecef !important}.border-0{border:0 !important}.border-top{border-top:1px solid #e9ecef !important}.border-top-0{border-top:0 !important}.border-end{border-right:1px solid #e9ecef !important}.border-end-0{border-right:0 !important}.border-bottom{border-bottom:1px solid #e9ecef !important}.border-bottom-0{border-bottom:0 !important}.border-start{border-left:1px solid #e9ecef !important}.border-start-0{border-left:0 !important}.border-primary{border-color:#45458c !important}.border-secondary{border-color:#6c757d !important}.border-success{border-color:#198754 !important}.border-info{border-color:#0dcaf0 !important}.border-warning{border-color:#ffe000 !important}.border-danger{border-color:#dc3545 !important}.border-light{border-color:#fbfffe !important}.border-dark{border-color:#1e1e21 !important}.border-white{border-color:#fff !important}.border-1{border-width:1px !important}.border-2{border-width:2px !important}.border-3{border-width:3px !important}.border-4{border-width:4px !important}.border-5{border-width:5px !important}.w-25{width:25% !important}.w-50{width:50% !important}.w-75{width:75% !important}.w-100{width:100% !important}.w-auto{width:auto !important}.mw-100{max-width:100% !important}.vw-100{width:100vw !important}.min-vw-100{min-width:100vw !important}.h-25{height:25% !important}.h-50{height:50% !important}.h-75{height:75% !important}.h-100{height:100% !important}.h-auto{height:auto !important}.mh-100{max-height:100% !important}.vh-100{height:100vh !important}.min-vh-100{min-height:100vh !important}.flex-fill{flex:1 1 auto !important}.flex-row{flex-direction:row !important}.flex-column{flex-direction:column !important}.flex-row-reverse{flex-direction:row-reverse !important}.flex-column-reverse{flex-direction:column-reverse !important}.flex-grow-0{flex-grow:0 !important}.flex-grow-1{flex-grow:1 !important}.flex-shrink-0{flex-shrink:0 !important}.flex-shrink-1{flex-shrink:1 !important}.flex-wrap{flex-wrap:wrap !important}.flex-nowrap{flex-wrap:nowrap !important}.flex-wrap-reverse{flex-wrap:wrap-reverse !important}.gap-0{gap:0 !important}.gap-1{gap:.25rem !important}.gap-2{gap:.5rem !important}.gap-3{gap:1rem !important}.gap-4{gap:1.5rem !important}.gap-5{gap:3rem !important}.justify-content-start{justify-content:flex-start !important}.justify-content-end{justify-content:flex-end !important}.justify-content-center{justify-content:center !important}.justify-content-between{justify-content:space-between !important}.justify-content-around{justify-content:space-around !important}.justify-content-evenly{justify-content:space-evenly !important}.align-items-start{align-items:flex-start !important}.align-items-end{align-items:flex-end !important}.align-items-center{align-items:center !important}.align-items-baseline{align-items:baseline !important}.align-items-stretch{align-items:stretch !important}.align-content-start{align-content:flex-start !important}.align-content-end{align-content:flex-end !important}.align-content-center{align-content:center !important}.align-content-between{align-content:space-between !important}.align-content-around{align-content:space-around !important}.align-content-stretch{align-content:stretch !important}.align-self-auto{align-self:auto !important}.align-self-start{align-self:flex-start !important}.align-self-end{align-self:flex-end !important}.align-self-center{align-self:center !important}.align-self-baseline{align-self:baseline !important}.align-self-stretch{align-self:stretch !important}.order-first{order:-1 !important}.order-0{order:0 !important}.order-1{order:1 !important}.order-2{order:2 !important}.order-3{order:3 !important}.order-4{order:4 !important}.order-5{order:5 !important}.order-last{order:6 !important}.m-0{margin:0 !important}.m-1{margin:.25rem !important}.m-2{margin:.5rem !important}.m-3{margin:1rem !important}.m-4{margin:1.5rem !important}.m-5{margin:3rem !important}.m-auto{margin:auto !important}.mx-0{margin-right:0 !important;margin-left:0 !important}.mx-1{margin-right:.25rem !important;margin-left:.25rem !important}.mx-2{margin-right:.5rem !important;margin-left:.5rem !important}.mx-3{margin-right:1rem !important;margin-left:1rem !important}.mx-4{margin-right:1.5rem !important;margin-left:1.5rem !important}.mx-5{margin-right:3rem !important;margin-left:3rem !important}.mx-auto{margin-right:auto !important;margin-left:auto !important}.my-0{margin-top:0 !important;margin-bottom:0 !important}.my-1{margin-top:.25rem !important;margin-bottom:.25rem !important}.my-2{margin-top:.5rem !important;margin-bottom:.5rem !important}.my-3{margin-top:1rem !important;margin-bottom:1rem !important}.my-4{margin-top:1.5rem !important;margin-bottom:1.5rem !important}.my-5{margin-top:3rem !important;margin-bottom:3rem !important}.my-auto{margin-top:auto !important;margin-bottom:auto !important}.mt-0{margin-top:0 !important}.mt-1{margin-top:.25rem !important}.mt-2{margin-top:.5rem !important}.mt-3{margin-top:1rem !important}.mt-4{margin-top:1.5rem !important}.mt-5{margin-top:3rem !important}.mt-auto{margin-top:auto !important}.me-0{margin-right:0 !important}.me-1{margin-right:.25rem !important}.me-2{margin-right:.5rem !important}.me-3{margin-right:1rem !important}.me-4{margin-right:1.5rem !important}.me-5{margin-right:3rem !important}.me-auto{margin-right:auto !important}.mb-0{margin-bottom:0 !important}.mb-1{margin-bottom:.25rem !important}.mb-2{margin-bottom:.5rem !important}.mb-3{margin-bottom:1rem !important}.mb-4{margin-bottom:1.5rem !important}.mb-5{margin-bottom:3rem !important}.mb-auto{margin-bottom:auto !important}.ms-0{margin-left:0 !important}.ms-1{margin-left:.25rem !important}.ms-2{margin-left:.5rem !important}.ms-3{margin-left:1rem !important}.ms-4{margin-left:1.5rem !important}.ms-5{margin-left:3rem !important}.ms-auto{margin-left:auto !important}.m-n1{margin:-.25rem !important}.m-n2{margin:-.5rem !important}.m-n3{margin:-1rem !important}.m-n4{margin:-1.5rem !important}.m-n5{margin:-3rem !important}.mx-n1{margin-right:-.25rem !important;margin-left:-.25rem !important}.mx-n2{margin-right:-.5rem !important;margin-left:-.5rem !important}.mx-n3{margin-right:-1rem !important;margin-left:-1rem !important}.mx-n4{margin-right:-1.5rem !important;margin-left:-1.5rem !important}.mx-n5{margin-right:-3rem !important;margin-left:-3rem !important}.my-n1{margin-top:-.25rem !important;margin-bottom:-.25rem !important}.my-n2{margin-top:-.5rem !important;margin-bottom:-.5rem !important}.my-n3{margin-top:-1rem !important;margin-bottom:-1rem !important}.my-n4{margin-top:-1.5rem !important;margin-bottom:-1.5rem !important}.my-n5{margin-top:-3rem !important;margin-bottom:-3rem !important}.mt-n1{margin-top:-.25rem !important}.mt-n2{margin-top:-.5rem !important}.mt-n3{margin-top:-1rem !important}.mt-n4{margin-top:-1.5rem !important}.mt-n5{margin-top:-3rem !important}.me-n1{margin-right:-.25rem !important}.me-n2{margin-right:-.5rem !important}.me-n3{margin-right:-1rem !important}.me-n4{margin-right:-1.5rem !important}.me-n5{margin-right:-3rem !important}.mb-n1{margin-bottom:-.25rem !important}.mb-n2{margin-bottom:-.5rem !important}.mb-n3{margin-bottom:-1rem !important}.mb-n4{margin-bottom:-1.5rem !important}.mb-n5{margin-bottom:-3rem !important}.ms-n1{margin-left:-.25rem !important}.ms-n2{margin-left:-.5rem !important}.ms-n3{margin-left:-1rem !important}.ms-n4{margin-left:-1.5rem !important}.ms-n5{margin-left:-3rem !important}.p-0{padding:0 !important}.p-1{padding:.25rem !important}.p-2{padding:.5rem !important}.p-3{padding:1rem !important}.p-4{padding:1.5rem !important}.p-5{padding:3rem !important}.px-0{padding-right:0 !important;padding-left:0 !important}.px-1{padding-right:.25rem !important;padding-left:.25rem !important}.px-2{padding-right:.5rem !important;padding-left:.5rem !important}.px-3{padding-right:1rem !important;padding-left:1rem !important}.px-4{padding-right:1.5rem !important;padding-left:1.5rem !important}.px-5{padding-right:3rem !important;padding-left:3rem !important}.py-0{padding-top:0 !important;padding-bottom:0 !important}.py-1{padding-top:.25rem !important;padding-bottom:.25rem !important}.py-2{padding-top:.5rem !important;padding-bottom:.5rem !important}.py-3{padding-top:1rem !important;padding-bottom:1rem !important}.py-4{padding-top:1.5rem !important;padding-bottom:1.5rem !important}.py-5{padding-top:3rem !important;padding-bottom:3rem !important}.pt-0{padding-top:0 !important}.pt-1{padding-top:.25rem !important}.pt-2{padding-top:.5rem !important}.pt-3{padding-top:1rem !important}.pt-4{padding-top:1.5rem !important}.pt-5{padding-top:3rem !important}.pe-0{padding-right:0 !important}.pe-1{padding-right:.25rem !important}.pe-2{padding-right:.5rem !important}.pe-3{padding-right:1rem !important}.pe-4{padding-right:1.5rem !important}.pe-5{padding-right:3rem !important}.pb-0{padding-bottom:0 !important}.pb-1{padding-bottom:.25rem !important}.pb-2{padding-bottom:.5rem !important}.pb-3{padding-bottom:1rem !important}.pb-4{padding-bottom:1.5rem !important}.pb-5{padding-bottom:3rem !important}.ps-0{padding-left:0 !important}.ps-1{padding-left:.25rem !important}.ps-2{padding-left:.5rem !important}.ps-3{padding-left:1rem !important}.ps-4{padding-left:1.5rem !important}.ps-5{padding-left:3rem !important}.font-monospace{font-family:var(--bs-font-monospace) !important}.fs-1{font-size:calc(1.325rem + .9vw) !important}.fs-2{font-size:calc(1.275rem + .3vw) !important}.fs-3{font-size:1.125rem !important}.fs-4{font-size:1rem !important}.fs-5{font-size:.875rem !important}.fs-6{font-size:.625rem !important}.fst-italic{font-style:italic !important}.fst-normal{font-style:normal !important}.fw-light{font-weight:300 !important}.fw-lighter{font-weight:lighter !important}.fw-normal{font-weight:400 !important}.fw-bold{font-weight:700 !important}.fw-bolder{font-weight:bolder !important}.lh-1{line-height:1 !important}.lh-sm{line-height:1.25 !important}.lh-base{line-height:1.5 !important}.lh-lg{line-height:2 !important}.text-start{text-align:left !important}.text-end{text-align:right !important}.text-center{text-align:center !important}.text-decoration-none{text-decoration:none !important}.text-decoration-underline{text-decoration:underline !important}.text-decoration-line-through{text-decoration:line-through !important}.text-lowercase{text-transform:lowercase !important}.text-uppercase{text-transform:uppercase !important}.text-capitalize{text-transform:capitalize !important}.text-wrap{white-space:normal !important}.text-nowrap{white-space:nowrap !important}.text-break{word-wrap:break-word !important;word-break:break-word !important}.text-primary{color:#45458c !important}.text-secondary{color:#6c757d !important}.text-success{color:#198754 !important}.text-info{color:#0dcaf0 !important}.text-warning{color:#ffe000 !important}.text-danger{color:#dc3545 !important}.text-light{color:#fbfffe !important}.text-dark{color:#1e1e21 !important}.text-white{color:#fff !important}.text-body{color:#1d2d35 !important}.text-muted{color:#6c757d !important}.text-black-50{color:rgba(29,45,53,0.5) !important}.text-white-50{color:rgba(255,255,255,0.5) !important}.text-reset{color:inherit !important}.bg-primary{background-color:#45458c !important}.bg-secondary{background-color:#6c757d !important}.bg-success{background-color:#198754 !important}.bg-info{background-color:#0dcaf0 !important}.bg-warning{background-color:#ffe000 !important}.bg-danger{background-color:#dc3545 !important}.bg-light{background-color:#fbfffe !important}.bg-dark{background-color:#1e1e21 !important}.bg-body{background-color:#fff !important}.bg-white{background-color:#fff !important}.bg-transparent{background-color:rgba(0,0,0,0) !important}.bg-gradient{background-image:var(--bs-gradient) !important}.user-select-all{user-select:all !important}.user-select-auto{user-select:auto !important}.user-select-none{user-select:none !important}.pe-none{pointer-events:none !important}.pe-auto{pointer-events:auto !important}.rounded{border-radius:.25rem !important}.rounded-0{border-radius:0 !important}.rounded-1{border-radius:.2rem !important}.rounded-2{border-radius:.25rem !important}.rounded-3{border-radius:.3rem !important}.rounded-circle{border-radius:50% !important}.rounded-pill{border-radius:50rem !important}.rounded-top{border-top-left-radius:.25rem !important;border-top-right-radius:.25rem !important}.rounded-end{border-top-right-radius:.25rem !important;border-bottom-right-radius:.25rem !important}.rounded-bottom{border-bottom-right-radius:.25rem !important;border-bottom-left-radius:.25rem !important}.rounded-start{border-bottom-left-radius:.25rem !important;border-top-left-radius:.25rem !important}.visible{visibility:visible !important}.invisible{visibility:hidden !important}@media (min-width: 576px){.float-sm-start{float:left !important}.float-sm-end{float:right !important}.float-sm-none{float:none !important}.d-sm-inline{display:inline !important}.d-sm-inline-block{display:inline-block !important}.d-sm-block{display:block !important}.d-sm-grid{display:grid !important}.d-sm-table{display:table !important}.d-sm-table-row{display:table-row !important}.d-sm-table-cell{display:table-cell !important}.d-sm-flex{display:flex !important}.d-sm-inline-flex{display:inline-flex !important}.d-sm-none{display:none !important}.flex-sm-fill{flex:1 1 auto !important}.flex-sm-row{flex-direction:row !important}.flex-sm-column{flex-direction:column !important}.flex-sm-row-reverse{flex-direction:row-reverse !important}.flex-sm-column-reverse{flex-direction:column-reverse !important}.flex-sm-grow-0{flex-grow:0 !important}.flex-sm-grow-1{flex-grow:1 !important}.flex-sm-shrink-0{flex-shrink:0 !important}.flex-sm-shrink-1{flex-shrink:1 !important}.flex-sm-wrap{flex-wrap:wrap !important}.flex-sm-nowrap{flex-wrap:nowrap !important}.flex-sm-wrap-reverse{flex-wrap:wrap-reverse !important}.gap-sm-0{gap:0 !important}.gap-sm-1{gap:.25rem !important}.gap-sm-2{gap:.5rem !important}.gap-sm-3{gap:1rem !important}.gap-sm-4{gap:1.5rem !important}.gap-sm-5{gap:3rem !important}.justify-content-sm-start{justify-content:flex-start !important}.justify-content-sm-end{justify-content:flex-end !important}.justify-content-sm-center{justify-content:center !important}.justify-content-sm-between{justify-content:space-between !important}.justify-content-sm-around{justify-content:space-around !important}.justify-content-sm-evenly{justify-content:space-evenly !important}.align-items-sm-start{align-items:flex-start !important}.align-items-sm-end{align-items:flex-end !important}.align-items-sm-center{align-items:center !important}.align-items-sm-baseline{align-items:baseline !important}.align-items-sm-stretch{align-items:stretch !important}.align-content-sm-start{align-content:flex-start !important}.align-content-sm-end{align-content:flex-end !important}.align-content-sm-center{align-content:center !important}.align-content-sm-between{align-content:space-between !important}.align-content-sm-around{align-content:space-around !important}.align-content-sm-stretch{align-content:stretch !important}.align-self-sm-auto{align-self:auto !important}.align-self-sm-start{align-self:flex-start !important}.align-self-sm-end{align-self:flex-end !important}.align-self-sm-center{align-self:center !important}.align-self-sm-baseline{align-self:baseline !important}.align-self-sm-stretch{align-self:stretch !important}.order-sm-first{order:-1 !important}.order-sm-0{order:0 !important}.order-sm-1{order:1 !important}.order-sm-2{order:2 !important}.order-sm-3{order:3 !important}.order-sm-4{order:4 !important}.order-sm-5{order:5 !important}.order-sm-last{order:6 !important}.m-sm-0{margin:0 !important}.m-sm-1{margin:.25rem !important}.m-sm-2{margin:.5rem !important}.m-sm-3{margin:1rem !important}.m-sm-4{margin:1.5rem !important}.m-sm-5{margin:3rem !important}.m-sm-auto{margin:auto !important}.mx-sm-0{margin-right:0 !important;margin-left:0 !important}.mx-sm-1{margin-right:.25rem !important;margin-left:.25rem !important}.mx-sm-2{margin-right:.5rem !important;margin-left:.5rem !important}.mx-sm-3{margin-right:1rem !important;margin-left:1rem !important}.mx-sm-4{margin-right:1.5rem !important;margin-left:1.5rem !important}.mx-sm-5{margin-right:3rem !important;margin-left:3rem !important}.mx-sm-auto{margin-right:auto !important;margin-left:auto !important}.my-sm-0{margin-top:0 !important;margin-bottom:0 !important}.my-sm-1{margin-top:.25rem !important;margin-bottom:.25rem !important}.my-sm-2{margin-top:.5rem !important;margin-bottom:.5rem !important}.my-sm-3{margin-top:1rem !important;margin-bottom:1rem !important}.my-sm-4{margin-top:1.5rem !important;margin-bottom:1.5rem !important}.my-sm-5{margin-top:3rem !important;margin-bottom:3rem !important}.my-sm-auto{margin-top:auto !important;margin-bottom:auto !important}.mt-sm-0{margin-top:0 !important}.mt-sm-1{margin-top:.25rem !important}.mt-sm-2{margin-top:.5rem !important}.mt-sm-3{margin-top:1rem !important}.mt-sm-4{margin-top:1.5rem !important}.mt-sm-5{margin-top:3rem !important}.mt-sm-auto{margin-top:auto !important}.me-sm-0{margin-right:0 !important}.me-sm-1{margin-right:.25rem !important}.me-sm-2{margin-right:.5rem !important}.me-sm-3{margin-right:1rem !important}.me-sm-4{margin-right:1.5rem !important}.me-sm-5{margin-right:3rem !important}.me-sm-auto{margin-right:auto !important}.mb-sm-0{margin-bottom:0 !important}.mb-sm-1{margin-bottom:.25rem !important}.mb-sm-2{margin-bottom:.5rem !important}.mb-sm-3{margin-bottom:1rem !important}.mb-sm-4{margin-bottom:1.5rem !important}.mb-sm-5{margin-bottom:3rem !important}.mb-sm-auto{margin-bottom:auto !important}.ms-sm-0{margin-left:0 !important}.ms-sm-1{margin-left:.25rem !important}.ms-sm-2{margin-left:.5rem !important}.ms-sm-3{margin-left:1rem !important}.ms-sm-4{margin-left:1.5rem !important}.ms-sm-5{margin-left:3rem !important}.ms-sm-auto{margin-left:auto !important}.m-sm-n1{margin:-.25rem !important}.m-sm-n2{margin:-.5rem !important}.m-sm-n3{margin:-1rem !important}.m-sm-n4{margin:-1.5rem !important}.m-sm-n5{margin:-3rem !important}.mx-sm-n1{margin-right:-.25rem !important;margin-left:-.25rem !important}.mx-sm-n2{margin-right:-.5rem !important;margin-left:-.5rem !important}.mx-sm-n3{margin-right:-1rem !important;margin-left:-1rem !important}.mx-sm-n4{margin-right:-1.5rem !important;margin-left:-1.5rem !important}.mx-sm-n5{margin-right:-3rem !important;margin-left:-3rem !important}.my-sm-n1{margin-top:-.25rem !important;margin-bottom:-.25rem !important}.my-sm-n2{margin-top:-.5rem !important;margin-bottom:-.5rem !important}.my-sm-n3{margin-top:-1rem !important;margin-bottom:-1rem !important}.my-sm-n4{margin-top:-1.5rem !important;margin-bottom:-1.5rem !important}.my-sm-n5{margin-top:-3rem !important;margin-bottom:-3rem !important}.mt-sm-n1{margin-top:-.25rem !important}.mt-sm-n2{margin-top:-.5rem !important}.mt-sm-n3{margin-top:-1rem !important}.mt-sm-n4{margin-top:-1.5rem !important}.mt-sm-n5{margin-top:-3rem !important}.me-sm-n1{margin-right:-.25rem !important}.me-sm-n2{margin-right:-.5rem !important}.me-sm-n3{margin-right:-1rem !important}.me-sm-n4{margin-right:-1.5rem !important}.me-sm-n5{margin-right:-3rem !important}.mb-sm-n1{margin-bottom:-.25rem !important}.mb-sm-n2{margin-bottom:-.5rem !important}.mb-sm-n3{margin-bottom:-1rem !important}.mb-sm-n4{margin-bottom:-1.5rem !important}.mb-sm-n5{margin-bottom:-3rem !important}.ms-sm-n1{margin-left:-.25rem !important}.ms-sm-n2{margin-left:-.5rem !important}.ms-sm-n3{margin-left:-1rem !important}.ms-sm-n4{margin-left:-1.5rem !important}.ms-sm-n5{margin-left:-3rem !important}.p-sm-0{padding:0 !important}.p-sm-1{padding:.25rem !important}.p-sm-2{padding:.5rem !important}.p-sm-3{padding:1rem !important}.p-sm-4{padding:1.5rem !important}.p-sm-5{padding:3rem !important}.px-sm-0{padding-right:0 !important;padding-left:0 !important}.px-sm-1{padding-right:.25rem !important;padding-left:.25rem !important}.px-sm-2{padding-right:.5rem !important;padding-left:.5rem !important}.px-sm-3{padding-right:1rem !important;padding-left:1rem !important}.px-sm-4{padding-right:1.5rem !important;padding-left:1.5rem !important}.px-sm-5{padding-right:3rem !important;padding-left:3rem !important}.py-sm-0{padding-top:0 !important;padding-bottom:0 !important}.py-sm-1{padding-top:.25rem !important;padding-bottom:.25rem !important}.py-sm-2{padding-top:.5rem !important;padding-bottom:.5rem !important}.py-sm-3{padding-top:1rem !important;padding-bottom:1rem !important}.py-sm-4{padding-top:1.5rem !important;padding-bottom:1.5rem !important}.py-sm-5{padding-top:3rem !important;padding-bottom:3rem !important}.pt-sm-0{padding-top:0 !important}.pt-sm-1{padding-top:.25rem !important}.pt-sm-2{padding-top:.5rem !important}.pt-sm-3{padding-top:1rem !important}.pt-sm-4{padding-top:1.5rem !important}.pt-sm-5{padding-top:3rem !important}.pe-sm-0{padding-right:0 !important}.pe-sm-1{padding-right:.25rem !important}.pe-sm-2{padding-right:.5rem !important}.pe-sm-3{padding-right:1rem !important}.pe-sm-4{padding-right:1.5rem !important}.pe-sm-5{padding-right:3rem !important}.pb-sm-0{padding-bottom:0 !important}.pb-sm-1{padding-bottom:.25rem !important}.pb-sm-2{padding-bottom:.5rem !important}.pb-sm-3{padding-bottom:1rem !important}.pb-sm-4{padding-bottom:1.5rem !important}.pb-sm-5{padding-bottom:3rem !important}.ps-sm-0{padding-left:0 !important}.ps-sm-1{padding-left:.25rem !important}.ps-sm-2{padding-left:.5rem !important}.ps-sm-3{padding-left:1rem !important}.ps-sm-4{padding-left:1.5rem !important}.ps-sm-5{padding-left:3rem !important}.text-sm-start{text-align:left !important}.text-sm-end{text-align:right !important}.text-sm-center{text-align:center !important}}@media (min-width: 768px){.float-md-start{float:left !important}.float-md-end{float:right !important}.float-md-none{float:none !important}.d-md-inline{display:inline !important}.d-md-inline-block{display:inline-block !important}.d-md-block{display:block !important}.d-md-grid{display:grid !important}.d-md-table{display:table !important}.d-md-table-row{display:table-row !important}.d-md-table-cell{display:table-cell !important}.d-md-flex{display:flex !important}.d-md-inline-flex{display:inline-flex !important}.d-md-none{display:none !important}.flex-md-fill{flex:1 1 auto !important}.flex-md-row{flex-direction:row !important}.flex-md-column{flex-direction:column !important}.flex-md-row-reverse{flex-direction:row-reverse !important}.flex-md-column-reverse{flex-direction:column-reverse !important}.flex-md-grow-0{flex-grow:0 !important}.flex-md-grow-1{flex-grow:1 !important}.flex-md-shrink-0{flex-shrink:0 !important}.flex-md-shrink-1{flex-shrink:1 !important}.flex-md-wrap{flex-wrap:wrap !important}.flex-md-nowrap{flex-wrap:nowrap !important}.flex-md-wrap-reverse{flex-wrap:wrap-reverse !important}.gap-md-0{gap:0 !important}.gap-md-1{gap:.25rem !important}.gap-md-2{gap:.5rem !important}.gap-md-3{gap:1rem !important}.gap-md-4{gap:1.5rem !important}.gap-md-5{gap:3rem !important}.justify-content-md-start{justify-content:flex-start !important}.justify-content-md-end{justify-content:flex-end !important}.justify-content-md-center{justify-content:center !important}.justify-content-md-between{justify-content:space-between !important}.justify-content-md-around{justify-content:space-around !important}.justify-content-md-evenly{justify-content:space-evenly !important}.align-items-md-start{align-items:flex-start !important}.align-items-md-end{align-items:flex-end !important}.align-items-md-center{align-items:center !important}.align-items-md-baseline{align-items:baseline !important}.align-items-md-stretch{align-items:stretch !important}.align-content-md-start{align-content:flex-start !important}.align-content-md-end{align-content:flex-end !important}.align-content-md-center{align-content:center !important}.align-content-md-between{align-content:space-between !important}.align-content-md-around{align-content:space-around !important}.align-content-md-stretch{align-content:stretch !important}.align-self-md-auto{align-self:auto !important}.align-self-md-start{align-self:flex-start !important}.align-self-md-end{align-self:flex-end !important}.align-self-md-center{align-self:center !important}.align-self-md-baseline{align-self:baseline !important}.align-self-md-stretch{align-self:stretch !important}.order-md-first{order:-1 !important}.order-md-0{order:0 !important}.order-md-1{order:1 !important}.order-md-2{order:2 !important}.order-md-3{order:3 !important}.order-md-4{order:4 !important}.order-md-5{order:5 !important}.order-md-last{order:6 !important}.m-md-0{margin:0 !important}.m-md-1{margin:.25rem !important}.m-md-2{margin:.5rem !important}.m-md-3{margin:1rem !important}.m-md-4{margin:1.5rem !important}.m-md-5{margin:3rem !important}.m-md-auto{margin:auto !important}.mx-md-0{margin-right:0 !important;margin-left:0 !important}.mx-md-1{margin-right:.25rem !important;margin-left:.25rem !important}.mx-md-2{margin-right:.5rem !important;margin-left:.5rem !important}.mx-md-3{margin-right:1rem !important;margin-left:1rem !important}.mx-md-4{margin-right:1.5rem !important;margin-left:1.5rem !important}.mx-md-5{margin-right:3rem !important;margin-left:3rem !important}.mx-md-auto{margin-right:auto !important;margin-left:auto !important}.my-md-0{margin-top:0 !important;margin-bottom:0 !important}.my-md-1{margin-top:.25rem !important;margin-bottom:.25rem !important}.my-md-2{margin-top:.5rem !important;margin-bottom:.5rem !important}.my-md-3{margin-top:1rem !important;margin-bottom:1rem !important}.my-md-4{margin-top:1.5rem !important;margin-bottom:1.5rem !important}.my-md-5{margin-top:3rem !important;margin-bottom:3rem !important}.my-md-auto{margin-top:auto !important;margin-bottom:auto !important}.mt-md-0{margin-top:0 !important}.mt-md-1{margin-top:.25rem !important}.mt-md-2{margin-top:.5rem !important}.mt-md-3{margin-top:1rem !important}.mt-md-4{margin-top:1.5rem !important}.mt-md-5{margin-top:3rem !important}.mt-md-auto{margin-top:auto !important}.me-md-0{margin-right:0 !important}.me-md-1{margin-right:.25rem !important}.me-md-2{margin-right:.5rem !important}.me-md-3{margin-right:1rem !important}.me-md-4{margin-right:1.5rem !important}.me-md-5{margin-right:3rem !important}.me-md-auto{margin-right:auto !important}.mb-md-0{margin-bottom:0 !important}.mb-md-1{margin-bottom:.25rem !important}.mb-md-2{margin-bottom:.5rem !important}.mb-md-3{margin-bottom:1rem !important}.mb-md-4{margin-bottom:1.5rem !important}.mb-md-5{margin-bottom:3rem !important}.mb-md-auto{margin-bottom:auto !important}.ms-md-0{margin-left:0 !important}.ms-md-1{margin-left:.25rem !important}.ms-md-2{margin-left:.5rem !important}.ms-md-3{margin-left:1rem !important}.ms-md-4{margin-left:1.5rem !important}.ms-md-5{margin-left:3rem !important}.ms-md-auto{margin-left:auto !important}.m-md-n1{margin:-.25rem !important}.m-md-n2{margin:-.5rem !important}.m-md-n3{margin:-1rem !important}.m-md-n4{margin:-1.5rem !important}.m-md-n5{margin:-3rem !important}.mx-md-n1{margin-right:-.25rem !important;margin-left:-.25rem !important}.mx-md-n2{margin-right:-.5rem !important;margin-left:-.5rem !important}.mx-md-n3{margin-right:-1rem !important;margin-left:-1rem !important}.mx-md-n4{margin-right:-1.5rem !important;margin-left:-1.5rem !important}.mx-md-n5{margin-right:-3rem !important;margin-left:-3rem !important}.my-md-n1{margin-top:-.25rem !important;margin-bottom:-.25rem !important}.my-md-n2{margin-top:-.5rem !important;margin-bottom:-.5rem !important}.my-md-n3{margin-top:-1rem !important;margin-bottom:-1rem !important}.my-md-n4{margin-top:-1.5rem !important;margin-bottom:-1.5rem !important}.my-md-n5{margin-top:-3rem !important;margin-bottom:-3rem !important}.mt-md-n1{margin-top:-.25rem !important}.mt-md-n2{margin-top:-.5rem !important}.mt-md-n3{margin-top:-1rem !important}.mt-md-n4{margin-top:-1.5rem !important}.mt-md-n5{margin-top:-3rem !important}.me-md-n1{margin-right:-.25rem !important}.me-md-n2{margin-right:-.5rem !important}.me-md-n3{margin-right:-1rem !important}.me-md-n4{margin-right:-1.5rem !important}.me-md-n5{margin-right:-3rem !important}.mb-md-n1{margin-bottom:-.25rem !important}.mb-md-n2{margin-bottom:-.5rem !important}.mb-md-n3{margin-bottom:-1rem !important}.mb-md-n4{margin-bottom:-1.5rem !important}.mb-md-n5{margin-bottom:-3rem !important}.ms-md-n1{margin-left:-.25rem !important}.ms-md-n2{margin-left:-.5rem !important}.ms-md-n3{margin-left:-1rem !important}.ms-md-n4{margin-left:-1.5rem !important}.ms-md-n5{margin-left:-3rem !important}.p-md-0{padding:0 !important}.p-md-1{padding:.25rem !important}.p-md-2{padding:.5rem !important}.p-md-3{padding:1rem !important}.p-md-4{padding:1.5rem !important}.p-md-5{padding:3rem !important}.px-md-0{padding-right:0 !important;padding-left:0 !important}.px-md-1{padding-right:.25rem !important;padding-left:.25rem !important}.px-md-2{padding-right:.5rem !important;padding-left:.5rem !important}.px-md-3{padding-right:1rem !important;padding-left:1rem !important}.px-md-4{padding-right:1.5rem !important;padding-left:1.5rem !important}.px-md-5{padding-right:3rem !important;padding-left:3rem !important}.py-md-0{padding-top:0 !important;padding-bottom:0 !important}.py-md-1{padding-top:.25rem !important;padding-bottom:.25rem !important}.py-md-2{padding-top:.5rem !important;padding-bottom:.5rem !important}.py-md-3{padding-top:1rem !important;padding-bottom:1rem !important}.py-md-4{padding-top:1.5rem !important;padding-bottom:1.5rem !important}.py-md-5{padding-top:3rem !important;padding-bottom:3rem !important}.pt-md-0{padding-top:0 !important}.pt-md-1{padding-top:.25rem !important}.pt-md-2{padding-top:.5rem !important}.pt-md-3{padding-top:1rem !important}.pt-md-4{padding-top:1.5rem !important}.pt-md-5{padding-top:3rem !important}.pe-md-0{padding-right:0 !important}.pe-md-1{padding-right:.25rem !important}.pe-md-2{padding-right:.5rem !important}.pe-md-3{padding-right:1rem !important}.pe-md-4{padding-right:1.5rem !important}.pe-md-5{padding-right:3rem !important}.pb-md-0{padding-bottom:0 !important}.pb-md-1{padding-bottom:.25rem !important}.pb-md-2{padding-bottom:.5rem !important}.pb-md-3{padding-bottom:1rem !important}.pb-md-4{padding-bottom:1.5rem !important}.pb-md-5{padding-bottom:3rem !important}.ps-md-0{padding-left:0 !important}.ps-md-1{padding-left:.25rem !important}.ps-md-2{padding-left:.5rem !important}.ps-md-3{padding-left:1rem !important}.ps-md-4{padding-left:1.5rem !important}.ps-md-5{padding-left:3rem !important}.text-md-start{text-align:left !important}.text-md-end{text-align:right !important}.text-md-center{text-align:center !important}}@media (min-width: 992px){.float-lg-start{float:left !important}.float-lg-end{float:right !important}.float-lg-none{float:none !important}.d-lg-inline{display:inline !important}.d-lg-inline-block{display:inline-block !important}.d-lg-block{display:block !important}.d-lg-grid{display:grid !important}.d-lg-table{display:table !important}.d-lg-table-row{display:table-row !important}.d-lg-table-cell{display:table-cell !important}.d-lg-flex{display:flex !important}.d-lg-inline-flex{display:inline-flex !important}.d-lg-none{display:none !important}.flex-lg-fill{flex:1 1 auto !important}.flex-lg-row{flex-direction:row !important}.flex-lg-column{flex-direction:column !important}.flex-lg-row-reverse{flex-direction:row-reverse !important}.flex-lg-column-reverse{flex-direction:column-reverse !important}.flex-lg-grow-0{flex-grow:0 !important}.flex-lg-grow-1{flex-grow:1 !important}.flex-lg-shrink-0{flex-shrink:0 !important}.flex-lg-shrink-1{flex-shrink:1 !important}.flex-lg-wrap{flex-wrap:wrap !important}.flex-lg-nowrap{flex-wrap:nowrap !important}.flex-lg-wrap-reverse{flex-wrap:wrap-reverse !important}.gap-lg-0{gap:0 !important}.gap-lg-1{gap:.25rem !important}.gap-lg-2{gap:.5rem !important}.gap-lg-3{gap:1rem !important}.gap-lg-4{gap:1.5rem !important}.gap-lg-5{gap:3rem !important}.justify-content-lg-start{justify-content:flex-start !important}.justify-content-lg-end{justify-content:flex-end !important}.justify-content-lg-center{justify-content:center !important}.justify-content-lg-between{justify-content:space-between !important}.justify-content-lg-around{justify-content:space-around !important}.justify-content-lg-evenly{justify-content:space-evenly !important}.align-items-lg-start{align-items:flex-start !important}.align-items-lg-end{align-items:flex-end !important}.align-items-lg-center{align-items:center !important}.align-items-lg-baseline{align-items:baseline !important}.align-items-lg-stretch{align-items:stretch !important}.align-content-lg-start{align-content:flex-start !important}.align-content-lg-end{align-content:flex-end !important}.align-content-lg-center{align-content:center !important}.align-content-lg-between{align-content:space-between !important}.align-content-lg-around{align-content:space-around !important}.align-content-lg-stretch{align-content:stretch !important}.align-self-lg-auto{align-self:auto !important}.align-self-lg-start{align-self:flex-start !important}.align-self-lg-end{align-self:flex-end !important}.align-self-lg-center{align-self:center !important}.align-self-lg-baseline{align-self:baseline !important}.align-self-lg-stretch{align-self:stretch !important}.order-lg-first{order:-1 !important}.order-lg-0{order:0 !important}.order-lg-1{order:1 !important}.order-lg-2{order:2 !important}.order-lg-3{order:3 !important}.order-lg-4{order:4 !important}.order-lg-5{order:5 !important}.order-lg-last{order:6 !important}.m-lg-0{margin:0 !important}.m-lg-1{margin:.25rem !important}.m-lg-2{margin:.5rem !important}.m-lg-3{margin:1rem !important}.m-lg-4{margin:1.5rem !important}.m-lg-5{margin:3rem !important}.m-lg-auto{margin:auto !important}.mx-lg-0{margin-right:0 !important;margin-left:0 !important}.mx-lg-1{margin-right:.25rem !important;margin-left:.25rem !important}.mx-lg-2{margin-right:.5rem !important;margin-left:.5rem !important}.mx-lg-3{margin-right:1rem !important;margin-left:1rem !important}.mx-lg-4{margin-right:1.5rem !important;margin-left:1.5rem !important}.mx-lg-5{margin-right:3rem !important;margin-left:3rem !important}.mx-lg-auto{margin-right:auto !important;margin-left:auto !important}.my-lg-0{margin-top:0 !important;margin-bottom:0 !important}.my-lg-1{margin-top:.25rem !important;margin-bottom:.25rem !important}.my-lg-2{margin-top:.5rem !important;margin-bottom:.5rem !important}.my-lg-3{margin-top:1rem !important;margin-bottom:1rem !important}.my-lg-4{margin-top:1.5rem !important;margin-bottom:1.5rem !important}.my-lg-5{margin-top:3rem !important;margin-bottom:3rem !important}.my-lg-auto{margin-top:auto !important;margin-bottom:auto !important}.mt-lg-0{margin-top:0 !important}.mt-lg-1{margin-top:.25rem !important}.mt-lg-2{margin-top:.5rem !important}.mt-lg-3{margin-top:1rem !important}.mt-lg-4{margin-top:1.5rem !important}.mt-lg-5{margin-top:3rem !important}.mt-lg-auto{margin-top:auto !important}.me-lg-0{margin-right:0 !important}.me-lg-1{margin-right:.25rem !important}.me-lg-2{margin-right:.5rem !important}.me-lg-3{margin-right:1rem !important}.me-lg-4{margin-right:1.5rem !important}.me-lg-5{margin-right:3rem !important}.me-lg-auto{margin-right:auto !important}.mb-lg-0{margin-bottom:0 !important}.mb-lg-1{margin-bottom:.25rem !important}.mb-lg-2{margin-bottom:.5rem !important}.mb-lg-3{margin-bottom:1rem !important}.mb-lg-4{margin-bottom:1.5rem !important}.mb-lg-5{margin-bottom:3rem !important}.mb-lg-auto{margin-bottom:auto !important}.ms-lg-0{margin-left:0 !important}.ms-lg-1{margin-left:.25rem !important}.ms-lg-2{margin-left:.5rem !important}.ms-lg-3{margin-left:1rem !important}.ms-lg-4{margin-left:1.5rem !important}.ms-lg-5{margin-left:3rem !important}.ms-lg-auto{margin-left:auto !important}.m-lg-n1{margin:-.25rem !important}.m-lg-n2{margin:-.5rem !important}.m-lg-n3{margin:-1rem !important}.m-lg-n4{margin:-1.5rem !important}.m-lg-n5{margin:-3rem !important}.mx-lg-n1{margin-right:-.25rem !important;margin-left:-.25rem !important}.mx-lg-n2{margin-right:-.5rem !important;margin-left:-.5rem !important}.mx-lg-n3{margin-right:-1rem !important;margin-left:-1rem !important}.mx-lg-n4{margin-right:-1.5rem !important;margin-left:-1.5rem !important}.mx-lg-n5{margin-right:-3rem !important;margin-left:-3rem !important}.my-lg-n1{margin-top:-.25rem !important;margin-bottom:-.25rem !important}.my-lg-n2{margin-top:-.5rem !important;margin-bottom:-.5rem !important}.my-lg-n3{margin-top:-1rem !important;margin-bottom:-1rem !important}.my-lg-n4{margin-top:-1.5rem !important;margin-bottom:-1.5rem !important}.my-lg-n5{margin-top:-3rem !important;margin-bottom:-3rem !important}.mt-lg-n1{margin-top:-.25rem !important}.mt-lg-n2{margin-top:-.5rem !important}.mt-lg-n3{margin-top:-1rem !important}.mt-lg-n4{margin-top:-1.5rem !important}.mt-lg-n5{margin-top:-3rem !important}.me-lg-n1{margin-right:-.25rem !important}.me-lg-n2{margin-right:-.5rem !important}.me-lg-n3{margin-right:-1rem !important}.me-lg-n4{margin-right:-1.5rem !important}.me-lg-n5{margin-right:-3rem !important}.mb-lg-n1{margin-bottom:-.25rem !important}.mb-lg-n2{margin-bottom:-.5rem !important}.mb-lg-n3{margin-bottom:-1rem !important}.mb-lg-n4{margin-bottom:-1.5rem !important}.mb-lg-n5{margin-bottom:-3rem !important}.ms-lg-n1{margin-left:-.25rem !important}.ms-lg-n2{margin-left:-.5rem !important}.ms-lg-n3{margin-left:-1rem !important}.ms-lg-n4{margin-left:-1.5rem !important}.ms-lg-n5{margin-left:-3rem !important}.p-lg-0{padding:0 !important}.p-lg-1{padding:.25rem !important}.p-lg-2{padding:.5rem !important}.p-lg-3{padding:1rem !important}.p-lg-4{padding:1.5rem !important}.p-lg-5{padding:3rem !important}.px-lg-0{padding-right:0 !important;padding-left:0 !important}.px-lg-1{padding-right:.25rem !important;padding-left:.25rem !important}.px-lg-2{padding-right:.5rem !important;padding-left:.5rem !important}.px-lg-3{padding-right:1rem !important;padding-left:1rem !important}.px-lg-4{padding-right:1.5rem !important;padding-left:1.5rem !important}.px-lg-5{padding-right:3rem !important;padding-left:3rem !important}.py-lg-0{padding-top:0 !important;padding-bottom:0 !important}.py-lg-1{padding-top:.25rem !important;padding-bottom:.25rem !important}.py-lg-2{padding-top:.5rem !important;padding-bottom:.5rem !important}.py-lg-3{padding-top:1rem !important;padding-bottom:1rem !important}.py-lg-4{padding-top:1.5rem !important;padding-bottom:1.5rem !important}.py-lg-5{padding-top:3rem !important;padding-bottom:3rem !important}.pt-lg-0{padding-top:0 !important}.pt-lg-1{padding-top:.25rem !important}.pt-lg-2{padding-top:.5rem !important}.pt-lg-3{padding-top:1rem !important}.pt-lg-4{padding-top:1.5rem !important}.pt-lg-5{padding-top:3rem !important}.pe-lg-0{padding-right:0 !important}.pe-lg-1{padding-right:.25rem !important}.pe-lg-2{padding-right:.5rem !important}.pe-lg-3{padding-right:1rem !important}.pe-lg-4{padding-right:1.5rem !important}.pe-lg-5{padding-right:3rem !important}.pb-lg-0{padding-bottom:0 !important}.pb-lg-1{padding-bottom:.25rem !important}.pb-lg-2{padding-bottom:.5rem !important}.pb-lg-3{padding-bottom:1rem !important}.pb-lg-4{padding-bottom:1.5rem !important}.pb-lg-5{padding-bottom:3rem !important}.ps-lg-0{padding-left:0 !important}.ps-lg-1{padding-left:.25rem !important}.ps-lg-2{padding-left:.5rem !important}.ps-lg-3{padding-left:1rem !important}.ps-lg-4{padding-left:1.5rem !important}.ps-lg-5{padding-left:3rem !important}.text-lg-start{text-align:left !important}.text-lg-end{text-align:right !important}.text-lg-center{text-align:center !important}}@media (min-width: 1200px){.float-xl-start{float:left !important}.float-xl-end{float:right !important}.float-xl-none{float:none !important}.d-xl-inline{display:inline !important}.d-xl-inline-block{display:inline-block !important}.d-xl-block{display:block !important}.d-xl-grid{display:grid !important}.d-xl-table{display:table !important}.d-xl-table-row{display:table-row !important}.d-xl-table-cell{display:table-cell !important}.d-xl-flex{display:flex !important}.d-xl-inline-flex{display:inline-flex !important}.d-xl-none{display:none !important}.flex-xl-fill{flex:1 1 auto !important}.flex-xl-row{flex-direction:row !important}.flex-xl-column{flex-direction:column !important}.flex-xl-row-reverse{flex-direction:row-reverse !important}.flex-xl-column-reverse{flex-direction:column-reverse !important}.flex-xl-grow-0{flex-grow:0 !important}.flex-xl-grow-1{flex-grow:1 !important}.flex-xl-shrink-0{flex-shrink:0 !important}.flex-xl-shrink-1{flex-shrink:1 !important}.flex-xl-wrap{flex-wrap:wrap !important}.flex-xl-nowrap{flex-wrap:nowrap !important}.flex-xl-wrap-reverse{flex-wrap:wrap-reverse !important}.gap-xl-0{gap:0 !important}.gap-xl-1{gap:.25rem !important}.gap-xl-2{gap:.5rem !important}.gap-xl-3{gap:1rem !important}.gap-xl-4{gap:1.5rem !important}.gap-xl-5{gap:3rem !important}.justify-content-xl-start{justify-content:flex-start !important}.justify-content-xl-end{justify-content:flex-end !important}.justify-content-xl-center{justify-content:center !important}.justify-content-xl-between{justify-content:space-between !important}.justify-content-xl-around{justify-content:space-around !important}.justify-content-xl-evenly{justify-content:space-evenly !important}.align-items-xl-start{align-items:flex-start !important}.align-items-xl-end{align-items:flex-end !important}.align-items-xl-center{align-items:center !important}.align-items-xl-baseline{align-items:baseline !important}.align-items-xl-stretch{align-items:stretch !important}.align-content-xl-start{align-content:flex-start !important}.align-content-xl-end{align-content:flex-end !important}.align-content-xl-center{align-content:center !important}.align-content-xl-between{align-content:space-between !important}.align-content-xl-around{align-content:space-around !important}.align-content-xl-stretch{align-content:stretch !important}.align-self-xl-auto{align-self:auto !important}.align-self-xl-start{align-self:flex-start !important}.align-self-xl-end{align-self:flex-end !important}.align-self-xl-center{align-self:center !important}.align-self-xl-baseline{align-self:baseline !important}.align-self-xl-stretch{align-self:stretch !important}.order-xl-first{order:-1 !important}.order-xl-0{order:0 !important}.order-xl-1{order:1 !important}.order-xl-2{order:2 !important}.order-xl-3{order:3 !important}.order-xl-4{order:4 !important}.order-xl-5{order:5 !important}.order-xl-last{order:6 !important}.m-xl-0{margin:0 !important}.m-xl-1{margin:.25rem !important}.m-xl-2{margin:.5rem !important}.m-xl-3{margin:1rem !important}.m-xl-4{margin:1.5rem !important}.m-xl-5{margin:3rem !important}.m-xl-auto{margin:auto !important}.mx-xl-0{margin-right:0 !important;margin-left:0 !important}.mx-xl-1{margin-right:.25rem !important;margin-left:.25rem !important}.mx-xl-2{margin-right:.5rem !important;margin-left:.5rem !important}.mx-xl-3{margin-right:1rem !important;margin-left:1rem !important}.mx-xl-4{margin-right:1.5rem !important;margin-left:1.5rem !important}.mx-xl-5{margin-right:3rem !important;margin-left:3rem !important}.mx-xl-auto{margin-right:auto !important;margin-left:auto !important}.my-xl-0{margin-top:0 !important;margin-bottom:0 !important}.my-xl-1{margin-top:.25rem !important;margin-bottom:.25rem !important}.my-xl-2{margin-top:.5rem !important;margin-bottom:.5rem !important}.my-xl-3{margin-top:1rem !important;margin-bottom:1rem !important}.my-xl-4{margin-top:1.5rem !important;margin-bottom:1.5rem !important}.my-xl-5{margin-top:3rem !important;margin-bottom:3rem !important}.my-xl-auto{margin-top:auto !important;margin-bottom:auto !important}.mt-xl-0{margin-top:0 !important}.mt-xl-1{margin-top:.25rem !important}.mt-xl-2{margin-top:.5rem !important}.mt-xl-3{margin-top:1rem !important}.mt-xl-4{margin-top:1.5rem !important}.mt-xl-5{margin-top:3rem !important}.mt-xl-auto{margin-top:auto !important}.me-xl-0{margin-right:0 !important}.me-xl-1{margin-right:.25rem !important}.me-xl-2{margin-right:.5rem !important}.me-xl-3{margin-right:1rem !important}.me-xl-4{margin-right:1.5rem !important}.me-xl-5{margin-right:3rem !important}.me-xl-auto{margin-right:auto !important}.mb-xl-0{margin-bottom:0 !important}.mb-xl-1{margin-bottom:.25rem !important}.mb-xl-2{margin-bottom:.5rem !important}.mb-xl-3{margin-bottom:1rem !important}.mb-xl-4{margin-bottom:1.5rem !important}.mb-xl-5{margin-bottom:3rem !important}.mb-xl-auto{margin-bottom:auto !important}.ms-xl-0{margin-left:0 !important}.ms-xl-1{margin-left:.25rem !important}.ms-xl-2{margin-left:.5rem !important}.ms-xl-3{margin-left:1rem !important}.ms-xl-4{margin-left:1.5rem !important}.ms-xl-5{margin-left:3rem !important}.ms-xl-auto{margin-left:auto !important}.m-xl-n1{margin:-.25rem !important}.m-xl-n2{margin:-.5rem !important}.m-xl-n3{margin:-1rem !important}.m-xl-n4{margin:-1.5rem !important}.m-xl-n5{margin:-3rem !important}.mx-xl-n1{margin-right:-.25rem !important;margin-left:-.25rem !important}.mx-xl-n2{margin-right:-.5rem !important;margin-left:-.5rem !important}.mx-xl-n3{margin-right:-1rem !important;margin-left:-1rem !important}.mx-xl-n4{margin-right:-1.5rem !important;margin-left:-1.5rem !important}.mx-xl-n5{margin-right:-3rem !important;margin-left:-3rem !important}.my-xl-n1{margin-top:-.25rem !important;margin-bottom:-.25rem !important}.my-xl-n2{margin-top:-.5rem !important;margin-bottom:-.5rem !important}.my-xl-n3{margin-top:-1rem !important;margin-bottom:-1rem !important}.my-xl-n4{margin-top:-1.5rem !important;margin-bottom:-1.5rem !important}.my-xl-n5{margin-top:-3rem !important;margin-bottom:-3rem !important}.mt-xl-n1{margin-top:-.25rem !important}.mt-xl-n2{margin-top:-.5rem !important}.mt-xl-n3{margin-top:-1rem !important}.mt-xl-n4{margin-top:-1.5rem !important}.mt-xl-n5{margin-top:-3rem !important}.me-xl-n1{margin-right:-.25rem !important}.me-xl-n2{margin-right:-.5rem !important}.me-xl-n3{margin-right:-1rem !important}.me-xl-n4{margin-right:-1.5rem !important}.me-xl-n5{margin-right:-3rem !important}.mb-xl-n1{margin-bottom:-.25rem !important}.mb-xl-n2{margin-bottom:-.5rem !important}.mb-xl-n3{margin-bottom:-1rem !important}.mb-xl-n4{margin-bottom:-1.5rem !important}.mb-xl-n5{margin-bottom:-3rem !important}.ms-xl-n1{margin-left:-.25rem !important}.ms-xl-n2{margin-left:-.5rem !important}.ms-xl-n3{margin-left:-1rem !important}.ms-xl-n4{margin-left:-1.5rem !important}.ms-xl-n5{margin-left:-3rem !important}.p-xl-0{padding:0 !important}.p-xl-1{padding:.25rem !important}.p-xl-2{padding:.5rem !important}.p-xl-3{padding:1rem !important}.p-xl-4{padding:1.5rem !important}.p-xl-5{padding:3rem !important}.px-xl-0{padding-right:0 !important;padding-left:0 !important}.px-xl-1{padding-right:.25rem !important;padding-left:.25rem !important}.px-xl-2{padding-right:.5rem !important;padding-left:.5rem !important}.px-xl-3{padding-right:1rem !important;padding-left:1rem !important}.px-xl-4{padding-right:1.5rem !important;padding-left:1.5rem !important}.px-xl-5{padding-right:3rem !important;padding-left:3rem !important}.py-xl-0{padding-top:0 !important;padding-bottom:0 !important}.py-xl-1{padding-top:.25rem !important;padding-bottom:.25rem !important}.py-xl-2{padding-top:.5rem !important;padding-bottom:.5rem !important}.py-xl-3{padding-top:1rem !important;padding-bottom:1rem !important}.py-xl-4{padding-top:1.5rem !important;padding-bottom:1.5rem !important}.py-xl-5{padding-top:3rem !important;padding-bottom:3rem !important}.pt-xl-0{padding-top:0 !important}.pt-xl-1{padding-top:.25rem !important}.pt-xl-2{padding-top:.5rem !important}.pt-xl-3{padding-top:1rem !important}.pt-xl-4{padding-top:1.5rem !important}.pt-xl-5{padding-top:3rem !important}.pe-xl-0{padding-right:0 !important}.pe-xl-1{padding-right:.25rem !important}.pe-xl-2{padding-right:.5rem !important}.pe-xl-3{padding-right:1rem !important}.pe-xl-4{padding-right:1.5rem !important}.pe-xl-5{padding-right:3rem !important}.pb-xl-0{padding-bottom:0 !important}.pb-xl-1{padding-bottom:.25rem !important}.pb-xl-2{padding-bottom:.5rem !important}.pb-xl-3{padding-bottom:1rem !important}.pb-xl-4{padding-bottom:1.5rem !important}.pb-xl-5{padding-bottom:3rem !important}.ps-xl-0{padding-left:0 !important}.ps-xl-1{padding-left:.25rem !important}.ps-xl-2{padding-left:.5rem !important}.ps-xl-3{padding-left:1rem !important}.ps-xl-4{padding-left:1.5rem !important}.ps-xl-5{padding-left:3rem !important}.text-xl-start{text-align:left !important}.text-xl-end{text-align:right !important}.text-xl-center{text-align:center !important}}@media (min-width: 1400px){.float-xxl-start{float:left !important}.float-xxl-end{float:right !important}.float-xxl-none{float:none !important}.d-xxl-inline{display:inline !important}.d-xxl-inline-block{display:inline-block !important}.d-xxl-block{display:block !important}.d-xxl-grid{display:grid !important}.d-xxl-table{display:table !important}.d-xxl-table-row{display:table-row !important}.d-xxl-table-cell{display:table-cell !important}.d-xxl-flex{display:flex !important}.d-xxl-inline-flex{display:inline-flex !important}.d-xxl-none{display:none !important}.flex-xxl-fill{flex:1 1 auto !important}.flex-xxl-row{flex-direction:row !important}.flex-xxl-column{flex-direction:column !important}.flex-xxl-row-reverse{flex-direction:row-reverse !important}.flex-xxl-column-reverse{flex-direction:column-reverse !important}.flex-xxl-grow-0{flex-grow:0 !important}.flex-xxl-grow-1{flex-grow:1 !important}.flex-xxl-shrink-0{flex-shrink:0 !important}.flex-xxl-shrink-1{flex-shrink:1 !important}.flex-xxl-wrap{flex-wrap:wrap !important}.flex-xxl-nowrap{flex-wrap:nowrap !important}.flex-xxl-wrap-reverse{flex-wrap:wrap-reverse !important}.gap-xxl-0{gap:0 !important}.gap-xxl-1{gap:.25rem !important}.gap-xxl-2{gap:.5rem !important}.gap-xxl-3{gap:1rem !important}.gap-xxl-4{gap:1.5rem !important}.gap-xxl-5{gap:3rem !important}.justify-content-xxl-start{justify-content:flex-start !important}.justify-content-xxl-end{justify-content:flex-end !important}.justify-content-xxl-center{justify-content:center !important}.justify-content-xxl-between{justify-content:space-between !important}.justify-content-xxl-around{justify-content:space-around !important}.justify-content-xxl-evenly{justify-content:space-evenly !important}.align-items-xxl-start{align-items:flex-start !important}.align-items-xxl-end{align-items:flex-end !important}.align-items-xxl-center{align-items:center !important}.align-items-xxl-baseline{align-items:baseline !important}.align-items-xxl-stretch{align-items:stretch !important}.align-content-xxl-start{align-content:flex-start !important}.align-content-xxl-end{align-content:flex-end !important}.align-content-xxl-center{align-content:center !important}.align-content-xxl-between{align-content:space-between !important}.align-content-xxl-around{align-content:space-around !important}.align-content-xxl-stretch{align-content:stretch !important}.align-self-xxl-auto{align-self:auto !important}.align-self-xxl-start{align-self:flex-start !important}.align-self-xxl-end{align-self:flex-end !important}.align-self-xxl-center{align-self:center !important}.align-self-xxl-baseline{align-self:baseline !important}.align-self-xxl-stretch{align-self:stretch !important}.order-xxl-first{order:-1 !important}.order-xxl-0{order:0 !important}.order-xxl-1{order:1 !important}.order-xxl-2{order:2 !important}.order-xxl-3{order:3 !important}.order-xxl-4{order:4 !important}.order-xxl-5{order:5 !important}.order-xxl-last{order:6 !important}.m-xxl-0{margin:0 !important}.m-xxl-1{margin:.25rem !important}.m-xxl-2{margin:.5rem !important}.m-xxl-3{margin:1rem !important}.m-xxl-4{margin:1.5rem !important}.m-xxl-5{margin:3rem !important}.m-xxl-auto{margin:auto !important}.mx-xxl-0{margin-right:0 !important;margin-left:0 !important}.mx-xxl-1{margin-right:.25rem !important;margin-left:.25rem !important}.mx-xxl-2{margin-right:.5rem !important;margin-left:.5rem !important}.mx-xxl-3{margin-right:1rem !important;margin-left:1rem !important}.mx-xxl-4{margin-right:1.5rem !important;margin-left:1.5rem !important}.mx-xxl-5{margin-right:3rem !important;margin-left:3rem !important}.mx-xxl-auto{margin-right:auto !important;margin-left:auto !important}.my-xxl-0{margin-top:0 !important;margin-bottom:0 !important}.my-xxl-1{margin-top:.25rem !important;margin-bottom:.25rem !important}.my-xxl-2{margin-top:.5rem !important;margin-bottom:.5rem !important}.my-xxl-3{margin-top:1rem !important;margin-bottom:1rem !important}.my-xxl-4{margin-top:1.5rem !important;margin-bottom:1.5rem !important}.my-xxl-5{margin-top:3rem !important;margin-bottom:3rem !important}.my-xxl-auto{margin-top:auto !important;margin-bottom:auto !important}.mt-xxl-0{margin-top:0 !important}.mt-xxl-1{margin-top:.25rem !important}.mt-xxl-2{margin-top:.5rem !important}.mt-xxl-3{margin-top:1rem !important}.mt-xxl-4{margin-top:1.5rem !important}.mt-xxl-5{margin-top:3rem !important}.mt-xxl-auto{margin-top:auto !important}.me-xxl-0{margin-right:0 !important}.me-xxl-1{margin-right:.25rem !important}.me-xxl-2{margin-right:.5rem !important}.me-xxl-3{margin-right:1rem !important}.me-xxl-4{margin-right:1.5rem !important}.me-xxl-5{margin-right:3rem !important}.me-xxl-auto{margin-right:auto !important}.mb-xxl-0{margin-bottom:0 !important}.mb-xxl-1{margin-bottom:.25rem !important}.mb-xxl-2{margin-bottom:.5rem !important}.mb-xxl-3{margin-bottom:1rem !important}.mb-xxl-4{margin-bottom:1.5rem !important}.mb-xxl-5{margin-bottom:3rem !important}.mb-xxl-auto{margin-bottom:auto !important}.ms-xxl-0{margin-left:0 !important}.ms-xxl-1{margin-left:.25rem !important}.ms-xxl-2{margin-left:.5rem !important}.ms-xxl-3{margin-left:1rem !important}.ms-xxl-4{margin-left:1.5rem !important}.ms-xxl-5{margin-left:3rem !important}.ms-xxl-auto{margin-left:auto !important}.m-xxl-n1{margin:-.25rem !important}.m-xxl-n2{margin:-.5rem !important}.m-xxl-n3{margin:-1rem !important}.m-xxl-n4{margin:-1.5rem !important}.m-xxl-n5{margin:-3rem !important}.mx-xxl-n1{margin-right:-.25rem !important;margin-left:-.25rem !important}.mx-xxl-n2{margin-right:-.5rem !important;margin-left:-.5rem !important}.mx-xxl-n3{margin-right:-1rem !important;margin-left:-1rem !important}.mx-xxl-n4{margin-right:-1.5rem !important;margin-left:-1.5rem !important}.mx-xxl-n5{margin-right:-3rem !important;margin-left:-3rem !important}.my-xxl-n1{margin-top:-.25rem !important;margin-bottom:-.25rem !important}.my-xxl-n2{margin-top:-.5rem !important;margin-bottom:-.5rem !important}.my-xxl-n3{margin-top:-1rem !important;margin-bottom:-1rem !important}.my-xxl-n4{margin-top:-1.5rem !important;margin-bottom:-1.5rem !important}.my-xxl-n5{margin-top:-3rem !important;margin-bottom:-3rem !important}.mt-xxl-n1{margin-top:-.25rem !important}.mt-xxl-n2{margin-top:-.5rem !important}.mt-xxl-n3{margin-top:-1rem !important}.mt-xxl-n4{margin-top:-1.5rem !important}.mt-xxl-n5{margin-top:-3rem !important}.me-xxl-n1{margin-right:-.25rem !important}.me-xxl-n2{margin-right:-.5rem !important}.me-xxl-n3{margin-right:-1rem !important}.me-xxl-n4{margin-right:-1.5rem !important}.me-xxl-n5{margin-right:-3rem !important}.mb-xxl-n1{margin-bottom:-.25rem !important}.mb-xxl-n2{margin-bottom:-.5rem !important}.mb-xxl-n3{margin-bottom:-1rem !important}.mb-xxl-n4{margin-bottom:-1.5rem !important}.mb-xxl-n5{margin-bottom:-3rem !important}.ms-xxl-n1{margin-left:-.25rem !important}.ms-xxl-n2{margin-left:-.5rem !important}.ms-xxl-n3{margin-left:-1rem !important}.ms-xxl-n4{margin-left:-1.5rem !important}.ms-xxl-n5{margin-left:-3rem !important}.p-xxl-0{padding:0 !important}.p-xxl-1{padding:.25rem !important}.p-xxl-2{padding:.5rem !important}.p-xxl-3{padding:1rem !important}.p-xxl-4{padding:1.5rem !important}.p-xxl-5{padding:3rem !important}.px-xxl-0{padding-right:0 !important;padding-left:0 !important}.px-xxl-1{padding-right:.25rem !important;padding-left:.25rem !important}.px-xxl-2{padding-right:.5rem !important;padding-left:.5rem !important}.px-xxl-3{padding-right:1rem !important;padding-left:1rem !important}.px-xxl-4{padding-right:1.5rem !important;padding-left:1.5rem !important}.px-xxl-5{padding-right:3rem !important;padding-left:3rem !important}.py-xxl-0{padding-top:0 !important;padding-bottom:0 !important}.py-xxl-1{padding-top:.25rem !important;padding-bottom:.25rem !important}.py-xxl-2{padding-top:.5rem !important;padding-bottom:.5rem !important}.py-xxl-3{padding-top:1rem !important;padding-bottom:1rem !important}.py-xxl-4{padding-top:1.5rem !important;padding-bottom:1.5rem !important}.py-xxl-5{padding-top:3rem !important;padding-bottom:3rem !important}.pt-xxl-0{padding-top:0 !important}.pt-xxl-1{padding-top:.25rem !important}.pt-xxl-2{padding-top:.5rem !important}.pt-xxl-3{padding-top:1rem !important}.pt-xxl-4{padding-top:1.5rem !important}.pt-xxl-5{padding-top:3rem !important}.pe-xxl-0{padding-right:0 !important}.pe-xxl-1{padding-right:.25rem !important}.pe-xxl-2{padding-right:.5rem !important}.pe-xxl-3{padding-right:1rem !important}.pe-xxl-4{padding-right:1.5rem !important}.pe-xxl-5{padding-right:3rem !important}.pb-xxl-0{padding-bottom:0 !important}.pb-xxl-1{padding-bottom:.25rem !important}.pb-xxl-2{padding-bottom:.5rem !important}.pb-xxl-3{padding-bottom:1rem !important}.pb-xxl-4{padding-bottom:1.5rem !important}.pb-xxl-5{padding-bottom:3rem !important}.ps-xxl-0{padding-left:0 !important}.ps-xxl-1{padding-left:.25rem !important}.ps-xxl-2{padding-left:.5rem !important}.ps-xxl-3{padding-left:1rem !important}.ps-xxl-4{padding-left:1.5rem !important}.ps-xxl-5{padding-left:3rem !important}.text-xxl-start{text-align:left !important}.text-xxl-end{text-align:right !important}.text-xxl-center{text-align:center !important}}@media (min-width: 1200px){.fs-1{font-size:2rem !important}.fs-2{font-size:1.5rem !important}}@media print{.d-print-inline{display:inline !important}.d-print-inline-block{display:inline-block !important}.d-print-block{display:block !important}.d-print-grid{display:grid !important}.d-print-table{display:table !important}.d-print-table-row{display:table-row !important}.d-print-table-cell{display:table-cell !important}.d-print-flex{display:flex !important}.d-print-inline-flex{display:inline-flex !important}.d-print-none{display:none !important}}@font-face{font-family:'Fira Code';font-style:normal;font-weight:400;src:local(""),url("/notes/fonts/fira-code-v17-latin-regular.woff2") format("woff2"),url("/fonts/fira-code-v17-latin-regular.woff2") format("woff2")}@font-face{font-family:'Inter';font-style:normal;font-weight:700;src:local(""),url("/notes/fonts/inter-v8-latin-700.woff2") format("woff2"),url("/fonts/inter-v8-latin-700.woff2") format("woff2")}@font-face{font-family:'Source Sans Pro';font-style:normal;font-weight:400;src:local(""),url("/notes/fonts/source-sans-pro-v19-latin-regular.woff2") format("woff2"),url("/fonts/source-sans-pro-v19-latin-regular.woff2") format("woff2")}@font-face{font-family:'Source Sans Pro';font-style:italic;font-weight:400;src:local(""),url("/notes/fonts/source-sans-pro-v19-latin-italic.woff2") format("woff2"),url("/fonts/source-sans-pro-v19-latin-italic.woff2") format("woff2")}@font-face{font-family:'Source Sans Pro';font-style:normal;font-weight:700;src:local(""),url("/notes/fonts/source-sans-pro-v19-latin-700.woff2") format("woff2"),url("/fonts/source-sans-pro-v19-latin-700.woff2") format("woff2")}@font-face{font-family:'Source Sans Pro';font-style:italic;font-weight:700;src:local(""),url("/notes/fonts/source-sans-pro-v19-latin-700italic.woff2") format("woff2"),url("/fonts/source-sans-pro-v19-latin-700italic.woff2") format("woff2")}@media (max-width: 575.98px){.container,.row{--bs-gutter-x: 24px}}.contributors .content,.blog .content,.page .content,.error404 .content,.notes.list .content,.tutorial.list .content,.showcase.list .content{padding-top:1rem;padding-bottom:3rem}h1,h2,h3,h4,h5,h6,.h1,.h2,.h3,.h4,.h5,.h6{margin:2rem 0 1rem}@media (min-width: 768px){body{font-size:1rem;padding-top:0 !important}h1,h2,h3,h4,h5,h6,.h1,.h2,.h3,.h4,.h5,.h6{margin-bottom:1.125rem}}.home h1,.home .h1{font-size:calc(1.875rem + 1.5vw)}a{text-underline-offset:2px}a:hover,a:focus{text-decoration:underline}a.btn:hover,.search-form a.search-submit:hover,a.btn:focus,.search-form a.search-submit:focus{text-decoration:none}.section{padding-top:5rem;padding-bottom:5rem}.section-md{padding-top:3rem;padding-bottom:3rem}.section-sm{padding-top:1rem;padding-bottom:1rem}body{padding-top:3.5625rem}.notes-sidebar{order:2}@media (min-width: 992px){.notes-sidebar{order:0;border-right:1px solid #e9ecef}@supports (position: -webkit-sticky) or (position: sticky){.notes-sidebar{position:-webkit-sticky;position:sticky;top:0;z-index:1000;height:100vh}}}@media (min-width: 1200px){.notes-sidebar{flex:0 1 320px}}.notes-links{padding-bottom:5rem;padding-left:0.25rem;padding-right:0.25rem}@media (min-width: 992px){@supports (position: -webkit-sticky) or (position: sticky){.notes-links{max-height:100vh;padding-top:4rem;overflow-y:scroll}}}@media (min-width: 992px){.notes-links{display:block;width:auto;margin-right:-3.0rem;padding-bottom:4rem}}.notes-toc{order:2}@supports (position: -webkit-sticky) or (position: sticky){.notes-toc{position:-webkit-sticky;position:sticky;top:0;height:100vh;padding-top:4rem;overflow-y:auto}}.notes-content,.section-content,.tags-content{padding-bottom:3rem;padding-top:4rem;order:1}.notes-navigation,.blog-navigation{margin-top:2rem;margin-bottom:0;padding-top:2rem}.notes-navigation a,.blog-navigation a{font-size:.9rem}.notes-navigation{border-top:1px solid #e9ecef}@media (min-width: 992px){.notes-navigation,.blog-navigation{margin-bottom:-1rem}.notes-navigation a,.blog-navigation a{font-size:1rem}}.navbar a:hover,.navbar a:focus{text-decoration:none}::selection{background:rgba(212,53,159,0.2)}.bg-dots{background-image:radial-gradient(#d4d4d4 15%, transparent 15%);background-position:0 0;background-size:1rem 1rem;-webkit-mask:linear-gradient(to top, #fff, transparent);mask:linear-gradient(to top, #fff, transparent);width:100%;height:9rem;margin-top:-10rem;z-index:-1}.bg-dots-md{margin-top:-11rem}.bg-dots-lg{margin-top:-12rem}.gradient-text{background-color:#45458c;background-image:linear-gradient(90deg, #45458c, #8ed6fb 50%, #d32e9d);background-size:100%;background-repeat:repeat;-webkit-background-clip:text;-moz-background-clip:text;-webkit-text-fill-color:transparent;-moz-text-fill-color:transparent}.katex{font-size:1rem}nav hr{margin:0.75rem 0}nav .navbar-brand{margin-top:1.75rem;margin-bottom:0.75rem;padding-bottom:0}nav .sidebar-social{padding-right:0.25rem}article hr{margin:3rem 0}main.tags-content>ul.tags{margin-top:2rem}main.notes-content>ul.tags{margin-top:-0.5rem;margin-bottom:1.5rem}ul.tags{padding-left:0;list-style:none;display:flex;flex-wrap:wrap;justify-content:flex-start;gap:0.5rem 0.5rem}.MathJax{font-size:1rem !important}.anchor-link{display:none;text-decoration:none}h1:hover>.anchor-link,.h1:hover>.anchor-link,h2:hover>.anchor-link,.h2:hover>.anchor-link,h3:hover>.anchor-link,.h3:hover>.anchor-link,h4:hover>.anchor-link,.h4:hover>.anchor-link,h5:hover>.anchor-link,.h5:hover>.anchor-link,h6:hover>.anchor-link,.h6:hover>.anchor-link{display:inline}main ul>li{margin-top:0.375rem;margin-bottom:0.375rem}main ul>li>*{margin-top:0.375rem;margin-bottom:0.375rem}main pre{margin:1rem 0}body.dark{background:#1e1e21;color:#d4d4d4}body.dark main>h1:first-of-type,body.dark main>.h1:first-of-type,body.dark article>h1:first-of-type,body.dark article>.h1:first-of-type{text-decoration:underline;text-decoration-color:#383866;text-decoration-skip-ink:none;text-decoration-thickness:0.5rem}body.dark h1,body.dark .h1,body.dark h2,body.dark .h2,body.dark h3,body.dark .h3,body.dark h4,body.dark .h4,body.dark h5,body.dark .h5,body.dark h6,body.dark .h6{color:#e1e1e1}body.dark a{color:#afafee}body.dark a>code{color:#afafee !important}body.dark a.text-body{color:#d4d4d4 !important}body.dark .btn-primary{color:#fff;background-color:#6c757d;border-color:#6c757d;color:#1e1e21 !important}body.dark .btn-primary:hover{color:#fff;background-color:#5c636a;border-color:#565e64}.btn-check:focus+body.dark .btn-primary,body.dark .btn-primary:focus{color:#fff;background-color:#5c636a;border-color:#565e64;box-shadow:0 0 0 .25rem rgba(130,138,145,0.5)}.btn-check:checked+body.dark .btn-primary,.btn-check:active+body.dark .btn-primary,body.dark .btn-primary:active,body.dark .btn-primary.active,.show>body.dark .btn-primary.dropdown-toggle{color:#fff;background-color:#565e64;border-color:#51585e}.btn-check:checked+body.dark .btn-primary:focus,.btn-check:active+body.dark .btn-primary:focus,body.dark .btn-primary:active:focus,body.dark .btn-primary.active:focus,.show>body.dark .btn-primary.dropdown-toggle:focus{box-shadow:0 0 0 .25rem rgba(130,138,145,0.5)}body.dark .btn-primary:disabled,body.dark .btn-primary.disabled{color:#fff;background-color:#6c757d;border-color:#6c757d}body.dark .btn-outline-primary{color:#6c757d;border-color:#6c757d;color:#6c757d}body.dark .btn-outline-primary:hover{color:#6c757d;background-color:#6c757d;border-color:#6c757d}.btn-check:focus+body.dark .btn-outline-primary,body.dark .btn-outline-primary:focus{box-shadow:0 0 0 .25rem rgba(108,117,125,0.5)}.btn-check:checked+body.dark .btn-outline-primary,.btn-check:active+body.dark .btn-outline-primary,body.dark .btn-outline-primary:active,body.dark .btn-outline-primary.active,body.dark .btn-outline-primary.dropdown-toggle.show{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-check:checked+body.dark .btn-outline-primary:focus,.btn-check:active+body.dark .btn-outline-primary:focus,body.dark .btn-outline-primary:active:focus,body.dark .btn-outline-primary.active:focus,body.dark .btn-outline-primary.dropdown-toggle.show:focus{box-shadow:0 0 0 .25rem rgba(108,117,125,0.5)}body.dark .btn-outline-primary:disabled,body.dark .btn-outline-primary.disabled{color:#6c757d;background-color:transparent}body.dark .btn-outline-primary:hover{color:#1e1e21}body.dark .navbar{background:#1e1e21;opacity:0.975;border-bottom:1px solid #171719}body.dark.home .navbar{border-bottom:0}.navbar-brand{color:#6c757d !important}body.dark hr{color:#41474c;background-color:#41474c;opacity:1.0}.navbar-brand:hover,.navbar-brand:active{color:#adb5bd !important}body.dark .navbar-light .navbar-nav .nav-link,body.dark .navbar-light .navbar-nav .banner .nav a,.banner .nav body.dark .navbar-light .navbar-nav a{color:#6c757d}body.dark .navbar-light .navbar-nav .nav-link:hover,body.dark .navbar-light .navbar-nav .banner .nav a:hover,.banner .nav body.dark .navbar-light .navbar-nav a:hover,body.dark .navbar-light .navbar-nav .nav-link:focus,body.dark .navbar-light .navbar-nav .banner .nav a:focus,.banner .nav body.dark .navbar-light .navbar-nav a:focus{color:#adb5bd}body.dark .navbar-light .navbar-nav .nav-link.disabled,body.dark .navbar-light .navbar-nav .banner .nav a.disabled,.banner .nav body.dark .navbar-light .navbar-nav a.disabled{color:rgba(255,255,255,0.25)}body.dark .navbar-light .navbar-nav .show>.nav-link,body.dark .navbar-light .navbar-nav .banner .nav .show>a,.banner .nav body.dark .navbar-light .navbar-nav .show>a,body.dark .navbar-light .navbar-nav .active>.nav-link,body.dark .navbar-light .navbar-nav .banner .nav .active>a,.banner .nav body.dark .navbar-light .navbar-nav .active>a,body.dark .navbar-light .navbar-nav .nav-link.show,body.dark .navbar-light .navbar-nav .banner .nav a.show,.banner .nav body.dark .navbar-light .navbar-nav a.show,body.dark .navbar-light .navbar-nav .nav-link.active,body.dark .navbar-light .navbar-nav .banner .nav a.active,.banner .nav body.dark .navbar-light .navbar-nav a.active{color:#adb5bd}body.dark .navbar-light .navbar-text{color:#6c757d}body.dark .alert-primary a{color:#1e1e21}body.dark .alert-warning{background:#19191c;color:#d4d4d4}body.dark .page-links a{color:#6c757d}body.dark .showcase-meta a{color:#d4d4d4}body.dark .showcase-meta a:hover,body.dark .showcase-meta a:focus{color:#6c757d}body.dark .notes-link:hover,body.dark .notes-link.active,body.dark .page-links a:hover{text-decoration:none;color:#adb5bd}body.dark .navbar-light .navbar-text a{color:#adb5bd}body.dark .notes-links h3.sidebar-link a,body.dark .notes-links .sidebar-link.h3 a,body.dark .page-links h3.sidebar-link a,body.dark .page-links .sidebar-link.h3 a{color:#d4d4d4}body.dark .navbar-light .navbar-text a:hover,body.dark .navbar-light .navbar-text a:focus{color:#adb5bd}body.dark .navbar .btn-link{color:#6c757d}body.dark .content .btn-link{color:#6c757d}body.dark .content .btn-link:hover{color:#6c757d}body.dark .navbar .btn-link:hover{color:#adb5bd}body.dark .navbar .btn-link:active{color:#adb5bd}body.dark .form-control.is-search,body.dark .search-form .is-search.search-field,.search-form body.dark .is-search.search-field,body.dark .comment-form input.is-search[type="text"],.comment-form body.dark input.is-search[type="text"],body.dark .comment-form input.is-search[type="email"],.comment-form body.dark input.is-search[type="email"],body.dark .comment-form input.is-search[type="url"],.comment-form body.dark input.is-search[type="url"],body.dark .comment-form textarea.is-search,.comment-form body.dark textarea.is-search{background:#19191c}body.dark .navbar-form::after{color:#6c757d;border:1px solid #343a40}body.dark .form-control,body.dark .search-form .search-field,.search-form body.dark .search-field,body.dark .comment-form input[type="text"],.comment-form body.dark input[type="text"],body.dark .comment-form input[type="email"],.comment-form body.dark input[type="email"],body.dark .comment-form input[type="url"],.comment-form body.dark input[type="url"],body.dark .comment-form textarea,.comment-form body.dark textarea{color:#adb5bd}body.dark .form-control:focus,body.dark .search-form .search-field:focus,.search-form body.dark .search-field:focus,body.dark .comment-form input[type="text"]:focus,.comment-form body.dark input[type="text"]:focus,body.dark .comment-form input[type="email"]:focus,.comment-form body.dark input[type="email"]:focus,body.dark .comment-form input[type="url"]:focus,.comment-form body.dark input[type="url"]:focus,body.dark .comment-form textarea:focus,.comment-form body.dark textarea:focus{box-shadow:0 0 0 0.2rem #727b84}body.dark .border-top{border-top:1px solid #171719 !important}@media (min-width: 992px){body.dark .notes-sidebar{order:0;border-right:none}}body.dark .notes-navigation{border-top:1px solid #171719}body.dark pre code::-webkit-scrollbar-thumb{background:#171719}body.dark code:not(.hljs){background:#19191c;color:#d4d4d4}body.dark pre code:hover{scrollbar-width:thin;scrollbar-color:#171719 transparent}body.dark pre code::-webkit-scrollbar-thumb:hover{background:#171719}body.dark blockquote{border-left:3px solid #383866}body.dark .footer{border-top:1px solid #171719}body.dark .notes-links,body.dark .notes-toc{scrollbar-width:thin;scrollbar-color:#1e1e21 #1e1e21}body.dark .notes-links::-webkit-scrollbar,body.dark .notes-toc::-webkit-scrollbar{width:5px}body.dark .notes-links::-webkit-scrollbar-track,body.dark .notes-toc::-webkit-scrollbar-track{background:#1e1e21}body.dark .notes-links::-webkit-scrollbar-thumb,body.dark .notes-toc::-webkit-scrollbar-thumb{background:#1e1e21}body.dark .notes-links:hover,body.dark .notes-toc:hover{scrollbar-width:thin;scrollbar-color:#171719 #1e1e21}body.dark .notes-links:hover::-webkit-scrollbar-thumb,body.dark .notes-toc:hover::-webkit-scrollbar-thumb{background:#171719}body.dark .notes-links::-webkit-scrollbar-thumb:hover,body.dark .notes-toc::-webkit-scrollbar-thumb:hover{background:#171719}body.dark .notes-links h3:not(:first-child),body.dark .notes-links .h3:not(:first-child){border-top:1px solid #171719}body.dark a.notes-link{color:#6c757d}body.dark .notes-links h1,body.dark .notes-links .h1,body.dark .notes-links h2,body.dark .notes-links .h2,body.dark .notes-links h3,body.dark .notes-links .h3,body.dark .notes-links h4,body.dark .notes-links .h4,body.dark .notes-links h5,body.dark .notes-links .h5,body.dark .notes-links h6,body.dark .notes-links .h6{color:#6c757d}body.dark #table-of-contents>ul>li>ul{border-top:1px solid #41474c}body.dark .card{background:#1e1e21;border:1px solid #171719}body.dark .card.bg-light{background:#19191c !important}body.dark .navbar .menu-icon .navicon{background:#6c757d}body.dark .navbar .menu-icon .navicon::before,body.dark .navbar .menu-icon .navicon::after{background:#6c757d}body.dark .logo-light{display:none !important}body.dark .logo-dark{display:inline-block !important}body.dark .bg-light{background:#1a1a1d !important}body.dark .bg-dots{background-image:radial-gradient(#555 15%, transparent 15%)}body.dark .text-muted{color:#6c757d}body.dark .alert-primary{background:#6c757d;color:#1e1e21}body.dark .figure-caption{color:#d4d4d4}body.dark .copy-status::after{content:"Copy";display:block;color:#d4d4d4}body.dark .copy-status:hover::after{content:"Copy";display:block;color:#6c757d}body.dark .copy-status:focus::after,body.dark .copy-status:active::after{content:"Copied";display:block;color:#6c757d}pre,code,kbd,samp{font-family:"Fira Code",SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;font-size:.875rem;border-radius:.25rem}code{padding:0.25rem 0.5rem}pre{background:#fbf7f0;color:#1d2d35;margin:2rem 0}pre code{display:block;overflow-x:auto;line-height:1.5;padding:1.25rem 1.5rem;tab-size:4;scrollbar-width:thin;scrollbar-color:transparent transparent}.hljs{padding:1.25rem 1.5rem}@media (max-width: 575.98px){pre,code,kbd,samp{border-radius:0}pre{margin:2rem -1.5rem}}pre code::-webkit-scrollbar{height:5px}pre code::-webkit-scrollbar-thumb{background:#e9ecef}pre code:hover{scrollbar-width:thin;scrollbar-color:#e9ecef transparent}pre code::-webkit-scrollbar-thumb:hover{background:#e9ecef}.navbar .btn-link{color:#1d2d35;padding:0.4375rem 0}#mode{margin-right:1.25rem}.btn-link:focus{outline:0;box-shadow:none}#navigation{margin-left:1.25rem}@media (min-width: 768px){#mode{margin-right:0.5rem}.navbar .btn-link{padding:0.5625em 0.25rem 0.5rem 0.125rem}}.navbar .btn-link:hover{color:#45458c}.navbar .btn-link:active{color:#45458c}body .toggle-dark{display:block}body .toggle-light{display:none}body.dark .toggle-light{display:block}body.dark .toggle-dark{display:none}.btn-clipboard{display:none}@media (min-width: 768px){.doks-clipboard{position:relative;float:right}.btn-clipboard{position:absolute;top:1rem;right:0.25rem;z-index:10;display:block;padding:0.25rem 0.5rem;font-size:.875rem}}.copy-status::after{content:"Copy";display:block;color:#1d2d35}.copy-status:hover::after{content:"Copy";display:block;color:#d32e9d}.copy-status:focus::after,.copy-status:active::after{content:"Copied";display:block;color:#d32e9d}.comment-list ol{list-style:none}blockquote{margin-bottom:1rem;border-left:3px solid #d4d4d4;padding-left:1rem}.footnote-definition sup{top:-0.2 0.5em;font-size:0.75em;display:inline}.footnote-definition p{display:inline}.search-form label{font-weight:normal}figure{margin:2rem 0}.figure-caption{margin:0.25rem 0 0.75rem}figure.wide{margin:2rem -1.5rem}figure.wide .figure-caption{margin:0.25rem 1.5rem 0.75rem}@media (min-width: 768px){figure.wide{margin:2rem -2.5rem}figure.wide .figure-caption{margin:0.25rem 2.5rem 0.75rem}}@media (min-width: 992px){figure.wide{margin:2rem -5rem}figure.wide .figure-caption{margin:0.25rem 5rem 0.75rem}}.blur-up{filter:blur(5px)}.blur-up.lazyloaded{filter:unset}.img-simple{margin-top:0.375rem;margin-bottom:1.25rem}#search-bar{position:fixed;z-index:10000;left:0;top:0;width:100vw;height:100%;overflow:scroll}#search-bar input{padding:0.75rem 1.5rem;margin-bottom:2rem;border:1px solid #727b84;background:#1e1e21;font-size:1.25rem}#search-container{margin-top:7rem}#suggestions{width:100%;margin-bottom:2rem;background:#1e1e21;overflow:auto;border-radius:4px}#suggestions a{padding:1.5rem;display:block;text-decoration:none;color:#d4d4d4;background:#1e1e21}#suggestions a:hover,#suggestions a:focus{background:#303035}#suggestions>div>a{border:1px solid #727b84;border-bottom:none;margin:0;outline:none}#suggestions>div:first-child>a{border-top-left-radius:5px;border-top-right-radius:5px}#suggestions>div:last-child>a{border-bottom-left-radius:5px;border-bottom-right-radius:5px;border-bottom:1px solid #727b84}#suggestions span{font-size:1rem}#suggestions span:first-child{display:block;font-weight:700;margin-bottom:0.25rem}#suggestions span span.search-term{display:inline;background:#383866}table{margin:3rem 0}.navbar-text{margin-left:1rem}.navbar-brand{font-weight:700;color:#1d2d35}.navbar-brand,.navbar-brand:hover,.navbar-brand:active{color:#45458c}.navbar-light .navbar-nav .active .nav-link,.navbar-light .navbar-nav .active .banner .nav a,.banner .nav .navbar-light .navbar-nav .active a{color:#45458c}@media (min-width: 768px){.navbar-brand{font-size:1.125rem;margin-top:1.75rem;padding-bottom:1rem;margin-bottom:1rem;display:block}.navbar-text{margin-left:1.25rem}}.navbar-nav{flex-direction:row}.nav-item,.banner .nav li{margin-left:1.25rem}@media (min-width: 768px){.nav-item,.banner .nav li{margin-left:0.5rem}}@media (max-width: 575.98px){.nav-item:first-child,.banner .nav li:first-child{margin-left:0}}@media (max-width: 767.98px){.navbar .container{padding-left:1.5rem;padding-right:1.5rem}}.break{flex-basis:100%;height:0}.navbar{background-color:rgba(255,255,255,0.95);border-bottom:1px solid #e9ecef;margin-top:4px}.header-bar{border-top:4px solid;border-image-source:linear-gradient(90deg, #45458c, #8ed6fb 50%, #d32e9d);border-image-slice:1}.home .navbar{border-bottom:0}@media (min-width: 768px){.main-nav .nav-item:first-child .nav-link,.main-nav .banner .nav li:first-child .nav-link,.banner .nav .main-nav li:first-child .nav-link,.main-nav .nav-item:first-child .banner .nav a,.banner .nav .main-nav .nav-item:first-child a,.main-nav .banner .nav li:first-child a,.banner .nav .main-nav li:first-child a,.fork-me .nav-item:first-child .nav-link,.fork-me .banner .nav li:first-child .nav-link,.banner .nav .fork-me li:first-child .nav-link,.fork-me .nav-item:first-child .banner .nav a,.banner .nav .fork-me .nav-item:first-child a,.fork-me .banner .nav li:first-child a,.banner .nav .fork-me li:first-child a{padding-left:0}.main-nav .nav-item:last-child .nav-link,.main-nav .banner .nav li:last-child .nav-link,.banner .nav .main-nav li:last-child .nav-link,.main-nav .nav-item:last-child .banner .nav a,.banner .nav .main-nav .nav-item:last-child a,.main-nav .banner .nav li:last-child a,.banner .nav .main-nav li:last-child a,.fork-me .nav-item:last-child .nav-link,.fork-me .banner .nav li:last-child .nav-link,.banner .nav .fork-me li:last-child .nav-link,.fork-me .nav-item:last-child .banner .nav a,.banner .nav .fork-me .nav-item:last-child a,.fork-me .banner .nav li:last-child a,.banner .nav .fork-me li:last-child a{padding-right:0}}.form-control.is-search,.comment-form input.is-search[type="text"],.comment-form input.is-search[type="email"],.comment-form input.is-search[type="url"],.comment-form textarea.is-search,.search-form .is-search.search-field{padding-right:2.5rem;background:#fbfffe;border:0}/*! purgecss start ignore */.algolia-autocomplete{display:flex !important}.algolia-autocomplete .ds-dropdown-menu{box-shadow:0 0.5rem 1rem rgba(0,0,0,0.15) !important}@media (max-width: 575.98px){.algolia-autocomplete .ds-dropdown-menu{max-width:512px !important;min-width:312px !important;width:auto !important}.algolia-autocomplete .algolia-docsearch-suggestion .algolia-docsearch-suggestion--subcategory-column::after{content:"|";margin-right:0.25rem}}.algolia-autocomplete .algolia-docsearch-suggestion--title{margin-bottom:0}.algolia-autocomplete .algolia-docsearch-suggestion--highlight{padding:0 0.05em}.algolia-autocomplete .algolia-docsearch-footer{margin-top:1rem;margin-right:0.5rem;margin-bottom:0.5rem}/*! purgecss end ignore */.navbar .menu-icon{cursor:pointer;padding:1.125rem 0.625rem;margin:0 0 0 -0.625rem;user-select:none}.navbar .menu-icon .navicon{background:#1d2d35;display:block;height:2px;position:relative;transition:background 0.2s ease-out;width:18px}.navbar .menu-icon .navicon::before,.navbar .menu-icon .navicon::after{background:#1d2d35;content:"";display:block;height:100%;position:absolute;transition:all 0.2s ease-out;width:100%}.navbar .menu-icon .navicon::before{top:5px}.navbar .menu-icon .navicon::after{top:-5px}.navbar .menu-btn{display:none}.navbar .menu-btn:checked~.navbar-collapse{display:block;max-height:100vh}.navbar .menu-btn:checked~.menu-icon .navicon{background:transparent}.navbar .menu-btn:checked~.menu-icon .navicon::before{transform:rotate(-45deg)}.navbar .menu-btn:checked~.menu-icon .navicon::after{transform:rotate(45deg)}.navbar .menu-btn:checked~.menu-icon:not(.steps) .navicon::before,.navbar .menu-btn:checked~.menu-icon:not(.steps) .navicon::after{top:0}.anchor{visibility:hidden;padding-left:0.5rem}h1:hover a,.h1:hover a,h2:hover a,.h2:hover a,h3:hover a,.h3:hover a,h4:hover a,.h4:hover a{visibility:visible;text-decoration:none}.card-list{margin-top:2.25rem}p.meta{margin-top:0.5rem;font-size:1rem}.breadcrumb{margin-top:2.25rem;font-size:1rem}.page-header{text-align:center;margin-bottom:2rem}.notes-links,.notes-toc{scrollbar-width:thin;scrollbar-color:#fff #fff;line-height:1.25}.notes-links::-webkit-scrollbar,.notes-toc::-webkit-scrollbar{width:5px}.notes-links::-webkit-scrollbar-track,.notes-toc::-webkit-scrollbar-track{background:#fff}.notes-links::-webkit-scrollbar-thumb,.notes-toc::-webkit-scrollbar-thumb{background:#fff}.notes-links:hover,.notes-toc:hover{scrollbar-width:thin;scrollbar-color:#e9ecef #fff}.notes-links:hover::-webkit-scrollbar-thumb,.notes-toc:hover::-webkit-scrollbar-thumb{background:#e9ecef}.notes-links::-webkit-scrollbar-thumb:hover,.notes-toc::-webkit-scrollbar-thumb:hover{background:#e9ecef}#sidebar-tree-root{padding-left:0;padding-right:0;user-select:none}#sidebar-tree-root a{display:block;padding-top:0.375rem;padding-bottom:0.375rem}#sidebar-tree-root label{padding-top:0.375rem;padding-bottom:0.375rem}#sidebar-tree-root ol{padding-left:0.75rem;padding-right:0}#sidebar-tree-root li{list-style:none}#sidebar-tree-root li.sidebar-note{margin-left:0.8rem}#sidebar-tree-root li>label{cursor:pointer;display:flex;margin:0;font-size:1rem;flex:0 0 auto;border-top:none}#sidebar-tree-root li>label::before{content:'\203a';display:inline-flex;align-items:center;align-self:center;margin-inline-end:0.4rem}#sidebar-tree-root li>input[type=checkbox]{opacity:0}#sidebar-tree-root li>input[type=checkbox]+label+ol>li{display:none}#sidebar-tree-root li>input[type=checkbox]:checked+label+ol>li{display:block}#sidebar-tree-root li>input[type=checkbox]:checked+label::before{transform:rotate(90deg)}#sidebar-tree-root li>input[type=checkbox]:hover+label,#sidebar-tree-root li>input[type=checkbox]:focus+label{color:#a6a6a6}#sidebar-tree-root li>input[type=checkbox]{display:none}#table-of-contents ul{padding-left:0.75rem;margin-top:0.75rem;margin-bottom:0.75rem;list-style:none}#table-of-contents>ul{padding-left:0}#table-of-contents>ul>li>ul{padding-left:0;padding-top:0.0rem;margin-top:0.75rem}#table-of-contents li{margin-top:0.75rem;margin-bottom:0.75rem} diff --git a/management/index.html b/management/index.html new file mode 100644 index 0000000000..30baae36a6 --- /dev/null +++ b/management/index.html @@ -0,0 +1,73 @@ +management | philip's notes

                                                        management

                                                        \ No newline at end of file diff --git a/management/relieve often - why generals were more successful in WWII/index.html b/management/relieve often - why generals were more successful in WWII/index.html new file mode 100644 index 0000000000..c0e3676791 --- /dev/null +++ b/management/relieve often - why generals were more successful in WWII/index.html @@ -0,0 +1,94 @@ +relieve often - why generals were more successful in WWII | philip's notes

                                                        relieve often - why generals were more successful in WWII

                                                        2022-01-11 · 2 min read

                                                          Source: https://www.youtube.com/watch?v=AxZWxxZ2JGE

                                                          Thesis: During WWII, commanders were relieved early and often. Afterwards, tacit policy of never firing, never relieving, and frequent deployment rotation leads to culture of stagnation and risk-aversion.

                                                          • Marshall was sworn into office on the eve of WWII. He knew the US was unprepared and the existing general staff was too old and incompetant--he fired almost all of them.
                                                          • Command expected results from new commanders in 60-90 days. If you fail to deliver, you are relieved (NOT fired, but effectively demoted or reshuffled). + Is relief like moving laterally inside Corp? Usually lateral movement is employee initiated, but can also be "suggested" by manager, so maybe different. + Engineers and managers usually move laterally every 1-3 years. Fresh problems, fresh people--keeps one from getting comfortable.
                                                          • Claim: as relief becomes more commonplace, it feels less like a punishment.
                                                          • Relieved commanders could often regain or exceed their old positions in only a year if they had success again.
                                                          • Use relief as a tool to prevent complacency--if you notice someone just coasting, relieve them. Need to keep them engaged.
                                                          • Two extremes of management: micromanagement vs complete autonomy. Relief is the price of autonomy. Relief allows managerial "liquidity", like a credit card. You are given a loan of autonomy with the price (relief) due in 60-90 days if you don't succeed. + Imagine in Corp you get a manager promo / extra headcount / project lead for a half, then reshuffled if you don't hit success criteria. + Claim: prevents the Peter Principle (every employee rises to their level of incompetence) by facilitating quick level promotions (to find their plateau) then quickly relieving once you've exceeded their plateau.
                                                          \ No newline at end of file diff --git a/misc/arm target triples/index.html b/misc/arm target triples/index.html new file mode 100644 index 0000000000..502205e01c --- /dev/null +++ b/misc/arm target triples/index.html @@ -0,0 +1,91 @@ +arm target triples | philip's notes

                                                          arm target triples

                                                          2021-12-02 · 1 min read

                                                            Source: https://bgamari.github.io/posts/2019-06-12-arm-terminology.html
                                                            TripleArchitectureEndiannessFloating pointABI
                                                            ARMv8
                                                            aarch64-linux-gnuAArch64LittleHardLinux
                                                            armv8l-linux-gnuAArch32LittleHardLinux
                                                            ARMv7
                                                            armv7l-linux-gnueabiARMv7LittleSoftLinux
                                                            armv7l-linux-gnueabihfARMv7LittleHardLinux
                                                            armv7a-linux-gnueabiARMv7LittleSoftLinux
                                                            armv7a-linux-gnueabihfARMv7LittleHardLinux
                                                            armv7-linux-androideabiARMv7LittleSoft?Linux
                                                            ARMv6
                                                            arm-linux-gnueabiARMv6LittleSoftLinux
                                                            arm-linux-gnueabihfARMv6LittleHardLinux
                                                            arm-none-eabiARMv6LittleSoftEmbedded
                                                            arm-none-eabihfARMv6LittleHardEmbedded

                                                            \ No newline at end of file diff --git a/misc/envsubst/index.html b/misc/envsubst/index.html new file mode 100644 index 0000000000..bd4122577c --- /dev/null +++ b/misc/envsubst/index.html @@ -0,0 +1,115 @@ +envsubst | philip's notes

                                                            envsubst

                                                            2022-10-28 · 1 min read

                                                            • Substitute environment variables ($VARS) in stdin with current env values and output to stdout.

                                                            examples #

                                                            # envsubst
                                                            +#
                                                            +# Substitutes environment variables with their value in shell format strings.
                                                            +# Variables to be replaced should be in either `${var}` or `$var` format.
                                                            +#
                                                            +# More information: <https://www.gnu.org/software/gettext/manual/html_node/envsubst-Invocation.html>.
                                                            +
                                                            +# Replace environment variables in stdin and output to stdout:
                                                            +$ echo 'I live at $HOME.' | envsubst
                                                            +I live at /home/phlip9.
                                                            +
                                                            +# Replace environment variables in an input file and output to stdout:
                                                            +$ cat path/to/input_file
                                                            +I live at $HOME.
                                                            +My name is $USERNAME.
                                                            +
                                                            +$ envsubst < path/to/input_file
                                                            +I live at /home/phlip9.
                                                            +My name is phlip9.
                                                            +
                                                            +# Replace only some environment variables from a space-separated list:
                                                            +$ envsubst '$USERNAME' < path/to/input_file
                                                            +I live at $HOME.
                                                            +My name is phlip9.
                                                            +
                                                            \ No newline at end of file diff --git a/misc/git multirepo to monorepo/index.html b/misc/git multirepo to monorepo/index.html new file mode 100644 index 0000000000..fc9f0aeae4 --- /dev/null +++ b/misc/git multirepo to monorepo/index.html @@ -0,0 +1,240 @@ +git multirepo to monorepo | philip's notes

                                                            git multirepo to monorepo

                                                            2022-08-16 · 9 min read

                                                            the setup #

                                                            • We currently have a private repo and a public repo, mono and pub.
                                                            • The pub repo is already exists as a published and open-source repo.
                                                            • We'd like to merge pub into mono as a subdirectory mono/pub-dir.
                                                            • The conversion must not lose the original pub subrepo history.
                                                            • The migrated pub subrepo will still be published as a public, mostly read-only open source repo.
                                                            • The conversion should not require a force-push rewrite of the pub subrepo history.
                                                            • For privacy, new commits in mono that don't touch the mono/pub-dir subdirectory must not appear in the published pub subrepo.
                                                            • git blame must continue to work as expected.
                                                            • Filtering and publishing changes from the monorepo to one of the subrepos should easily run in CI.
                                                            • It should work with the built-in git tools.

                                                            (0) current state #

                                                            First, let's orient ourselves with the two repos:

                                                            ~/pub$ exa --tree
                                                            +.
                                                            +├── README.md
                                                            +└── client
                                                            +   └── ..
                                                            +
                                                            +~/pub$ git lg
                                                            +* 5de880b - pub: add client (HEAD -> master)
                                                            +* ff12305 - pub: initial commit
                                                            +
                                                            +~/mono$ exa --tree
                                                            +.
                                                            +├── README.md
                                                            +└── backend
                                                            +   └── ..
                                                            +
                                                            +~/mono$ git lg
                                                            +* e89ca6f - mono: add backend (HEAD -> master)
                                                            +* 5017487 - mono: initial commit
                                                            +

                                                            Ultimately we'd like our mono repo to look like:

                                                            $ ~/mono$ exa --tree
                                                            +.
                                                            +├── README.md
                                                            +├── backend
                                                            +  └── ..
                                                            +└── pub-dir # `pub-dir` will contain the `pub` subrepo
                                                            +   ├── README.md
                                                            +   └── client
                                                            +      └── ..
                                                            +

                                                            The published pub subrepo will look the same immediately after conversion, but will exist as a "projected" view of the mono repo.

                                                            (1) move all files in pub into the subdirectory #

                                                            The first step is to prepare the pub subrepo by creating a commit that moves all files into the desired future subdirectory of the monorepo.

                                                            For this example, we'll move all the files in pub into a new pub-dir subdirectory:

                                                            # prepare public repo by moving all files into new `pub-dir` subdir.
                                                            +~/pub$ git branch migration
                                                            +~/pub$ mkdir ./pub-dir
                                                            +~/pub$ git ls-tree -z --name-only HEAD \
                                                            +	| xargs -0 -I{} git mv "{}" ./pub-dir/
                                                            +~/pub$ git commit -m "pub: prepare for monorepo migration"
                                                            +
                                                            +~/pub$ git lg
                                                            +* 33708aa - pub: prepare for monorepo migration (HEAD -> migration)
                                                            +* 5de880b - pub: add client (master)
                                                            +* ff12305 - pub: initial commit
                                                            +

                                                            This approach preserves the histories in both repos and doesn't require rewriting the public repo's existing history. When we push new changes from the mono repo to the pub subrepo, the existing public repo will continue to have its original history, just with new commits added on top!

                                                            (2) git merge --allow-unrelated-histories #

                                                            Once the pub repo is prepared, we move into the mono repo and merge the two independent histories into one.

                                                            The key trick here is to use git merge --allow-unrelated-histories, which lets us have two "root" initial commits in the repo. In other words, our git history is no longer a single tree, but a "forest", which eventually grows together into one linear history.

                                                            In diagram form:

                                                            * - mono+pub: merged linear history
                                                            +|
                                                            +⁞
                                                            +|
                                                            +* - mono+pub: merge commit
                                                            +|\
                                                            +| *
                                                            +*  \
                                                            +|   *
                                                            +⁞   ⁞
                                                            +⁞   * - pub: initial commit
                                                            +|
                                                            +* - mono: initial commit
                                                            +

                                                            Let's do that now. We import all commits on master from the subrepo into the main mono repo. Best part: this works flawlessly with git blame!

                                                            # Fetch the public repo from a local directory or remote url.
                                                            +# In our case `pub` is just in the parent directory:
                                                            +~/mono$ git remote add pub ../pub
                                                            +~/mono$ git fetch --no-tags pub migration
                                                            +~/mono$ git merge --allow-unrelated-histories pub/migration
                                                            +
                                                            +# See the two independent histories merged into one linear
                                                            +# history, without losing either history.
                                                            +~/mono$ git lg
                                                            +*   3888a45 - mono: merge pub repo into subdir (HEAD -> master)
                                                            +|\
                                                            +| * 33708aa - pub: prepare for monorepo migration (pub/migration)
                                                            +| * 5de880b - pub: add client (pub/master)
                                                            +| * ff12305 - pub: initial commit
                                                            +* e89ca6f - mono: add backend
                                                            +* 5017487 - mono: initial commit
                                                            +
                                                            +# Push the migrated `mono` history.
                                                            +~/mono$ git push origin master
                                                            +

                                                            Note: you can do this without git push'ing until the end, but it's somewhat tedious to describe in tutorial format.

                                                            (3) git push new subrepo history upstream #

                                                            Now that we have all the subrepos merged into mono, we only need to make changes in one place--no more PRs split across repos!

                                                            Of course we still want changes to the subrepos inside mono to get pushed out to the public repos. We can accomplish this with git subtree split. We'll do this in a fresh clone, since it mangles the current repo state...

                                                            # We project the monorepo history into it's public-only form.
                                                            +# This approach completely preserves the original public commits!
                                                            +#
                                                            +# NOTE: the subshell:
                                                            +#
                                                            +# ```
                                                            +# git rev-list --max-parents=0 pub/migration | tail --lines=1
                                                            +# ```
                                                            +#
                                                            +# simply picks out the root initial commit from the `pub`
                                                            +# subrepo history.
                                                            +
                                                            +# Get a fresh clone of the `mono` repo.
                                                            +~/$ git clone <origin-mono-repo-git-url> mono && cd mono
                                                            +~/mono$ git remote add pub <origin-pub-repo-git-url>
                                                            +~/mono$ git fetch pub
                                                            +~/mono$ git switch master
                                                            +
                                                            +# Project the `pub` subrepo history from the `mono` repo history.
                                                            +~/mono$ git subtree split \
                                                            +	--prefix=pub-dir/ \
                                                            +	--onto=$(git rev-list --max-parents=0 pub/migration | tail --lines=1)
                                                            +198017b02ffa2d45f301f6b9ba6424c4e849251b
                                                            +~/mono$ git reset --hard 198017b02ffa2d45f301f6b9ba6424c4e849251b
                                                            +
                                                            +# This is the "projected" `pub` repo history with new commits from
                                                            +# the `mono` repo.
                                                            +#
                                                            +# Note: commits that don't touch the `pub-dir/` subrepo will be
                                                            +# safely ignored.
                                                            +~/mono$ git lg
                                                            +* 198017b - mono+pub: this commit touches files on / and pub-dir/ (HEAD -> master)
                                                            +* 3269fbc - pub: this commit only touches files in pub-dir/
                                                            +* c7b8b55 - pub: prepare for monorepo migration
                                                            +* 5de880b - pub: add client (pub/master)
                                                            +* ff12305 - pub: initial commit
                                                            +
                                                            +# Push the projected `pub` history to the upstream `pub` repo.
                                                            +~/mono$ git push pub master
                                                            +

                                                            Note: If we use git subtree split without --onto=<pub-initial-commit>, it will fail to determine the original subrepo root commit. Instead it will just squash all changes pre-merge, which is not what we want!

                                                            appendix #

                                                            This section contains other alternative approaches that didn't work well for one reason or another. Feel free to skip everything below.

                                                            (1) more janky git mv all files into subdir #

                                                            ~/pub$ git ls-files \
                                                            +	| sed -n -E "s/^([^\/]*)\/?.*$/\1/p" \
                                                            +	| uniq \
                                                            +	| grep -v "^pub-dir" \
                                                            +	| xargs -I{} git mv "{}" ./pub-dir/
                                                            +

                                                            (1) (alt) rewrite history into subdirectory #

                                                            You can also use git filter-repo to rewrite the whole commit history, as-if it had been written inside a subdirectory from the beginning:

                                                            # install the `git filter-repo` tool, which replaces the (apparently
                                                            +# unsafe?) built-in filter-branch
                                                            +(deb)$ sudo apt install git-filter-repo
                                                            +(macOS)$ brew install git-filter-repo
                                                            +
                                                            +# After this command, all files in the current commit and all past
                                                            +# commits will be moved into the public-dir/ subdirectory.
                                                            +#
                                                            +# You'll need to do this in fresh repo clone, since this command trashes
                                                            +# all repo commits.
                                                            +~/pub$ git filter-repo --to-subdirectory-filter pub-dir
                                                            +

                                                            This approach will require a force-push, overwriting the original pub repo history as the later git subtree split doesn't appear to be fully lossless in this case, causing the commit hashes change. Note: this will only affect the commit hashes of the pub repo history after push. The changes in each commit will still appear (almost) exactly the same, i.e., they're still in the root directory.

                                                            (2) (alt) git subrepo #

                                                            Skip step (1) if you use this approach.

                                                            The git subrepo tool is a user-friendly alternative to the git submodule and git subtree commands.

                                                            (macOS)$ brew install git-subrepo
                                                            +
                                                            +# git subrepo clone <remote-url> <subdir>
                                                            +~/mono$ git subrepo clone ../pub ./pub-dir
                                                            +

                                                            Unfortunately, git subrepo clone squashes all the commit history before the merge. If you're just looking to vendor a dependency or don't care about the original history, this approach might be for you.

                                                            (2) (alt) git subtree add #

                                                            Skip step (1) if you use this approach.

                                                            git subtree is a built-in tool that lets you keep other repos phyiscally inside your main repo. If you don't care about git blame working, then this is an easier method.

                                                            # git subtree add --prefix=<subdir> <remote-url> <remote-ref>
                                                            +~/mono$ git subtree add --prefix=pub-dir/ ../pub master
                                                            +

                                                            git subtree add at least preserves the original history, but git blame only works down to the merge commit for subtree files. :'(

                                                            (2) (alt) git read/write/commit-tree #

                                                            Skip step (1) if you use this approach.

                                                            Using some low-level git porcelain, we can merge the subrepo into a subdirectory without touching the subrepo. This method effectively creates a new tree object in the git db whose contents are a single subdirectory with the pub/master root tree. We then create a merge commit pointing to (1) the existing mono repo master commit and (2) the new manually created commit.

                                                            Unfortunately, while the end result looks almost the same as [[#(1) move all files in pub into the subdirectory]], it appears to break git blame. :'(

                                                            ~/mono$ git remote add public ../public
                                                            +~/mono$ git fetch --no-tags public master
                                                            +~/mono$ git read-tree --prefix=public/ public/master
                                                            +~/mono$ git write-tree
                                                            +f1b1ee12e1d679ec84c282049102e2654efc4b67
                                                            +
                                                            +~/mono$ git commit-tree f1b1ee12e1d679ec84c282049102e2654efc4b67 \
                                                            +	-p master -p public/master -m "monorepo merge"
                                                            +046d3298b9976d50fa379fa071f57bc1158aca5b
                                                            +
                                                            +~/mono$ git reset 046d3298b9976d50fa379fa071f57bc1158aca5b && git restore .
                                                            +
                                                            +~/mono$ git lg
                                                            +*   854b553 - monorepo merge (HEAD -> master)
                                                            +|\
                                                            +* | 5b02f51 - mono: add backend (origin/master)
                                                            +| * 7709d49 - pub: add client (public/master)
                                                            +

                                                            other monorepo tools #

                                                            1. (java) google/copybara
                                                            2. (hack) facebook/fbshipit - Copy commits b/w repos
                                                            3. (php) symplify/monorepo-split-gh-action
                                                            4. (sh) ingydotnet/git-subrepo
                                                            5. (py) newren/git-filter-repo
                                                            6. (go) splitsh/lite
                                                            7. (sh) SimonBaeumer/sync-monorepo
                                                            8. \[ \]
                                                            \ No newline at end of file diff --git a/misc/index.html b/misc/index.html new file mode 100644 index 0000000000..9b7c2da43e --- /dev/null +++ b/misc/index.html @@ -0,0 +1,73 @@ +misc | philip's notes

                                                            misc

                                                            arm target triples →

                                                            2021-12-02 · 1 min read

                                                            envsubst →

                                                            2022-10-28 · 1 min read

                                                            git multirepo to monorepo →

                                                            2022-08-16 · 9 min read

                                                            kintsugi →

                                                            2022-12-15 · 6 min read

                                                            optimization solvers →

                                                            2022-04-21 · 1 min read

                                                            pop_OS! tweaks →

                                                            2022-12-11 · 1 min read

                                                            prepping RPI for embedded dev →

                                                            2021-02-14 · 2 min read

                                                            rgbxmas →

                                                            2022-12-21 · 21 min read

                                                            scanning QR codes on desktop →

                                                            2021-12-06 · 1 min read

                                                            uptime to downtime conversion →

                                                            2022-03-25 · 1 min read

                                                            water distillation setup →

                                                            2022-03-16 · 1 min read

                                                            \ No newline at end of file diff --git a/misc/kintsugi/index.html b/misc/kintsugi/index.html new file mode 100644 index 0000000000..7d592266de --- /dev/null +++ b/misc/kintsugi/index.html @@ -0,0 +1,91 @@ +kintsugi | philip's notes

                                                            kintsugi

                                                            2022-12-15 · 6 min read

                                                              Kintsugi (金継ぎ, "golden joinery") is the Japanese art of repairing broken pottery by mending the areas of breakage with lacquer dusted or mixed with powdered gold, silver, or platinum.

                                                              As a philosophy, it treats breakage and repair as part of the history of an object, rather than something to disguise.

                                                              istockphoto-1280390209-612x612.jpg

                                                              istockphoto-1280373274-612x612.jpg

                                                              kintsugi-bowl-01.jpg

                                                              kintsukuroi-orig.jpg

                                                              786dfe6f88a6128908d4efc0f08f6478b2-Kintsugi-Plate.rhorizontal.w700.webp

                                                              514CqlmSOL_AC_SL1272.jpg

                                                              etape-6-kintsugi-sublimez.webp

                                                              First, watch this introductory 5 min video: https://www.youtube.com/watch?v=QEJ23t940UY

                                                              philip's first attempt #

                                                              With the broken pieces in front of you, first "dry fit" them together and plan the order you'll join each piece.

                                                              The fewer pieces you have, the easier it'll be. Two or three separate pieces seems best as far as outcome, but you usually don't get to choose how your favorite bowl shatters on the kitchen floor : )

                                                              Lightly sand the edges, then wash the pieces to get rid of the dust. Quickly dry with a paper towel.

                                                              Now you're ready to glue pieces together! You can either try to glue everything in one go, or play it safe and glue one section at a time, letting the join dry for an hour or two and only then gluing the next section. I tried to glue all 5 of my pieces together at once and it was definitely too much. Next attempt I'll probably go one-at-a-time.

                                                              Prepare the glue and (fake) gold powder mix. Now's also a good time to lay out a piece of cardboard to work on. Uncap the epoxy (don't worry, it's resealable!) and press out so you get even parts of each epoxy component. Then put a small bit of gold powder on the liquids. You need a lot less than you think! Add just a little bit, mix in with the epoxy, and see if it looks good. Worst case it looks a bit thin and you just add some more powder.

                                                              Mix the epoxy thoroughly. I spent maybe 1m 30sec mixing. Really scrape up the stuff on the surface and mix it up, otherwise the epoxy won't bond properly.

                                                              With a cheap wooden chopstick or plastic knife, gather up a little gold glue and bead it along one edge of a piece. You want enough so that it bulges out just a little when pressed together. One good reason to do a pair of pieces at a time is that you'll learn how much you need after the first join, and won't be rushed on the next. You may also need to add a little extra to fill in areas where the ceramics are chipped and don't sit flush.

                                                              Press together the two glued pieces and hold until it sets. Repeat for all the different pieces.

                                                              Once the piece has dried, you can do a final "touch up" with an x-acto knife. Scrape off any stray splatters or cut-even any messy lines. Do this carefully so you don't leave any big marks.

                                                              If you really mess up and accidentally smudge the glue before it's set (like I did), or just don't like the look, you can try again. Take an x-acto knife and scrape/cut off the glue above the join, leaving the pieces still glued together and the surface now flush. Maybe sand it a bit too? Who knows. Unfortunately, the glue beneath the surface isn't as shiny, so mix some more glue + gold powder and this time lay a small, thin layer on the already-glued surface.

                                                              The pros seem to do this by painting a clear glue on the surface with a very thin brush, then dusting the gold powder on top. I don't have a brush though, so I just mixed the glue+powder and used another chopstick.

                                                              As a final note, the epoxy I bought doesn't appear to be food safe, so don't eat with your repaired ceramics!

                                                              other helpful resources #

                                                              A useful comment from the video:

                                                              Firstly, if it's for something you eat on then it needs to be food-safe this is less to do with actually eating it and more about toxic stuff that can come out when you wash it or if it comes into contact with acidic foods or something. Food safe glue sometimes it's sold as 'epoxy' rather than glue. The recommendation is to ask your local arts & craft store about it as there are literally hundreds of brands.

                                                              Secondly, even if you find food-safe glue just beware that most glues are not designed to withstand boiling water so gluing a teapot like this might not be the best idea.

                                                              Thirdly, the recommendation is to use a two-part mix glue (like you have to add the parts together first before gluing) they are usually slower drying and thicker. You want the glue to make up part of the crack (as compared to superglue which is so thin you can effectively attach two pieces together with no gap) Another recommendation is to mix the gold powder in with the glue first, so it's gold powder suspended in the glue. just because the dusting on at the end makes quite a thin covering and it can wash off easily if you rub it however if you are using actual gold then don't do that as it's a huge waste. We used craft store gold powder.

                                                              Lastly, another recommendation is to glue it first, then sand it back, and then use a fine brush to add some more glue and gold powder so the lines are thinner, more delicate, and flush with the ceramic.

                                                              Unfortunately, the epoxy I bought doesn't appear the be food safe, so these will just have to be for display only.

                                                              Another nice video: https://youtu.be/eO9CnS-NqO8

                                                              The next step is to sand the edges. It took me about an hour. My theory was to sand the "edge-of-the-edge" on each piece, so there would be a bit of a gap between two broken pieces, but the two pieces would still fit together exactly in the mostly unsanded middle.

                                                              Swap between sanding an edge, then fitting it together and looking at the gap, then back to sanding some more. Imagine there is gold between the gap; keep sanding if you want more gold to show. If you don't sand much, you'll get a hairline strip of gold. If you sand more, you'll get a wider, thicker join.

                                                              Though this didn't work as well as I thought.

                                                              wishlist for next time #

                                                              \ No newline at end of file diff --git a/misc/optimization solvers/index.html b/misc/optimization solvers/index.html new file mode 100644 index 0000000000..9a171303c7 --- /dev/null +++ b/misc/optimization solvers/index.html @@ -0,0 +1,91 @@ +optimization solvers | philip's notes

                                                              optimization solvers

                                                              2022-04-21 · 1 min read

                                                                Useful HN thread with pointers

                                                                MiniZinc Challenge - Benchmarks and optimality for different solvers on different problems

                                                                Hans Mittelmann - Benchmarks for Optimization Software

                                                                Google OR-Tools #

                                                                Google OR-Tools

                                                                • Large suite of solvers for ILP (via different backends), built-in LP, graph flows, combinatorial optimization.
                                                                • Open source, Apache 2.0, lots of activity

                                                                OSQP #

                                                                Operator Splitting Quadratic Program (OSQP)

                                                                • supports convex optimization problems
                                                                • claims performance competitive with Gurobi
                                                                • free, open-source, academic license
                                                                • written in C, easily embeddable, has a Rust interface osqp.rs
                                                                • a CUDA implementation also exists? very nice. cuosqp

                                                                Gurobi #

                                                                Gurobi

                                                                • commerical, paid licenses
                                                                • license model not really tuned for production deployment to cloud infrastructure
                                                                • by far the most comprehensive toolkit
                                                                • typically the fastest on most problems I've used it on
                                                                • used it a long time ago for a CS170 project phlip9/Kidney-Exchange-Solvers which needed a Mixed-Integer Linear Problem (MILP) solver
                                                                \ No newline at end of file diff --git a/misc/pop_OS! tweaks/index.html b/misc/pop_OS! tweaks/index.html new file mode 100644 index 0000000000..46a97fe47e --- /dev/null +++ b/misc/pop_OS! tweaks/index.html @@ -0,0 +1,92 @@ +pop_OS! tweaks | philip's notes

                                                                pop_OS! tweaks

                                                                2022-12-11 · 1 min read

                                                                  UI gets slow and choppykjkj #

                                                                  • restart gnome-shell: ALT-F2 > "r" > Enter

                                                                  Try also disabling ubuntu-appindicators extension: Super > Extensions > Ubuntu AppIndicators > Disable

                                                                  Graphics drivers stop working after apt upgrade / kernel update #

                                                                  The nvidia graphics drivers are likely too old for the new kernel version.

                                                                  For example, when I was upgrading to the new kernel (6.1.8 I think?), my older nvidia drivers (510) failed to build the nvidia/510 dkms kernel module for some inscrutable reason.

                                                                  You can procrastinate on fixing this for a bit, by setting the previous kernel version as the default boot kernel. Do this by rebooting while holding down SPACE. In the boot recovery menu, press d while highlighting the old kernel config to set as default. Then hit enter to boot into the previous, working configuration.

                                                                  To actually repair the issue, reboot up to the login screen. Trying to login will fail to a black screen; instead, hit ALT-F5 to enter a raw TTY.

                                                                  Then update to the latest nvidia drivers:

                                                                  $ sudo ubuntu-drivers install
                                                                  +

                                                                  After rebooting, the issue was fixed for me.

                                                                  \ No newline at end of file diff --git a/misc/prepping RPI for embedded dev/index.html b/misc/prepping RPI for embedded dev/index.html new file mode 100644 index 0000000000..9a4d1e2e73 --- /dev/null +++ b/misc/prepping RPI for embedded dev/index.html @@ -0,0 +1,106 @@ +prepping RPI for embedded dev | philip's notes

                                                                  prepping RPI for embedded dev

                                                                  2021-02-14 · 2 min read

                                                                    host: SSH into new rpi #

                                                                    $ ssh rpi00.local
                                                                    +

                                                                    rpi: update and install basic tools #

                                                                    $ sudo apt update && sudo apt upgrade
                                                                    +$ sudo apt install vim
                                                                    +

                                                                    rpi: configure systemd journal to only log to RAM #

                                                                    This step helps avoid lots of IO writes to the SD Card, which will significantly extend its lifetime.

                                                                    $ sudo cat > /etc/systemd/journald.conf.d/ram-only-journal.conf <<EOF
                                                                    +[Journal]
                                                                    +Storage=volatile
                                                                    +RuntimeMaxUse=100M
                                                                    +ForwardToSyslog=no
                                                                    +EOF
                                                                    +

                                                                    rpi: (optional) set rpi hostname #

                                                                    It takes too long to build a new image with a different hostname, so we'll set the hostname after the fact. Make sure the hostname is not the default raspberrypi.

                                                                    $ sudo hostnamectl set-hostname kyoto
                                                                    +

                                                                    rpi: (optional) add other ssh pubkeys #

                                                                    Forgot to add this when formatting the SD card...

                                                                    $ echo "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIB3x6Xx0674lyf2DGstduaGjyA1ARqdeGc6PgHZMbwCK philiphayes@philiphayes-mbp" >> ~/.ssh/authorized_keys
                                                                    +

                                                                    rpi: (optional) enable kernel I2C bus #

                                                                    $ sudo raspi-config
                                                                    +

                                                                    Select Interface Options > Enable I2C

                                                                    rpi: (optional) enable kernel SPI Bus #

                                                                    $ sudo raspi-config
                                                                    +

                                                                    Select Interface Options > Enable SPI

                                                                    rpi: (optional) enable kernel PWM controller #

                                                                    In /boot/config, add the line: dtoverlay=pwm.

                                                                    rpi: reboot #

                                                                    $ sudo reboot
                                                                    +

                                                                    host: install cross-compiling toolchain #

                                                                    $ sudo apt install gcc-arm-linux-gnueabihf
                                                                    +
                                                                    \ No newline at end of file diff --git a/misc/rgbxmas/index.html b/misc/rgbxmas/index.html new file mode 100644 index 0000000000..8b501f5ac6 --- /dev/null +++ b/misc/rgbxmas/index.html @@ -0,0 +1,1067 @@ +rgbxmas | philip's notes

                                                                    rgbxmas

                                                                    2022-12-21 · 21 min read

                                                                    setup #

                                                                    First, plug the USB cable into your machine (macOS, Windows, Linux, whatever). The board should power up and show the little demo; press the UP button to go to the next screen.

                                                                    On your machine, a USB-drive called CIRCUITPY should also pop up. This is the Adafruit Matrix Portal set up with CircuitPython ready for programming.

                                                                    The Matrix Portal's got lots of features and room for other peripherals and sensors. it can even connect to stuff on the internet, so you can make a weather display, read some tweets, show the bitcoin price... : )

                                                                    In the CIRCUITPY directory, there should be a code.py file. This contains the code for the demo, which is also listed below, see: demo code.

                                                                    CircuitPython makes it super painless to write code for little microcontroller boards like this. It ain't gonna be the fastest, but it's pretty easy to get stated. To get some basic code going, you literally just edit the code.py file, save it, and the board will auto-restart with the new updates.

                                                                    I'd probably start with the Mu editor here: https://codewith.mu/en/download. It's bare-bones, but it'll work in the beginning.

                                                                    I've already setup the board so everything should be good to go. With the board plugged in, just open the Mu editor, press the "Mode" icon, and select "CircuitPython". Then you should be able to edit the code, save, and see the changes appear on the device.

                                                                    Also check out Adafruit's MatrixPortal overview: https://learn.adafruit.com/adafruit-matrixportal-m4/overview

                                                                    and the CircuitPython Essentials guide: https://learn.adafruit.com/circuitpython-essentials/circuitpython-essentials

                                                                    and the detailed CircuitPython core modules documentation: https://docs.circuitpython.org/en/latest/shared-bindings/index.html

                                                                    Here's a basic example to get started: it blinks an LED on the board itself (not the display) on/off every 0.5 seconds.

                                                                    # file: code.py
                                                                    +
                                                                    +import board
                                                                    +import digitalio
                                                                    +import time
                                                                    +
                                                                    +# This a the little red LED on the MatrixPortal m4 board,
                                                                    +# not the big LED matrix panel. It's located right above
                                                                    +# the "adafruit" logo.
                                                                    +led = digitalio.DigitalInOut(board.LED)
                                                                    +led.direction = digitalio.Direction.OUTPUT
                                                                    +
                                                                    +# This block loops endlessly
                                                                    +while True:
                                                                    +    # Turn on the LED, then wait for 0.5 seconds
                                                                    +    led.value = True
                                                                    +    time.sleep(0.5)
                                                                    +
                                                                    +    # Turn off the LED, then wait for 0.5 seconds
                                                                    +    led.value = False
                                                                    +    time.sleep(0.5)
                                                                    +

                                                                    getting help from the REPL #

                                                                    The panel opened by the "Serial" button doesn't just show the print output of the device, but also let's you interact with it. This is called a REPL (Read-Evaluate-Print-Loop) and lets you quickly play with bits of code or explore different modules.

                                                                    To enter the REPL:

                                                                    If your program has finished, you should see this message:

                                                                    Auto-reload is on. Simply save files over USB to run them or enter REPL to disable.
                                                                    +code.py output:
                                                                    +
                                                                    +Code done running.
                                                                    +
                                                                    +Press any key to enter the REPL. Use CTRL-D to reload.
                                                                    +

                                                                    In this case just press the "Enter" key in the Serial box and you should see the REPL pop up:

                                                                    Adafruit CircuitPython 7.3.3 on 2022-08-29; Adafruit Matrix Portal M4 with samd51j19
                                                                    +>>>
                                                                    +

                                                                    If some code is running (like the infinite blink example above), you may need to hit CTRL-C to stop the program first (though it seems a bit flaky, I had to hold the keys down for a second or two to get it to work).

                                                                    With the REPL open, we can see all the available built-in modules by typing "import " (with the space) then hitting the TAB key to auto-complete:

                                                                    >>> import ^TAB
                                                                    +builtins        micropython     __future__      _asyncio
                                                                    +_bleio          adafruit_bus_device
                                                                    +adafruit_bus_device.i2c_device  adafruit_bus_device.spi_device
                                                                    +adafruit_pixelbuf               alarm           analogio
                                                                    +array           atexit          audiobusio      audiocore
                                                                    +audioio         audiomixer      audiomp3        binascii
                                                                    +bitbangio       bitmaptools     board           busio
                                                                    +collections     countio         digitalio       displayio
                                                                    +errno           fontio          framebufferio   frequencyio
                                                                    +gc              getpass         gifio           i2cperipheral
                                                                    +io              json            keypad          math
                                                                    +microcontroller                 msgpack         neopixel_write
                                                                    +onewireio       os              ps2io           pulseio
                                                                    +pwmio           rainbowio       random          re
                                                                    +rgbmatrix       rotaryio        rtc             samd
                                                                    +sdcardio        select          storage         struct
                                                                    +supervisor      synthio         sys             terminalio
                                                                    +time            touchio         traceback       usb_cdc
                                                                    +usb_hid         usb_midi        uselect         vectorio
                                                                    +watchdog        zlib
                                                                    +

                                                                    Don't worry about what most of these do for now.

                                                                    If you want to get very very detailed documentation about these modules, you can check the CircuitPython Modules reference.

                                                                    Let's check out the time module we used in the previous example:

                                                                    >>> import time
                                                                    +>>> help(time)
                                                                    +object <module 'time'> is of type module
                                                                    +  __name__ -- time
                                                                    +  monotonic -- <function>
                                                                    +  sleep -- <function>
                                                                    +  struct_time -- <class 'struct_time'>
                                                                    +  localtime -- <function>
                                                                    +  mktime -- <function>
                                                                    +  time -- <function>
                                                                    +  monotonic_ns -- <function>
                                                                    +

                                                                    We can get the number of seconds since the board powered on by calling time.monotonic():

                                                                    >>> time.monotonic()
                                                                    +1003.53
                                                                    +

                                                                    We use this one a lot in the demo.

                                                                    From the REPL we can define functions and variables just like we expect:

                                                                    >>> def f(x):
                                                                    +	# f(x) = 4x^2 - 4x - 24
                                                                    +	x_squared = x**2
                                                                    +    return 4*x_squared - 4*x - 24
                                                                    +>>> f(0)
                                                                    +-24
                                                                    +>>> print("wow look f(3) is zero:", f(3))
                                                                    +

                                                                    We can exit the REPL again by hitting CTRL-D.

                                                                    displaying text #

                                                                    This example requires the adafruit_display_text and adafruit_matrixportal libraries, which are not built-in modules. Most interesting libraries are not built-in, as they are updated more frequently than the base modules and would otherwise take up too much space on the device.

                                                                    To install these community libraries, go to https://circuitpython.org/libraries and download the zip file under "Bundle for Version 7.X" (I've installed CircuitPython version 7.3.3).

                                                                    Opening the adafruit-circuitpython-bundle-7.x.zip file there should be a lib folder, with the adafruit_display_text and adafruit_matrixportal folders inside (among many others).

                                                                    Copy the those two folders from the .zip file to the mounted CIRCUITPY/lib/ folder to install the library.

                                                                    import terminalio
                                                                    +
                                                                    +from adafruit_display_text import label
                                                                    +from adafruit_matrixportal.matrix import Matrix
                                                                    +
                                                                    +# This call creates the Matrix display object.
                                                                    +#
                                                                    +# `bit_depth` can range from 1 to 6; higher numbers allow
                                                                    +# for more color shades to be displayed, but increase memory
                                                                    +# usage and slow down your Python code.
                                                                    +#
                                                                    +# If you just want to show primary colors
                                                                    +# plus black and white, use 1. Otherwise, try 3, 4 and 5
                                                                    +# to see which effect you like best.
                                                                    +matrix = Matrix(
                                                                    +    bit_depth=4,
                                                                    +)
                                                                    +display = matrix.display
                                                                    +
                                                                    +# this is a text area with two lines like
                                                                    +# |       Hello       |
                                                                    +# |       World       |
                                                                    +text_area = label.Label(
                                                                    +    terminalio.FONT,
                                                                    +    text="Hello\nWorld", # '\n' stands for newline
                                                                    +    color=0x113311, # this is the RGB (Red Green Blue) color
                                                                    +)
                                                                    +# this is the starting position of the text on the board,
                                                                    +# counting pixels from the top-left.
                                                                    +text_area.x = 16
                                                                    +text_area.y = 8
                                                                    +display.show(text_area)
                                                                    +
                                                                    +# You can add more effects in this loop. For instance, maybe
                                                                    +# you want to set the color of each label to a different
                                                                    +# value
                                                                    +while True:
                                                                    +    display.refresh()
                                                                    +

                                                                    demo code #

                                                                    This demo shows a few screens with some cool graphics.

                                                                    Note that it requires the adafruit_display_text library is copied into the CIRCUITPY/lib/ directory. See displaying text for more details on libraries.

                                                                    # code.py
                                                                    +
                                                                    +import random
                                                                    +import time
                                                                    +import math
                                                                    +from math import trunc, sin, cos, sqrt
                                                                    +
                                                                    +import board
                                                                    +import countio
                                                                    +import digitalio
                                                                    +import displayio
                                                                    +import framebufferio
                                                                    +import rgbmatrix
                                                                    +import terminalio
                                                                    +import vectorio
                                                                    +
                                                                    +from adafruit_display_text import label
                                                                    +
                                                                    +# create a new `Display` object for the big RGB matrix display
                                                                    +def make_display(bit_depth=6, brightness=0.5):
                                                                    +    displayio.release_displays()
                                                                    +    matrix = rgbmatrix.RGBMatrix(
                                                                    +        width=64,
                                                                    +        height=32,
                                                                    +        bit_depth=bit_depth,
                                                                    +        # NOTE: for some reason the board has reversed the green and blue pins,
                                                                    +        # so we just swap them here to get standard RGB ordering
                                                                    +        rgb_pins=[
                                                                    +            board.MTX_R1,
                                                                    +            board.MTX_B1,
                                                                    +            board.MTX_G1,
                                                                    +            board.MTX_R2,
                                                                    +            board.MTX_B2,
                                                                    +            board.MTX_G2,
                                                                    +        ],
                                                                    +        addr_pins=[
                                                                    +            board.MTX_ADDRA,
                                                                    +            board.MTX_ADDRB,
                                                                    +            board.MTX_ADDRC,
                                                                    +            board.MTX_ADDRD,
                                                                    +        ],
                                                                    +        clock_pin=board.MTX_CLK,
                                                                    +        latch_pin=board.MTX_LAT,
                                                                    +        output_enable_pin=board.MTX_OE
                                                                    +    )
                                                                    +    display = framebufferio.FramebufferDisplay(matrix)
                                                                    +    display.brightness = brightness
                                                                    +    return display
                                                                    +
                                                                    +def rgb_to_int(r, g, b):
                                                                    +    return (r << 16) | (g << 8) | b
                                                                    +
                                                                    +def percent_to_byte(t):
                                                                    +    return round(t * 255.0) & 255
                                                                    +
                                                                    +def hue_to_rgb_ratio(p, q, t):
                                                                    +    if t < 0.0:
                                                                    +        t += 1.0
                                                                    +    elif t > 1.0:
                                                                    +        t -= 1.0
                                                                    +
                                                                    +    if t < 0.166667:
                                                                    +        return p + (q - p) * 6.0 * t
                                                                    +    elif t < 0.5:
                                                                    +        return q
                                                                    +    elif t < 0.666667:
                                                                    +        return p + (q - p) * (0.666667 - t) * 6.0
                                                                    +    else:
                                                                    +        return p
                                                                    +
                                                                    +# convert Hue-Saturation-Lightness to RGB color
                                                                    +# `h` is the Hue, in degrees (0 -> 360)
                                                                    +# `s` is the Saturation, between 0.0 and 1.0
                                                                    +# `l` is the Lightness, between 0.0 and 1.0
                                                                    +def hsl(h, s, l):
                                                                    +    # all greys if saturation is 0
                                                                    +    if s == 0.0:
                                                                    +        l = percent_to_byte(l)
                                                                    +        return rgb_to_int(l, l, l)
                                                                    +
                                                                    +    h = h / 360.0
                                                                    +
                                                                    +    q = 0.0
                                                                    +    if l < 0.5:
                                                                    +        q = l * (1.0 + s)
                                                                    +    else:
                                                                    +        q = l + s - (l * s)
                                                                    +    p = 2.0 * l - q
                                                                    +
                                                                    +    r = percent_to_byte(hue_to_rgb_ratio(p, q, h + 0.333333))
                                                                    +    g = percent_to_byte(hue_to_rgb_ratio(p, q, h))
                                                                    +    b = percent_to_byte(hue_to_rgb_ratio(p, q, h - 0.333333))
                                                                    +
                                                                    +    return rgb_to_int(r, g, b)
                                                                    +
                                                                    +# the fractional part of a float. ex: `frac(1.75) == 0.75`.
                                                                    +def frac(x):
                                                                    +    return x - trunc(x)
                                                                    +
                                                                    +# clamp `x` so the output is always between `x_min` and `x_max`.
                                                                    +def clamp(x_min, x_max, x):
                                                                    +    return min(x_max, max(x_min, x))
                                                                    +
                                                                    +# linearly interpolate between `start` and `end`, using `t` between 0.0 and 1.0
                                                                    +# as the "interpolation distance"
                                                                    +def lerp(start, end, t):
                                                                    +    return t * start + (1.0 - t) * end
                                                                    +
                                                                    +# saw-tooth signal, between y = 0.0 and 1.0, with period = 1.0
                                                                    +def saw(t):
                                                                    +    return math.fabs(2.0 * frac(t) - 1.0)
                                                                    +
                                                                    +# exponential ease in-out function
                                                                    +# see: <https://easings.net/#easeInOutExpo>
                                                                    +# this is defined for x between 0.0 and 1.0
                                                                    +def ease_in_out_exp(x):
                                                                    +    if x < 0.5:
                                                                    +        return 0.5 * math.pow(2.0, 20.0 * x - 10.0)
                                                                    +    else:
                                                                    +        return 1.0 - 0.5 * math.pow(2.0, -20.0 * x + 10.0)
                                                                    +
                                                                    +# see: <https://mathworld.wolfram.com/SincFunction.html>
                                                                    +def sinc(x):
                                                                    +    a = math.pi * x
                                                                    +    return sin(a) / (a+0.001)
                                                                    +
                                                                    +def parabola(x, k):
                                                                    +    return math.pow(4.0 * x * (1.0 - x), k)
                                                                    +
                                                                    +class Screen:
                                                                    +    def __init__(self, display):
                                                                    +        pass
                                                                    +
                                                                    +    def update(self, display):
                                                                    +        pass
                                                                    +
                                                                    +# shows "PRESS UP >>", with the ">>" bouncing every few seconds.
                                                                    +class StartScreen(Screen):
                                                                    +    def __init__(self, display):
                                                                    +        group = displayio.Group()
                                                                    +
                                                                    +        # the "PRESS UP" text
                                                                    +        press_up = label.Label(terminalio.FONT, text="PRESS UP")
                                                                    +        press_up.x = 4
                                                                    +        press_up.y = 14
                                                                    +        group.append(press_up)
                                                                    +
                                                                    +        # the two '>' arrows on the right
                                                                    +        arrow_group = displayio.Group()
                                                                    +
                                                                    +        arrow_right_1 = label.Label(terminalio.FONT, text=">")
                                                                    +        arrow_right_1.x = 52
                                                                    +        arrow_right_1.y = 14
                                                                    +        arrow_group.append(arrow_right_1)
                                                                    +
                                                                    +        arrow_right_2 = label.Label(terminalio.FONT, text=">")
                                                                    +        arrow_right_2.x = 54
                                                                    +        arrow_right_2.y = 14
                                                                    +        arrow_group.append(arrow_right_2)
                                                                    +        group.append(arrow_group)
                                                                    +
                                                                    +        display.show(group)
                                                                    +
                                                                    +        self.arrow_group = arrow_group
                                                                    +
                                                                    +    def update(self, display):
                                                                    +        t = time.monotonic()
                                                                    +
                                                                    +        #  self.arrow_group.x = round(2.0 * ease_in_out_exp(0.5 * sin(3.0 * t) + 0.5) - 4.0)
                                                                    +
                                                                    +        #  t = math.fmod(t, 5.0)
                                                                    +        #  self.arrow_group.x = round(8.0 * sinc(0.54 * (t - 2.5)))
                                                                    +
                                                                    +        # repeat "bounce" every 3 sec
                                                                    +        t = math.fmod(t, 3.0)
                                                                    +        self.arrow_group.x = round(4.0 - 4.0 * parabola(0.333333 * t, 7))
                                                                    +
                                                                    +        display.refresh()
                                                                    +
                                                                    +# makes a big circle wave across the screen in a loop
                                                                    +class CircleScreen(Screen):
                                                                    +    def __init__(self, display):
                                                                    +        group = displayio.Group()
                                                                    +
                                                                    +        palette = displayio.Palette(2)
                                                                    +        palette[0] = hsl(215, 0.42, 0.34)
                                                                    +        palette[1] = hsl(0, 0, 0.0)
                                                                    +
                                                                    +        circle_outer = vectorio.Circle(
                                                                    +            pixel_shader=palette,
                                                                    +            radius=16,
                                                                    +            x=0,
                                                                    +            y=0,
                                                                    +            color_index=0,
                                                                    +        )
                                                                    +        group.append(circle_outer)
                                                                    +
                                                                    +        circle_inner = vectorio.Circle(
                                                                    +            pixel_shader=palette,
                                                                    +            radius=15,
                                                                    +            x=0,
                                                                    +            y=0,
                                                                    +            color_index=1,
                                                                    +        )
                                                                    +        group.append(circle_inner)
                                                                    +        display.show(group)
                                                                    +
                                                                    +        self.palette = palette
                                                                    +        self.group = group
                                                                    +
                                                                    +    def update(self, display):
                                                                    +        t = time.monotonic()
                                                                    +
                                                                    +        # make the circle wave across the screen
                                                                    +        self.group.x = round(math.fmod(64.0 * t, 110.0) - 25.0)
                                                                    +        self.group.y = int(8.0 * sin(3.0 * t)) + 16
                                                                    +
                                                                    +        # slowly rotate the hue of the circle over time
                                                                    +        t_color = 0.5 * sin(1.0 * t) + 0.5
                                                                    +        hue = lerp(0.0, 180.0, t_color)
                                                                    +        self.palette[0] = hsl(hue, 0.75, 0.50)
                                                                    +
                                                                    +        display.refresh()
                                                                    +
                                                                    +# test the display's color
                                                                    +class ColorTestScreen(Screen):
                                                                    +    def __init__(self, display):
                                                                    +        width = 64
                                                                    +        height = 32
                                                                    +        num_colors = 256
                                                                    +
                                                                    +        # start with all greyscale
                                                                    +        palette = displayio.Palette(num_colors)
                                                                    +        for idx in range(num_colors):
                                                                    +            palette[idx] = rgb_to_int(idx, idx, idx)
                                                                    +
                                                                    +        # fill the bitmap with 0..=255
                                                                    +        bm = displayio.Bitmap(width, height, num_colors)
                                                                    +        for y in range(height):
                                                                    +            for x in range(width):
                                                                    +                # use the same color every 8 pixels in the y-direction
                                                                    +                color_idx = (y // 8) * width + x
                                                                    +                bm[x, y] = color_idx
                                                                    +        bm.dirty()
                                                                    +
                                                                    +        tg = displayio.TileGrid(bm, pixel_shader=palette)
                                                                    +
                                                                    +        group = displayio.Group()
                                                                    +        group.append(tg)
                                                                    +
                                                                    +        display.show(group)
                                                                    +
                                                                    +        self.num_colors = num_colors
                                                                    +        self.palette = palette
                                                                    +        self.prev_update_t = time.monotonic()
                                                                    +
                                                                    +    def update(self, display):
                                                                    +        t = time.monotonic()
                                                                    +        dt = t - self.prev_update_t
                                                                    +
                                                                    +        # every 5 sec change the color spectrum to a random hue and saturation
                                                                    +        # with lightness evenly between 0.0 and 1.0
                                                                    +        if dt > 5.0:
                                                                    +            num_colors = self.num_colors
                                                                    +            hue = random.randint(0, 360)
                                                                    +            saturation = random.random()
                                                                    +            print(f"hue: {hue}, saturation: {saturation}")
                                                                    +
                                                                    +            for idx in range(num_colors):
                                                                    +                self.palette[idx] = hsl(hue, saturation, 0.5 * (idx / num_colors))
                                                                    +
                                                                    +            self.prev_update_t = t
                                                                    +            display.refresh()
                                                                    +
                                                                    +# run a random [Conway's Game of Life](https://www.wikiwand.com/en/Conway%27s_Game_of_Life)
                                                                    +# simulation every ~30 sec
                                                                    +class GameOfLifeScreen(Screen):
                                                                    +    def __init__(self, display):
                                                                    +        width = 64
                                                                    +        height = 32
                                                                    +        num_colors = 2
                                                                    +
                                                                    +        palette = displayio.Palette(num_colors)
                                                                    +
                                                                    +        bm1 = displayio.Bitmap(width, height, num_colors)
                                                                    +        bm2 = displayio.Bitmap(width, height, num_colors)
                                                                    +
                                                                    +        tg1 = displayio.TileGrid(bm1, pixel_shader=palette)
                                                                    +        tg2 = displayio.TileGrid(bm2, pixel_shader=palette)
                                                                    +
                                                                    +        g1 = displayio.Group()
                                                                    +        g1.append(tg1)
                                                                    +
                                                                    +        g2 = displayio.Group()
                                                                    +        g2.append(tg2)
                                                                    +
                                                                    +        display.show(g1)
                                                                    +
                                                                    +        self.width = width
                                                                    +        self.height = height
                                                                    +        self.iter = 0
                                                                    +        self.reset_after = 200
                                                                    +
                                                                    +        self.curr = bm1
                                                                    +        self.next = bm2
                                                                    +
                                                                    +        self.curr_group = g1
                                                                    +        self.next_group = g2
                                                                    +
                                                                    +        self.palette = palette
                                                                    +
                                                                    +    def randomize(self):
                                                                    +        curr = self.curr
                                                                    +        for idx in range(self.width * self.height):
                                                                    +            curr[idx] = random.random() < 0.333333
                                                                    +
                                                                    +        #  hue = random.randint(0, 360)
                                                                    +        #  saturation = (random.random() / 4.0) + 0.5
                                                                    +        #  lightness = (random.random() / 3.0) + 0.1
                                                                    +        #  self.palette[1] = hsl(hue, saturation, lightness)
                                                                    +
                                                                    +    def apply_life_rule(self):
                                                                    +        curr = self.curr
                                                                    +
                                                                    +        w = self.width
                                                                    +        h = self.height
                                                                    +
                                                                    +        for y in range(h):
                                                                    +            yyy = y * w
                                                                    +            ym1 = ((y + h - 1) & 31) * w
                                                                    +            yp1 = ((y + 1) & 31) * w
                                                                    +
                                                                    +            xm1 = w - 1
                                                                    +            for x in range(w):
                                                                    +                xp1 = (x + 1) & 63
                                                                    +                neighbors = (
                                                                    +                    curr[xm1 + ym1] + curr[xm1 + yyy] + curr[xm1 + yp1] +
                                                                    +                    curr[  x + ym1] +                   curr[  x + yp1] +
                                                                    +                    curr[xp1 + ym1] + curr[xp1 + yyy] + curr[xp1 + yp1]
                                                                    +                )
                                                                    +                self.next[x + yyy] = (neighbors == 3) or ((neighbors == 2) and curr[x + yyy])
                                                                    +                xm1 = x
                                                                    +
                                                                    +        self.curr = self.next
                                                                    +        self.next = curr
                                                                    +
                                                                    +        curr_group = self.curr_group
                                                                    +        self.curr_group = self.next_group
                                                                    +        self.next_group = curr_group
                                                                    +
                                                                    +    def update(self, display):
                                                                    +        t = time.monotonic()
                                                                    +
                                                                    +        # slowly change the color
                                                                    +        t_color = 0.5 * sin(1.0 * t) + 0.5
                                                                    +        hue = lerp(0.0, 180.0, t_color)
                                                                    +        self.palette[1] = hsl(hue, 0.75, 0.50)
                                                                    +
                                                                    +        # reset and randomize the state every `self.reset_after` iterations
                                                                    +        if self.iter == 0:
                                                                    +            self.randomize()
                                                                    +        else:
                                                                    +            self.apply_life_rule()
                                                                    +
                                                                    +        self.iter = (self.iter + 1) % self.reset_after
                                                                    +        display.show(self.curr_group)
                                                                    +
                                                                    +# a cool wavy pattern
                                                                    +class WarpScreen(Screen):
                                                                    +    def __init__(self, display):
                                                                    +        width = 64
                                                                    +        height = 32
                                                                    +        num_colors = 64
                                                                    +
                                                                    +        palette = displayio.Palette(num_colors)
                                                                    +        for idx in range(num_colors):
                                                                    +            #  palette[idx] = hsl(240, 0.8, 0.25 * (idx / num_colors))
                                                                    +            palette[idx] = hsl(265, 0.85, 0.95 * (idx / num_colors) + 0.05)
                                                                    +
                                                                    +        bm1 = displayio.Bitmap(width, height, num_colors)
                                                                    +        bm2 = displayio.Bitmap(width, height, num_colors)
                                                                    +
                                                                    +        tg1 = displayio.TileGrid(bm1, pixel_shader=palette)
                                                                    +        tg2 = displayio.TileGrid(bm2, pixel_shader=palette)
                                                                    +
                                                                    +        g1 = displayio.Group()
                                                                    +        g1.append(tg1)
                                                                    +
                                                                    +        g2 = displayio.Group()
                                                                    +        g2.append(tg2)
                                                                    +
                                                                    +        #  display.show(g1)
                                                                    +
                                                                    +        self.width = width
                                                                    +        self.height = height
                                                                    +        self.num_colors = num_colors
                                                                    +
                                                                    +        self.curr = bm1
                                                                    +        self.next = bm2
                                                                    +
                                                                    +        self.curr_group = g1
                                                                    +        self.next_group = g2
                                                                    +
                                                                    +    def update(self, display):
                                                                    +        width = self.width
                                                                    +        height = self.height
                                                                    +        num_colors = self.num_colors
                                                                    +        curr = self.curr
                                                                    +        next = self.next
                                                                    +
                                                                    +        # render to next framebuffer while current one is shown
                                                                    +
                                                                    +        t = time.monotonic()
                                                                    +
                                                                    +        for y in range(height):
                                                                    +            for x in range(width):
                                                                    +                tx = 20.0 * sin(0.01 * x) + 0.2 * t
                                                                    +                ty = 10.0 * sin(0.01 * y) + 0.2 * t
                                                                    +                l = (0.5 * sin(tx) * sin(ty)) + 0.5
                                                                    +                next[x, y] = round((num_colors - 1) * l)
                                                                    +
                                                                    +        # swap frame buffers
                                                                    +
                                                                    +        self.curr = next
                                                                    +        self.next = curr
                                                                    +
                                                                    +        curr_group = self.curr_group
                                                                    +        self.curr_group = self.next_group
                                                                    +        self.next_group = curr_group
                                                                    +
                                                                    +        # show new framebuffer
                                                                    +
                                                                    +        display.show(self.curr_group)
                                                                    +
                                                                    +
                                                                    +def noise(u, v):
                                                                    +    return sin(u) * sin(v)
                                                                    +
                                                                    +# [ [ 0.8 -0.5 ]
                                                                    +#   [ 0.5  0.8 ] ] dot [p_x, p_y] * 2
                                                                    +def mdp(x, y):
                                                                    +    return ((1.6 * x) - (1.0 * y), (1.0 * x) + (1.6 * y))
                                                                    +
                                                                    +def fbm4(x, y):
                                                                    +    f = 0.0
                                                                    +    f += 0.5000 * noise(x, y); (x, y) = mdp(x, y)
                                                                    +    f += 0.2500 * noise(x, y); (x, y) = mdp(x, y)
                                                                    +    f += 0.1250 * noise(x, y); (x, y) = mdp(x, y)
                                                                    +    f += 0.0625 * noise(x, y)
                                                                    +    return f / 0.9375
                                                                    +
                                                                    +# another cool pattern that rotates a bit
                                                                    +# uses the same `sin(x)*sin(y)` but run through a few octaves of modified
                                                                    +# [Fractional Brownian Motion](https://www.wikiwand.com/en/Fractional_Brownian_motion)
                                                                    +class Warp2Screen(Screen):
                                                                    +    def __init__(self, display):
                                                                    +        width = 64
                                                                    +        height = 32
                                                                    +        num_colors = 64
                                                                    +
                                                                    +        palette = displayio.Palette(num_colors)
                                                                    +        for idx in range(num_colors):
                                                                    +            #  palette[idx] = hsl(240, 0.8, 0.25 * (idx / num_colors))
                                                                    +            palette[idx] = hsl(15, 0.8, 0.6 * (idx / num_colors))
                                                                    +
                                                                    +        bm1 = displayio.Bitmap(width, height, num_colors)
                                                                    +        bm2 = displayio.Bitmap(width, height, num_colors)
                                                                    +
                                                                    +        tg1 = displayio.TileGrid(bm1, pixel_shader=palette)
                                                                    +        tg2 = displayio.TileGrid(bm2, pixel_shader=palette)
                                                                    +
                                                                    +        g1 = displayio.Group()
                                                                    +        g1.append(tg1)
                                                                    +
                                                                    +        g2 = displayio.Group()
                                                                    +        g2.append(tg2)
                                                                    +
                                                                    +        #  display.show(g1)
                                                                    +
                                                                    +        self.width = width
                                                                    +        self.height = height
                                                                    +        self.num_colors = num_colors
                                                                    +
                                                                    +        self.curr = bm1
                                                                    +        self.next = bm2
                                                                    +
                                                                    +        self.curr_group = g1
                                                                    +        self.next_group = g2
                                                                    +
                                                                    +    def update(self, display):
                                                                    +        width = self.width
                                                                    +        height = self.height
                                                                    +        num_colors = self.num_colors
                                                                    +        curr = self.curr
                                                                    +        next = self.next
                                                                    +
                                                                    +        # render to next framebuffer while current one is shown
                                                                    +
                                                                    +        t = time.monotonic()
                                                                    +
                                                                    +        for y in range(height):
                                                                    +            for x in range(width):
                                                                    +                u = (x - width) / height
                                                                    +                v = (y - height) / height
                                                                    +
                                                                    +                # add some back-and-forth rotation
                                                                    +                coa = cos(0.10 * sin(0.15 * t))
                                                                    +                sia = sin(0.31 * sin(0.10 * t))
                                                                    +                u = (u * coa) - (v * sia)
                                                                    +                v = (u * sia) + (v * coa)
                                                                    +
                                                                    +                u += 0.03 * sin(0.54 * t)
                                                                    +                v += 0.03 * sin(0.46 * t)
                                                                    +
                                                                    +                # kinda fractional brownian motion over sin(x)*sin(y)
                                                                    +                l = 0.5 * fbm4(8.0 * u, 8.0 * v) + 0.5
                                                                    +
                                                                    +                # make the lightness periodically show the dark spots
                                                                    +                c = 0.1 * cos(0.2 * t) + 0.2
                                                                    +                l = clamp(0.0, 1.0, l - c)
                                                                    +
                                                                    +                next[x, y] = round((num_colors - 1) * l)
                                                                    +
                                                                    +        # swap frame buffers
                                                                    +
                                                                    +        self.curr = next
                                                                    +        self.next = curr
                                                                    +
                                                                    +        curr_group = self.curr_group
                                                                    +        self.curr_group = self.next_group
                                                                    +        self.next_group = curr_group
                                                                    +
                                                                    +        # show new framebuffer
                                                                    +
                                                                    +        display.show(self.curr_group)
                                                                    +
                                                                    +# ||v||^2
                                                                    +def norm_sq(x, y, z):
                                                                    +    return x*x + y*y + z*z
                                                                    +
                                                                    +# ||v||
                                                                    +def norm(x, y, z):
                                                                    +    return sqrt(norm_sq(x, y, z))
                                                                    +
                                                                    +# v / ||v||
                                                                    +def normalize(x, y, z):
                                                                    +    inv_l = 1.0 / norm(x, y, z)
                                                                    +    return (inv_l * x, inv_l * y, inv_l * z)
                                                                    +
                                                                    +# a * b
                                                                    +def dot(a_x, a_y, a_z, b_x, b_y, b_z):
                                                                    +    return a_x*b_x + a_y*b_y + a_z*b_z
                                                                    +
                                                                    +# a x b
                                                                    +def cross(bx, by, bz, cx, cy, cz):
                                                                    +    return (by*cz - bz*cy, bz*cx - bx*cz, bx*cy - by*cx)
                                                                    +
                                                                    +# sphere hit
                                                                    +def i_sphere(ro_x, ro_y, ro_z, rd_x, rd_y, rd_z, sph_x, sph_y, sph_z):
                                                                    +    oc_x = ro_x - sph_x
                                                                    +    oc_y = ro_y - sph_y
                                                                    +    oc_z = ro_z - sph_z
                                                                    +
                                                                    +    b = dot(oc_x, oc_y, oc_z, rd_x, rd_y, rd_z)
                                                                    +    c = norm_sq(oc_x, oc_y, oc_z) - 1.0
                                                                    +    h = b*b - c
                                                                    +
                                                                    +    if h < 0.0:
                                                                    +        return -1.0
                                                                    +    else:
                                                                    +        return -b - sqrt(h)
                                                                    +
                                                                    +# sphere soft shadow
                                                                    +def ss_sphere(ro_x, ro_y, ro_z, rd_x, rd_y, rd_z, sph_x, sph_y, sph_z):
                                                                    +    oc_x = sph_x - ro_x
                                                                    +    oc_y = sph_y - ro_y
                                                                    +    oc_z = sph_z - ro_z
                                                                    +
                                                                    +    b = dot(oc_x, oc_y, oc_z, rd_x, rd_y, rd_z)
                                                                    +
                                                                    +    if b > 0.0:
                                                                    +        h = norm_sq(oc_x, oc_y, oc_z) - b*b - 1.0
                                                                    +        return clamp(0.0, 1.0, 16.0 * h / b)
                                                                    +    else:
                                                                    +        return 1.0
                                                                    +
                                                                    +# sphere lambert shading
                                                                    +def lambert(lig_x, lig_y, lig_z, nor_x, nor_y, nor_z):
                                                                    +    return max(0.0, dot(lig_x, lig_y, lig_z, nor_x, nor_y, nor_z))
                                                                    +
                                                                    +# sphere occlusion
                                                                    +def occ_sphere(pos_x, pos_y, pos_z, nor_x, nor_y, nor_z, sph_x, sph_y, sph_z):
                                                                    +    di_x = sph_x - pos_x
                                                                    +    di_y = sph_y - pos_y
                                                                    +    di_z = sph_z - pos_z
                                                                    +
                                                                    +    l_sq = norm_sq(di_x, di_y, di_z)
                                                                    +    inv_l = 1.0 / math.sqrt(l_sq)
                                                                    +    di_x = di_x * inv_l
                                                                    +    di_y = di_y * inv_l
                                                                    +    di_z = di_z * inv_l
                                                                    +
                                                                    +    nd = dot(nor_x, nor_y, nor_z, di_x, di_y, di_z)
                                                                    +
                                                                    +    return 1.0 - (max(0.0, nd) / l_sq)
                                                                    +
                                                                    +# this screen is a small [raytracer](https://www.wikiwand.com/en/Ray_tracing_(graphics))
                                                                    +# that renders two spheres with soft shadows and ambient occlusion, while
                                                                    +# rotating the camera around them.
                                                                    +class SpheresScreen(Screen):
                                                                    +    def __init__(self, display):
                                                                    +        width = 64
                                                                    +        height = 32
                                                                    +        num_colors = 64
                                                                    +
                                                                    +        palette = displayio.Palette(num_colors)
                                                                    +        for idx in range(num_colors):
                                                                    +            #  palette[idx] = hsl(240, 0.8, 0.25 * (idx / num_colors))
                                                                    +            #  palette[idx] = hsl(lerp(240, 260, idx / num_colors), 1.0, 1.0 * (idx / num_colors))
                                                                    +            palette[idx] = hsl(220, 0.9, 1.0 * (idx / num_colors))
                                                                    +
                                                                    +        bm1 = displayio.Bitmap(width, height, num_colors)
                                                                    +        bm2 = displayio.Bitmap(width, height, num_colors)
                                                                    +
                                                                    +        tg1 = displayio.TileGrid(bm1, pixel_shader=palette)
                                                                    +        tg2 = displayio.TileGrid(bm2, pixel_shader=palette)
                                                                    +
                                                                    +        g1 = displayio.Group()
                                                                    +        g1.append(tg1)
                                                                    +
                                                                    +        g2 = displayio.Group()
                                                                    +        g2.append(tg2)
                                                                    +
                                                                    +        #  display.show(g1)
                                                                    +
                                                                    +        self.width = width
                                                                    +        self.height = height
                                                                    +        self.num_colors = num_colors
                                                                    +
                                                                    +        self.curr = bm1
                                                                    +        self.next = bm2
                                                                    +
                                                                    +        self.curr_group = g1
                                                                    +        self.next_group = g2
                                                                    +
                                                                    +    def update(self, display):
                                                                    +	    width = self.width
                                                                    +        height = self.height
                                                                    +        num_colors = self.num_colors
                                                                    +        curr = self.curr
                                                                    +        next = self.next
                                                                    +
                                                                    +        # render to next framebuffer while current one is shown
                                                                    +
                                                                    +        t = time.monotonic()
                                                                    +
                                                                    +        # all i want for christmas is numpy...
                                                                    +        # linear algebra heavy stuff is pretty obnoxious in plain python
                                                                    +
                                                                    +        # light direction
                                                                    +        (lig_x, lig_y, lig_z) = normalize(0.6, 0.5, 0.4)
                                                                    +
                                                                    +        # rotate camera around the center over time
                                                                    +        angle = -0.1*t
                                                                    +        #  angle = -.25*t
                                                                    +        ro_x = 2.5 * cos(angle)
                                                                    +        ro_y = 1.0
                                                                    +        ro_z = 2.5 * sin(angle)
                                                                    +
                                                                    +        # camera matrix
                                                                    +        #
                                                                    +        # M = [ [ ww_x, uu_x, vv_x ]
                                                                    +        #       [ ww_y, uu_y, vv_y ]
                                                                    +        #       [ ww_z, uu_z, vv_z ] ]
                                                                    +        ww_x = 0.0 - ro_x
                                                                    +        ww_y = 1.0 - ro_y
                                                                    +        ww_z = 0.0 - ro_z
                                                                    +        (ww_x, ww_y, ww_z) = normalize(ww_x, ww_y, ww_z)
                                                                    +
                                                                    +        (uu_x, uu_y, uu_z) = cross(ww_x, ww_y, ww_z, 0.0, 1.0, 0.0)
                                                                    +        (uu_x, uu_y, uu_z) = normalize(uu_x, uu_y, uu_z)
                                                                    +
                                                                    +        (vv_x, vv_y, vv_z) = cross(uu_x, uu_y, uu_z, ww_x, ww_y, ww_z)
                                                                    +        (vv_x, vv_y, vv_z) = normalize(vv_x, vv_y, vv_z)
                                                                    +
                                                                    +        # sphere locations
                                                                    +        (sph1_x, sph1_y, sph1_z) = (-1.2, 1.0, 0.0)
                                                                    +        (sph2_x, sph2_y, sph2_z) = ( 1.0, 1.5, 0.0)
                                                                    +
                                                                    +        for y in range(height):
                                                                    +            for x in range(width):
                                                                    +                # normalized screen space
                                                                    +                # p_y in -1 .. 1
                                                                    +                # p_x in -2 .. 2
                                                                    +                p_x = (2.0 * x - width) / height
                                                                    +                p_y = -(2.0 * y - height) / height
                                                                    +
                                                                    +                # create view ray
                                                                    +                # rd = normalize(M * [ p_x, p_y, 1.5 ])
                                                                    +                # rd = normalize(p_x*uu + p_y*vv + 1.5*ww)
                                                                    +                rd_x = (p_x*uu_x) + (p_y*vv_x) + (1.5*ww_x)
                                                                    +                rd_y = (p_x*uu_y) + (p_y*vv_y) + (1.5*ww_y)
                                                                    +                rd_z = (p_x*uu_z) + (p_y*vv_z) + (1.5*ww_z)
                                                                    +                (rd_x, rd_y, rd_z) = normalize(rd_x, rd_y, rd_z)
                                                                    +
                                                                    +                #  l = clamp(0.0, 1.0, rd_z)
                                                                    +                #  next[x, y] = round((num_colors - 1) * l)
                                                                    +                #  continue
                                                                    +
                                                                    +                # raytrace
                                                                    +                tmin = 4.0
                                                                    +
                                                                    +                # rendered lightness. initial value is also bg color (no hit).
                                                                    +                l = 0.0
                                                                    +
                                                                    +                # ray position
                                                                    +                pos_x = 0.0
                                                                    +                pos_y = 0.0
                                                                    +                pos_z = 0.0
                                                                    +
                                                                    +                # normal vector
                                                                    +                nor_x = 0.0
                                                                    +                nor_y = 0.0
                                                                    +                nor_z = 0.0
                                                                    +
                                                                    +                occ = 1.0
                                                                    +
                                                                    +                # raytrace sphere 1
                                                                    +                h = i_sphere(ro_x, ro_y, ro_z, rd_x, rd_y, rd_z, sph1_x, sph1_y, sph1_z)
                                                                    +                if h > 0.0 and h < tmin:
                                                                    +                    tmin = h
                                                                    +
                                                                    +                    # pos = ro + h*rd
                                                                    +                    pos_x = ro_x + h * rd_x
                                                                    +                    pos_y = ro_y + h * rd_y
                                                                    +                    pos_z = ro_z + h * rd_z
                                                                    +
                                                                    +                    # nor = normalize(pos - sph1)
                                                                    +                    nor_x = pos_x - sph1_x
                                                                    +                    nor_y = pos_y - sph1_y
                                                                    +                    nor_z = pos_z - sph1_z
                                                                    +
                                                                    +                    (nor_x, nor_y, nor_z) = normalize(nor_x, nor_y, nor_z)
                                                                    +
                                                                    +                    occ = 0.5 + 0.5*nor_y
                                                                    +                    occ *= occ_sphere(pos_x, pos_y, pos_z, nor_x, nor_y, nor_z, sph1_x, sph1_y, sph1_z)
                                                                    +
                                                                    +                # raytrace sphere 2
                                                                    +                h = i_sphere(ro_x, ro_y, ro_z, rd_x, rd_y, rd_z, sph2_x, sph2_y, sph2_z)
                                                                    +                if h > 0.0 and h < tmin:
                                                                    +                    tmin = h
                                                                    +
                                                                    +                    # pos = ro + h*rd
                                                                    +                    pos_x = ro_x + h * rd_x
                                                                    +                    pos_y = ro_y + h * rd_y
                                                                    +                    pos_z = ro_z + h * rd_z
                                                                    +
                                                                    +                    # nor = normalize(pos - sph2)
                                                                    +                    nor_x = pos_x - sph2_x
                                                                    +                    nor_y = pos_y - sph2_y
                                                                    +                    nor_z = pos_z - sph2_z
                                                                    +                    (nor_x, nor_y, nor_z) = normalize(nor_x, nor_y, nor_z)
                                                                    +
                                                                    +                    occ = 0.5 + 0.5*nor_y
                                                                    +                    occ *= occ_sphere(pos_x, pos_y, pos_z, nor_x, nor_y, nor_z, sph2_x, sph2_y, sph2_z)
                                                                    +
                                                                    +                # shading + lighting
                                                                    +                if tmin < 4.0:
                                                                    +                    # pos = ro + tmin*rd
                                                                    +                    pos_x = ro_x + tmin * rd_x
                                                                    +                    pos_y = ro_y + tmin * rd_y
                                                                    +                    pos_z = ro_z + tmin * rd_z
                                                                    +
                                                                    +                    # shadows
                                                                    +                    sha = 1.0
                                                                    +                    # # skip first sphere since its shadow doesn't hit anything
                                                                    +                    # sha *= ss_sphere(pos_x, pos_y, pos_z, lig_x, lig_y, lig_z, sph1_x, sph1_y, sph1_z)
                                                                    +                    sha *= ss_sphere(pos_x, pos_y, pos_z, lig_x, lig_y, lig_z, sph2_x, sph2_y, sph2_z)
                                                                    +
                                                                    +                    l = 0.0
                                                                    +
                                                                    +                    # ambient occlusion
                                                                    +                    l += 0.5 * occ
                                                                    +
                                                                    +                    # lambert shading
                                                                    +                    l += 5.0 * lambert(lig_x, lig_y, lig_z, nor_x, nor_y, nor_z) * sha
                                                                    +
                                                                    +                    l *= 0.22
                                                                    +
                                                                    +                # gamma adjustment
                                                                    +                l = clamp(0.0, 1.0, math.pow(l, 0.85))
                                                                    +                next[x, y] = round((num_colors - 1) * l)
                                                                    +
                                                                    +        # swap frame buffers
                                                                    +
                                                                    +        self.curr = next
                                                                    +        self.next = curr
                                                                    +
                                                                    +        curr_group = self.curr_group
                                                                    +        self.curr_group = self.next_group
                                                                    +        self.next_group = curr_group
                                                                    +
                                                                    +        # show new framebuffer
                                                                    +
                                                                    +        display.show(self.curr_group)
                                                                    +
                                                                    +
                                                                    +class Button:
                                                                    +    def __init__(self, button_pin):
                                                                    +        self.press_counter = countio.Counter(
                                                                    +            pin=button_pin,
                                                                    +            edge=countio.Edge.RISE,
                                                                    +            pull=digitalio.Pull.UP,
                                                                    +        )
                                                                    +        self.prev_total = 0
                                                                    +
                                                                    +    # Returns the number of button presses since we last checked
                                                                    +    def new_presses(self):
                                                                    +        new_total = self.press_counter.count
                                                                    +        new_presses = new_total - self.prev_total
                                                                    +        self.prev_total = new_total
                                                                    +        return new_presses
                                                                    +
                                                                    +def main():
                                                                    +    display = make_display()
                                                                    +
                                                                    +    screens = [
                                                                    +        StartScreen,
                                                                    +        CircleScreen,
                                                                    +        WarpScreen,
                                                                    +        Warp2Screen,
                                                                    +        SpheresScreen,
                                                                    +        GameOfLifeScreen,
                                                                    +        #  ColorTestScreen,
                                                                    +    ]
                                                                    +    prev_screen_idx = -1
                                                                    +    screen_idx = 0
                                                                    +
                                                                    +    up_button = Button(board.BUTTON_UP)
                                                                    +    # down_button = Button(board.BUTTON_DOWN)
                                                                    +
                                                                    +    while True:
                                                                    +        up_button_presses = up_button.new_presses()
                                                                    +        if up_button_presses > 0:
                                                                    +            screen_idx = (screen_idx + 1) % len(screens)
                                                                    +
                                                                    +        if screen_idx != prev_screen_idx:
                                                                    +            prev_screen_idx = screen_idx
                                                                    +            screen = screens[screen_idx](display)
                                                                    +
                                                                    +        screen.update(display)
                                                                    +
                                                                    +try:
                                                                    +    main()
                                                                    +except Exception as err:
                                                                    +    print(f"Error: {err}")
                                                                    +

                                                                    (for reference) one-time setup process #

                                                                    Board product page: https://www.adafruit.com/product/4745

                                                                    Board info:

                                                                    UF2 Bootloader v1.23.1-adafruit.1-328-gf06693a SFHWRO
                                                                    +Model: Matrix Portal M4
                                                                    +Board-ID: SAMD51J19A-MatrixPortal-v0
                                                                    +

                                                                    When first connected to power, we see the cool little falling sand demo that comes pre-installed.

                                                                    After connecting it to a machine through the USB-C port, double-press the RST button on the board; the debug light flashes and a USB-drive called MATRIXBOOT mounts on the connected machine.

                                                                    If nothing happens, make sure the USB-C cable you're using supports data transfer and not just power.

                                                                    The pre-installed contents of the drive:

                                                                    $ ls /media/phlip9/MATRIXBOOT
                                                                    +CURRENT.UF2
                                                                    +INDEX.HTM
                                                                    +INFO_UF2.TXT
                                                                    +

                                                                    We then install the CircuitPython "OS" onto the board:

                                                                    $ cd /tmp
                                                                    +$ wget https://downloads.circuitpython.org/bin/matrixportal_m4/en_US/adafruit-circuitpython-matrixportal_m4-en_US-7.3.3.uf2
                                                                    +$ cp adafruit-circuitpython-matrixportal_m4-en_US-7.3.3.uf2 /media/phlip9/MATRIXBOOT
                                                                    +

                                                                    The lights should flash a bit and the disk will unmount from your machine. A second later another USB disk mounts called CIRCUITPY.

                                                                    Download and install the Mu editor.

                                                                    On linux I had to add my user, phlip9, to the dialout group and then restart for Mu+CircuitPython to work. macOS and Windows users can skip this step.

                                                                    $ sudo adduser phlip9 dialout
                                                                    +

                                                                    Open the Mu editor and select "Mode", then choose "CircuitPython". If everything was setup properly, it should auto-detect the board.

                                                                    Close any random "untitled" file it tries to create. Next hit the "Load" icon and navigate to the CIRCUITPY drive. Choose the code.py file. You should see something like:

                                                                    print("Hello, World!")
                                                                    +

                                                                    Click the "Serial" button to show the device print output. Save the currently open code.py file and the board will automatically restart and run the file!

                                                                    \ No newline at end of file diff --git a/misc/scanning QR codes on desktop/index.html b/misc/scanning QR codes on desktop/index.html new file mode 100644 index 0000000000..91824c3b5b --- /dev/null +++ b/misc/scanning QR codes on desktop/index.html @@ -0,0 +1,93 @@ +scanning QR codes on desktop | philip's notes

                                                                    scanning QR codes on desktop

                                                                    2021-12-06 · 1 min read

                                                                      $ sudo apt-get install zbar-tools
                                                                      +$ zbarimg <qr-code-image>
                                                                      +
                                                                      \ No newline at end of file diff --git a/misc/setting up a headless raspbian boot image/index.html b/misc/setting up a headless raspbian boot image/index.html new file mode 100644 index 0000000000..e01f33d98a --- /dev/null +++ b/misc/setting up a headless raspbian boot image/index.html @@ -0,0 +1,121 @@ +setting up a headless raspbian boot image | philip's notes

                                                                      setting up a headless raspbian boot image

                                                                      2020-12-12 · 3 min read

                                                                        Objective #

                                                                        1. Custom SD card boot image for Raspberry Pi Zero W.
                                                                        2. RPi should boot headless, connect to configured WiFi, run ssh.

                                                                        Better Alternative? #

                                                                        I only discovered this after successfully generating my own image, but it seems more convenient: (https://github.com/kenfallon/fix-ssh-on-pi, http://www.lpenz.org/articles/ansiblerpi/index.html). It just mounts a stock Raspbian image and directly modifies the wpa_supplicant.conf and other configuration, instead of building a fresh image from scratch, which takes like 45 minutes...

                                                                        EDIT: It looks like rpi-imager has basic image customization available? #

                                                                        TODO #

                                                                        • enable kernel I2C, SPI, and PWM controllers in /boot/config.txt

                                                                        Installation #

                                                                        (Windows, macOS) Install Docker Desktop #

                                                                        See: https://www.docker.com/products/docker-desktop

                                                                        Clone pi-gen: #

                                                                        $ git clone --depth=1 git@github.com:RPi-Distro/pi-gen.git
                                                                        +

                                                                        Add pi-gen/config #

                                                                        IMG_NAME=raspbian_headless
                                                                        +LOCALE_DEFAULT=en_US.UTF-8
                                                                        +TARGET_HOSTNAME=<..>
                                                                        +TIMEZONE_DEFAULT=America/Los_Angeles
                                                                        +FIRST_USER_NAME=phlip9
                                                                        +FIRST_USER_PASS=<..>
                                                                        +DISABLE_FIRST_BOOT_USER_RENAME=1
                                                                        +WPA_ESSID="<..>"
                                                                        +WPA_PASSWORD="<..>"
                                                                        +WPA_COUNTRY=US
                                                                        +ENABLE_SSH=1
                                                                        +PUBKEY_ONLY_SSH=1
                                                                        +PUBKEY_SSH_FIRST_USER="ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIGrOw2yrUxOYB9ItWrZW4e/AmatL5GH58jTnI/HNoXZz philiphayes9@gmail.com"
                                                                        +STAGE_LIST="stage0 stage1 stage2"
                                                                        +

                                                                        This config sets up all the locale shit and all, but most importantly, enables wifi on boot and pubkey-only ssh, so we can ssh into the running board without needing to hookup a keyboard / monitor.

                                                                        NOTE: The Raspberry Pi Zero W DOES NOT support 5GHz wifi.

                                                                        (Linux/x86_64) Install qemu-user-static #

                                                                        This lets us run arm binaries on an x86_64 machine via qemu.

                                                                        $ sudo apt install qemu-user-static
                                                                        +

                                                                        Context:

                                                                        Linux is able execute binaries from other architectures, meaning that it should be possible to make use of pi-gen on an x86_64 system, even though it will be running ARM binaries. This requires support from the binfmt_misc kernel module.

                                                                        If this is not set up correctly, you will see something like this error in the next step:

                                                                        W: Failure trying to run: chroot "/pi-gen/work/test/stage0/rootfs" /bin/true
                                                                        +and/or
                                                                        +chroot: failed to run command '/bin/true': Exec format error
                                                                        +

                                                                        Build the image #

                                                                        $ ./build-docker.sh
                                                                        +

                                                                        This should spit out our fresh image in ./deploy/:

                                                                        ~/dev/pi-gen$ ls -lh deploy/
                                                                        +total 528M
                                                                        +-rw-r--r-- 1 phlip9 phlip9  74K Nov 26 15:56 2022-11-26-raspbian_headless-lite.info
                                                                        +-rw-r--r-- 1 phlip9 phlip9 6.2K Nov 26 15:58 build.log
                                                                        +-rw-r--r-- 1 phlip9 phlip9 528M Nov 26 15:57 image_2022-11-26-raspbian_headless-lite.zip
                                                                        +drwxr-xr-x 2 phlip9 phlip9 4.0K Nov 26 15:58 raspbian_headless-lite
                                                                        +

                                                                        If the build hangs/fails for some inscrutable reason (happened the first time), just ^CTRL-C and try again with:

                                                                        $ CONTINUE=1 ./build-docker.sh
                                                                        +

                                                                        (WSL) I tried their suggestion of using apt-cache to improve rebuild times, but that didn't work :'(

                                                                        Mount SD card #

                                                                        Download Raspberry Pi Imager #

                                                                        https://www.raspberrypi.org/software/

                                                                        Open Raspberry Pi Imager #

                                                                        Select the "deploy/*.zip" file as the image to write and then image the mounted SD card. #

                                                                        Unmount the SD card, put it into the Pi, plug in the Pi, wait ~2 min to boot, and test: #

                                                                        $ ssh raspberrypi.local
                                                                        +
                                                                        +phlip9@raspberrypi:~ $ exit
                                                                        +
                                                                        \ No newline at end of file diff --git a/misc/uptime to downtime conversion/index.html b/misc/uptime to downtime conversion/index.html new file mode 100644 index 0000000000..eef3d251ee --- /dev/null +++ b/misc/uptime to downtime conversion/index.html @@ -0,0 +1,91 @@ +uptime to downtime conversion | philip's notes

                                                                        uptime to downtime conversion

                                                                        2022-03-25 · 1 min read

                                                                          Ex: What does 99.9% uptime mean in actual amount of downtime per year?
                                                                          % uptime(approx) downtime per year
                                                                          90%40 days
                                                                          99%4 days
                                                                          99.9%10 hr
                                                                          99.99%1 hr
                                                                          99.999%6 min
                                                                          99.9999%30 sec

                                                                          \ No newline at end of file diff --git a/misc/water distillation setup/index.html b/misc/water distillation setup/index.html new file mode 100644 index 0000000000..d0a15a16c9 --- /dev/null +++ b/misc/water distillation setup/index.html @@ -0,0 +1,91 @@ +water distillation setup | philip's notes

                                                                          water distillation setup

                                                                          2022-03-16 · 1 min read

                                                                            "Schematic" #

                                                                            water distillation setup.svg

                                                                            BOM #

                                                                            date: 2022/03/18
                                                                            NamePriceLink
                                                                            rubber filter adapters$14https://www.amazon.com/Rubber-Filter-Adapter-Buchner-Funnels/dp/B073QVSK2T
                                                                            faucet adapter (portable shower hose)$9https://www.amazon.com/Diane-Portable-Shampoo-Spray-Hose/dp/B001A35ZEC
                                                                            plastic lab joint clips (x5)$8https://www.amazon.com/uxcell-Plastic-Mounting-Laboratory-Connector/dp/B08K2S91X9
                                                                            QWORK Liebig Condenser 24/40 200mm$18https://www.amazon.com/QWORK-Jacket-200mm-Condenser-Laboratory/dp/B08TRCG2N4
                                                                            QWORK Vacuum Take Off Adapter 24/40 105deg$13https://www.amazon.com/QWORK-Vacuum-Adapter-Degree-Joints/dp/B09NPLTLQK
                                                                            (?) QWORK Glass Stopper 24/40 (x2)$10https://www.amazon.com/QWORK-Glass-Stopper-Hollow-Outer/dp/B09FF5K1J8
                                                                            StonyLab 3-way Distilling Adapter Joint 24/40$21https://www.amazon.com/dp/B07CGT18J4
                                                                            Silicone Tubing 10mm ID x 13mm OD 10FT$11https://www.amazon.com/dp/B08PTYJ3GX
                                                                            TOTAL$104

                                                                            \ No newline at end of file diff --git a/networking/CIDR/index.html b/networking/CIDR/index.html new file mode 100644 index 0000000000..bc5db537eb --- /dev/null +++ b/networking/CIDR/index.html @@ -0,0 +1,100 @@ +CIDR | philip's notes

                                                                            CIDR

                                                                            2022-04-17 · 4 min read

                                                                            CIDR or Classless Inter-Domain Routing is a more granular method for allocating IP addresses and routing IP packets than the now removed IP Class-based allocation.

                                                                            CIDR notation is a compact way to write an IP and Subnet Mask, like 35.99.0.0/16 instead of 35.99.0.0, 255.255.0.0.

                                                                            Preliminaries #

                                                                            IP addresses are split into two pieces: (1) the network prefix or subnet address (read: address of the subnet), identified by the most-significant bits and (2) the host identifier in the least-significant bits, which identifies a specific interface on a host in that subnet.

                                                                            Original IPv4 addresses were categorized by "classes", which split them up according to a few of the first bits in the address (starting from the MSB). Today this is mostly a legacy detail that was later replaced, but the "class-less" in CIDR refers to the lack of distinct classes in CIDR, which instead uses "variable-length subnet masking" (VLSM) to allocate network prefixes along any bit boundary.

                                                                            Subnet Mask #

                                                                            To refresh, a subnet mask is just a bitmask we use to AND against the IP to retrieve the network prefix. Likewise, if we invert the subnet mask then AND against the IP, we get the host id.

                                                                            For example, if we have the LAN IP 192.168.3.5 with subnet mask 255.255.254.0, then our network prefix is 192.168.2.0 and the host id is 0.0.1.5. This might be clearer if you see the bits written out explicitly.

                                                                            1100 0000 . 1010 1000 . 0000 0011 . 0000 0101   ip
                                                                            +1111 1111 . 1111 1111 . 1111 1110 . 0000 0000   subnet_mask
                                                                            +1100 0000 . 1010 1000 . 0000 0010 . 0000 0000   network_prefix = ip & subnet_mask
                                                                            +0000 0000 . 0000 0000 . 0000 0001 . 0000 0101   host_id = ip & !subnet_mask
                                                                            +

                                                                            As we'll see in a moment, this IP+mask in equivalent CIDR notation would be 192.168.3.5/23.

                                                                            Historically, a full 32-bit bitmask was used to differentiate between which part of an IPv4 address was the network prefix and which part was the host identifier.

                                                                            For a while, subnet masks could be any arbitrary non-contiguous bitmask; however, some RFCs eventually mandated that they must be contiguous, starting from the most-significant bit. As we'll see in a moment, an IP with a subnet mask and an IP in CIDR notation are 100% equivalent nowadays.

                                                                            CIDR notation #

                                                                            Instead of writing out the whole subnet mask, we can instead write just the number of leading ones in the subnet mask (called the mask width) alongside the IP. This format is called CIDR notation.

                                                                            Using the same example as above, the ip 192.168.3.5 with subnet mask 255.255.254.0 would be written as 192.168.3.5/23 in CIDR notation.

                                                                            Deriving that more explicitly in Rust code:

                                                                            let ip: Ipv4Addr = "192.168.3.5".into();
                                                                            +let mask_width = 23;
                                                                            +let subnet_mask = !(0xffff_ffff_u32 >> mask_width);
                                                                            +let network_prefix: Ipv4Addr = (ip.as_u32() & subnet_mask).into();
                                                                            +let host_id: Ipv4Addr = (ip.as_u32() & !subnet_mask).into();
                                                                            +

                                                                            I used to get confused on whether the CIDR mask width refers to the subnet mask or host id mask. A simple memnonic helps me remember:

                                                                            the CIDR number is on the right, so we shift ones right (to make the mask).

                                                                            Note that CIDR notation works the exact same for IPv6, except we have 128 bits to play with instead of just 32 bits.

                                                                            Another useful insight to remember: the CIDR mask width goes from least specific (/0) to most specific (/32).

                                                                            CIDR block #

                                                                            When describing a range of IPs, we often write an IP in CIDR notation with the bits outside the network prefix set to zero.

                                                                            Some examples:
                                                                            Address RangeCIDR blockNumber of addresses
                                                                            192.168.0.0 -> 192.168.255.255192.168.0.0/162^16 = 65,536
                                                                            172.16.0.0 -> 172.31.255.255172.16.0.0/122^20 = 1,048,576
                                                                            10.0.0.0 -> 10.255.255.25510.0.0.0/82^24 = 16,777,216

                                                                            \ No newline at end of file diff --git a/networking/index.html b/networking/index.html new file mode 100644 index 0000000000..c219b3e5af --- /dev/null +++ b/networking/index.html @@ -0,0 +1,73 @@ +networking | philip's notes

                                                                            networking

                                                                            CIDR →

                                                                            2022-04-17 · 4 min read

                                                                            ipv6 address space →

                                                                            2022-04-24 · 3 min read

                                                                            network interface card (NIC) →

                                                                            2022-04-17 · 2 min read

                                                                            network interfaces →

                                                                            2022-04-17 · 10 min read

                                                                            \ No newline at end of file diff --git a/networking/ipv6 address space/index.html b/networking/ipv6 address space/index.html new file mode 100644 index 0000000000..c30b13f9fa --- /dev/null +++ b/networking/ipv6 address space/index.html @@ -0,0 +1,101 @@ +ipv6 address space | philip's notes

                                                                            ipv6 address space

                                                                            2022-04-24 · 3 min read

                                                                            See: IANA > Internet Protocol Version 6 Address Space

                                                                            See: IANA > IPv6 Special-Purpose Address Registry
                                                                            prefixnameRFCS
                                                                            0000::/8Reserved
                                                                            -> ::1/128LoopbackRFC4291
                                                                            -> ::/128Bind to unspecified interfaceRFC4291
                                                                            -> ::ffff:0:0/96IPv4-mapped addressesRFC4291
                                                                            -> 64:ff9b::/96Algorithmic IPv4/IPv6 translation prefixRFC6052
                                                                            -> 64:ff9b:1::/48Local-use IPv4/IPv6 translation prefixRFC8215
                                                                            0100::/8Discard-only BlockRFC6666
                                                                            2000::/3Global UnicastRFC4291
                                                                            -> 2001::/32TEREDO - tunnel IPv6 over UDP through NATsRFC4380
                                                                            -> 2001:1::1/128Port Control Protocol (PCP) static AnycastRFC7723
                                                                            -> 2001:1::2/128TURN static AnycastRFC8155
                                                                            -> 2001:2::/48Reserved for benchmarkingRFC5180
                                                                            -> 2001:3::/32Automatic Multicast Tunneling (AMT)RFC7450
                                                                            -> 2001:20::/28Overlay Routable Cryptographic Hash Ids (ORCHIDv2)RFC7343
                                                                            -> 2001:db8::/32Documentation/example only addressRFC3849
                                                                            -> 2002::/166to4 tunnelingRFC3056
                                                                            f000::/5Reserved
                                                                            f800::/6Reserved
                                                                            fc00::/7Unique-Local UnicastRFC4193
                                                                            fe00::/9Reserved
                                                                            fe80::/10Link-Local UnicastRFC4291
                                                                            ff00::/8MulticastRFC4291

                                                                            unique-local unicast address (ULA) #

                                                                            • look for IPs starting with fd00::/8 as fc00::/8 is not currently allocated
                                                                            • globally unique (statistically), but not globally routable.
                                                                            • the "Global ID" is supposed to be randomly sampled. My home router samples one on initial setup.
                                                                            • people usually use these like ipv4 private address ranges (10.0.0.0/8, 172.16.0.0/16, 192.168.0.0/24)

                                                                            ex #

                                                                            kindCIDR
                                                                            prefixfd6c:6578:6502::/48
                                                                            subnetfd6c:6578:6502::/64
                                                                            addressfd6c:6578:6502::85a/128

                                                                            format #

                                                                            | 7 bits |1|  40 bits   |  16 bits  |          64 bits           |
                                                                            ++--------+-+------------+-----------+----------------------------+
                                                                            +| Prefix |L| Global ID  | Subnet ID |        Interface ID        |
                                                                            ++--------+-+------------+-----------+----------------------------+
                                                                            +
                                                                            fdGG:GGGG:GGGG:ssss::/64
                                                                            +
                                                                            • fe80::/64
                                                                            • ex: fe80::6238:e0ff:febc:3f60/128
                                                                            • address endpoints localized to a single link. Not globally routable.
                                                                            • routers will refuse to forward packets w/ link-local source to other links.
                                                                            • ex: all computers connected to a switch or wireless network or bridge can send link-local packets to each other, but can't send across routers.
                                                                            • used in protocols like IPv6 Stateless Address Configuration (SLAAC), where you don't really care what address each host gets as long as it's unique and routable. Compare w/ DHCP which gives tighter control over address allocation.

                                                                            format #

                                                                            |   10     |
                                                                            +|  bits    |         54 bits         |          64 bits           |
                                                                            ++----------+-------------------------+----------------------------+
                                                                            +|1111111010|           0             |       interface ID         |
                                                                            ++----------+-------------------------+----------------------------+
                                                                            +
                                                                            \ No newline at end of file diff --git a/networking/network interface card (NIC)/index.html b/networking/network interface card (NIC)/index.html new file mode 100644 index 0000000000..a2782574c3 --- /dev/null +++ b/networking/network interface card (NIC)/index.html @@ -0,0 +1,91 @@ +network interface card (NIC) | philip's notes

                                                                            network interface card (NIC)

                                                                            2022-04-17 · 2 min read

                                                                            Wikipedia: https://www.wikiwand.com/en/Network_interface_controller

                                                                            These are the phyiscal hardware devices responsible for actually, phyiscally sending bits over the proverbial wire. In OSI model terms, they usually bridge L1 (Phyiscal Layer) and L2 (Data-link Layer), though some fancy NICs can handle the whole TCP/IP stack.

                                                                            Most consumer-grade hardware comes with a NIC integrated into the CPU or Motherboard. NICs can also be purchased separately and hooked up via the PCI bus.

                                                                            These NICs are then typically connected via a physical Ethernet connection or provide wireless WiFi connection to a local router.

                                                                            NICs are abstracted away by the kernel with network interfaces for userspace applications to configure and consume.

                                                                            For a simplified mental model, I like to think of a NIC as a set of receive (rx) queues and transmit (tx) queues for sending and receiving link-layer frames.

                                                                            The tx/rx queues are typically FIFO ring-buffers. If you don't pull off frames fast enough or push too many frames at once, you'll start overwriting old frames : ).

                                                                            NICs typically provide a low-level interface or driver for the kernel (or more rarely, a userspace application) to pump outbound link-layer frames into the network and read inbound link-layer frames from the network.

                                                                            NICs are addressed via MAC addresses on the local physical network. MAC addresses need to be unique per local network, but aren't globally unique.

                                                                            Kernel Bypass #

                                                                            Userspace applications can completely bypass the kernel and send/receive packets directly from a NIC. Doing this by hand would be quite tedious, as different NICs often have different APIs. People tend to use a library like DPDK (Data-Plane Development Kit) for this purpose. As for why you would want to do this, the answer is usually performance and control. Some exotic NICs or FPGA accelerators may also require bypassing the kernel to take full advantage.

                                                                            \ No newline at end of file diff --git a/networking/network interfaces/index.html b/networking/network interfaces/index.html new file mode 100644 index 0000000000..a9be408904 --- /dev/null +++ b/networking/network interfaces/index.html @@ -0,0 +1,227 @@ +network interfaces | philip's notes

                                                                            network interfaces

                                                                            2022-04-17 · 10 min read

                                                                            Wikipedia: https://www.wikiwand.com/en/Virtual_network_interface

                                                                            Let's start with some basic definitions. A network interface is a software interface over some:

                                                                            1. phyiscal networking hardware, like a network interface card (NIC). You'll see these named like eth0, eth5, radio0, wlan3.
                                                                            2. virtual interface, like the "loopback" device or a WireGuard VPN tunnel.
                                                                              • Most virtual interfaces wrap a lower physical interface or another virtual interface. One exception is the loopback interface lo which stands alone.
                                                                              • We have virtual interfaces to maximise flexibility when configuring our system.
                                                                              • These will look like lo, eth0:1, eth0.1, vlan2, br-lan, pppoe-dsl, gre0, sit0, tun0, imq0, teql0.

                                                                            Helpful Tip: Cloud machines will often present two virtual networking interfaces, one for public internet traffic and one for private VPC traffic.

                                                                            Physical Network Interfaces #

                                                                            Ex: eth0, eth4, radio0, wlan2

                                                                            • These interfaces always represent an actual hardware device such as an Ethernet or Wireless NIC.
                                                                            • Physical network interfaces are provided by the kernel and presented to the user for configuration and consumption.

                                                                            Virtual Network Interfaces #

                                                                            Loopback #

                                                                            Ex: lo, lo0

                                                                            • The Loopback interface is provided by the kernel so applications can easily communicate with other local applications without any special code changes.
                                                                            • Any traffic sent to the loopback IP is immediately passed back up the network stack as if it had been received from another device.
                                                                            • The IPv4 range 127.0.0.1/8 and IPv6 address ::1/128 both represent the loopback device.
                                                                            • The DNS name localhost is also a special name that resolves to 127.0.0.1 or ::1.

                                                                            VLANs #

                                                                            Ex: eth4.0, eth4.1, eth4.2, vlan0

                                                                            • Virtual LANs let you partition a single link-layer (L2) network into multiple virtual L2 networks.
                                                                            • VLANs let you decouple a user's network location from their physical location.
                                                                            • VLANs let you separate and isolate network applications, despite sitting on the same physical network.
                                                                            • VLANs let you group hosts together even if they're not directly connected to same network switch, simplifying network design and deployment.
                                                                            • Cloud hosts often use VLANs to provide customers with a single VPC network spanning multiple regions. Multiple customers can use the same physical links yet remain safely isolated.
                                                                            • VLANs use the IEEE 802.1Q Ethernet frame header extension to "tag" each frame with its associated VLAN id. Since VLANs operate at L2, they let us support higher layers (L3+) transparently.

                                                                            Stacked VLANs #

                                                                            • Create VLANs, inside VLANs, ..., inside VLANs : )
                                                                            • Uses IEEE 802.1ad to add multiple VLAN tags to ethernet frames.

                                                                            Bridges #

                                                                            Ex: br0, br-lan

                                                                            • Network Bridges make multiple physical or virtual network interfaces act as if they were just one network interface.
                                                                            • In some ways, bridges are the opposite of VLANs.
                                                                            • For example, my local OpenWRT router groups all LAN ethernet devices and wireless radios into one logical LAN interface, called br-lan. This way my phone and laptop can easily connect to my desktop, even though the first two connect over WiFi and the last connects over wired ethernet. From each device's perspective, the network looks like a single unified network.
                                                                            • See: Linux Foundation Wiki - bridge

                                                                            Bonds #

                                                                            Ex: bond0

                                                                            • Network Bonding allows you to combine multiple links into one big link for higher throughput or reliability.
                                                                            • For example, if you have two upstream eth interfaces that each support 50 Mbps throughput, you can bond them into one virtual eth interface with a maximum of 100 Mbps throughput.

                                                                            Tunnels/Taps #

                                                                            Ex: pppoe-dsl, wg0, tun0, tunl0, tap2, vpn1, sit0

                                                                            • Tunnels let you send L3 packets or L2 frames over a Tunneling Protocol, usually to a remote host.
                                                                            • For example, WireGuard is a secure VPN protocol that provides a secure wg0 tunnel interface.
                                                                              • It lets you send standard L4 TCP/UDP/whatever packets over the wg0 tunnel to configured remote WireGuard peers.
                                                                              • Data sent through the tunnel is wrapped, encrypted, and sent over WireGuard's UDP protocol to the destination peer.
                                                                              • WireGuard servers maintain a Cryptokey routing table that associates a pubkey and set of allowed source CIDRs for each peer.
                                                                            • Linux TUN/TAP lets userspace programs provide virtual software network interfaces at L3 (TUN, IP packets) or L2 (TAP, Ethernet frames).

                                                                            Special Purpose #

                                                                            Ex: icq0, teql0

                                                                            (Deprecated) Aliases #

                                                                            Ex: eth4:5, eth4:6

                                                                            • Back in the day, Linux only supported one IP+mask per interface. Aliases are a way to present an existing interface with more than one IP+mask. Aliases are no longer necessary, but exist for backwards-compatibility reasons.
                                                                            • See: Linux Networking Documentation > IP-Aliasing

                                                                            Viewing the current network interfaces #

                                                                            On a recent Linux kernel, you can easily view the available interfaces with ip addr. This command will list the current network interfaces along with their names, configuration, and CIDRs they're responsible for.

                                                                            Quickly, before we dive in, the network topology in these examples looks like:

                                                                            	      desktop
                                                                            +.------------------------.
                                                                            +|     vEth              eth                  eth        fiber
                                                                            +| WSL <---> Windows 11 <-|-> OpenWRT Router <---> Modem <---> ISP
                                                                            +|                        |
                                                                            +'------------------------'
                                                                            +

                                                                            Starting with my desktop WSL Linux VM, the interfaces are fairly simple.

                                                                            # Desktop Computer, Linux running in WSL
                                                                            +$ ip addr
                                                                            +
                                                                            +1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
                                                                            +
                                                                            +    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
                                                                            +    inet 127.0.0.1/8 scope host lo
                                                                            +       valid_lft forever preferred_lft forever
                                                                            +    inet6 ::1/128 scope host
                                                                            +       valid_lft forever preferred_lft forever
                                                                            +
                                                                            +2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
                                                                            +
                                                                            +    link/ether 00:12:34:77:55:aa brd ff:ff:ff:ff:ff:ff
                                                                            +    inet 172.20.114.28/20 brd 172.20.127.255 scope global eth0
                                                                            +       valid_lft forever preferred_lft forever
                                                                            +    inet6 fe80::215:5dff:fea9:713/64 scope link
                                                                            +       valid_lft forever preferred_lft forever
                                                                            +
                                                                            +# plus some disabled interfaces: bond0, dummy0, tunl0, sit0
                                                                            +

                                                                            Here we have a local loopback (lo) interface and a virtual ethernet interface (eth0) to the Windows WSL virtual Ethernet adapter. Currently the WSL network interface is in NAT mode (as opposed to Bridge mode), so the WSL network is hidden from the outer LAN.

                                                                            Underneath the WSL instance, we have the base Windows desktop machine. Here it's configured with a physical Ethernet interface to the local LAN OpenWRT router.

                                                                            PS > ipconfig
                                                                            +
                                                                            +Windows IP Configuration
                                                                            +
                                                                            +
                                                                            +Ethernet adapter Ethernet:
                                                                            +
                                                                            +   Connection-specific DNS Suffix  . : lan
                                                                            +   IPv6 Address. . . . . . . . . . . : 2601:646:ca00:2fb5:dcb2:595c:1f81:cfc6
                                                                            +   IPv6 Address. . . . . . . . . . . : fd5b:7e09:2223::88e
                                                                            +   IPv6 Address. . . . . . . . . . . : fd5b:7e09:2223:0:dcb2:595c:1f81:cfc6
                                                                            +   Temporary IPv6 Address. . . . . . : 2601:646:ca00:b0e:7576:98bc:5e6c:7eb1
                                                                            +   Temporary IPv6 Address. . . . . . : fd5b:7e09:2223:0:7576:98bc:5e6c:7eb1
                                                                            +   Link-local IPv6 Address . . . . . : fe80::dcb2:596c:1f81:cfc6%5
                                                                            +   IPv4 Address. . . . . . . . . . . : 10.69.69.111
                                                                            +   Subnet Mask . . . . . . . . . . . : 255.255.255.0
                                                                            +   Default Gateway . . . . . . . . . : fe80::5249:e0ff:febc:3f60%5
                                                                            +                                       10.69.69.1
                                                                            +
                                                                            +Ethernet adapter vEthernet (WSL):
                                                                            +
                                                                            +   Connection-specific DNS Suffix  . :
                                                                            +   Link-local IPv6 Address . . . . . : fe80::49ef:174b:890:ef00%22
                                                                            +   IPv4 Address. . . . . . . . . . . : 172.20.112.1
                                                                            +   Subnet Mask . . . . . . . . . . . : 255.255.240.0
                                                                            +   Default Gateway . . . . . . . . . :
                                                                            +

                                                                            Or in a bit more detail (IPv4 at least)

                                                                            PS > netsh interface ipv4 show config
                                                                            +
                                                                            +Configuration for interface "Ethernet"
                                                                            +    DHCP enabled:                         Yes
                                                                            +    IP Address:                           10.69.69.111
                                                                            +    Subnet Prefix:                        10.69.69.0/24 (mask 255.255.255.0)
                                                                            +    Default Gateway:                      10.69.69.1
                                                                            +    Gateway Metric:                       0
                                                                            +    InterfaceMetric:                      25
                                                                            +    DNS servers configured through DHCP:  10.69.69.1
                                                                            +    Register with which suffix:           Primary only
                                                                            +    WINS servers configured through DHCP: None
                                                                            +
                                                                            +Configuration for interface "Loopback Pseudo-Interface 1"
                                                                            +    DHCP enabled:                         No
                                                                            +    IP Address:                           127.0.0.1
                                                                            +    Subnet Prefix:                        127.0.0.0/8 (mask 255.0.0.0)
                                                                            +    InterfaceMetric:                      75
                                                                            +    Statically Configured DNS Servers:    None
                                                                            +    Register with which suffix:           Primary only
                                                                            +    Statically Configured WINS Servers:   None
                                                                            +
                                                                            +Configuration for interface "vEthernet (WSL)"
                                                                            +    DHCP enabled:                         No
                                                                            +    IP Address:                           172.21.32.1
                                                                            +    Subnet Prefix:                        172.21.32.0/20 (mask 255.255.240.0)
                                                                            +    InterfaceMetric:                      5000
                                                                            +    Statically Configured DNS Servers:    None
                                                                            +    Register with which suffix:           None
                                                                            +    Statically Configured WINS Servers:   None
                                                                            +

                                                                            On my OpenWRT router, the configuration gets a bit crazy.

                                                                            $ ip addr
                                                                            +
                                                                            +1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1000
                                                                            +    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
                                                                            +    inet 127.0.0.1/8 scope host lo
                                                                            +       valid_lft forever preferred_lft forever
                                                                            +    inet6 ::1/128 scope host
                                                                            +       valid_lft forever preferred_lft forever
                                                                            +
                                                                            +2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1508 qdisc mq state UP qlen 1024
                                                                            +    link/ether 34:f4:aa:91:ec:60 brd ff:ff:ff:ff:ff:ff
                                                                            +    inet6 fe80::5249:e0ff:febc:3f60/64 scope link
                                                                            +       valid_lft forever preferred_lft forever
                                                                            +
                                                                            +3: lan4@eth0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue master br-lan state LOWERLAYERDOWN qlen 1000
                                                                            +    link/ether 34:f4:aa:91:ec:60 brd ff:ff:ff:ff:ff:ff
                                                                            +4: lan3@eth0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue master br-lan state LOWERLAYERDOWN qlen 1000
                                                                            +    link/ether 34:f4:aa:91:ec:60 brd ff:ff:ff:ff:ff:ff
                                                                            +5: lan2@eth0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue master br-lan state LOWERLAYERDOWN qlen 1000
                                                                            +    link/ether 34:f4:aa:91:ec:60 brd ff:ff:ff:ff:ff:ff
                                                                            +6: lan1@eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master br-lan state UP qlen 1000
                                                                            +    link/ether 34:f4:aa:91:ec:60 brd ff:ff:ff:ff:ff:ff
                                                                            +
                                                                            +7: wan@eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP qlen 1000
                                                                            +    link/ether 36:f4:aa:91:ec:60 brd ff:ff:ff:ff:ff:ff
                                                                            +    inet 69.312.42.96/22 brd 69.312.42.255 scope global wan
                                                                            +       valid_lft forever preferred_lft forever
                                                                            +    inet6 2001:547:6143:b9:905:61b9:2a3:6aff/128 scope global dynamic noprefixroute
                                                                            +       valid_lft 258008sec preferred_lft 258008sec
                                                                            +    inet6 fe80::5049:e0ff:febc:3f60/64 scope link
                                                                            +       valid_lft forever preferred_lft forever
                                                                            +
                                                                            +10: mlan0: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN qlen 1000
                                                                            +    link/ether 34:f4:aa:91:ec:63 brd ff:ff:ff:ff:ff:ff
                                                                            +
                                                                            +14: br-lan: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP qlen 1000
                                                                            +    link/ether 34:f4:aa:91:ec:60 brd ff:ff:ff:ff:ff:ff
                                                                            +    inet 10.69.69.1/24 brd 10.69.69.255 scope global br-lan
                                                                            +       valid_lft forever preferred_lft forever
                                                                            +    inet6 2601:646:ca00:b0e::1/64 scope global dynamic noprefixroute
                                                                            +       valid_lft 258008sec preferred_lft 258008sec
                                                                            +    inet6 fd5b:7e09:2223::1/60 scope global noprefixroute
                                                                            +       valid_lft forever preferred_lft forever
                                                                            +    inet6 fe80::5249:e0ff:febc:3f60/64 scope link
                                                                            +       valid_lft forever preferred_lft forever
                                                                            +
                                                                            +15: wlan0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq master br-lan state UP qlen 1000
                                                                            +    link/ether 34:f4:aa:91:ec:62 brd ff:ff:ff:ff:ff:ff
                                                                            +    inet6 fe80::5249:e0ff:febc:3f62/64 scope link
                                                                            +       valid_lft forever preferred_lft forever
                                                                            +16: wlan1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq master br-lan state UP qlen 1000
                                                                            +    link/ether 34:f4:aa:91:ec:61 brd ff:ff:ff:ff:ff:ff
                                                                            +    inet6 fe80::5249:e0ff:febc:3f61/64 scope link
                                                                            +       valid_lft forever preferred_lft forever
                                                                            +

                                                                            Just like the others, we still have a loopback.

                                                                            TODO: explain what we're looking at : )

                                                                            \ No newline at end of file diff --git a/nvim/index.html b/nvim/index.html new file mode 100644 index 0000000000..d76fc86080 --- /dev/null +++ b/nvim/index.html @@ -0,0 +1,73 @@ +nvim | philip's notes

                                                                            nvim

                                                                            universal-ctags Notes →

                                                                            2022-01-16 · 1 min read

                                                                            \ No newline at end of file diff --git a/nvim/universal-ctags Notes/index.html b/nvim/universal-ctags Notes/index.html new file mode 100644 index 0000000000..5330799e2e --- /dev/null +++ b/nvim/universal-ctags Notes/index.html @@ -0,0 +1,94 @@ +universal-ctags Notes | philip's notes

                                                                            universal-ctags notes

                                                                            2022-01-16 · 1 min read

                                                                              useful regex debugger: https://regex101.com/

                                                                              single line regex: --regex-<lang>=/<line-pattern>/<tag-name-pattern>/<kind>/[<flags>]

                                                                              useful flags: {exclusive}: don't run any other parsers on this line if the regex matches. useful for comments.

                                                                              multi-line regex: --mline-regex-<lang>=/<line-pattern>/<tag-name-pattern>/<kind>/[<mline-flags>]

                                                                              useful flags: {mgroup=N}: the capture group that decides where this tag is located (where you go when you go-to the tag). necessary for pretty much every mline regex AFAICT.

                                                                              useful character classes:

                                                                              [[:blank:]] == [ \t]

                                                                              [[:space:]] == \s == any whitespace character (incl. newline if multi-line)

                                                                              \ No newline at end of file diff --git a/performance/bit hacks/index.html b/performance/bit hacks/index.html new file mode 100644 index 0000000000..d620a317c6 --- /dev/null +++ b/performance/bit hacks/index.html @@ -0,0 +1,579 @@ +bit hacks | philip's notes

                                                                              bit hacks

                                                                              2022-02-10 · 14 min read

                                                                              Collection of bit twiddling hacks with helpful explanations : )

                                                                              1. Stanford Graphics Bit Twiddling Hacks - Sean Anderson
                                                                              2. Hacker's Delight Algorithms List - Hank Warren
                                                                              3. github.com/gnzlbg/bitwise
                                                                              4. Matters Computational - Jörg Arndt
                                                                              5. Bit Wizardry Page - Jörg Arndt
                                                                              6. haroldbot.nl - check equivalence of 32bit binary equations

                                                                              utils #

                                                                              Just some convenient functions for debugging.

                                                                              fn u32_into_nib_le(x: u32) -> [u8; 8] {
                                                                              +	let [b0, b1, b2, b3] = x.to_le_bytes();
                                                                              +	[
                                                                              +		b0 & 0x0f,
                                                                              +		(b0 >> 4) & 0x0f,
                                                                              +		b1 & 0x0f,
                                                                              +		(b1 >> 4) & 0x0f,
                                                                              +		b2 & 0x0f,
                                                                              +		(b2 >> 4) & 0x0f,
                                                                              +		b3 & 0x0f,
                                                                              +		(b3 >> 4) & 0x0f,
                                                                              +	]
                                                                              +}
                                                                              +
                                                                              +fn dbg_u8(lbl: &str, x: u8) -> u8 {
                                                                              +	println!("{:>12}  {:08b}", lbl, x);
                                                                              +	x
                                                                              +}
                                                                              +
                                                                              +fn dbg_u32(lbl: &str, x: u32) -> u32 {
                                                                              +	println!("{:>12}  {:032b}", lbl, x);
                                                                              +	x
                                                                              +}
                                                                              +
                                                                              +fn dbg_u32_byte(lbl: &str, x: u32) -> u32 {
                                                                              +	let [b0, b1, b2, b3] = x.to_le_bytes();
                                                                              +	println!("{:>12}  {:08b} {:08b} {:08b} {:08b}", lbl, b3, b2, b1, b0);
                                                                              +	x
                                                                              +}
                                                                              +
                                                                              +fn dbg_u32_nib(lbl: &str, x: u32) -> u32 {
                                                                              +	let [n0, n1, n2, n3, n4, n5, n6, n7] = u32_into_nib_le(x);
                                                                              +	println!(
                                                                              +		"{:>12}  {:04b} {:04b} {:04b} {:04b} {:04b} {:04b} {:04b} {:04b}",
                                                                              +		lbl, n7, n6, n5, n4, n3, n2, n1, n0,
                                                                              +	);
                                                                              +	x
                                                                              +}
                                                                              +
                                                                              +fn dbg_u64_byte(lbl: &str, x: u64) -> u64 {
                                                                              +    let [b0, b1, b2, b3, b4, b5, b6, b7] = x.to_le_bytes();
                                                                              +    println!(
                                                                              +        "{:>12}  {:08b} {:08b} {:08b} {:08b} {:08b} {:08b} {:08b} {:08b}",
                                                                              +        lbl, b7, b6, b5, b4, b3, b2, b1, b0,
                                                                              +    );
                                                                              +    x
                                                                              +}
                                                                              +

                                                                              Next k-bits Permutation Algorithm #

                                                                              Suppose we have an integer with 4-bits, xs = 00101101. We can get the next lexicographic bitvec next(xs) = 00101110 via the following algorithm:

                                                                              // given a k-bit vector `x` (i.e., `x.count_ones() == k`),
                                                                              +// this fn returns the next k-bit vector permutation in
                                                                              +// lexicographic order.
                                                                              +//
                                                                              +// ex:
                                                                              +//      00001111 -> 00010111
                                                                              +// 		00110101 -> 00101110
                                                                              +//      00101110 -> 00110011
                                                                              +//
                                                                              +// notice that `x.count_ones() == next(x).count_ones()`
                                                                              +fn next_kbit_perm(x: u32) -> u32 {
                                                                              +	// this is `x` but with trailing zeros set to ones
                                                                              +	//
                                                                              +	// ex:
                                                                              +	// 		00101101 -> 00101101
                                                                              +	//      00101100 -> 00101111
                                                                              +	let t = x | x.wrapping_sub(1);
                                                                              +
                                                                              +	// this selects only the trailing ones in `t`.
                                                                              +	// note: t always has at least one trailing one.
                                                                              +	//
                                                                              +	// ex:
                                                                              +	//      00001111 -> 00001111
                                                                              +	// 	 	00101111 -> 00001111
                                                                              +	//      00101101 -> 00000001
                                                                              +	// alt. ((!t & (!t).wrapping_neg()).wrapping_sub(1))
                                                                              +	let u = (1_u8 << (t.trailing_ones())).wrapping_sub(1);
                                                                              +
                                                                              +	// this sets the most significant bit that needs to
                                                                              +	// change (but leaves some trailing zeros that we
                                                                              +	// need to fixup later).
                                                                              +	//
                                                                              +	// ex:
                                                                              +	//      00001111 -> 00010000
                                                                              +	// 		00101011 -> 00101100
                                                                              +	//      00101111 -> 00110000
                                                                              +	let v = t.wrapping_add(1);
                                                                              +
                                                                              +	// the ones we need to add back into v to "fix" it
                                                                              +	//
                                                                              +	// ex:
                                                                              +	// 		x=00011101, u=00000001 -> 00000000
                                                                              +	//      x=00011110, u=00011111 -> 00000111
                                                                              +	// 		x=00101011, u=00000011 -> 00000001
                                                                              +	let w = u.wrapping_shr(x.trailing_zeros() + 1);
                                                                              +
                                                                              +	// the next permutation
                                                                              +	(v | w)
                                                                              +}
                                                                              +
                                                                              • we can use this to generate all k-combinations of a given set, by representing each element of the set x_i as bit b_i. + For example, let's say we have the set {A,B,C}. The combination {A,C} would be represented by the bitstring 101. Applying next_kbit_perm would then give us the next 2-combination 110 or {B,C}.

                                                                              Num leading/trailing zero bytes #

                                                                              fn u64_leading_zero_bytes_ref(x: u64) -> u32 {
                                                                              +	x.to_be_bytes().into_iter().take_while(|&b| b == 0).count() as u32
                                                                              +}
                                                                              +
                                                                              +/// Return the number of leading bytes == 0x00
                                                                              +fn u64_leading_zero_bytes(x: u64) -> u32 {
                                                                              +    x.leading_zeros() >> 3
                                                                              +}
                                                                              +
                                                                              fn u64_trailing_zero_bytes_ref(x: u64) -> u32 {
                                                                              +	x.to_le_bytes().into_iter().take_while(|&b| b == 0).count() as u32
                                                                              +}
                                                                              +
                                                                              +/// Return the number of trailing bytes == 0x00
                                                                              +fn u64_trailing_zero_bytes(x: u64) -> u32 {
                                                                              +    x.trailing_zeros() >> 3
                                                                              +}
                                                                              +

                                                                              godbolt: https://godbolt.org/z/81a7E6f7M

                                                                              Any byte == 0 #

                                                                              Returns true if any byte in x is zero.

                                                                              fn u32_any_byte_eqz_ref(x: u32) -> bool {
                                                                              +	x.to_ne_bytes()
                                                                              +		.into_iter()
                                                                              +		.any(|b| b == 0)
                                                                              +}
                                                                              +
                                                                              +fn u32_any_byte_eqz(x: u32) -> bool {
                                                                              +	// subtract each individual byte by 1. if a byte is 0x00, this will
                                                                              +	// "underflow" to 0xff.
                                                                              +	//
                                                                              +	// for reference:
                                                                              +	// 0x0101_0101  00000001 00000001 00000001 00000001
                                                                              +	let t = x.wrapping_sub(0x0101_0101);
                                                                              +	// for each byte in u, the upper bit is 1 if that corresponding bit
                                                                              +	// is 0 in x
                                                                              +	//
                                                                              +	// ex:
                                                                              +	// 	         x	0XXXXXXX 1XXXXXXX 1XXXXXXX 0XXXXXXX
                                                                              +	// 0x8080_8080 	10000000 10000000 10000000 10000000
                                                                              +	//           u  00000000 10000000 10000000 00000000
                                                                              +	let u = !x & 0x8080_8080;
                                                                              +	// leave a 0x80 in a byte if the upper bit is 1
                                                                              +	//
                                                                              +	// this can only happen if
                                                                              +	// 	 1. the value in the byte has its msb set (after subtracting 1)
                                                                              +	//   2. the msb was not already 1 before subtracting
                                                                              +	//
                                                                              +	// (2.) implies the byte was in the range (0b00000000..=0b01111111).
                                                                              +	//
                                                                              +	// therefore the only value which will have its msb set after
                                                                              +	// subtracting is 0, since it will "underflow" to 0b11111111
                                                                              +	let v = t & u;
                                                                              +
                                                                              +	v != 0
                                                                              +}
                                                                              +

                                                                              godbolt: https://godbolt.org/z/4Evq88seo

                                                                              Any nibble == 0 #

                                                                              Returns true if any nibble in x is zero. This is just Any byte 0 but with the constants adjusted to work on every nibble rather than every byte.

                                                                              fn u32_any_nib_eqz_ref(x: u32) -> bool {
                                                                              +	u32_into_nib_le(x)
                                                                              +		.into_iter()
                                                                              +		.any(|nb| nb == 0)
                                                                              +}
                                                                              +
                                                                              +fn u32_any_nib_eqz(x: u32) -> bool {
                                                                              +	// 0x1111_1111  0001 0001 0001 0001 0001 0001 0001 0001
                                                                              +	// 0x8888_8888  1000 1000 1000 1000 1000 1000 1000 1000
                                                                              +	let t = x.wrapping_sub(0x1111_1111);
                                                                              +	let u = !x & 0x8888_8888;
                                                                              +	let v = t & u;
                                                                              +
                                                                              +	v != 0
                                                                              +}
                                                                              +

                                                                              godbolt: https://godbolt.org/z/fnf78rKvz

                                                                              Any specific bytes == 0 #

                                                                              Returns true if any of a specific subset of the bytes in x are zero.

                                                                              mask is a bit-mask where each byte we want to select is equal to 0x01, for example, mask = 0x0100_0100 would select the 2nd and 4th bytes (1-indexed).

                                                                              fn u32_any_spec_nib_eqz_ref(x: u32, mask: u32) -> bool {
                                                                              +	x.to_ne_bytes().into_iter()
                                                                              +		.zip(mask.to_ne_bytes().into_iter())
                                                                              +		.any(|(b_x, b_mask)| (b_mask == 0x01) && (b_x == 0x00))
                                                                              +}
                                                                              +
                                                                              +fn u32_any_spec_nib_eqz(x: u32, mask: u32) -> bool {
                                                                              +	// this is just 0x8888_8888, but only 8 where mask has a 1-nibble
                                                                              +	let mask_hi = mask.wrapping_mul(0x8);
                                                                              +
                                                                              +	let t = x.wrapping_sub(mask);
                                                                              +	let u = !x & mask_hi;
                                                                              +	let v = t & u;
                                                                              +
                                                                              +	v != 0
                                                                              +}
                                                                              +

                                                                              Any specific nibbles == 0 #

                                                                              Returns true if any of a specific subset of the nibbles in x are zero.

                                                                              mask is a bit-mask where each nibble we want to select is equal to 0001, for example, mask = 0x1100_0010 would select the 2nd, 7th, and 8th nibbles (1-indexed).

                                                                              fn u32_any_spec_nib_eqz_ref(x: u32, mask: u32) -> bool {
                                                                              +	u32_into_nib_le(x)
                                                                              +		.into_iter()
                                                                              +		.zip(u32_into_nib_le(mask).into_iter())
                                                                              +		.any(|(nb_x, nb_mask)| (nb_mask == 0x1) && (nb_x == 0x0))
                                                                              +}
                                                                              +
                                                                              +fn u32_any_spec_nib_eqz(x: u32, mask: u32) -> bool {
                                                                              +	// this is just 0x8888_8888, but only 8 where mask has a 1-nibble
                                                                              +	let mask_hi = mask.wrapping_mul(0x8);
                                                                              +
                                                                              +	let t = x.wrapping_sub(mask);
                                                                              +	let u = !x & mask_hi;
                                                                              +	let v = t & u;
                                                                              +
                                                                              +	v != 0
                                                                              +}
                                                                              +

                                                                              godbolt: https://godbolt.org/z/Tfn9fbKKG

                                                                              Any byte b in range m < b < n #

                                                                              where 0 <= m <= 127 and 0 <= n <= 128.

                                                                              Returns true if any byte b in x is in the range m < b < n.

                                                                              fn u32_has_byte_between_ref(x: u32, m: u32, n: u32) -> bool {
                                                                              +	assert!((0..=127).contains(&m));
                                                                              +	assert!((0..=128).contains(&n));
                                                                              +
                                                                              +	let m = m as u8;
                                                                              +	let n = n as u8;
                                                                              +
                                                                              +	x.to_ne_bytes().into_iter().any(|b| (m < b) && (b < n))
                                                                              +}
                                                                              +
                                                                              +fn u32_has_byte_between(x: u32, m: u32, n: u32) -> bool {
                                                                              +	assert!((0..=127).contains(&m));
                                                                              +	assert!((0..=128).contains(&n));
                                                                              +
                                                                              +	let mask = 0x0101_0101;
                                                                              +	let s = mask * 127;
                                                                              +	let y = mask * 128;
                                                                              +	let w = mask * (127 + n);
                                                                              +	let t = mask * (127 - m);
                                                                              +
                                                                              +	let u = x & s;
                                                                              +	let z = (w - u) & (!x) & (u + t) & y;
                                                                              +
                                                                              +	z != 0
                                                                              +}
                                                                              +

                                                                              godbolt: https://godbolt.org/z/a5911ra73

                                                                              Any specific bytes b in range m < b < n #

                                                                              where 0 <= m <= 127 and 0 <= n <= 128.

                                                                              Returns true if any specific bytes b in x are in the range m < b < n, selected by a bit-mask mask.

                                                                              mask is a bit-mask where each byte we want to select is equal to 0x01, for example, mask = 0x0100_0100 would select the 2nd and 4th bytes (1-indexed).

                                                                              fn u32_has_spec_byte_between_ref(x: u32, mask: u32, m: u32, n: u32) -> bool {
                                                                              +	assert!((0..=127).contains(&m));
                                                                              +	assert!((0..=128).contains(&n));
                                                                              +
                                                                              +	let m = m as u8;
                                                                              +	let n = n as u8;
                                                                              +
                                                                              +	x.to_ne_bytes()
                                                                              +		.into_iter()
                                                                              +		.zip(mask.to_ne_bytes().into_iter())
                                                                              +		.any(|(b_x, b_mask)| (b_mask == 0x01) && (m < b_x) && (b_x < n))
                                                                              +}
                                                                              +
                                                                              +fn u32_has_spec_byte_between(x: u32, mask: u32, m: u32, n: u32) -> bool {
                                                                              +	assert!((0..=127).contains(&m));
                                                                              +	assert!((0..=128).contains(&n));
                                                                              +
                                                                              +	let s = mask * 127;
                                                                              +	let y = mask * 128;
                                                                              +	let w = mask * (127 + n);
                                                                              +	let t = mask * (127 - m);
                                                                              +
                                                                              +	let u = x & s;
                                                                              +	let z = (w - u) & (!x) & (u + t) & y;
                                                                              +
                                                                              +	z != 0
                                                                              +}
                                                                              +

                                                                              godbolt: https://godbolt.org/z/aq8T9seEs

                                                                              Any specific nibbles nb in range m < nb < n #

                                                                              where 0 <= m <= 7 and 0 <= n <= 8.

                                                                              Returns true if any specific nibbles nb in x are in the range m < nb < n, selected by a bit-mask mask.

                                                                              mask is a bit-mask where each nibble we want to select is equal to 0001, for example, mask = 0x1100_0010 would select the 2nd, 7th, and 8th nibbles (1-indexed).

                                                                              fn u32_has_spec_nib_between_ref(x: u32, mask: u32, m: u32, n: u32) -> bool {
                                                                              +	assert!((0..=7).contains(&m));
                                                                              +	assert!((0..=8).contains(&n));
                                                                              +
                                                                              +	let m = m as u8;
                                                                              +	let n = n as u8;
                                                                              +
                                                                              +	u32_into_nib_le(x)
                                                                              +		.into_iter()
                                                                              +		.zip(u32_into_nib_le(mask).into_iter())
                                                                              +		.any(|(nb_x, nb_mask)| {
                                                                              +			(nb_mask == 0x1) && (m < nb_x) && (nb_x < n)
                                                                              +		})
                                                                              +}
                                                                              +
                                                                              +fn u32_has_spec_nib_between(x: u32, mask: u32, m: u32, n: u32) -> bool {
                                                                              +	assert!((0..=7).contains(&m));
                                                                              +	assert!((0..=8).contains(&n));
                                                                              +
                                                                              +	let s = mask * 7;
                                                                              +	let y = mask * 8;
                                                                              +	let w = mask * (7 + n);
                                                                              +	let t = mask * (7 - m);
                                                                              +
                                                                              +	let u = x & s;
                                                                              +	let z = (w - u) & (!x) & (u + t) & y;
                                                                              +
                                                                              +	z != 0
                                                                              +}
                                                                              +

                                                                              godbolt: https://godbolt.org/z/PGfvT39z5

                                                                              Element-wise bytes less-than #

                                                                              fn u64_elementwise_bytes_lt_ref(x: u64, y: u64) -> u64 {
                                                                              +	assert!(x & 0x8080_8080_8080_8080_u64 == 0);
                                                                              +	let bytes = x.to_le_bytes()
                                                                              +		.into_iter()
                                                                              +		.zip(y.to_le_bytes().into_iter())
                                                                              +		.map(|(bx, by)| if bx < by { 0x80_u8 } else { 0x00_u8 })
                                                                              +		.collect::<Vec<_>>();
                                                                              +	u64::from_le_bytes(<[u8; 8]>::try_from(&bytes[..]).unwrap())
                                                                              +}
                                                                              +
                                                                              +/// Do an element-wise less-than comparison across each byte in `x` and `y`.
                                                                              +/// Returns a mask where each byte is `0x80` if `bx < by` and `0x00` otherwise.
                                                                              +/// Requires that each byte in `x` is in the range `0 <= bx <= 0x7f (127)`.
                                                                              +fn u64_elementwise_bytes_lt(x: u64, y: u64) -> u64 {
                                                                              +    // ensure no elements in x are > 0x7f
                                                                              +    debug_assert!((x & 0x8080_8080_8080_8080) == 0);
                                                                              +
                                                                              +    let a = 0x7f7f_7f7f_7f7f_7f7f_u64;
                                                                              +    let b = 0x8080_8080_8080_8080_u64;
                                                                              +    let c = a - x;
                                                                              +
                                                                              +    // a = (0x7f << 56) + (0x7f << 48) + .. + (0x7f << 0)
                                                                              +    // x = (b7 << 56) + (b6 << 48) + .. + (b0 << 0)
                                                                              +    // c = ((0x7f - b7) << 56) + .. + ((0x7f - b0) << 0)
                                                                              +	//     iff. bi <= 0x7f forall i
                                                                              +
                                                                              +    // (((by & 0x7f) + (0x7f - bx) > 0x7f) || (by > 0x7f)
                                                                              +    // by' + 0x7f - bx > 0x7f
                                                                              +    // by' - bx > 0x7f
                                                                              +    // (by' > bx) || (by > 0x7f)
                                                                              +
                                                                              +    ((y & a).wrapping_add(c) | y) & b
                                                                              +}
                                                                              +

                                                                              godbolt: https://godbolt.org/z/fzGT4bonz

                                                                              Leading byte index less-than #

                                                                              fn u64_leading_byte_idx_lt_ref(x: u64, y: u64) -> Option<u8> {
                                                                              +	x.to_le_bytes().into_iter()
                                                                              +		.zip(y.to_le_bytes().into_iter())
                                                                              +		.rposition(|(bx, by)| bx < by)
                                                                              +		.map(|idx| idx as u8)
                                                                              +}
                                                                              +
                                                                              +/// Given two u64's, `x` and `y`, where all bytes `bx` in `x` are in the range
                                                                              +/// `0 <= bx <= 0x7f (127)`, return the _byte index_ (i.e., idx = 0 = least
                                                                              +/// significant byte, idx = 7 = most-significant byte)  of the first leading byte
                                                                              +/// `by` in `y` where `by > bx`. (i.e., starting from the most-significant byte).
                                                                              +///
                                                                              +/// Returns `None` if there are no bytes in `y` greater than their corresponding
                                                                              +/// byte in `x`.
                                                                              +fn u64_leading_byte_idx_lt(x: u64, y: u64) -> Option<u8> {
                                                                              +    let mask_0x80 = u64_elementwise_bytes_lt(x, y);
                                                                              +
                                                                              +    if mask_0x80 != 0 {
                                                                              +        Some((7 - u64_leading_zero_bytes(mask_0x80)) as u8)
                                                                              +    } else {
                                                                              +        None
                                                                              +    }
                                                                              +}
                                                                              +

                                                                              godbolt: https://godbolt.org/z/aadbsqjve

                                                                              Trailing byte index single byte less-than #

                                                                              fn u64_trailing_byte_idx_lt_ref(n: u8, y: u64) -> Option<u8> {
                                                                              +	y.to_le_bytes()
                                                                              +		.into_iter()
                                                                              +		.position(|by| n < by)
                                                                              +		.map(|idx| idx as u8)
                                                                              +}
                                                                              +
                                                                              +/// Return the _byte index_ of the first _trailing_ byte `by` in `y` where
                                                                              +/// `n < by`.
                                                                              +fn u64_trailing_byte_idx_lt(n: u8, y: u64) -> Option<u8> {
                                                                              +    // broadcast byte `n` across all bytes
                                                                              +    let x = 0x0101_0101_0101_0101_u64 * (n as u64);
                                                                              +    // set 0x80 in all bytes where `n < by`
                                                                              +    let mask_0x80 = u64_elementwise_bytes_lt(x, y);
                                                                              +
                                                                              +    if mask_0x80 != 0 {
                                                                              +        Some(u64_trailing_zero_bytes(mask_0x80) as u8)
                                                                              +    } else {
                                                                              +        None
                                                                              +    }
                                                                              +}
                                                                              +

                                                                              godbolt: https://godbolt.org/z/3n5s1TMnW

                                                                              pdep - parallel bit deposit #

                                                                              Like "spreading" out compact bits onto a mask.

                                                                              See: https://github.com/phlip9/fastperm_benches/blob/master/src/select64.rs#L123

                                                                              select - get the index of the i'th 1-bit in a mask #

                                                                              See: https://github.com/phlip9/fastperm_benches/blob/master/src/select64.rs#L19

                                                                              Generate all possible masks #

                                                                              A proptest strategy for generating all possible combinations of bits, mask that match a "meta" mask. By "match" I mean meta_mask & mask == mask, i.e., mask is a subset of meta_mask.

                                                                              fn u32_arb_mask(meta_mask: u32) -> impl Strategy<Value = u32> {
                                                                              +	let nmasks: u32 = 1 << meta_mask.count_ones();
                                                                              +
                                                                              +	(0..=nmasks)
                                                                              +		.prop_map(move |mask_idx| pdep32(mask_idx, meta_mask))
                                                                              +}
                                                                              +

                                                                              Sum all nibbles #

                                                                              Given x = AAAA BBBB CCCC DDDD EEEE FFFF GGGG HHHH, returns the sum AAAA + BBBB + CCCC + DDDD + EEEE + FFFF + GGGG + HHHH.

                                                                              fn u32_sum_nibs_ref(x: u32) -> u32 {
                                                                              +	u32_into_nib_le(x)
                                                                              +		.into_iter()
                                                                              +		.map(|x| x as u32)
                                                                              +		.sum()
                                                                              +}
                                                                              +
                                                                              +// this implementation is just a truncated popcnt/count_ones.
                                                                              +// it's truncated in that we skip horizontal summing the bits and
                                                                              +// half-nibbles and just dive right into horizontal summing the
                                                                              +// nibbles.
                                                                              +//
                                                                              +// visually:
                                                                              +//
                                                                              +//   x  AAAA BBBB CCCC DDDD EEEE FFFF GGGG HHHH
                                                                              +//   y  000A BABA 000C DCDC 000E FEFE 000G HGHG  (1.)
                                                                              +//   z  0000 0000 00AB CDAB 0000 0000 00EF GHEF  (2.)
                                                                              +//   w  0000 0000 0000 0000 0000 0000 0ABC DEFG  (3.)
                                                                              +//
                                                                              +// (1.) note that any horizontal sum AAAA + BBBB will fill at most
                                                                              +//      _5_ bits. (log2(16 + 16) == 5)
                                                                              +// (2.) each will fill at most _6_ bits. (log2(32 + 32) == 6)
                                                                              +// (3.) the result will fill at most _7_ bits. (log2(64 + 64) == 7)
                                                                              +fn u32_sum_nibs_simple(x: u32) -> u32 {
                                                                              +    const NIBS_0246: u32 = 0x0f0f_0f0f;
                                                                              +    const NIBS_0145: u32 = 0x00ff_00ff;
                                                                              +    const NIBS_0123: u32 = 0x0000_ffff;
                                                                              +
                                                                              +	// like taking each individual byte and replacing it with the sum
                                                                              +	// of its hi and lo nibbles.
                                                                              +    let y = (x & NIBS_0246) + ((x >> 4) & NIBS_0246);
                                                                              +	// for each individual half-word, replace it with the sum of its
                                                                              +	// hi and lo bytes.
                                                                              +	let z = (y & NIBS_0145) + ((y >> 8) & NIBS_0145);
                                                                              +	// our result is then the sum of the remaining hi and lo
                                                                              +	// half-words!
                                                                              +    let w = (z & NIBS_0123) + ((z >> 16) & NIBS_0123);
                                                                              +
                                                                              +	w
                                                                              +}
                                                                              +
                                                                              +// this one's pretty cool and compact : )
                                                                              +//
                                                                              +// it starts off like the one before, horizontal summing the adjacent
                                                                              +// nibbles in each byte.
                                                                              +//
                                                                              +// the trick here is to somehow get the horizontal sum of all bytes
                                                                              +// into the _last_ byte, then shift down so only the last byte is left.
                                                                              +//
                                                                              +// we can decompose any 32-bit integer into base 256, where the
                                                                              +// ith coefficient is the ith byte:
                                                                              +//
                                                                              +// B = 2^8
                                                                              +// y = (b3 * B^3) + (b2 * B^2) + (b1 * B^1) + (b0 * B^0)     (mod 2^32)
                                                                              +//   = (b3 * 2^24) + (b2 * 2^16) + (b1 * 2^8) + (b0 * 2^0)   (mod 2^32)
                                                                              +//
                                                                              +// we want to reach the following:
                                                                              +//
                                                                              +// z = ((b3 + b2 + b1 + b0) * 2^24) + (XXX)   (mod 2^32)
                                                                              +// 	   where 0 <= b0, b1, b2, b3 < 32
                                                                              +//       and (XXX) < 0x00ff_ffff (so it doesn't overflow into the
                                                                              +// 								  part care about)
                                                                              +//
                                                                              +// consider one of the individual bytes multiplied by 0x0101_0101
                                                                              +//
                                                                              +// y2 = b2 * 2^16
                                                                              +// y2 * 0x0101_0101 = b2 * (0x0101_0101 * 2^16)
                                                                              +// 					= b2 * (0x0101_0101 << 16)
                                                                              +// 					= b2 * 0x0101_0000
                                                                              +// 					= 0xb2b2_0000
                                                                              +//
                                                                              +// then, expanding all byte sections
                                                                              +//
                                                                              +// y0 = b0 * 2^0
                                                                              +// y1 = b1 * 2^8
                                                                              +// y2 = b2 * 2^16
                                                                              +// y3 = b3 * 2^24
                                                                              +//
                                                                              +// y = y0 + y1 + y2 + y3
                                                                              +//
                                                                              +// y0 * 0x0101_0101 = b0 * (0x0101_0101 << 0)
                                                                              +//					= b0 * 0x0101_0101
                                                                              +//                  = 0xb0b0_b0b0
                                                                              +// y1 * 0x0101_0101 = b1 * (0x0101_0101 << 8)
                                                                              +//					= b1 * 0x0101_0100
                                                                              +//                  = 0xb1b1_b100
                                                                              +// y2 * 0x0101_0101 = b2 * (0x0101_0101 << 16)
                                                                              +//					= b2 * 0x0101_0000
                                                                              +//                  = 0xb2b2_0000
                                                                              +// y3 * 0x0101_0101 = b3 * (0x0101_0101 << 24)
                                                                              +//					= b3 * 0x0100_0000
                                                                              +//                  = 0xb300_0000
                                                                              +// y * 0x0101_0101 = (y0 + y1 + y2 + y3) * 0x0101_0101
                                                                              +//                 = 0xb0b0_b0b0 + 0xb1b1_b100 +
                                                                              +//	                 0xb2b2_0000 + 0xb300_0000
                                                                              +//                 = [b0, b0+b1, b0+b1+b2, b0+b1+b2+b3]
                                                                              +//
                                                                              +// which has exactly what we want, b0+b1+b2+b3 in the last byte!
                                                                              +// (with some leftover junk in the lower bytes, but we can just
                                                                              +// ignore that when we down shift).
                                                                              +//
                                                                              +// since we're doing a horizontal sum to get `y`, and each nibble
                                                                              +// must be in the range 0 <= nb < 16, it follows that each byte
                                                                              +// (which is a sum of two nibbles here) must be in the range:
                                                                              +// 0 <= b < 32. this means none of the byte sums will overflow,
                                                                              +// since 32 * 4 = 128 <= 256
                                                                              +fn u32_sum_all_nibs(x: u32) -> u32 {
                                                                              +    // a mask that selects the lo nibble in each byte.
                                                                              +    const NIBS_0246: u32 = 0x0f0f_0f0f;
                                                                              +
                                                                              +    // horizontal sum hi and lo nibbles in each byte, placing in the
                                                                              +	// lo nibble.
                                                                              +    let y = (x & NIBS_0246) + ((x >> 4) & NIBS_0246);
                                                                              +
                                                                              +    // if y = [y0, y1, y2, y3] bytes and each byte b is in the range
                                                                              +	// 0 <= b < 64, then multiplying by 0x0101_0101 will yield
                                                                              +    // z = [y0, y0 + y1, y0 + y1 + y2, y0 + y1 + y2 + y3] without
                                                                              +	// any overflows.
                                                                              +    //
                                                                              +    // since each byte in y is the sum of two nibbles nb where
                                                                              +	// 0 <= nb < 16, it follows that 0 <= b = nb_lo + nb_hi < 32 < 64
                                                                              +	// so we won't have any overflows
                                                                              +    let z = y.wrapping_mul(0x0101_0101);
                                                                              +
                                                                              +    // select the last byte in z, which contains our desired sum:
                                                                              +    // z3 = y0 + y1 + y2 + y3
                                                                              +    //    = (nb0 + nb1) + (nb2 + nb3) + (nb4 + nb5) + (nb6 + nb7)
                                                                              +    z >> 24
                                                                              +}
                                                                              +

                                                                              godbolt: https://godbolt.org/z/4EcYae1fj

                                                                              \ No newline at end of file diff --git a/performance/dtrace on macOS/index.html b/performance/dtrace on macOS/index.html new file mode 100644 index 0000000000..2f40b4ac16 --- /dev/null +++ b/performance/dtrace on macOS/index.html @@ -0,0 +1,293 @@ +dtrace on macOS | philip's notes

                                                                              dtrace on macOS

                                                                              2023-01-30 · 6 min read

                                                                                setup: disable system integrity protection for dtrace #

                                                                                By default, macOS won't let you run dtrace, even when run as root. Fortunately we can can carve out a specific exception for dtrace. To do that we'll have to boot into recovery mode:

                                                                                1. Turn off the computer.
                                                                                2. Hold down the power button for ~10 sec, until a screen pops up with two options.
                                                                                3. Select "Options" to boot into recovery mode.
                                                                                4. Ignore the initial screen and instead select "Terminal" from the top bar.
                                                                                5. Run csrutil enable --without dtrace.
                                                                                6. Reboot normally.

                                                                                Once you're booted back in, try running sudo dtruss bash -c echo foo and you should see some output.

                                                                                syscall counts of running process #

                                                                                $ sudo dtrace -n 'syscall:::entry/pid == 1234/{ @syscalls[probefunc] = count(); }'
                                                                                +
                                                                                +# .. collect data, then hit CTRL-C .. #
                                                                                +^C
                                                                                +
                                                                                +chmod                                                             3
                                                                                +close                                                             3
                                                                                +fchown                                                            3
                                                                                +rename                                                            3
                                                                                +getuid                                                            5
                                                                                +lstat64                                                           6
                                                                                +# ..
                                                                                +fcntl                                                           105
                                                                                +open_nocancel                                                   313
                                                                                +fcntl_nocancel                                                  322
                                                                                +fstat64                                                         322
                                                                                +close_nocancel                                                  391
                                                                                +read                                                            465
                                                                                +write                                                           480
                                                                                +stat64                                                          685
                                                                                +kevent                                                         1333
                                                                                +

                                                                                trace bytes read by all processes #

                                                                                $ sudo dtrace -n "syscall::read:entry { @bytes[execname] = sum(arg2); }"
                                                                                +dtrace: description 'syscall::read:entry ' matched 1 probe
                                                                                +^C
                                                                                +
                                                                                +sudo                                                              2
                                                                                +plugin-container                                                 10
                                                                                +karabiner_observer                                             4096
                                                                                +tmux                                                           4096
                                                                                +karabiner_console_user_server                                  8192
                                                                                +karabiner_session_monitor                                      9216
                                                                                +cfprefsd                                                      17665
                                                                                +firefox                                                       32787
                                                                                +git                                                           33225
                                                                                +karabiner_grabber                                             38912
                                                                                +Karabiner-DriverKit-VirtualHIDDe                              51200
                                                                                +postgres                                                      57397
                                                                                +locationd                                                     57680
                                                                                +sharingd                                                      57680
                                                                                +Obsidian Helper (Renderer)                                   399360
                                                                                +mds                                                         1326816
                                                                                +fseventsd                                                   1777432
                                                                                +alacritty                                                   4194560
                                                                                +mdworker_shared                                             5242880
                                                                                +

                                                                                trace spawned processes #

                                                                                $ sudo dtrace -qn "syscall::posix_spawn:entry { printf(\"%Y %s\n\", walltimestamp, copyinstr(arg1)); }"
                                                                                +
                                                                                +^[2023 Jan 30 13:29:50 /usr/bin/git
                                                                                +2023 Jan 30 13:29:50 /usr/bin/git
                                                                                +2023 Jan 30 13:29:52 /usr/libexec/xpcproxy
                                                                                +2023 Jan 30 13:29:52 /opt/homebrew/opt/postgresql@14/bin/postgres
                                                                                +2023 Jan 30 13:29:55 /usr/libexec/xpcproxy
                                                                                +2023 Jan 30 13:29:55 /System/Library/Frameworks/CoreServices.framework/Frameworks/Metadata.framework/Versions/A/Support/mdworker_shared
                                                                                +2023 Jan 30 13:30:02 /usr/libexec/xpcproxy
                                                                                +2023 Jan 30 13:30:02 /opt/homebrew/opt/postgresql@14/bin/postgres
                                                                                +2023 Jan 30 13:30:05 /usr/libexec/xpcproxy
                                                                                +2023 Jan 30 13:30:05 /usr/sbin/newsyslog
                                                                                +2023 Jan 30 13:30:12 /usr/libexec/xpcproxy
                                                                                +2023 Jan 30 13:30:12 /opt/homebrew/opt/postgresql@14/bin/postgres
                                                                                +

                                                                                Find longest syscalls #

                                                                                $ sudo dtrace -qn \
                                                                                +	'syscall:::entry { self->ts = timestamp; } syscall:::return/self->ts/ { printf("%d µs, %s\n", (timestamp - self->ts) / 1000, probefunc); self->ts = 0; }' \
                                                                                +    -c 'bash -c "python3 -c \"print(123)\""' \
                                                                                +	| sort -h
                                                                                +
                                                                                +..
                                                                                +42 µs, ioctl
                                                                                +44 µs, open_nocancel
                                                                                +44 µs, shared_region_check_np
                                                                                +351 µs, execve
                                                                                +943 µs, ioctl
                                                                                +1279 µs, workq_kernreturn
                                                                                +1348 µs, psynch_cvwait
                                                                                +

                                                                                some oneliners #

                                                                                # Files opened by process. Very useful when reversing:
                                                                                +dtrace -n 'syscall::open*:entry { printf("%s %s", execname, copyinstr(arg0)); }'
                                                                                +
                                                                                +# Syscall count by program:
                                                                                +dtrace -n 'syscall:::entry { @num[execname] = count(); }'
                                                                                +
                                                                                +# Syscall count by syscall:
                                                                                +dtrace -n 'syscall:::entry { @num[probefunc] = count(); }'
                                                                                +
                                                                                +# Syscall count by PID:
                                                                                +dtrace -n 'syscall:::entry { @num[pid,execname] = count(); }'
                                                                                +
                                                                                +# Read bytes by process:
                                                                                +dtrace -n 'syscall::read:entry { @bytes[execname] = sum(arg0); }'
                                                                                +
                                                                                +# Periodic breakdown of written bytes by process:
                                                                                +dtrace -n 'syscall::write:* { @bytes[execname] = sum(arg0); } tick-5sec { printa(@bytes); trunc(@bytes); }'
                                                                                +
                                                                                +# Read size distribution by process:
                                                                                +dtrace -n 'syscall::read:entry { @dist[execname] = quantize(arg0); }'
                                                                                +
                                                                                +# Write size distribution by process:
                                                                                +dtrace -n 'syscall::write:entry { @dist[execname] = quantize(arg0); }'
                                                                                +
                                                                                +# Disk size (in blocks) by process:
                                                                                +dtrace -n 'io:::start { printf("%d %s %d", pid, execname, args[0]->b_bcount); }'
                                                                                +
                                                                                +# Pages paged in by process:
                                                                                +dtrace -n 'vminfo::vm_fault_enter:pgin { @pg[execname] = sum(arg0); }'
                                                                                +
                                                                                +# Minor faults by process:
                                                                                +dtrace -n 'vminfo:::as_fault { @mem[execname] = sum(arg0); }'
                                                                                +
                                                                                +# Interrupts by CPU:
                                                                                +dtrace -n 'sdt:::interrupt-start { @num[cpu] = count(); }'
                                                                                +
                                                                                +# New processes with arguments and time:
                                                                                +dtrace -qn 'syscall::exec*:return { printf("%Y %s\n",walltimestamp,curpsinfo->pr_psargs); }'
                                                                                +
                                                                                +# Successful signal details:
                                                                                +dtrace -n 'proc:::signal-send /pid/ { printf("%s -%d %d",execname,args[2],args[1]->pr_pid); }'
                                                                                +
                                                                                +# System call breakdown for the process with PID 31337:
                                                                                +dtrace -n syscall:::entry'/pid == 31337/{ @syscalls[probefunc] = count(); }'
                                                                                +
                                                                                +# Tracking memory page faults for process:
                                                                                +dtrace -n 'vminfo:::as_fault { @mem[execname] = sum(arg0); }'
                                                                                +
                                                                                +# iOS Intruments-like malloc size distribution plot:
                                                                                +dtrace -n 'pid$target::malloc:entry { @ = quantize(arg0); }' -p PID
                                                                                +
                                                                                +# Memory allocation via malloc by stack trace and requested size:
                                                                                +dtrace -n 'pid$target::malloc:entry { @[ustack()] = sum(arg0); }' -p PID
                                                                                +
                                                                                +# Rate of disk I/O:
                                                                                +dtrace -n 'io:::start { @io = count(); } tick-1sec { printa("Disk I/Os per second: %@d\n", @io); trunc(@io); }'
                                                                                +

                                                                                trace spawned processes w/ full arguments #

                                                                                // file: /usr/local/bin/traceexec.d
                                                                                +
                                                                                +#!/usr/sbin/dtrace -C -s
                                                                                +#pragma D option quiet
                                                                                +
                                                                                +dtrace:::BEGIN
                                                                                +{
                                                                                +    printf("PID\tPPID\tTIME\tPATH\tARGV\n")
                                                                                +}
                                                                                +
                                                                                +// remember that probes are executed _in the order they appear in the file_
                                                                                +// and that probe-local variables (this->XXX) are shared across activated
                                                                                +// probes.
                                                                                +
                                                                                +// Since `arg0` and `argv[idx]` are in user-space and probes are run in
                                                                                +// kernel-space, we have to first `copyin[str](..)` the user-space strings
                                                                                +// before we can process them.
                                                                                +
                                                                                +syscall::execve:entry
                                                                                +/pid == $target || progenyof($target)/
                                                                                +{
                                                                                +    this->path = copyinstr(arg0);
                                                                                +    this->argv = args[1];
                                                                                +}
                                                                                +
                                                                                +syscall::posix_spawn:entry
                                                                                +/pid == $target || progenyof($target)/
                                                                                +{
                                                                                +    this->path = copyinstr(arg1);
                                                                                +    this->argv = args[3];
                                                                                +}
                                                                                +
                                                                                +#define SAFE_ARGC(idx) ((this->argc != (idx) || this->argv[(idx)] == NULL) ? this->argc : (this->argc + 1))
                                                                                +#define SAFE_ARGV(idx) ((this->argc > (idx)) ? copyinstr((user_addr_t) this->argv[(idx)]) : "")
                                                                                +
                                                                                +syscall::execve:entry,
                                                                                +syscall::posix_spawn:entry
                                                                                +/pid == $target || progenyof($target)/
                                                                                +{
                                                                                +    this->pid=pid;
                                                                                +    this->ppid=ppid;
                                                                                +
                                                                                +    // DTrace doesn't support loops, so we have to manually unroll the argc
                                                                                +    // and argv processing.
                                                                                +
                                                                                +    this->argc = 0;
                                                                                +    this->argc = SAFE_ARGC(0);
                                                                                +    this->argc = SAFE_ARGC(1);
                                                                                +    this->argc = SAFE_ARGC(2);
                                                                                +    this->argc = SAFE_ARGC(3);
                                                                                +    this->argc = SAFE_ARGC(4);
                                                                                +    this->argc = SAFE_ARGC(5);
                                                                                +    this->argc = SAFE_ARGC(6);
                                                                                +    this->argc = SAFE_ARGC(7);
                                                                                +    this->argc = SAFE_ARGC(8);
                                                                                +    this->argc = SAFE_ARGC(9);
                                                                                +
                                                                                +    printf("%d\t", pid);
                                                                                +    printf("%d\t", ppid);
                                                                                +    printf("%Y\t", walltimestamp);
                                                                                +    printf("%s\t", this->path);
                                                                                +    printf("%s ", SAFE_ARGV(1));
                                                                                +    printf("%s ", SAFE_ARGV(2));
                                                                                +    printf("%s ", SAFE_ARGV(3));
                                                                                +    printf("%s ", SAFE_ARGV(4));
                                                                                +    printf("%s ", SAFE_ARGV(5));
                                                                                +    printf("%s ", SAFE_ARGV(6));
                                                                                +    printf("%s ", SAFE_ARGV(7));
                                                                                +    printf("%s ", SAFE_ARGV(8));
                                                                                +    printf("%s ", SAFE_ARGV(9));
                                                                                +    printf("\n");
                                                                                +}
                                                                                +
                                                                                +#undef SAFE_ARGC
                                                                                +#undef SAFE_ARGV
                                                                                +

                                                                                reference #

                                                                                Oracle - Dynamic Tracing Guide (pdf)

                                                                                \ No newline at end of file diff --git a/performance/index.html b/performance/index.html new file mode 100644 index 0000000000..6f30465ded --- /dev/null +++ b/performance/index.html @@ -0,0 +1,73 @@ +performance | philip's notes

                                                                                performance

                                                                                bit hacks →

                                                                                2022-02-10 · 14 min read

                                                                                dtrace on macOS →

                                                                                2023-01-30 · 6 min read

                                                                                profiling →

                                                                                2022-02-08 · 1 min read

                                                                                simdjson talk →

                                                                                2022-03-26 · 4 min read

                                                                                \ No newline at end of file diff --git a/performance/profiling/index.html b/performance/profiling/index.html new file mode 100644 index 0000000000..52bf69b109 --- /dev/null +++ b/performance/profiling/index.html @@ -0,0 +1,91 @@ +profiling | philip's notes

                                                                                profiling

                                                                                2022-02-08 · 1 min read

                                                                                Viewing perf results #

                                                                                See WSL2 custom kernel > perf for how to collect and transform profile records with perf.

                                                                                Use https://www.speedscope.app/ to view perf.data (after converting to text format with perf script).

                                                                                Speedscope Views #

                                                                                1. Time Order

                                                                                  Shows call stacks ordered by chronological order. Useful for seeing what is happening over time (e.g., first DB call, then request, then ...).

                                                                                2. Left Heavy a.k.a. Icicle View

                                                                                  Shows identical stacks grouped together regardless of chronological order. The heaviest stack is always on the left. Basically flamegraph view but upside down (top stack on top).

                                                                                3. Sandwich

                                                                                  Shows a table of all functions by total time spent. Clicking on a function will show you the "Left Heavy" view (but just for callers and callees of that function).

                                                                                \ No newline at end of file diff --git a/performance/simdjson talk/index.html b/performance/simdjson talk/index.html new file mode 100644 index 0000000000..5b51a210e2 --- /dev/null +++ b/performance/simdjson talk/index.html @@ -0,0 +1,164 @@ +simdjson talk | philip's notes

                                                                                simdjson talk

                                                                                2022-03-26 · 4 min read

                                                                                "Data Engineering at the Speed of Your Disk" - Daniel Lemire - 2020

                                                                                • Modern disks are pretty fast
                                                                                  • PCIe 4 disks: 5 GB/s sequential read
                                                                                • Modern datacenter VPC network real fucking fast
                                                                                  • 50 Gb/s (6.25 GiB/s) and better
                                                                                • If we can't eat data at many GB/s, we'll literally be CPU-bound reading from disk or network!
                                                                                • How fast can we allocate memory?
                                                                                // almost instant (just virtual memory)
                                                                                +let mut buf = Vec::with_capacity(size);
                                                                                +
                                                                                +// actually instantiate physical pages
                                                                                +for i in (0..buf.len()).step_by(page_size) {
                                                                                +	buf[i] = 0;
                                                                                +}
                                                                                +

                                                                                3.5 GB/s (Linux, Skylake 3.4 GHz, 4 KiB pages)

                                                                                • How fast can we, e.g., remove spaces from a string?
                                                                                  • Assume 1% space density (minified json)
                                                                                for i in 0..buf.len() {
                                                                                +	if buf[i] > 32 /* space as decimal = 32 */ {
                                                                                +		buf[i + 1] = buf[i];
                                                                                +	}
                                                                                +}
                                                                                +

                                                                                1.6 GB/s

                                                                                • Just working byte-by-byte will already have limit of ~3.5 GB/s b/c our processor is 3.5 GHz.
                                                                                • We're already slower than disk if we work byte-by-byte.
                                                                                • so how are we going to go faster? SIMD : )

                                                                                AVX-512 instructions can operate on an entire cache-line at once : 0

                                                                                • Working with SIMD

                                                                                • (1) use SIMD intrinsics. produces very disgusting code though.

                                                                                • (2) pray / massage code so compiler auto-vectorizes : )

                                                                                • despacer with SIMD

                                                                                // filled with spaces
                                                                                +__m128i spaces = _mm_set1_epi8(' ');
                                                                                +
                                                                                +for (i = 0; i + 15 < size; i += 16) {
                                                                                +	// load next chunk
                                                                                +	__m128i x = _mm_loadu_si128(bytes + i);
                                                                                +
                                                                                +	// set a 1 byte anywhere we have an x byte <= 32
                                                                                +	__m128i anywhite = _mm_cmpeq_epi8(spaces, _mm_max_epu8(spaces, x));
                                                                                +
                                                                                +	// condense anywhite mask into a packed u64 mask
                                                                                +	uint64_t mask16 = _mm_movemask_epi8(anywhite);
                                                                                +
                                                                                +	// basically a pdep, but deposit the non-space bytes at the front
                                                                                +	x = _mm_shuffle_epi8(x, despace_mask16[mask16 & 0x7fff]);
                                                                                +
                                                                                +	// store in-place
                                                                                +	_mm_storeu_si128(bytes + pos, x);
                                                                                +	// increment our in-place output pointer only by the # non-spaces.
                                                                                +	pos += 16 - mask16.count_ones();
                                                                                +}
                                                                                +
                                                                                • base64 encode / decode lemire/fastbase64

                                                                                  • can encode w/ SIMD in only 3 instructions : 0 (mod loads/stores)
                                                                                  • decoding closer to 7 instructions
                                                                                  • once your data is not just in L1/L2 cache, this is just as fast as a memcpy
                                                                                • utf-8 encode / decode

                                                                                • byte-by-byte approach only 300 MB/s D :

                                                                                if b1 < 0x80 {
                                                                                +	return true; // ascii
                                                                                +}
                                                                                +if b1 < 0xe0 {
                                                                                +	if b1 < 0xc2 || b2 > 0xbf {
                                                                                +		return false;
                                                                                +	}
                                                                                +} else if b1 < 0xf0 {
                                                                                +	// 3 byte form
                                                                                +	if b2 > 0xbf || (b1 == 0xe0 && b2 < 0xa0) || (b1 == 0xed && b2 >= 0xa0) {
                                                                                +		// ..
                                                                                +	} else {
                                                                                +		// ..
                                                                                +	}
                                                                                +} else {
                                                                                +	// 4 byte form
                                                                                +	// ..
                                                                                +}
                                                                                +
                                                                                • using SIMD: 8 GB/s

                                                                                • using 32-byte chunks, ~20 instructions. branch-less

                                                                                • https://github.com/lemire/fastvalidate-utf-8

                                                                                • JSON for Modern C++ library (nlohmann-json)

                                                                                • 0.1 GB/s (Skylake 3.4 GHz, GCC8, file: twitter.json)

                                                                                • rapidjson

                                                                                • 0.3 GB/s (Skylake 3.4 GHz, GCC8, file: twitter.json)

                                                                                • both of these libs nowhere near disk/network speed

                                                                                • what is our "roofline" benchmark?

                                                                                let mut all_line_lens = 0;
                                                                                +for line in reader.lines() {
                                                                                +	all_line_lens += line.len();
                                                                                +}
                                                                                +
                                                                                • 1.4 GB/s (Skylake 3.4 GHz, GCC8, file: twitter.json)

                                                                                • but you can actually go faster!

                                                                                • simdjson

                                                                                • 2.5 GB/s (Skylake 3.4 GHz, GCC8, file: twitter.json)

                                                                                • some of the tricks used in simdjson

                                                                                • Find the span of the string

                                                                                  • Given a mask containing quotes, return a mask set to 1 in the string span regions.
                                                                                  • __1________1________1___1 quotes
                                                                                  • ___11111111__________111_ string regions
                                                                                mask = quote xor (quote << 1);
                                                                                +mask = mask xor (mask << 2);
                                                                                +mask = mask xor (mask << 4);
                                                                                +mask = mask xor (mask << 8);
                                                                                +// ..
                                                                                +
                                                                                • string span can actually be done in one instruction : 0

                                                                                • Number parsing is expensive

                                                                                  • strtod
                                                                                  • 90 MB/s
                                                                                  • 38 cycles / byte
                                                                                  • 10 branch misses / float
                                                                                  • yikes!
                                                                                • SIMD approach

                                                                                fn contains_8_digits(buf: &[u8; 8]) -> bool {
                                                                                +	let val = u64::from_ne_bytes(buf);
                                                                                +	(   (val & 0xf0f0_f0f0_f0f0_f0f0) |
                                                                                +		(((val + 0x0606_0606_0606_0606) & 0xf0f0_f0f0_f0f0_f0f0) >> 4)
                                                                                +	) == 0x3333_3333_3333_3333
                                                                                +}
                                                                                +
                                                                                +fn parse_8_digits_unrolled(buf: &[u8; 8]) -> u32 {
                                                                                +	let mut val = u64::from_ne_bytes(buf);
                                                                                +	val = ((val & 0x0f0f_0f0f_0f0f_0f0f) * 2561) >> 8;
                                                                                +	val = ((val & 0x00ff_00ff_00ff_00ff) * 6553601) >> 16;
                                                                                +	((val & 0x0000_ffff_0000_ffff) * 42949672960001) >> 32
                                                                                +}
                                                                                +

                                                                                https://github.com/lemire/fast-float-rust

                                                                                \ No newline at end of file diff --git a/postgres/index.html b/postgres/index.html new file mode 100644 index 0000000000..2dba727a7e --- /dev/null +++ b/postgres/index.html @@ -0,0 +1,73 @@ +postgres | philip's notes

                                                                                postgres

                                                                                postgres performance tuning →

                                                                                2023-10-23 · 2 min read

                                                                                snippets →

                                                                                2023-07-21 · 2 min read

                                                                                types of scans →

                                                                                2022-10-24 · 3 min read

                                                                                \ No newline at end of file diff --git a/postgres/postgres performance tuning/index.html b/postgres/postgres performance tuning/index.html new file mode 100644 index 0000000000..143bd59907 --- /dev/null +++ b/postgres/postgres performance tuning/index.html @@ -0,0 +1,91 @@ +postgres performance tuning | philip's notes

                                                                                postgres performance tuning

                                                                                2023-10-23 · 2 min read

                                                                                use separate disks for DB data and WAL files #

                                                                                An excerpt from the official postgres manual:

                                                                                It is advantageous if the WAL is located on a different disk from the main database files. This can be achieved by moving the pg_wal directory to another location (while the server is shut down, of course) and creating a symbolic link from the original location in the main data directory to the new location.

                                                                                PostgreSQL WAL Internals

                                                                                Related info from an azure cloud disk performance tuning guide:

                                                                                As an example, you can apply these guidelines to SQL Server running on Premium Storage by doing the following,

                                                                                1. Configure "ReadOnly" cache on premium storage disks hosting data files. a. The fast reads from cache lower the SQL Server query time since data pages are retrieved much faster from the cache compared to directly from the data disks. b. Serving reads from cache, means there is additional Throughput available from premium data disks. SQL Server can use this additional Throughput towards retrieving more data pages and other operations like backup/restore, batch loads, and index rebuilds.
                                                                                2. Configure "None" cache on premium storage disks hosting the log files. a. Log files have primarily write-heavy operations. Therefore, they do not benefit from the ReadOnly cache.

                                                                                Azure disk caching performance guide

                                                                                See also: https://learn.microsoft.com/en-us/azure/azure-sql/virtual-machines/windows/performance-guidelines-best-practices-storage?view=azuresql

                                                                                pgMustard - EXPLAIN Glossary #

                                                                                A glossary for what all the terms in an EXPLAIN ANALYZE query mean.

                                                                                pgMustard ($100/yr) - EXPLAIN ANALYZE query analyzer-analyzer #

                                                                                Helps you review Postgres query plans quickly

                                                                                A simple yet powerful tool to help you speed up queries

                                                                                Reading EXPLAIN ANALYZE output can be tough.

                                                                                Even if you know how, Postgres includes so much useful information, it is easy to miss something important. And for queries that do a lot, the plans are even more useful-yet-time-consuming.

                                                                                pgMustard speeds up your journey from knowing which query is a problem to working out what can be done about it.

                                                                                \ No newline at end of file diff --git a/postgres/snippets/index.html b/postgres/snippets/index.html new file mode 100644 index 0000000000..d5ac6ee508 --- /dev/null +++ b/postgres/snippets/index.html @@ -0,0 +1,165 @@ +snippets | philip's notes

                                                                                snippets

                                                                                2023-07-21 · 2 min read

                                                                                • Remember strings must be surrounded with single quotes '' not double quotes ""!

                                                                                "dry run" in psql repl #

                                                                                Don't know why I didn't think of this. Literally just wrap everything in a transaction. If you fuck up, just rollback.

                                                                                begin;
                                                                                +
                                                                                +-- whatever queries --
                                                                                +
                                                                                +rollback;
                                                                                +-- or
                                                                                +commit;
                                                                                +

                                                                                better printing for long rows #

                                                                                \x auto
                                                                                +

                                                                                update, then print new values #

                                                                                update payment
                                                                                +set id = 'os_57ea76' where id = 'or_57ea76'
                                                                                +returning created_at, id;
                                                                                +
                                                                                update payment
                                                                                +set id = replace(id, 'or_', 'os_')
                                                                                +where starts_with(id, 'or_')
                                                                                +returning created_at, id;
                                                                                +

                                                                                upsert #

                                                                                -- silently ignore on conflict
                                                                                +insert into "user"
                                                                                +values ('442e9dd9d1a3e39c203ce131492090d7', '4e718d3c17d3f4c67e2eaa26da2feb66')
                                                                                +on conflict (user_pk) do nothing;
                                                                                +
                                                                                +-- replace on conflict
                                                                                +insert into "user"
                                                                                +values ('442e9dd9d1a3e39c203ce131492090d7', '4e718d3c17d3f4c67e2eaa26da2feb66')
                                                                                +on conflict (user_pk) do update set node_pk = EXCLUDED.node_pk;
                                                                                +
                                                                                +-- also return
                                                                                +insert into "user"
                                                                                +values ('442e9dd9d1a3e39c203ce131492090d7', '4e718d3c17d3f4c67e2eaa26da2feb66')
                                                                                +on conflict (user_pk) do update set node_pk = EXCLUDED.node_pk
                                                                                +returning user_pk, node_pk;
                                                                                +

                                                                                explore db #

                                                                                -- show tables (basic info)
                                                                                +# \dt
                                                                                +             List of relations
                                                                                + Schema |       Name       | Type  | Owner
                                                                                +--------+------------------+-------+-------
                                                                                + public | payment          | table | lx
                                                                                + public | seaql_migrations | table | lx
                                                                                + public | user             | table | lx
                                                                                +(3 rows)
                                                                                +
                                                                                +-- show tables (more detail)
                                                                                +# \dt+
                                                                                +                                       List of relations
                                                                                + Schema |       Name       | Type  | Owner | Persistence | Access method |  Size  | Description
                                                                                +--------+------------------+-------+-------+-------------+---------------+--------+-------------
                                                                                + public | payment          | table | lx    | permanent   | heap          | 172 kB  |
                                                                                + public | seaql_migrations | table | lx    | permanent   | heap          | 16 kB  |
                                                                                + public | user             | table | lx    | permanent   | heap          | 16 kB  |
                                                                                +(10 rows)
                                                                                +

                                                                                string length #

                                                                                select length('1234');
                                                                                + length
                                                                                +--------
                                                                                +     64
                                                                                +(1 row)
                                                                                +

                                                                                hex #

                                                                                -- hex encode
                                                                                +select encode(data, 'hex');
                                                                                + encode
                                                                                +--------
                                                                                + 7dd6a30e8559db3da3bd
                                                                                +(1 row)
                                                                                +
                                                                                +-- hex decode
                                                                                +select decode('01abef', 'hex');
                                                                                +  decode
                                                                                +----------
                                                                                + \x01abef
                                                                                +(1 row)
                                                                                +
                                                                                +-- hex binary literal
                                                                                +select x'01abefff';
                                                                                +         ?column?
                                                                                +--------------------------
                                                                                + 000100101010101111101111
                                                                                +(1 row)
                                                                                +
                                                                                \ No newline at end of file diff --git a/postgres/types of scans/index.html b/postgres/types of scans/index.html new file mode 100644 index 0000000000..6fffb6ac2d --- /dev/null +++ b/postgres/types of scans/index.html @@ -0,0 +1,112 @@ +types of scans | philip's notes

                                                                                types of scans

                                                                                2022-10-24 · 3 min read

                                                                                When analyzing Postgres query plans, you'll see a tree of different kinds of "scans". These scans determine how the DB plans to look through the different internal datastructures and indexes in order to fetch the data needed to execute your query.

                                                                                For example, we can use explain to see that this query uses a single "Index Scan":

                                                                                psql$ explain (ANALYZE, VERBOSE, BUFFERS)
                                                                                +	select "user"."user_pk" from "user"
                                                                                +	where "user"."node_pk" =  '028be3dce0eb45b794fc083df3f84f4f746724a86b161592463565e6343ff83ecf';
                                                                                +
                                                                                +QUERY PLAN
                                                                                +----------------------------------------------------------------------
                                                                                + Index Scan using user_node_pk_key on public."user"  (cost=0.42..8.44 rows=1 width=65) (actual time=0.071..0.073 rows=1 loops=1)
                                                                                +   Output: user_pk
                                                                                +   Index Cond: (("user".node_pk)::text = '028be3dce0eb45b794fc083df3f84f4f746724a86b161592463565e6343ff83ecf'::text)
                                                                                +   Buffers: shared hit=4
                                                                                + Planning:
                                                                                +   Buffers: shared hit=112
                                                                                + Planning Time: 1.194 ms
                                                                                + Execution Time: 0.109 ms
                                                                                +(8 rows)
                                                                                +

                                                                                internal data structures #

                                                                                Before jumping into the different scans, we need to quickly cover the internal data structures that Postgres uses to store table and index data.

                                                                                heap #

                                                                                Common storage area for the whole rows in the table. The rows are grouped into pages (default: 8 KiB / page). Each row has its index in the heap, called the TID.

                                                                                TID #

                                                                                The TID or tuple identifier is a 6-byte struct that describes the unique storage location for each row / tuple:

                                                                                struct Tid {
                                                                                +	/// The index of the page in the heap containing this tuple.
                                                                                +	page_idx: u32,
                                                                                +	/// The index of this tuple inside the page.
                                                                                +	in_page_idx: u16,
                                                                                +}
                                                                                +

                                                                                index storage #

                                                                                Each index has its own storage separate from the heap, which stores only the values (columns, materialized values, etc...) contained by the index. Also divided into (default) 8 KiB pages like the heap.

                                                                                scans #

                                                                                sequential scan (Seq Scan) #

                                                                                • Sequentially scan all item pointers in all pages of the corresponding table(s).
                                                                                • For small tables, sequential scans are often faster than index scans, especially if the whole table fits in a few pages.
                                                                                • For large tables, sequential scans can be a performance disaster if the query has to load GiB's of data just to find a few items.

                                                                                index scan #

                                                                                • Depends on the specific type of index (e.g., btree, hash, GIS, ...).
                                                                                • Scan and fetch required data from the index, including the TID of each data in the heap.
                                                                                • Then use the TID to fetch the whole data for the relevant items.
                                                                                • The row fetches from the heap will often look like random IO, which is often slower than sequential IO (esp. on spinning disk drives).

                                                                                index-only scan #

                                                                                • If the index contains all the data needed to fulfill the query, then the query engine never actually needs to follow the TID indirection to load rows from the heap, which is usually faster.
                                                                                • Maintaining the index can make inserts/updates/deletes slower, since more data needs to be stored in the index.

                                                                                bitmap scan #

                                                                                • Bitmap Index Scan: First, perform an index scan; but, instead of fetching each item from the heap one-at-a-time while scanning the index, you rather build a bitmap of heap page idxs from the TID.
                                                                                • Bitmap Heap Scan: Using the bitmap, you perform a heap scan and select only heap pages matching the bitmap.
                                                                                • The selected heap pages are then filtered/processed for the query.
                                                                                \ No newline at end of file diff --git a/reproducible builds/earthly/index.html b/reproducible builds/earthly/index.html new file mode 100644 index 0000000000..08eda8aa36 --- /dev/null +++ b/reproducible builds/earthly/index.html @@ -0,0 +1,163 @@ +earthly | philip's notes

                                                                                earthly

                                                                                2022-04-05 · 7 min read

                                                                                Earthly replaces Makefile+Dockerfile with a Docker-like DSL. You write Make-like build targets, which can have dependencies on other targets. The contents of each build target is (effectively) a Dockerfile.

                                                                                The ultimate goal is repeatable, reproducible builds. Repeat a failed build from CI. Seamlessly reproduce your developer environment on a colleague's machine. Etc etc...

                                                                                Earthly vs Nix #

                                                                                Both use linux namespaces for isolation. Nix has an absolutely awful DSL language that I have to relearn every time I touch it. Earthfiles are significantly more imperative; they look like a list of Makefile targets with Dockerfile recipes.

                                                                                Earthly vs Buck / Bazel #

                                                                                Bazel and Buck provide truely hermetic builds, but they each require complete control over the entire toolchain, so no using npm, cargo, etc... This is fine for Google/Facebook, but not for smaller teams (IMO).

                                                                                Earthly claims to strike a more pragmatic balance between truely repeatable and deterministic builds and productive development for a smaller team.

                                                                                Docs #

                                                                                • It appears build steps must explicitly mark files as "artifacts". You must then explicitly copy these artifacts over in dependent build steps.
                                                                                • Likewise, output artifacts must be explicitly exported to the user's FS from the container FS.
                                                                                • Exported artifacts are not transitive, so if your dependency explicitly exports to the user's FS, your build step won't unless you also explicitly export.
                                                                                • Can easily push artifacts to remote destinations, run db migrations, cut releases, etc... as a build step.
                                                                                • Like normal Dockerfiles, an intermediate build step is cached as a new layer.

                                                                                Thoughts #

                                                                                Pros #

                                                                                1. Seems like a solid choice for a CI pipeline and devs occasionally reproducing CI runs locally.
                                                                                2. Builds are nicely isolated from the dev machine, reducing implicit state that's actually necessary for builds to succeed.
                                                                                3. Builds are (mostly) reproducible across environments. Though, my experience with a big Rust project was that this was not a problem.
                                                                                4. I love that build step inputs and outputs are marked explicitly. Following an unfamiliar Earthfile doesn't feel too bad.
                                                                                5. Once you've set up a common development base image, all developers can share good quality tools and configuration without have to independently set up debuggers, profilers, etc...
                                                                                6. Can use a shared build cache like Bazel, Buck, or scc so beefy builds don't have to take forever. CI can also shared this build cache!

                                                                                Cons #

                                                                                1. Like Docker, toolchains are stuck inside containers, usually in a way that is inaccessible to other dev tools, like IDEs, debuggers, profilers, etc...
                                                                                2. I worry that basic dev tools like running an LSP might be challenging to set up? Would this be like mounting the dev directory as a volume for the LSP service? Or is this not even a problem at all... idk. I don't use Docker frequently enough to know.
                                                                                3. Some weird idiosyncrasies, presumably due to the Docker layering model. Developers need a solid mental model to avoid committing egregiously large, slow, or uncacheable intermediate layers.
                                                                                  1. Example: explicit caching of derived Cargo dependency state in first three build steps: https://github.com/earthly/earthly/blob/main/examples/rust/Earthfile
                                                                                4. Rust has a nice enough runner (cargo) that you don't hit a lot of the reproducibility problems experienced in other languages *cough* C/C++.
                                                                                5. Caching is still too coarse-grained compared to running stateful native tools like cargo locally.
                                                                                6. Unlike Bazel or Buck, which take full control of the toolchain, it seems more likely to hit non-determinism with Earthly, since we're using language tools which typically don't know or care about reproducibility.
                                                                                7. Get to learn yet another fun and exciting DSL, with its own special and unique patterns and other miscellaneous weirdness.
                                                                                8. Too slow in tight development loop. On my beefy desktop, a no-op build takes at least 5s. On my M1 MBP, a no-op build takes at least 8-10s. This means any non-trivial build step has a minimum 8-10s duration, which is frankly unacceptable. Non-trivial file copying also adds significant overhead.
                                                                                9. Multi-platform builds (targetting amd64/linux) failed on my M1 Mac for inscrutable reasons. Most likely not earthly's fault, but an issue nonetheless.
                                                                                10. Feels unwieldy running integration tests that need access to low-level hardware devices. Our requirement is probably not typical though.
                                                                                11. Remote builder authentication uses mTLS certs. Provisioning these seems like a pain, esp. when I already have ssh secrets provisioned : (
                                                                                12. Overall, Earthly still feels a bit early. I'd check back after another 6mo (that would be Q1 2023 as of writing).

                                                                                Installation #

                                                                                # Ubuntu/Debian/PopOS!
                                                                                +$ curl --proto '=https' --tlsv1.3 -sSfL https://pkg.earthly.dev/earthly.pgp \
                                                                                +	| gpg --dearmor \
                                                                                +	| sudo tee /usr/share/keyrings/earthly.gpg
                                                                                +$ echo "deb [arch=amd64 signed-by=/usr/share/keyrings/earthly.gpg] https://pkg.earthly.dev/deb stable main" \
                                                                                +  | sudo tee /etc/apt/sources.list.d/earthly.list > /dev/null
                                                                                +$ sudo apt update
                                                                                +$ sudo apt install earthly
                                                                                +
                                                                                +# macOS
                                                                                +$ brew install earthly
                                                                                +

                                                                                Earthly Remote Build #

                                                                                Install docker on remote (Ubuntu) #

                                                                                Install docker if you haven't already

                                                                                $ sudo mkdir -p /etc/apt/keyrings
                                                                                +$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
                                                                                +$ echo "deb [arch=amd64 signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" \
                                                                                +	| sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
                                                                                +
                                                                                +$ sudo apt update
                                                                                +$ sudo apt install docker-ce docker-ce-cli containerd.io \
                                                                                +	docker-compose-plugin
                                                                                +
                                                                                +$ sudo groupadd docker
                                                                                +$ sudo usermod -aG docker $USER
                                                                                +$ newgrp docker # activate changes? else log out and back in
                                                                                +
                                                                                +# sanity check docker installation
                                                                                +$ docker run --rm hello-world
                                                                                +
                                                                                +# start docker on restart
                                                                                +$ sudo systemctl enable docker.service
                                                                                +$ sudo systemctl enable containerd.service
                                                                                +

                                                                                Run earthly/buildkit (remote) #

                                                                                This runs a modified buildkit listening on TCP port 8372, without authentication.

                                                                                $ docker run \
                                                                                +	--privileged -t -v earthly-tmp:/tmp/earthly:rw \
                                                                                +	-e BUILDKIT_TCP_TRANSPORT_ENABLED=true -p 8372:8372 \
                                                                                +	earthly/buildkitd:v0.6.15
                                                                                +

                                                                                (FAIL) Run ssh forward (host) #

                                                                                $ ssh -NL 8372:localhost:8372 phlip9@sgxdev.phlip9.com
                                                                                +

                                                                                FAIL: It appears Earthly tries to do a local build if the buildkit hostname is localhost : /

                                                                                Open VM port #

                                                                                Very unsafe. Do this only for brief sanity testing.

                                                                                $ az vm open-port --name sgxdev2 --port 8372
                                                                                +

                                                                                TODO: provision TLS certs.

                                                                                Test remote build #

                                                                                $ EARTHLY_BUILDKIT_HOST=tcp://my-remote-buildkit:8372 earthly +my-cool-target
                                                                                +

                                                                                It works!

                                                                                Misc. Notes #

                                                                                Earthfile Syntax #

                                                                                • SAVE ARTIFACT .. AS LOCAL .. + Only save the output locally if we ask for the specific target OR we use the BUILD command

                                                                                • SAVE IMAGE foo:latest + Saves current target layer as a docker image named foo with tag latest

                                                                                • SAVE IMAGE --push .. + Push image to remote repo

                                                                                • Adding --push to a RUN command defines an "external" command. These will only run if the entire build succeeds. You also need to run the earthly build with --push to enable these commands.

                                                                                release:
                                                                                +    RUN --push --secret GITHUB_TOKEN=+secrets/GH_TOKEN github-release upload
                                                                                +
                                                                                $ earthly --push +release
                                                                                +

                                                                                Also useful for running things like DB migrations

                                                                                migrate:
                                                                                +    FROM +build
                                                                                +    RUN --push bundle exec rails db:migrate
                                                                                +

                                                                                or terraform apply

                                                                                apply:
                                                                                +    RUN --push terraform apply -auto-approve
                                                                                +
                                                                                • Targets in other Earthfile (relative path, in same repo)
                                                                                build:
                                                                                +	# ./services/foobar/Earthfile
                                                                                +	#   -> contains `deps` target
                                                                                +	FROM ./services/foobar+deps
                                                                                +	# ..
                                                                                +
                                                                                • Import targets from other Earthfile
                                                                                VERSION 0.6
                                                                                +IMPORT ./services/foobar
                                                                                +# ..
                                                                                +
                                                                                +build:
                                                                                +	FROM foobar+deps
                                                                                +	# ..
                                                                                +
                                                                                • Run docker commands inside a target using WITH DOCKER .. END + Will init a docker daemon that can be used in a RUN command + Recommend using earthly's "docker-in-docker" (dind) container earthly/dind:alpine

                                                                                • Pulling a docker image from docker hub

                                                                                hello:
                                                                                +	FROM earthly/dind:alpine
                                                                                +	WITH DOCKER --pull hello-world
                                                                                +		RUN docker run hello-world
                                                                                +	END
                                                                                +
                                                                                • Loading an image created by another target
                                                                                my-hello-world:
                                                                                +	FROM ubuntu
                                                                                +	CMD echo "hello world"
                                                                                +	SAVE IMAGE my-hello:latest
                                                                                +
                                                                                +hello:
                                                                                +	FROM earthly/dind:alpine
                                                                                +	WITH DOCKER --load hello:latest=+my-hello-world
                                                                                +		RUN docker run hello:latest
                                                                                +	END
                                                                                +
                                                                                \ No newline at end of file diff --git a/reproducible builds/index.html b/reproducible builds/index.html new file mode 100644 index 0000000000..0891ccca1d --- /dev/null +++ b/reproducible builds/index.html @@ -0,0 +1,73 @@ +reproducible builds | philip's notes

                                                                                reproducible builds

                                                                                earthly →

                                                                                2022-04-05 · 7 min read

                                                                                rebuilderd →

                                                                                2022-02-17 · 1 min read

                                                                                reproducible-builds.org →

                                                                                2022-02-17 · 2 min read

                                                                                \ No newline at end of file diff --git a/reproducible builds/nix/index.html b/reproducible builds/nix/index.html new file mode 100644 index 0000000000..d903a82483 --- /dev/null +++ b/reproducible builds/nix/index.html @@ -0,0 +1,91 @@ +reproducible builds/nix | philip's notes

                                                                                reproducible builds/nix

                                                                                links →

                                                                                2022-08-05 · 2 min read

                                                                                nix debug broken package build →

                                                                                2023-09-07 · 2 min read

                                                                                nix debug spurrious rebuilds →

                                                                                2023-09-27 · 2 min read

                                                                                \ No newline at end of file diff --git a/reproducible builds/nix/links/index.html b/reproducible builds/nix/links/index.html new file mode 100644 index 0000000000..98e9b8e9b7 --- /dev/null +++ b/reproducible builds/nix/links/index.html @@ -0,0 +1,109 @@ +links | philip's notes

                                                                                nix links

                                                                                2022-08-05 · 2 min read

                                                                                \ No newline at end of file diff --git a/reproducible builds/nix/nix auto-allocate-uids -> nixbld users/index.html b/reproducible builds/nix/nix auto-allocate-uids -> nixbld users/index.html new file mode 100644 index 0000000000..c335db4fdc --- /dev/null +++ b/reproducible builds/nix/nix auto-allocate-uids -> nixbld users/index.html @@ -0,0 +1,146 @@ +nix auto-allocate-uids -> nixbld users | philip's notes

                                                                                nix auto-allocate-uids -> nixbld users

                                                                                2023-10-08 · 2 min read

                                                                                I've hit an obscure issue with my nix install on Pop!_OS where the nix auto-allocate-uids setting doesn't seem to work quite right with the build sandbox, due to some "hardening" in the Debian-based kernel build interacting poorly with the user namespace in the sandbox.

                                                                                I installed nix with the DeterminateSystems/nix-installer, which is overall a great experience -- highly recommend. This installer sets you up with auto-allocate-uids for the multi-user install, which avoids littering your system with a bunch of nixbldX users.

                                                                                Sadly we need those nixbldX users back; here's how to do that:

                                                                                for n in $(seq 1 32); do \
                                                                                +    sudo useradd \
                                                                                +        --home-dir /var/empty \
                                                                                +        --comment "Nix build user ${n}" \
                                                                                +        --gid nixbld \
                                                                                +        --groups nixbld,kvm \
                                                                                +        --no-create-home \
                                                                                +        --no-user-group \
                                                                                +        --system \
                                                                                +        --uid $((30000 + n)) \
                                                                                +        --shell /sbin/nologin \
                                                                                +        --password "!" \
                                                                                +        nixbld$n \
                                                                                +        ;
                                                                                +done
                                                                                +

                                                                                We've also added the new nixbldX users to the kvm group, so they can run qemu VMs efficiently -- super handy when running NixOS tests.

                                                                                Next let's remove the auto-allocate-uids setting from /etc/nix/nix.conf:

                                                                                diff --git /etc/nix/nix.conf.old /etc/nix/nix.conf
                                                                                +--- /etc/nix/nix.conf.old
                                                                                ++++ /etc/nix/nix.conf
                                                                                +@@ -1,7 +1,9 @@
                                                                                + # Generated by https://github.com/DeterminateSystems/nix-installer, version 0.9.1.
                                                                                +-experimental-features = nix-command flakes auto-allocate-uids
                                                                                ++experimental-features = nix-command flakes
                                                                                + auto-optimise-store = true
                                                                                + extra-nix-path = nixpkgs=flake:nixpkgs
                                                                                + bash-prompt-prefix = (nix:$name)\040
                                                                                + build-users-group = nixbld
                                                                                +-auto-allocate-uids = true
                                                                                +

                                                                                Finally restart the nix daemon:

                                                                                $ sudo systemctl restart nix-daemon.service
                                                                                +
                                                                                \ No newline at end of file diff --git a/reproducible builds/nix/nix debug broken package build/index.html b/reproducible builds/nix/nix debug broken package build/index.html new file mode 100644 index 0000000000..015b1bf06f --- /dev/null +++ b/reproducible builds/nix/nix debug broken package build/index.html @@ -0,0 +1,129 @@ +nix debug broken package build | philip's notes

                                                                                nix debug broken package build

                                                                                2023-09-07 · 2 min read

                                                                                This technique will add a breakpointHook to the package so that when a build step fails, it'll preserve the build environment and allow you to enter the sandboxed build container for inspection.

                                                                                On the builder, install cntr from nixpkgs or use it in an ephemeral shell:

                                                                                $ nix shell nixpkgs#cntr
                                                                                +

                                                                                In the package, add breakpointHook as a nativeBuildInputs.

                                                                                { # ...
                                                                                +, breakpointHook
                                                                                +}:
                                                                                +  nativeBuildInputs = [
                                                                                +    breakpointHook
                                                                                +  ];
                                                                                +}
                                                                                +

                                                                                When the build fails, it'll print out something like:

                                                                                $ nix build --print-build-logs .#sgx-sdk
                                                                                +
                                                                                +sgx-sdk> build failed in buildPhase with exit code 2
                                                                                +sgx-sdk> To attach install cntr and run the following command as root:
                                                                                +sgx-sdk>    cntr attach -t command cntr-/nix/store/5hiwc8m04zd00mb3ghfv9mwjmqv3qajv-ripgrep-1.6
                                                                                +
                                                                                +[1/0/1 built] building ripgrep-1.6 (buildPhase)
                                                                                +

                                                                                The build will "hang" while we inspect it. Once we CTRL-C it, everything will get cleaned up, so run the following in another shell instance. To enter the build container, just copy the command (with sudo, since it requires root permissions):

                                                                                $ sudo cntr attach -t command cntr-/nix/store/5hiwc8m04zd00mb3ghfv9mwjmqv3qajv-ripgrep-1.6
                                                                                +
                                                                                +[nixbld@localhost:/var/lib/cntr]$ cd build/source
                                                                                +

                                                                                The initial shell cntr drops you in still has all your system tools available (git, nvim, etc). Use this shell to do all your editing and file munging. Once that's done, test the build in the fully isolated build environment:

                                                                                [nixbld@localhost:/var/lib/cntr]$ cntr exec
                                                                                +bash-5.2$
                                                                                +
                                                                                \ No newline at end of file diff --git a/reproducible builds/nix/nix debug spurrious rebuilds/index.html b/reproducible builds/nix/nix debug spurrious rebuilds/index.html new file mode 100644 index 0000000000..79dc62cd9e --- /dev/null +++ b/reproducible builds/nix/nix debug spurrious rebuilds/index.html @@ -0,0 +1,133 @@ +nix debug spurrious rebuilds | philip's notes

                                                                                nix debug spurrious rebuilds

                                                                                2023-09-27 · 2 min read

                                                                                I have a Rust workspace full of cargo crates (and other things). Using ipetkov/crane, the workspace dependencies should only rebuild if the Cargo.toml or Cargo.lock files change. Sadly that wasn't the case--touching any source file would cause a full rebuild from scratch, which takes ages.

                                                                                That's where gabriella439/nix-diff comes to the rescue: point it at two nix derivations and it'll tell you exactly what's different between them. We can use this to debug our rebuild problem.

                                                                                # Add `jq` and `nix-diff` to our shell temporarily.
                                                                                +$ nix shell nixpkgs#jq nixpkgs#nix-diff
                                                                                +
                                                                                +# Build the package twice, with an unrelated file change in between.
                                                                                +$ nix derivation show .#my-pkg | jq -r 'keys[0]' > before_drv
                                                                                +$ echo "// bump" >> ./file/causing/rebuild
                                                                                +$ nix derivation show .#my-pkg | jq -r 'keys[0]' > after_drv
                                                                                +
                                                                                +# Let's see the difference:
                                                                                +$ nix-diff "$(cat before_drv)" "$(cat after_drv)"
                                                                                +
                                                                                +- /nix/store/5gcg2l4bnmi3plszwrcihyshbzbd4kz1-my-pkg-0.1.0.drv:{out}
                                                                                ++ /nix/store/rybdvgqwrb6hjwys18yirchq1d20c8rp-my-pkg-0.1.0.drv:{out}
                                                                                + The input source named `source` differs
                                                                                + The input derivation named `my-pkg-deps-0.1.0` differs
                                                                                +  - /nix/store/v523hpxdbzxwwlkgzb3hdhbclxqh7bm4-my-pkg-deps-0.1.0.drv:{out}
                                                                                +  + /nix/store/9a5044x65ff0jyddpzwx9gbagns4klfa-my-pkg-deps-0.1.0.drv:{out}
                                                                                +   The input source named `source` differs
                                                                                +   The environments do not match:
                                                                                +      CFLAGS_wasm32-unknown-none=''
                                                                                +        -isystem /nix/store/9c7h6f3ibkd4p528z3f1ydbm6lr4znpn-clang-16.0.6-lib/lib/clang/16/include -isystem
                                                                                +      + /nix/store/lm1p696bwrkppi746wc4hmqvf117zqsa-source/libc-shim/include
                                                                                +      - /nix/store/hf4arhzcg3g511yzlq9lspgi9s51k5ms-source/libc-shim/include
                                                                                +  ''
                                                                                +

                                                                                Of course... I have an absolute reference to the full source in an env variable. That'll do it. Putting the sub-directory into its own tiny nix store path seems to do the trick. Thanks nix-diff!

                                                                                \ No newline at end of file diff --git a/reproducible builds/rebuilderd/index.html b/reproducible builds/rebuilderd/index.html new file mode 100644 index 0000000000..9488f5f354 --- /dev/null +++ b/reproducible builds/rebuilderd/index.html @@ -0,0 +1,91 @@ +rebuilderd | philip's notes

                                                                                rebuilderd

                                                                                2022-02-17 · 1 min read

                                                                                Github: https://github.com/kpcyrd/rebuilderd/

                                                                                Independent verification system of binary packages.

                                                                                What: rebuilderd is a build system that attempts to reproduce build artifacts. It compiles the source code in a similar build environment and compares it to the official pre-built artifacts. This helps identify supply-chain compromises. This website hosts a list of public instances publishing their results.

                                                                                rebuilderd monitors the package repository of a linux distribution and uses rebuilder backends like archlinux-repro to verify the provided binary packages can be reproduced from the given source code.

                                                                                It tracks the state of successfully verified packages and optionally generates a report of differences with diffoscope for debugging. Note that due to the early state of this technology a failed rebuild is more likely due to an undeterministic build process instead of a supply chain compromise, but if multiple rebuilders you trust report 100% reproducible for the set of packages you use you can be confident that the binaries on your system haven't been tampered with. People are encouraged to run their own rebuilders if they can afford to.

                                                                                \ No newline at end of file diff --git a/reproducible builds/reproducible-builds.org/index.html b/reproducible builds/reproducible-builds.org/index.html new file mode 100644 index 0000000000..4f390ab59c --- /dev/null +++ b/reproducible builds/reproducible-builds.org/index.html @@ -0,0 +1,94 @@ +reproducible-builds.org | philip's notes

                                                                                reproducible-builds.org

                                                                                2022-02-17 · 2 min read

                                                                                Why does it matter? #

                                                                                Whilst anyone may inspect the source code of free and open source software for malicious flaws, most software is distributed pre-compiled with no method to confirm whether they correspond.

                                                                                This incentivises attacks on developers who release software, not only via traditional exploitation, but also in the forms of political influence, blackmail or even threats of violence.

                                                                                This is particularly a concern for developers collaborating on privacy or security software: attacking these typically result in compromising particularly politically-sensitive targets such as dissidents, journalists and whistleblowers, as well as anyone wishing to communicate securely under a repressive regime.

                                                                                Whilst individual developers are a natural target, it additionally encourages attacks on build infrastructure as a successful attack would provide access to a large number of downstream computer systems. By modifying the generated binaries here instead of modifying the upstream source code, illicit changes are essentially invisible to its original authors and users alike.

                                                                                The motivation behind the Reproducible Builds project is therefore to allow verification that no vulnerabilities or backdoors have been introduced during this compilation process. By promising identical results are always generated from a given source, this allows multiple third parties to come to a consensus on a “correct” result, highlighting any deviations as suspect and worthy of scrutiny.

                                                                                This ability to notice if a developer or build system has been compromised then prevents such threats or attacks occurring in the first place, as any compromise can be quickly detected. As a result, front-liners cannot be threatened/coerced into exploiting or exposing their colleagues.

                                                                                Several free software projects already, or will soon, provide reproducible builds.

                                                                                How? #

                                                                                First, the build system needs to be made entirely deterministic: transforming a given source must always create the same result. For example, the current date and time must not be recorded and output always has to be written in the same order.

                                                                                Second, the set of tools used to perform the build and more generally the build environment should either be recorded or pre-defined.

                                                                                Third, users should be given a way to recreate a close enough build environment, perform the build process, and validate that the output matches the original build.

                                                                                Learn more about how to make your software build reproducibly…

                                                                                \ No newline at end of file diff --git a/robots.txt b/robots.txt new file mode 100644 index 0000000000..5df1b0fc91 --- /dev/null +++ b/robots.txt @@ -0,0 +1,4 @@ +User-agent: * +Allow: / + +Sitemap: https://phlip9.com/notes//sitemap.xml diff --git a/router/index.html b/router/index.html new file mode 100644 index 0000000000..0646a03b08 --- /dev/null +++ b/router/index.html @@ -0,0 +1,73 @@ +router | philip's notes

                                                                                router

                                                                                \ No newline at end of file diff --git a/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/index.html b/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/index.html new file mode 100644 index 0000000000..36a1d0c8d2 --- /dev/null +++ b/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/index.html @@ -0,0 +1,192 @@ +RFC 6585 (Additional HTTP Status Codes) | philip's notes

                                                                                RFC 6585 (Additional HTTP Status Codes)

                                                                                2021-12-02 · 11 min read

                                                                                Internet Engineering Task Force (IETF)                     M. Nottingham
                                                                                +Request for Comments: 6585                                     Rackspace
                                                                                +Updates: 2616                                                R. Fielding
                                                                                +Category: Standards Track                                          Adobe
                                                                                +ISSN: 2070-1721                                               April 2012
                                                                                +

                                                                                Abstract #

                                                                                This document specifies additional HyperText Transfer Protocol (HTTP) status codes for a variety of common situations.

                                                                                Status of This Memo #

                                                                                This is an Internet Standards Track document.

                                                                                This document is a product of the Internet Engineering Task Force (IETF). It represents the consensus of the IETF community. It has received public review and has been approved for publication by the Internet Engineering Steering Group (IESG). Further information on Internet Standards is available in Section 2 of RFC 5741.

                                                                                Information about the current status of this document, any errata, and how to provide feedback on it may be obtained at http://www.rfc-editor.org/info/rfc6585.

                                                                                Copyright (c) 2012 IETF Trust and the persons identified as the document authors. All rights reserved.

                                                                                This document is subject to BCP 78 and the IETF Trust's Legal Provisions Relating to IETF Documents (http://trustee.ietf.org/license-info) in effect on the date of publication of this document. Please review these documents carefully, as they describe your rights and restrictions with respect to this document. Code Components extracted from this document must include Simplified BSD License text as described in Section 4.e of the Trust Legal Provisions and are provided without warranty as described in the Simplified BSD License.

                                                                                Introduction #

                                                                                This document specifies additional HTTP [RFC2616] status codes for a variety of common situations, to improve interoperability and avoid confusion when other, less precise status codes are used.

                                                                                Note that these status codes are optional; servers cannot be required to support them. However, because clients will treat unknown status codes as a generic error of the same class (e.g., 499 is treated as 400 if it is not recognized), they can be safely deployed by existing servers (see [RFC2616] Section 6.1.1 for more information).

                                                                                Requirements #

                                                                                The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in [RFC2119].

                                                                                428 Precondition Required #

                                                                                The 428 status code indicates that the origin server requires the request to be conditional.

                                                                                Its typical use is to avoid the "lost update" problem, where a client GETs a resource's state, modifies it, and PUTs it back to the server, when meanwhile a third party has modified the state on the server, leading to a conflict. By requiring requests to be conditional, the server can assure that clients are working with the correct copies.

                                                                                Responses using this status code SHOULD explain how to resubmit the request successfully. For example:

                                                                                HTTP/1.1 428 Precondition Required Content-Type: text/html

                                                                                <html>
                                                                                +   <head>
                                                                                +      <title>Precondition Required</title>
                                                                                +   </head>
                                                                                +   <body>
                                                                                +      <h1>Precondition Required</h1>
                                                                                +      <p>This request is required to be conditional;
                                                                                +      try using "If-Match".</p>
                                                                                +   </body>
                                                                                +</html>
                                                                                +

                                                                                Responses with the 428 status code MUST NOT be stored by a cache.

                                                                                429 Too Many Requests #

                                                                                The 429 status code indicates that the user has sent too many requests in a given amount of time ("rate limiting").

                                                                                The response representations SHOULD include details explaining the condition, and MAY include a Retry-After header indicating how long to wait before making a new request.

                                                                                For example:

                                                                                HTTP/1.1 429 Too Many Requests Content-Type: text/html Retry-After: 3600

                                                                                   <html>
                                                                                +      <head>
                                                                                +         <title>Too Many Requests</title>
                                                                                +      </head>
                                                                                +      <body>
                                                                                +         <h1>Too Many Requests</h1>
                                                                                +         <p>I only allow 50 requests per hour to this Web site per
                                                                                +            logged in user.  Try again soon.</p>
                                                                                +      </body>
                                                                                +   </html>
                                                                                +

                                                                                Note that this specification does not define how the origin server identifies the user, nor how it counts requests. For example, an origin server that is limiting request rates can do so based upon counts of requests on a per-resource basis, across the entire server, or even among a set of servers. Likewise, it might identify the user by its authentication credentials, or a stateful cookie.

                                                                                Responses with the 429 status code MUST NOT be stored by a cache.

                                                                                431 Request Header Fields Too Large #

                                                                                The 431 status code indicates that the server is unwilling to process the request because its header fields are too large. The request MAY be resubmitted after reducing the size of the request header fields.

                                                                                It can be used both when the set of request header fields in total is too large, and when a single header field is at fault. In the latter case, the response representation SHOULD specify which header field was too large.

                                                                                For example:

                                                                                HTTP/1.1 431 Request Header Fields Too Large Content-Type: text/html

                                                                                   <html>
                                                                                +      <head>
                                                                                +         <title>Request Header Fields Too Large</title>
                                                                                +      </head>
                                                                                +      <body>
                                                                                +         <h1>Request Header Fields Too Large</h1>
                                                                                +         <p>The "Example" header was too large.</p>
                                                                                +      </body>
                                                                                +   </html>
                                                                                +

                                                                                Responses with the 431 status code MUST NOT be stored by a cache.

                                                                                511 Network Authentication Required ^8c7492 #

                                                                                The 511 status code indicates that the client needs to authenticate to gain network access.

                                                                                The response representation SHOULD contain a link to a resource that allows the user to submit credentials (e.g., with an HTML form).

                                                                                Note that the 511 response SHOULD NOT contain a challenge or the login interface itself, because browsers would show the login interface as being associated with the originally requested URL, which may cause confusion.

                                                                                The 511 status SHOULD NOT be generated by origin servers; it is intended for use by intercepting proxies that are interposed as a means of controlling access to the network.

                                                                                Responses with the 511 status code MUST NOT be stored by a cache.

                                                                                The 511 Status Code and Captive Portals #

                                                                                The 511 status code is designed to mitigate problems caused by "captive portals" to software (especially non-browser agents) that is expecting a response from the server that a request was made to, not the intervening network infrastructure. It is not intended to encourage deployment of captive portals -- only to limit the damage caused by them.

                                                                                A network operator wishing to require some authentication, acceptance of terms, or other user interaction before granting access usually does so by identifying clients who have not done so ("unknown clients") using their Media Access Control (MAC) addresses. ^615a1d

                                                                                Unknown clients then have all traffic blocked, except for that on TCP port 80, which is sent to an HTTP server (the "login server") dedicated to "logging in" unknown clients, and of course traffic to the login server itself. ^521ac1

                                                                                511 Captive Portal Example #

                                                                                For example, a user agent might connect to a network and make the following HTTP request on TCP port 80:

                                                                                GET /index.htm HTTP/1.1
                                                                                +Host: www.example.com
                                                                                +

                                                                                Upon receiving such a request, the login server would generate a 511 response:

                                                                                HTTP/1.1 511 Network Authentication Required
                                                                                +Content-Type: text/html
                                                                                +
                                                                                   <html>
                                                                                +      <head>
                                                                                +         <title>Network Authentication Required</title>
                                                                                +         <meta http-equiv="refresh"
                                                                                +               content="0; url=https://login.example.net/">
                                                                                +      </head>
                                                                                +      <body>
                                                                                +         <p>You need to <a href="https://login.example.net/">
                                                                                +         authenticate with the local network</a> in order to gain
                                                                                +         access.</p>
                                                                                +      </body>
                                                                                +   </html>
                                                                                +

                                                                                Here, the 511 status code assures that non-browser clients will not interpret the response as being from the origin server, and the META HTML element redirects the user agent to the login server.

                                                                                Security Considerations #

                                                                                428 Precondition Required #

                                                                                The 428 status code is optional; clients cannot rely upon its use to prevent "lost update" conflicts.

                                                                                429 Too Many Requests #

                                                                                When a server is under attack or just receiving a very large number of requests from a single party, responding to each with a 429 status code will consume resources.

                                                                                Therefore, servers are not required to use the 429 status code; when limiting resource usage, it may be more appropriate to just drop connections, or take other steps.

                                                                                431 Request Header Fields Too Large #

                                                                                Servers are not required to use the 431 status code; when under attack, it may be more appropriate to just drop connections, or take other steps.

                                                                                511 Network Authentication Required (Security) #

                                                                                In common use, a response carrying the 511 status code will not come from the origin server indicated in the request's URL. This presents many security issues; e.g., an attacking intermediary may be inserting cookies into the original domain's name space, may be observing cookies or HTTP authentication credentials sent from the user agent, and so on.

                                                                                However, these risks are not unique to the 511 status code; in other words, a captive portal that is not using this status code introduces the same issues.

                                                                                Also, note that captive portals using this status code on a Secure Socket Layer (SSL) or Transport Layer Security (TLS) connection (commonly, port 443) will generate a certificate error on the client.

                                                                                IANA Considerations #

                                                                                The HTTP Status Codes registry has been updated with the following entries:

                                                                                  Value: 428
                                                                                +  Description: Precondition Required
                                                                                +  Reference: [RFC6585]
                                                                                +
                                                                                +  Value: 429
                                                                                +  Description: Too Many Requests
                                                                                +  Reference: [RFC6585]
                                                                                +
                                                                                +  Value: 431
                                                                                +  Description: Request Header Fields Too Large
                                                                                +  Reference: [RFC6585]
                                                                                +
                                                                                +  Value: 511
                                                                                +  Description: Network Authentication Required
                                                                                +  Reference: [RFC6585]
                                                                                +

                                                                                References #

                                                                                9.1. Normative References

                                                                                \[ Requirement Levels", BCP 14, RFC 2119, March 1997. \[RFC2616\] Fielding, R., Gettys, J., Mogul, J., Frystyk, H., Masinter, L., Leach, P., and T. Berners-Lee, "Hypertext Transfer Protocol -- HTTP/1.1", RFC 2616, June 1999. 9.2. Informative References \[CORS\] van Kesteren, A., Ed., "Cross-Origin Resource Sharing", W3C Working Draft WD-cors-20100727, July 2010, . \[Favicon\] Wikipedia, "Favicon", March 2012, \. \[OAuth2.0\] Hammer-Lahav, E., Ed., Recordon, D., and D. Hardt, "The OAuth 2.0 Authorization Protocol", Work in Progress, March 2012. Nottingham & Fielding Standards Track \[Page 7\] RFC 6585 Additional HTTP Status Codes April 2012 \[P3P\] Marchiori, M., Ed., "The Platform for Privacy Preferences 1.0 (P3P1.0) Specification", W3C Recommendation REC-P3P-20020416, April 2002, . \[RFC4791\] Daboo, C., Desruisseaux, B., and L. Dusseault, "Calendaring Extensions to WebDAV (CalDAV)", RFC 4791, March 2007. \[RFC4918\] Dusseault, L., Ed., "HTTP Extensions for Web Distributed Authoring and Versioning (WebDAV)", RFC 4918, June 2007. \[WIDGETS\] Caceres, M., Ed., "Widget Packaging and XML Configuration", W3C Recommendation REC-widgets-20110927, September 2011, . \[WebFinger\] WebFinger Project, "WebFingerProtocol (Draft)", January 2010, \. ## Appendix ### Appendix A. Acknowledgements Thanks to Jan Algermissen and Julian Reschke for their suggestions and feedback. ### Appendix B. Issues Raised by Captive Portals Since clients cannot differentiate between a portal's response and that of the HTTP server that they intended to communicate with, a number of issues arise. The 511 status code is intended to help mitigate some of them. One example is the "favicon.ico" \[Favicon\] commonly used by browsers to identify the site being accessed. If the favicon for a given site is fetched from a captive portal instead of the intended site (e.g., because the user is unauthenticated), it will often "stick" in the browser's cache (most implementations cache favicons aggressively) beyond the portal session, so that it seems as if the portal's favicon has "taken over" the legitimate site. Another browser-based issue comes about when the Platform for Privacy Preferences \[P3P\] is supported. Depending on how it is implemented, it's possible a browser might interpret a portal's response for the p3p.xml file as the server's, resulting in the privacy policy (or lack thereof) advertised by the portal being interpreted as applying to the intended site. Other Web-based protocols such as WebFinger \[WebFinger\], Cross-Origin Resource Sharing \[CORS\], and Open Authorization \[OAuth2.0\] may also be vulnerable to such issues. Although HTTP is most widely used with Web browsers, a growing number of non-browsing applications use it as a substrate protocol. For example, Web Distributed Authoring and Versioning (WebDAV) \[RFC4918\] and Calendaring Extensions to WebDAV (CalDAV) \[RFC4791\] both use HTTP as the basis (for remote authoring and calendaring, respectively). Using these applications from behind a captive portal can result in spurious errors being presented to the user, and might result in content corruption, in extreme cases. Similarly, other non-browser applications using HTTP can be affected as well, e.g., widgets \[WIDGETS\], software updates, and other specialized software such as Twitter clients and the iTunes Music Store. It should be noted that it's sometimes believed that using HTTP redirection to direct traffic to the portal addresses these issues. However, since many of these uses "follow" redirects, this is not a good solution. Authors' Addresses Mark Nottingham Rackspace EMail: mnot@mnot.net URI: http://www.mnot.net/ Roy T. Fielding Adobe Systems Incorporated 345 Park Ave. San Jose, CA 95110 USA EMail: fielding@gbiv.com URI: http://roy.gbiv.com/ \]
                                                                                \ No newline at end of file diff --git a/router/lightning router/captive portal/arubanetworks captive portal/index.html b/router/lightning router/captive portal/arubanetworks captive portal/index.html new file mode 100644 index 0000000000..4f241d895b --- /dev/null +++ b/router/lightning router/captive portal/arubanetworks captive portal/index.html @@ -0,0 +1,127 @@ +arubanetworks captive portal | philip's notes

                                                                                arubanetworks captive portal

                                                                                2021-12-02 · 3 min read

                                                                                Source: https://www.arubanetworks.com/vrd/GuestAccessAppNote/wwhelp/wwhimpl/js/html/wwhelp.htm#href=Chap3.html#1035623

                                                                                Captive Portal #

                                                                                Captive portal authentication is a Layer 3 authentication method that redirects users to a captive portal page when they start a web session. The captive portal page can be used for various purposes, such as authenticating the guest using a user name and password, providing an acceptable use policy, or self registration with an email address.

                                                                                Authentication Process #

                                                                                Captive portal is a Layer 3 authentication, which requires that the devices connect to the network and obtain an IP address and related DNS information before authenticating through the captive portal. The following steps explain the entire captive portal process when the native ArubaOS is used for captive portal authentication:

                                                                                1. The device that is associating to the guest SSID is assigned an initial role (guest-logon role in the example configuration). This initial role allows DHCP, so the user gets an IP address.
                                                                                2. The user opens a browser and makes an HTTP (or HTTPS) request to some destination (for example, www.bbc.com).
                                                                                3. The resolver in the device sends a DNS request to resolve the www.bbc.com. The initial role (guest-logon role) permits DNS services, so the resolver can communicate with the DNS server.
                                                                                4. The DNS server replies with the correct address to www.bbc.com.
                                                                                5. The resolver tells the browser which IP address to use based on the DNS reply.
                                                                                6. The browser initiates a TCP connection to port 80 of the www.bbc.com address.
                                                                                7. The controller intercepts the connection and spoofs the initial TCP handshakes of the HTTP process. At this moment, the client browser thinks it is communicating with the bbc.com server.
                                                                                8. When the browser sends the HTTP GET request for the web page, the controller replies saying that bbc.com has “temporarily moved” to https://securelogin.arubanetworks.com/[string that identifies client].
                                                                                9. The browser closes the connection.
                                                                                10. The browser attempts to connect with https://securelogin.arubanetworks.com/[string that identifies client], but it first needs to send a DNS request for the address.
                                                                                11. The actual DNS server responds that it cannot resolve https://securelogin.arubanetworks.com, but the controller intercepts that reply and changes the packet to say that securelogin.arubanetworks.com is at the IP address of the controller itself. Remember that it is critical that the DNS server sends back a reply to the query.  It is only then that the controller can spoof the reply back from the DNS server.  Sending a DNS request without receiving a reply is not sufficient, since without a reply the controller will never help the client resolve securelogin.arubanetworks.com.
                                                                                12. The browser initiates an HTTPS connection to address of controller, which responds with the captive portal login page, where the guest authenticates.
                                                                                13. After successful authentication, the user is assigned the post authentication role (auth-guest role in the example configuration). This is the default role in the captive portal profile.
                                                                                14. After authentication, the browser is redirected to bbc.com at the address originally resolved by the DNS. Alternatively, if a welcome page is configured, the browser is redirected to the welcome page.
                                                                                15. To successfully redirect to the original web page the controller spoofs a reply from bbc.com to tell the client that bbc.com has “permanently moved” to bbc.com. This step corrects the “temporary relocation” that occurred as part of the captive portal login.
                                                                                16. This causes the client to re-query DNS for the address of www.bbc.com.
                                                                                17. The browser starts to communicate with the actual bbc.com server.
                                                                                \ No newline at end of file diff --git a/router/lightning router/captive portal/captive portal (wikipedia)/index.html b/router/lightning router/captive portal/captive portal (wikipedia)/index.html new file mode 100644 index 0000000000..b6c4839db2 --- /dev/null +++ b/router/lightning router/captive portal/captive portal (wikipedia)/index.html @@ -0,0 +1,127 @@ +captive portal (wikipedia) | philip's notes

                                                                                captive portal (wikipedia)

                                                                                2021-12-02 · 10 min read

                                                                                Connected to: #

                                                                                Wi-Fi Web browser MAC address

                                                                                Overview #

                                                                                A captive portal is a web page accessed with a web browser that is displayed to newly connected users of a Wi-Fi or wired network before they are granted broader access to network resources. Captive portals are commonly used to present a landing or log-in page which may require authentication, payment, acceptance of an end-user license agreement, acceptable use policy, survey completion, or other valid credentials that both the host and user agree to adhere by. Captive portals are used for a broad range of mobile and pedestrian broadband services – including cable and commercially provided Wi-Fi and home hotspots. A captive portal can also be used to provide access to enterprise or residential wired networks, such as apartment houses, hotel rooms, and business centers.

                                                                                The captive portal is presented to the client and is stored either at the gateway or on a web server hosting the web page. Depending on the feature set of the gateway, websites or TCP ports can be white-listed so that the user would not have to interact with the captive portal in order to use them. The MAC address of attached clients can also be used to bypass the login process for specified devices.

                                                                                Uses #

                                                                                Captive portals are primarily used in open wireless networks where the users are shown a welcome message informing them of the conditions of access (allowed ports, liability, etc.). Administrators tend to do this so that their own users take responsibility for their actions and to avoid any legal responsibility. Whether this delegation of responsibility is legally valid is a matter of debate.[1][2]

                                                                                Often captive portals are used for marketing and commercial communication purposes. Access to the Internet over open Wi-Fi is prohibited until the user exchanges personal data by filling out a web-based registration form in a web browser. The web-based form either automatically opens in a web browser, or appears when the user opens a web browser and tries to visit any web page. In other words, the user is "captive" - unable to access the Internet freely until the user is granted access to the Internet and has "completed" the captive portal. This allows the provider of this service to display or send advertisements to users who connect to the Wi-Fi access point. This type of service is also sometimes known as "social Wi-Fi", as they may ask for a social network account to login (such as Facebook). Over the past few years, such social Wi-Fi captive portals have become commonplace with various companies offering marketing centered around Wi-Fi data collection.

                                                                                The user can find many types of content in the captive portal, and it's frequent to allow access to the Internet in exchange for viewing content or performing a certain action (often, providing personal data to enable commercial contact); thus, the marketing use of the captive portal is a tool for lead generation (business contacts or potential clients).[citation needed]

                                                                                Implementation #

                                                                                There is more than one way to implement a captive portal.

                                                                                HTTP redirect #

                                                                                A common method is to direct all World Wide Web traffic to a web server, which returns an HTTP redirect to a captive portal.[3] When a modern, internet-enabled device first connects to a network, it sends out an HTTP request to a detection URL predefined by its vendor and expects an HTTP status code 200 OK or 204 No Content. If the device receives a HTTP 200 status code, it assumes it has unlimited internet access. Captive portal prompts are displayed when you are able to manipulate this first HTTP message to return a HTTP status code of 302 (redirect) to the captive portal of your choice.[4][5] RFC 6585 specifies 511 Network Authentication Required code.

                                                                                ICMP redirect #

                                                                                Client traffic can also be redirected using ICMP redirect on the layer 3 level.

                                                                                Redirect by DNS #

                                                                                When a client requests a World Wide Web resource, DNS is queried by the browser. In a captive portal, the firewall will make sure that only the DNS server(s) provided by the network's DHCP can be used by unauthenticated clients (or, alternatively, it will forward all DNS requests by unauthenticated clients to that DNS server). This DNS server will return the IP address of the captive portal page as a result of all DNS lookups.

                                                                                In order to perform redirection by DNS the captive portal uses DNS hijacking to perform an action similar to a man-in-the-middle attack. To limit the impact of DNS poisoning, a TTL of 0 is typically used.

                                                                                Limitations #

                                                                                Security #

                                                                                Captive portals have been known to have incomplete firewall rule sets.[6]

                                                                                DNS tunneling #

                                                                                In some deployments, the rule set will route DNS requests from clients to the Internet, or the provided DNS server will fulfill arbitrary DNS requests from the client. This allows a client to bypass the captive portal and access the open Internet by tunneling arbitrary traffic within DNS packets.

                                                                                Automatic submission #

                                                                                Some captive portals may be configured to allow appropriately equipped user agents to detect the captive portal and automatically authenticate. User agents and supplemental applications such as Apple's Captive Portal Assistant can sometimes transparently bypass the display of captive portal content against the wishes of the service operator as long as they have access to correct credentials, or they may attempt to authenticate with incorrect or obsolete credentials, resulting in unintentional consequences such as accidental account locking.

                                                                                MAC spoofing #

                                                                                A captive portal that uses MAC addresses to track connected devices can sometimes be circumvented by re-using a MAC address of previously authenticated device. Once a device has been authenticated to the captive portal using a valid credentials, the gateway adds that device's MAC address to its "whitelist"; since MAC addresses can easily be spoofed, any other device can pretend to be the authenticated device and bypass the captive portal. Once the IP and MAC addresses of other connecting computers are found to be authenticated, any machine can spoof the MAC address and Internet Protocol (IP) address of the authenticated target, and be allowed a route through the gateway. For this reason some captive portal solutions created extended authentication mechanisms to limit the risk for usurpation.

                                                                                Require Web Browser #

                                                                                Captive portals often require the use of a web browser; this is usually the first application that users start after connected to the Internet, but users who first use an email client or other application that relies on the Internet may find the connection not working without explanation, and will then need to open a web browser to validate. This may be problematic for users who do not have any web browser installed on their operating system. It is however sometimes possible to use email and other facilities that do not rely on DNS (e.g. if the application specifies the connection IP rather than the hostname). A similar problem can occur if the client uses AJAX or joins the network with pages already loaded into its web browser, causing undefined behavior (for example, corrupt messages appear) when such a page tries HTTP requests to its origin server.

                                                                                Similarly, as HTTPS connections cannot be redirected (at least not without triggering security warnings), a web browser that only attempts to access secure websites before being authorized by the captive portal will see those attempts fail without explanation (the usual symptom is that the intended website appears to be down or inaccessible).

                                                                                Platforms that have Wi-Fi and a TCP/IP stack but do not have a web browser that supports HTTPS cannot use many captive portals. Such platforms include the Nintendo DS running a game that uses Nintendo Wi-Fi Connection. Non-browser authentication is possible using WISPr, an XML-based authentication protocol for this purpose, or MAC-based authentication or authentications based on other protocols.

                                                                                It is also possible for a platform vendor to enter into a service contract with the operator of a large number of captive portal hotspots to allow free or discounted access to the platform vendor's servers via the hotspot's walled garden. For example, in 2005 Nintendo and Wayport partnered to provide free Wi-Fi access to Nintendo DS users at certain McDonald's restaurants.[7] Also, VoIP SIP ports could be allowed to bypass the gateway to allow phones to work.

                                                                                \ No newline at end of file diff --git a/router/lightning router/captive portal/captive portal/index.html b/router/lightning router/captive portal/captive portal/index.html new file mode 100644 index 0000000000..f3f21fd45b --- /dev/null +++ b/router/lightning router/captive portal/captive portal/index.html @@ -0,0 +1,192 @@ +captive portal | philip's notes

                                                                                captive portal

                                                                                2021-12-02 · 23 min read

                                                                                captive portal (wikipedia)

                                                                                RFC 6585 (Additional HTTP Status Codes) > 511 Network Authentication Required 8c7492

                                                                                RFC 6585 (Additional HTTP Status Codes)

                                                                                Internet Engineering Task Force (IETF)                     M. Nottingham
                                                                                +Request for Comments: 6585                                     Rackspace
                                                                                +Updates: 2616                                                R. Fielding
                                                                                +Category: Standards Track                                          Adobe
                                                                                +ISSN: 2070-1721                                               April 2012
                                                                                +

                                                                                Abstract #

                                                                                This document specifies additional HyperText Transfer Protocol (HTTP) status codes for a variety of common situations.

                                                                                Status of This Memo #

                                                                                This is an Internet Standards Track document.

                                                                                This document is a product of the Internet Engineering Task Force (IETF). It represents the consensus of the IETF community. It has received public review and has been approved for publication by the Internet Engineering Steering Group (IESG). Further information on Internet Standards is available in Section 2 of RFC 5741.

                                                                                Information about the current status of this document, any errata, and how to provide feedback on it may be obtained at http://www.rfc-editor.org/info/rfc6585.

                                                                                Copyright (c) 2012 IETF Trust and the persons identified as the document authors. All rights reserved.

                                                                                This document is subject to BCP 78 and the IETF Trust's Legal Provisions Relating to IETF Documents (http://trustee.ietf.org/license-info) in effect on the date of publication of this document. Please review these documents carefully, as they describe your rights and restrictions with respect to this document. Code Components extracted from this document must include Simplified BSD License text as described in Section 4.e of the Trust Legal Provisions and are provided without warranty as described in the Simplified BSD License.

                                                                                Introduction #

                                                                                This document specifies additional HTTP [RFC2616] status codes for a variety of common situations, to improve interoperability and avoid confusion when other, less precise status codes are used.

                                                                                Note that these status codes are optional; servers cannot be required to support them. However, because clients will treat unknown status codes as a generic error of the same class (e.g., 499 is treated as 400 if it is not recognized), they can be safely deployed by existing servers (see [RFC2616] Section 6.1.1 for more information).

                                                                                Requirements #

                                                                                The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in [RFC2119].

                                                                                428 Precondition Required #

                                                                                The 428 status code indicates that the origin server requires the request to be conditional.

                                                                                Its typical use is to avoid the "lost update" problem, where a client GETs a resource's state, modifies it, and PUTs it back to the server, when meanwhile a third party has modified the state on the server, leading to a conflict. By requiring requests to be conditional, the server can assure that clients are working with the correct copies.

                                                                                Responses using this status code SHOULD explain how to resubmit the request successfully. For example:

                                                                                HTTP/1.1 428 Precondition Required Content-Type: text/html

                                                                                <html>
                                                                                +   <head>
                                                                                +      <title>Precondition Required</title>
                                                                                +   </head>
                                                                                +   <body>
                                                                                +      <h1>Precondition Required</h1>
                                                                                +      <p>This request is required to be conditional;
                                                                                +      try using "If-Match".</p>
                                                                                +   </body>
                                                                                +</html>
                                                                                +

                                                                                Responses with the 428 status code MUST NOT be stored by a cache.

                                                                                429 Too Many Requests #

                                                                                The 429 status code indicates that the user has sent too many requests in a given amount of time ("rate limiting").

                                                                                The response representations SHOULD include details explaining the condition, and MAY include a Retry-After header indicating how long to wait before making a new request.

                                                                                For example:

                                                                                HTTP/1.1 429 Too Many Requests Content-Type: text/html Retry-After: 3600

                                                                                   <html>
                                                                                +      <head>
                                                                                +         <title>Too Many Requests</title>
                                                                                +      </head>
                                                                                +      <body>
                                                                                +         <h1>Too Many Requests</h1>
                                                                                +         <p>I only allow 50 requests per hour to this Web site per
                                                                                +            logged in user.  Try again soon.</p>
                                                                                +      </body>
                                                                                +   </html>
                                                                                +

                                                                                Note that this specification does not define how the origin server identifies the user, nor how it counts requests. For example, an origin server that is limiting request rates can do so based upon counts of requests on a per-resource basis, across the entire server, or even among a set of servers. Likewise, it might identify the user by its authentication credentials, or a stateful cookie.

                                                                                Responses with the 429 status code MUST NOT be stored by a cache.

                                                                                431 Request Header Fields Too Large #

                                                                                The 431 status code indicates that the server is unwilling to process the request because its header fields are too large. The request MAY be resubmitted after reducing the size of the request header fields.

                                                                                It can be used both when the set of request header fields in total is too large, and when a single header field is at fault. In the latter case, the response representation SHOULD specify which header field was too large.

                                                                                For example:

                                                                                HTTP/1.1 431 Request Header Fields Too Large Content-Type: text/html

                                                                                   <html>
                                                                                +      <head>
                                                                                +         <title>Request Header Fields Too Large</title>
                                                                                +      </head>
                                                                                +      <body>
                                                                                +         <h1>Request Header Fields Too Large</h1>
                                                                                +         <p>The "Example" header was too large.</p>
                                                                                +      </body>
                                                                                +   </html>
                                                                                +

                                                                                Responses with the 431 status code MUST NOT be stored by a cache.

                                                                                511 Network Authentication Required ^8c7492 #

                                                                                The 511 status code indicates that the client needs to authenticate to gain network access.

                                                                                The response representation SHOULD contain a link to a resource that allows the user to submit credentials (e.g., with an HTML form).

                                                                                Note that the 511 response SHOULD NOT contain a challenge or the login interface itself, because browsers would show the login interface as being associated with the originally requested URL, which may cause confusion.

                                                                                The 511 status SHOULD NOT be generated by origin servers; it is intended for use by intercepting proxies that are interposed as a means of controlling access to the network.

                                                                                Responses with the 511 status code MUST NOT be stored by a cache.

                                                                                The 511 Status Code and Captive Portals #

                                                                                The 511 status code is designed to mitigate problems caused by "captive portals" to software (especially non-browser agents) that is expecting a response from the server that a request was made to, not the intervening network infrastructure. It is not intended to encourage deployment of captive portals -- only to limit the damage caused by them.

                                                                                A network operator wishing to require some authentication, acceptance of terms, or other user interaction before granting access usually does so by identifying clients who have not done so ("unknown clients") using their Media Access Control (MAC) addresses. ^615a1d

                                                                                Unknown clients then have all traffic blocked, except for that on TCP port 80, which is sent to an HTTP server (the "login server") dedicated to "logging in" unknown clients, and of course traffic to the login server itself. ^521ac1

                                                                                511 Captive Portal Example #

                                                                                For example, a user agent might connect to a network and make the following HTTP request on TCP port 80:

                                                                                GET /index.htm HTTP/1.1
                                                                                +Host: www.example.com
                                                                                +

                                                                                Upon receiving such a request, the login server would generate a 511 response:

                                                                                HTTP/1.1 511 Network Authentication Required
                                                                                +Content-Type: text/html
                                                                                +
                                                                                   <html>
                                                                                +      <head>
                                                                                +         <title>Network Authentication Required</title>
                                                                                +         <meta http-equiv="refresh"
                                                                                +               content="0; url=https://login.example.net/">
                                                                                +      </head>
                                                                                +      <body>
                                                                                +         <p>You need to <a href="https://login.example.net/">
                                                                                +         authenticate with the local network</a> in order to gain
                                                                                +         access.</p>
                                                                                +      </body>
                                                                                +   </html>
                                                                                +

                                                                                Here, the 511 status code assures that non-browser clients will not interpret the response as being from the origin server, and the META HTML element redirects the user agent to the login server.

                                                                                Security Considerations #

                                                                                428 Precondition Required #

                                                                                The 428 status code is optional; clients cannot rely upon its use to prevent "lost update" conflicts.

                                                                                429 Too Many Requests #

                                                                                When a server is under attack or just receiving a very large number of requests from a single party, responding to each with a 429 status code will consume resources.

                                                                                Therefore, servers are not required to use the 429 status code; when limiting resource usage, it may be more appropriate to just drop connections, or take other steps.

                                                                                431 Request Header Fields Too Large #

                                                                                Servers are not required to use the 431 status code; when under attack, it may be more appropriate to just drop connections, or take other steps.

                                                                                511 Network Authentication Required (Security) #

                                                                                In common use, a response carrying the 511 status code will not come from the origin server indicated in the request's URL. This presents many security issues; e.g., an attacking intermediary may be inserting cookies into the original domain's name space, may be observing cookies or HTTP authentication credentials sent from the user agent, and so on.

                                                                                However, these risks are not unique to the 511 status code; in other words, a captive portal that is not using this status code introduces the same issues.

                                                                                Also, note that captive portals using this status code on a Secure Socket Layer (SSL) or Transport Layer Security (TLS) connection (commonly, port 443) will generate a certificate error on the client.

                                                                                IANA Considerations #

                                                                                The HTTP Status Codes registry has been updated with the following entries:

                                                                                  Value: 428
                                                                                +  Description: Precondition Required
                                                                                +  Reference: [RFC6585]
                                                                                +
                                                                                +  Value: 429
                                                                                +  Description: Too Many Requests
                                                                                +  Reference: [RFC6585]
                                                                                +
                                                                                +  Value: 431
                                                                                +  Description: Request Header Fields Too Large
                                                                                +  Reference: [RFC6585]
                                                                                +
                                                                                +  Value: 511
                                                                                +  Description: Network Authentication Required
                                                                                +  Reference: [RFC6585]
                                                                                +

                                                                                References #

                                                                                9.1. Normative References

                                                                                \[ Requirement Levels", BCP 14, RFC 2119, March 1997. \[RFC2616\] Fielding, R., Gettys, J., Mogul, J., Frystyk, H., Masinter, L., Leach, P., and T. Berners-Lee, "Hypertext Transfer Protocol -- HTTP/1.1", RFC 2616, June 1999. 9.2. Informative References \[CORS\] van Kesteren, A., Ed., "Cross-Origin Resource Sharing", W3C Working Draft WD-cors-20100727, July 2010, . \[Favicon\] Wikipedia, "Favicon", March 2012, \. \[OAuth2.0\] Hammer-Lahav, E., Ed., Recordon, D., and D. Hardt, "The OAuth 2.0 Authorization Protocol", Work in Progress, March 2012. Nottingham & Fielding Standards Track \[Page 7\] RFC 6585 Additional HTTP Status Codes April 2012 \[P3P\] Marchiori, M., Ed., "The Platform for Privacy Preferences 1.0 (P3P1.0) Specification", W3C Recommendation REC-P3P-20020416, April 2002, . \[RFC4791\] Daboo, C., Desruisseaux, B., and L. Dusseault, "Calendaring Extensions to WebDAV (CalDAV)", RFC 4791, March 2007. \[RFC4918\] Dusseault, L., Ed., "HTTP Extensions for Web Distributed Authoring and Versioning (WebDAV)", RFC 4918, June 2007. \[WIDGETS\] Caceres, M., Ed., "Widget Packaging and XML Configuration", W3C Recommendation REC-widgets-20110927, September 2011, . \[WebFinger\] WebFinger Project, "WebFingerProtocol (Draft)", January 2010, \. ## Appendix ### Appendix A. Acknowledgements Thanks to Jan Algermissen and Julian Reschke for their suggestions and feedback. ### Appendix B. Issues Raised by Captive Portals Since clients cannot differentiate between a portal's response and that of the HTTP server that they intended to communicate with, a number of issues arise. The 511 status code is intended to help mitigate some of them. One example is the "favicon.ico" \[Favicon\] commonly used by browsers to identify the site being accessed. If the favicon for a given site is fetched from a captive portal instead of the intended site (e.g., because the user is unauthenticated), it will often "stick" in the browser's cache (most implementations cache favicons aggressively) beyond the portal session, so that it seems as if the portal's favicon has "taken over" the legitimate site. Another browser-based issue comes about when the Platform for Privacy Preferences \[P3P\] is supported. Depending on how it is implemented, it's possible a browser might interpret a portal's response for the p3p.xml file as the server's, resulting in the privacy policy (or lack thereof) advertised by the portal being interpreted as applying to the intended site. Other Web-based protocols such as WebFinger \[WebFinger\], Cross-Origin Resource Sharing \[CORS\], and Open Authorization \[OAuth2.0\] may also be vulnerable to such issues. Although HTTP is most widely used with Web browsers, a growing number of non-browsing applications use it as a substrate protocol. For example, Web Distributed Authoring and Versioning (WebDAV) \[RFC4918\] and Calendaring Extensions to WebDAV (CalDAV) \[RFC4791\] both use HTTP as the basis (for remote authoring and calendaring, respectively). Using these applications from behind a captive portal can result in spurious errors being presented to the user, and might result in content corruption, in extreme cases. Similarly, other non-browser applications using HTTP can be affected as well, e.g., widgets \[WIDGETS\], software updates, and other specialized software such as Twitter clients and the iTunes Music Store. It should be noted that it's sometimes believed that using HTTP redirection to direct traffic to the portal addresses these issues. However, since many of these uses "follow" redirects, this is not a good solution. Authors' Addresses Mark Nottingham Rackspace EMail: mnot@mnot.net URI: http://www.mnot.net/ Roy T. Fielding Adobe Systems Incorporated 345 Park Ave. San Jose, CA 95110 USA EMail: fielding@gbiv.com URI: http://roy.gbiv.com/ # RFC 6585 (Additional HTTP Status Codes) ```` Internet Engineering Task Force (IETF) M. Nottingham Request for Comments: 6585 Rackspace Updates: 2616 R. Fielding Category: Standards Track Adobe ISSN: 2070-1721 April 2012 ```` ## Abstract This document specifies additional HyperText Transfer Protocol (HTTP) status codes for a variety of common situations. ## Status of This Memo This is an Internet Standards Track document. This document is a product of the Internet Engineering Task Force (IETF). It represents the consensus of the IETF community. It has received public review and has been approved for publication by the Internet Engineering Steering Group (IESG). Further information on Internet Standards is available in Section 2 of RFC 5741. Information about the current status of this document, any errata, and how to provide feedback on it may be obtained at . ## Copyright Notice Copyright (c) 2012 IETF Trust and the persons identified as the document authors. All rights reserved. This document is subject to BCP 78 and the IETF Trust's Legal Provisions Relating to IETF Documents () in effect on the date of publication of this document. Please review these documents carefully, as they describe your rights and restrictions with respect to this document. Code Components extracted from this document must include Simplified BSD License text as described in Section 4.e of the Trust Legal Provisions and are provided without warranty as described in the Simplified BSD License. ## Introduction This document specifies additional HTTP \[RFC2616\] status codes for a variety of common situations, to improve interoperability and avoid confusion when other, less precise status codes are used. Note that these status codes are optional; servers cannot be required to support them. However, because clients will treat unknown status codes as a generic error of the same class (e.g., 499 is treated as 400 if it is not recognized), they can be safely deployed by existing servers (see \[RFC2616\] Section 6.1.1 for more information). ## Requirements The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in \[RFC2119\]. ## 428 Precondition Required The 428 status code indicates that the origin server requires the request to be conditional. Its typical use is to avoid the "lost update" problem, where a client GETs a resource's state, modifies it, and PUTs it back to the server, when meanwhile a third party has modified the state on the server, leading to a conflict. By requiring requests to be conditional, the server can assure that clients are working with the correct copies. Responses using this status code SHOULD explain how to resubmit the request successfully. For example: HTTP/1.1 428 Precondition Required Content-Type: text/html ````html Precondition Required

                                                                                Precondition Required

                                                                                This request is required to be conditional; try using "If-Match".

                                                                                ```` Responses with the 428 status code MUST NOT be stored by a cache. ## 429 Too Many Requests The 429 status code indicates that the user has sent too many requests in a given amount of time ("rate limiting"). The response representations SHOULD include details explaining the condition, and MAY include a Retry-After header indicating how long to wait before making a new request. For example: HTTP/1.1 429 Too Many Requests Content-Type: text/html Retry-After: 3600 ````html Too Many Requests

                                                                                Too Many Requests

                                                                                I only allow 50 requests per hour to this Web site per logged in user. Try again soon.

                                                                                ```` Note that this specification does not define how the origin server identifies the user, nor how it counts requests. For example, an origin server that is limiting request rates can do so based upon counts of requests on a per-resource basis, across the entire server, or even among a set of servers. Likewise, it might identify the user by its authentication credentials, or a stateful cookie. Responses with the 429 status code MUST NOT be stored by a cache. ## 431 Request Header Fields Too Large The 431 status code indicates that the server is unwilling to process the request because its header fields are too large. The request MAY be resubmitted after reducing the size of the request header fields. It can be used both when the set of request header fields in total is too large, and when a single header field is at fault. In the latter case, the response representation SHOULD specify which header field was too large. For example: HTTP/1.1 431 Request Header Fields Too Large Content-Type: text/html ````html Request Header Fields Too Large

                                                                                Request Header Fields Too Large

                                                                                The "Example" header was too large.

                                                                                ```` Responses with the 431 status code MUST NOT be stored by a cache. ## 511 Network Authentication Required ^8c7492 The 511 status code indicates that the client needs to authenticate to gain network access. The response representation SHOULD contain a link to a resource that allows the user to submit credentials (e.g., with an HTML form). Note that the 511 response SHOULD NOT contain a challenge or the login interface itself, because browsers would show the login interface as being associated with the originally requested URL, which may cause confusion. The 511 status SHOULD NOT be generated by origin servers; it is intended for use by intercepting proxies that are interposed as a means of controlling access to the network. Responses with the 511 status code MUST NOT be stored by a cache. ### The 511 Status Code and Captive Portals The 511 status code is designed to mitigate problems caused by "captive portals" to software (especially non-browser agents) that is expecting a response from the server that a request was made to, not the intervening network infrastructure. It is not intended to encourage deployment of captive portals -- only to limit the damage caused by them. A network operator wishing to require some authentication, acceptance of terms, or other user interaction before granting access usually does so by identifying clients who have not done so ("unknown clients") using their Media Access Control (MAC) addresses. ^615a1d Unknown clients then have all traffic blocked, except for that on TCP port 80, which is sent to an HTTP server (the "login server") dedicated to "logging in" unknown clients, and of course traffic to the login server itself. ^521ac1 #### 511 Captive Portal Example For example, a user agent might connect to a network and make the following HTTP request on TCP port 80: ````http GET /index.htm HTTP/1.1 Host: www.example.com ```` Upon receiving such a request, the login server would generate a 511 response: ````http HTTP/1.1 511 Network Authentication Required Content-Type: text/html ```` ````html Network Authentication Required

                                                                                You need to authenticate with the local network in order to gain access.

                                                                                ```` Here, the 511 status code assures that non-browser clients will not interpret the response as being from the origin server, and the META HTML element redirects the user agent to the login server. ## Security Considerations ### 428 Precondition Required The 428 status code is optional; clients cannot rely upon its use to prevent "lost update" conflicts. ### 429 Too Many Requests When a server is under attack or just receiving a very large number of requests from a single party, responding to each with a 429 status code will consume resources. Therefore, servers are not required to use the 429 status code; when limiting resource usage, it may be more appropriate to just drop connections, or take other steps. ### 431 Request Header Fields Too Large Servers are not required to use the 431 status code; when under attack, it may be more appropriate to just drop connections, or take other steps. ### 511 Network Authentication Required (Security) In common use, a response carrying the 511 status code will not come from the origin server indicated in the request's URL. This presents many security issues; e.g., an attacking intermediary may be inserting cookies into the original domain's name space, may be observing cookies or HTTP authentication credentials sent from the user agent, and so on. However, these risks are not unique to the 511 status code; in other words, a captive portal that is not using this status code introduces the same issues. Also, note that captive portals using this status code on a Secure Socket Layer (SSL) or Transport Layer Security (TLS) connection (commonly, port 443) will generate a certificate error on the client. ## IANA Considerations The HTTP Status Codes registry has been updated with the following entries: ```` Value: 428 Description: Precondition Required Reference: [RFC6585] Value: 429 Description: Too Many Requests Reference: [RFC6585] Value: 431 Description: Request Header Fields Too Large Reference: [RFC6585] Value: 511 Description: Network Authentication Required Reference: [RFC6585] ```` ## References 9.1. Normative References \[RFC2119\] Bradner, S., "Key words for use in RFCs to Indicate Requirement Levels", BCP 14, RFC 2119, March 1997. \[RFC2616\] Fielding, R., Gettys, J., Mogul, J., Frystyk, H., Masinter, L., Leach, P., and T. Berners-Lee, "Hypertext Transfer Protocol -- HTTP/1.1", RFC 2616, June 1999. 9.2. Informative References \[CORS\] van Kesteren, A., Ed., "Cross-Origin Resource Sharing", W3C Working Draft WD-cors-20100727, July 2010, . \[Favicon\] Wikipedia, "Favicon", March 2012, \. \[OAuth2.0\] Hammer-Lahav, E., Ed., Recordon, D., and D. Hardt, "The OAuth 2.0 Authorization Protocol", Work in Progress, March 2012. Nottingham & Fielding Standards Track \[Page 7\] RFC 6585 Additional HTTP Status Codes April 2012 \[P3P\] Marchiori, M., Ed., "The Platform for Privacy Preferences 1.0 (P3P1.0) Specification", W3C Recommendation REC-P3P-20020416, April 2002, . \[RFC4791\] Daboo, C., Desruisseaux, B., and L. Dusseault, "Calendaring Extensions to WebDAV (CalDAV)", RFC 4791, March 2007. \[RFC4918\] Dusseault, L., Ed., "HTTP Extensions for Web Distributed Authoring and Versioning (WebDAV)", RFC 4918, June 2007. \[WIDGETS\] Caceres, M., Ed., "Widget Packaging and XML Configuration", W3C Recommendation REC-widgets-20110927, September 2011, . \[WebFinger\] WebFinger Project, "WebFingerProtocol (Draft)", January 2010, \. ## Appendix ### Appendix A. Acknowledgements Thanks to Jan Algermissen and Julian Reschke for their suggestions and feedback. ### Appendix B. Issues Raised by Captive Portals Since clients cannot differentiate between a portal's response and that of the HTTP server that they intended to communicate with, a number of issues arise. The 511 status code is intended to help mitigate some of them. One example is the "favicon.ico" \[Favicon\] commonly used by browsers to identify the site being accessed. If the favicon for a given site is fetched from a captive portal instead of the intended site (e.g., because the user is unauthenticated), it will often "stick" in the browser's cache (most implementations cache favicons aggressively) beyond the portal session, so that it seems as if the portal's favicon has "taken over" the legitimate site. Another browser-based issue comes about when the Platform for Privacy Preferences \[P3P\] is supported. Depending on how it is implemented, it's possible a browser might interpret a portal's response for the p3p.xml file as the server's, resulting in the privacy policy (or lack thereof) advertised by the portal being interpreted as applying to the intended site. Other Web-based protocols such as WebFinger \[WebFinger\], Cross-Origin Resource Sharing \[CORS\], and Open Authorization \[OAuth2.0\] may also be vulnerable to such issues. Although HTTP is most widely used with Web browsers, a growing number of non-browsing applications use it as a substrate protocol. For example, Web Distributed Authoring and Versioning (WebDAV) \[RFC4918\] and Calendaring Extensions to WebDAV (CalDAV) \[RFC4791\] both use HTTP as the basis (for remote authoring and calendaring, respectively). Using these applications from behind a captive portal can result in spurious errors being presented to the user, and might result in content corruption, in extreme cases. Similarly, other non-browser applications using HTTP can be affected as well, e.g., widgets \[WIDGETS\], software updates, and other specialized software such as Twitter clients and the iTunes Music Store. It should be noted that it's sometimes believed that using HTTP redirection to direct traffic to the portal addresses these issues. However, since many of these uses "follow" redirects, this is not a good solution. Authors' Addresses Mark Nottingham Rackspace EMail: mnot@mnot.net URI: http://www.mnot.net/ Roy T. Fielding Adobe Systems Incorporated 345 Park Ave. San Jose, CA 95110 USA EMail: fielding@gbiv.com URI: http://roy.gbiv.com/ ## Redirect Methods ### 1. WiFi Passpoint (Hotspot 2.0) ### 2. [HTTP Redirect](https://www.wikiwand.com/en/Captive_portal#/HTTP_redirect) When client device first connects, it makes an HTTP request to a special endpoint (what?); if the endpoint returns 200 or 204, then it assume unlimited internet. Otherwise, if it returns 302 (redirect) to the captive portal, the device will know that it needs to auth to gain access. Alternatively, ALL HTTP requests from the client are redirected until auth'ed. Problem: How does this work when the client is HTTPS only? #### ArubaNetworks Example [arubanetworks captive portal](@/router/lightning%20router/captive%20portal/arubanetworks%20captive%20portal.md) #### HTTP 302 Redirect Example: ````http # Client request: GET /index.html HTTP/1.1 Host: www.example.com # Server response: HTTP/1.1 302 Found Location: http://www.iana.org/domains/example/ ```` #### HTTP 511 Example: #### 511 Captive Portal Example For example, a user agent might connect to a network and make the following HTTP request on TCP port 80: ````http GET /index.htm HTTP/1.1 Host: www.example.com ```` Upon receiving such a request, the login server would generate a 511 response: ````http HTTP/1.1 511 Network Authentication Required Content-Type: text/html ```` ````html Network Authentication Required

                                                                                You need to authenticate with the local network in order to gain access.

                                                                                ```` Here, the 511 status code assures that non-browser clients will not interpret the response as being from the origin server, and the META HTML element redirects the user agent to the login server. ### 3. ICMP Redirect TODO ### 4. DNS Redirect Use [DNS Hijacking](https://www.wikiwand.com/en/DNS_hijacking) to return IP of captive portal for all DNS requests until client is auth'ed. DNS response should use TTL=0 to avoid poisoning client's DNS cache. Problem: how does this work if the client has their own DNS server configured (e.g. 8.8.8.8)? Could do DNS packet rewriting I guess... Problem: when the client looks up `google.com`, what if their local DNS cache is already hot? They will never make a DNS request that we can rewrite. \]
                                                                                \ No newline at end of file diff --git a/router/lightning router/captive portal/index.html b/router/lightning router/captive portal/index.html new file mode 100644 index 0000000000..5592e774a6 --- /dev/null +++ b/router/lightning router/captive portal/index.html @@ -0,0 +1,109 @@ +router/lightning router/captive portal | philip's notes

                                                                                router/lightning router/captive portal

                                                                                arubanetworks captive portal →

                                                                                2021-12-02 · 3 min read

                                                                                captive portal →

                                                                                2021-12-02 · 23 min read

                                                                                captive portal (wikipedia) →

                                                                                2021-12-02 · 10 min read

                                                                                \ No newline at end of file diff --git a/router/lightning router/index.html b/router/lightning router/index.html new file mode 100644 index 0000000000..f114d1d9c3 --- /dev/null +++ b/router/lightning router/index.html @@ -0,0 +1,91 @@ +router/lightning router | philip's notes

                                                                                router/lightning router

                                                                                lightning router overview →

                                                                                2021-12-02 · 2 min read

                                                                                \ No newline at end of file diff --git a/router/lightning router/lightning router overview/index.html b/router/lightning router/lightning router overview/index.html new file mode 100644 index 0000000000..3541619f7d --- /dev/null +++ b/router/lightning router/lightning router overview/index.html @@ -0,0 +1,109 @@ +lightning router overview | philip's notes

                                                                                lightning router overview

                                                                                2021-12-02 · 2 min read

                                                                                Lightning-enabled "Captive Portal"

                                                                                "Pay-as-you-go" internet usage with Lightning

                                                                                Thesis #

                                                                                Faster, cheaper micro-payments enable finer grained usage billing

                                                                                Use Cases #

                                                                                1. Cafe / Restaurant / Hotel / Airport
                                                                                2. Appartment: provide WiFi to neighbors

                                                                                What is Purchased (Capacity vs Volume) #

                                                                                One of:

                                                                                1. Data Volume + Users purchase a "data rate" contract, e.g., $0.01 / MiB, charged every X MiB + Most cost efficient (?), since users pay only for what they use + Provider can charge many users at once + Variable quality, since it makes no guarantees about how much bandwidth capacity you're getting + Good for: emails, browsing, "spiky" usage
                                                                                2. Bandwidth + Users purchase a "bandwidth capacity" contract, e.g., 10 MiB/s, charged every X minutes + Allows users to reserve a "slice of the pipe" all to themselves + Some use cases aren't usable without a minimum bandwidth guarantee (Youtube video buffering, gaming lag). Most useful when the router is under heavy usage by many "data volume" users. + Good for: gaming, Netflix, Youtube, sustained usage
                                                                                • Could also provide "slow" connectivity by default, then users pay for better quality.
                                                                                • Also need to distinguish Up/Down Volume/Bandwidth

                                                                                Captive Portal #

                                                                                captive portal

                                                                                Flow #

                                                                                custom auth variables passed in query string
                                                                                variablenotes
                                                                                clientipThe ip address of the client to be authenticated
                                                                                sessionlengthlength of session - minutes
                                                                                uploadratemaximum allowed upload data rate - kbits/sec
                                                                                downloadratemaximum allowed download data rate - kbits/sec
                                                                                uploadquotaallowed upload data quota - kBytes
                                                                                downloadquotaallowed download data quota - kBytes
                                                                                customA custom data string that will be sent to BinAuth

                                                                                1. client gets captured by openNDS
                                                                                2. openNDS redirects client to FAS API along w/ encrypted token (?) (depends on "security level")
                                                                                3. FAS API decides whether to auth client by passing them the decrypted token, client hits gateway:port/opennds_auth?tok=XXX with decrypted token to auth.
                                                                                4. if client follows lightning flow, FAS API can notify openNDS to increase client
                                                                                \ No newline at end of file diff --git a/search_index.en.js b/search_index.en.js new file mode 100644 index 0000000000..0743c2b8e9 --- /dev/null +++ b/search_index.en.js @@ -0,0 +1 @@ +window.searchIndex = {"fields":["title","body"],"pipeline":["trimmer","stopWordFilter","stemmer"],"ref":"id","version":"0.9.5","index":{"body":{"root":{"docs":{},"df":0,"0":{"docs":{"https://phlip9.com/notes/AI ML/Expectimax Search/":{"tf":1.7320508075688772},"https://phlip9.com/notes/AI ML/Markov Decision Process (MDP)/":{"tf":1.7320508075688772},"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.4142135623730951},"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.0},"https://phlip9.com/notes/combinatorics/k-combinations of a multiset/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":4.795831523312719},"https://phlip9.com/notes/crypto/(talk) authenticated data structures for stateless validation/":{"tf":1.0},"https://phlip9.com/notes/distributed systems/papers/(2020) Semi-Fast Byzantine-tolerant Shared Register without Reliable Broadcast/":{"tf":1.4142135623730951},"https://phlip9.com/notes/keyboards/moergo glove80/":{"tf":1.0},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":3.1622776601683795},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":3.0},"https://phlip9.com/notes/lang/lua/":{"tf":3.1622776601683795},"https://phlip9.com/notes/lang/operator fixity and precedence/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":3.605551275463989},"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":1.4142135623730951},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":2.8284271247461903},"https://phlip9.com/notes/networking/CIDR/":{"tf":1.0},"https://phlip9.com/notes/networking/ipv6 address space/":{"tf":1.0},"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.0},"https://phlip9.com/notes/performance/bit hacks/":{"tf":6.244997998398398},"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.4142135623730951},"https://phlip9.com/notes/performance/simdjson talk/":{"tf":2.449489742783178},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/CDF confidence bands - DKW inequality/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/G-test - multinomial goodness-of-fit/":{"tf":2.0},"https://phlip9.com/notes/statistics probability/multinomial distribution/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/p-value/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/testing whether a coin is fair/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/winsorize/":{"tf":2.0}},"df":31,")":{"docs":{},"df":0,".":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.4142135623730951}},"df":1}}}}}}},",":{"docs":{},"df":0,"0":{"docs":{},"df":0,".":{"docs":{},"df":0,"5":{"docs":{"https://phlip9.com/notes/statistics probability/winsorize/":{"tf":1.0}},"df":1}}}},".":{"docs":{},"df":0,".":{"docs":{},"df":0,"6":{"docs":{},"df":0,"4":{"docs":{"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":1.4142135623730951}},"df":1}},"=":{"docs":{},"df":0,"2":{"docs":{},"df":0,"5":{"docs":{},"df":0,"5":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1}}},"n":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{},"df":0,"k":{"docs":{"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.0}},"df":1}}}}}},"b":{"docs":{},"df":0,"u":{"docs":{},"df":0,"f":{"docs":{},"df":0,".":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/performance/simdjson talk/":{"tf":1.0}},"df":1,"(":{"docs":{},"df":0,")":{"docs":{},"df":0,")":{"docs":{},"df":0,".":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"p":{"docs":{},"df":0,"_":{"docs":{},"df":0,"b":{"docs":{},"df":0,"y":{"docs":{},"df":0,"(":{"docs":{},"df":0,"p":{"docs":{},"df":0,"a":{"docs":{},"df":0,"g":{"docs":{},"df":0,"e":{"docs":{},"df":0,"_":{"docs":{},"df":0,"s":{"docs":{"https://phlip9.com/notes/performance/simdjson talk/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}},"0":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":2.0},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":5.385164807134504},"https://phlip9.com/notes/statistics probability/G-test - multinomial goodness-of-fit/":{"tf":2.449489742783178},"https://phlip9.com/notes/statistics probability/multinomial distribution/":{"tf":1.7320508075688772},"https://phlip9.com/notes/statistics probability/winsorize/":{"tf":1.4142135623730951}},"df":6,".":{"docs":{},"df":0,"1":{"docs":{},"df":0,".":{"docs":{},"df":0,"5":{"docs":{"https://phlip9.com/notes/networking/CIDR/":{"tf":1.0}},"df":1}}}},"0":{"docs":{},"df":0,"1":{"docs":{},"df":0,"1":{"docs":{},"df":0,".":{"docs":{},"df":0,"0":{"docs":{},"df":0,"2":{"docs":{},"df":0,".":{"docs":{},"df":0,"5":{"docs":{},"df":0,"0":{"docs":{},"df":0,"e":{"docs":{},"df":0,"5":{"docs":{"https://phlip9.com/notes/statistics probability/testing whether a coin is fair/":{"tf":1.0}},"df":1}}}}}}}}},"2":{"docs":{},"df":0,".":{"docs":{},"df":0,"0":{"docs":{},"df":0,"1":{"docs":{},"df":0,".":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"e":{"docs":{},"df":0,"6":{"docs":{"https://phlip9.com/notes/statistics probability/testing whether a coin is fair/":{"tf":1.0}},"df":1}}}}}}}}},"3":{"docs":{},"df":0,".":{"docs":{},"df":0,"0":{"docs":{},"df":0,"2":{"docs":{},"df":0,".":{"docs":{},"df":0,"2":{"docs":{},"df":0,"5":{"docs":{},"df":0,"e":{"docs":{},"df":0,"6":{"docs":{"https://phlip9.com/notes/statistics probability/testing whether a coin is fair/":{"tf":1.0}},"df":1}}}}}}}}},"4":{"docs":{},"df":0,".":{"docs":{},"df":0,"0":{"docs":{},"df":0,"4":{"docs":{},"df":0,".":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"e":{"docs":{},"df":0,"6":{"docs":{"https://phlip9.com/notes/statistics probability/testing whether a coin is fair/":{"tf":1.0}},"df":1}}}}}}}}},"5":{"docs":{},"df":0,".":{"docs":{},"df":0,"0":{"docs":{},"df":0,"6":{"docs":{},"df":0,".":{"docs":{},"df":0,"2":{"docs":{},"df":0,"5":{"docs":{},"df":0,"e":{"docs":{},"df":0,"6":{"docs":{"https://phlip9.com/notes/statistics probability/testing whether a coin is fair/":{"tf":1.0}},"df":1}}}}}}}}}}},"1":{"docs":{"https://phlip9.com/notes/router/lightning router/lightning router overview/":{"tf":1.0}},"df":1,"1":{"docs":{},"df":0,".":{"docs":{},"df":0,"0":{"docs":{},"df":0,"2":{"docs":{},"df":0,"5":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{"https://phlip9.com/notes/statistics probability/testing whether a coin is fair/":{"tf":1.0}},"df":1}}}}}}},"2":{"docs":{},"df":0,".":{"docs":{},"df":0,"0":{"docs":{},"df":0,"1":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{"https://phlip9.com/notes/statistics probability/testing whether a coin is fair/":{"tf":1.0}},"df":1}}}}}}}},"3":{"docs":{},"df":0,".":{"docs":{},"df":0,"0":{"docs":{},"df":0,"2":{"docs":{},"df":0,"2":{"docs":{},"df":0,"5":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{"https://phlip9.com/notes/statistics probability/testing whether a coin is fair/":{"tf":1.0}},"df":1}}}}}}}},"4":{"docs":{},"df":0,".":{"docs":{},"df":0,"0":{"docs":{},"df":0,"4":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{"https://phlip9.com/notes/statistics probability/testing whether a coin is fair/":{"tf":1.0}},"df":1}}}}}}}},"5":{"docs":{},"df":0,".":{"docs":{},"df":0,"0":{"docs":{},"df":0,"6":{"docs":{},"df":0,"2":{"docs":{},"df":0,"5":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{"https://phlip9.com/notes/statistics probability/testing whether a coin is fair/":{"tf":1.0}},"df":1}}}}}}}}},"3":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.4142135623730951}},"df":1},"4":{"docs":{},"df":0,"3":{"docs":{},"df":0,"3":{"docs":{},"df":0,"4":{"docs":{},"df":0,"0":{"docs":{"https://phlip9.com/notes/WSL/WSL2 custom kernel/":{"tf":1.0}},"df":1}}}}},"5":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/p-value/":{"tf":1.0}},"df":2},"6":{"docs":{},"df":0,"2":{"docs":{},"df":0,"5":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1}}}},"1":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.4142135623730951},"https://phlip9.com/notes/performance/simdjson talk/":{"tf":1.0}},"df":2,"*":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1}},".":{"docs":{},"df":0,"0":{"docs":{"https://phlip9.com/notes/reproducible builds/nix/nix debug spurrious rebuilds/":{"tf":1.0}},"df":1,".":{"docs":{},"df":0,"d":{"docs":{},"df":0,"r":{"docs":{},"df":0,"v":{"docs":{},"df":0,":":{"docs":{},"df":0,"{":{"docs":{},"df":0,"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/reproducible builds/nix/nix debug spurrious rebuilds/":{"tf":2.0}},"df":1}}}}}}}}}}},"0":{"docs":{},"df":0,"9":{"docs":{"https://phlip9.com/notes/postgres/types of scans/":{"tf":1.0}},"df":1}},"1":{"docs":{},"df":0,".":{"docs":{},"df":0,"0":{"docs":{},"df":0,"2":{"docs":{},"df":0,"5":{"docs":{"https://phlip9.com/notes/statistics probability/testing whether a coin is fair/":{"tf":1.0}},"df":1}}}}},"2":{"docs":{},"df":0,".":{"docs":{},"df":0,"0":{"docs":{},"df":0,"1":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{"https://phlip9.com/notes/statistics probability/testing whether a coin is fair/":{"tf":1.0}},"df":1}}}}},"5":{"docs":{"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0}},"df":1,"0":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1}}},"3":{"docs":{},"df":0,".":{"docs":{},"df":0,"0":{"docs":{},"df":0,"2":{"docs":{},"df":0,"2":{"docs":{},"df":0,"5":{"docs":{"https://phlip9.com/notes/statistics probability/testing whether a coin is fair/":{"tf":1.0}},"df":1}}}}}},"4":{"docs":{},"df":0,".":{"docs":{},"df":0,"0":{"docs":{},"df":0,"4":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{"https://phlip9.com/notes/statistics probability/testing whether a coin is fair/":{"tf":1.0}},"df":1}}}}}},"5":{"docs":{},"df":0,".":{"docs":{},"df":0,"0":{"docs":{},"df":0,"6":{"docs":{},"df":0,"2":{"docs":{},"df":0,"5":{"docs":{"https://phlip9.com/notes/statistics probability/testing whether a coin is fair/":{"tf":1.0}},"df":1}}}}}},"6":{"docs":{},"df":0,"6":{"docs":{},"df":0,"6":{"docs":{},"df":0,"6":{"docs":{},"df":0,"7":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1}}}}}},"2":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.7320508075688772}},"df":1,".":{"docs":{},"df":0,"4":{"docs":{},"df":0,"\\":{"docs":{},"df":0,"s":{"docs":{},"df":0,"r":{"docs":{},"df":0,"c":{"docs":{},"df":0,"\\":{"docs":{},"df":0,"m":{"docs":{},"df":0,"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"s":{"docs":{},"df":0,"\\":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"f":{"docs":{},"df":0,"o":{"docs":{},"df":0,".":{"docs":{},"df":0,"r":{"docs":{},"df":0,"s":{"docs":{},"df":0,":":{"docs":{},"df":0,"1":{"docs":{},"df":0,"3":{"docs":{},"df":0,"0":{"docs":{},"df":0,":":{"docs":{},"df":0,"2":{"docs":{},"df":0,"2":{"docs":{"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0}},"df":1}}}}}},"7":{"docs":{},"df":0,":":{"docs":{},"df":0,"9":{"docs":{"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0}},"df":1}}}}}}}}}}},"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,".":{"docs":{},"df":0,"r":{"docs":{},"df":0,"s":{"docs":{},"df":0,":":{"docs":{},"df":0,"4":{"docs":{},"df":0,":":{"docs":{},"df":0,"9":{"docs":{"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0}},"df":1}}},"5":{"docs":{},"df":0,"5":{"docs":{},"df":0,":":{"docs":{},"df":0,"4":{"docs":{},"df":0,"3":{"docs":{"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0}},"df":1}}}}},"6":{"docs":{},"df":0,"3":{"docs":{},"df":0,":":{"docs":{},"df":0,"4":{"docs":{},"df":0,"3":{"docs":{"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0}},"df":1}}}}},"7":{"docs":{},"df":0,"2":{"docs":{},"df":0,":":{"docs":{},"df":0,"4":{"docs":{},"df":0,"9":{"docs":{"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}},"s":{"docs":{},"df":0,"w":{"docs":{},"df":0,"a":{"docs":{},"df":0,"p":{"docs":{},"df":0,"s":{"docs":{},"df":0,".":{"docs":{},"df":0,"r":{"docs":{},"df":0,"s":{"docs":{},"df":0,":":{"docs":{},"df":0,"1":{"docs":{},"df":0,"0":{"docs":{},"df":0,"6":{"docs":{},"df":0,":":{"docs":{},"df":0,"2":{"docs":{},"df":0,"2":{"docs":{"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0}},"df":1}}}}}},"7":{"docs":{},"df":0,":":{"docs":{},"df":0,"9":{"docs":{"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}},"0":{"docs":{"https://phlip9.com/notes/btc-ln/submarine swaps/":{"tf":1.0}},"df":1},"2":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1},"5":{"docs":{"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.4142135623730951},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.7320508075688772},"https://phlip9.com/notes/statistics probability/winsorize/":{"tf":1.0}},"df":3,"0":{"docs":{},"df":0,"0":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1}}},"7":{"docs":{},"df":0,"2":{"docs":{},"df":0,"4":{"docs":{},"df":0,"5":{"docs":{},"df":0,"2":{"docs":{"https://phlip9.com/notes/WSL/WSL2 custom kernel/":{"tf":1.0}},"df":1}}}}}},"3":{"docs":{"https://phlip9.com/notes/performance/simdjson talk/":{"tf":1.0}},"df":1,"3":{"docs":{},"df":0,"3":{"docs":{},"df":0,"3":{"docs":{},"df":0,"3":{"docs":{},"df":0,"3":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.7320508075688772}},"df":1}}}}},"4":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1}},"4":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1,"2":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1}},"5":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":5.0},"https://phlip9.com/notes/statistics probability/testing whether a coin is fair/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/winsorize/":{"tf":1.0}},"df":3,"*":{"docs":{},"df":0,"n":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"_":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.4142135623730951}},"df":1}}}}}},"0":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.4142135623730951}},"df":1,"0":{"docs":{},"df":0,"0":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1}}},"3":{"docs":{},"df":0,"3":{"docs":{"https://phlip9.com/notes/android/root phone with magisk/":{"tf":1.0}},"df":1}},"4":{"docs":{},"df":0,"3":{"docs":{},"df":0,"6":{"docs":{},"df":0,"8":{"docs":{},"df":0,"7":{"docs":{"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0}},"df":1}}}}},"8":{"docs":{"https://phlip9.com/notes/statistics probability/winsorize/":{"tf":1.0}},"df":1},"}":{"docs":{},"df":0,"{":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/statistics probability/testing whether a coin is fair/":{"tf":1.0}},"df":1}}}},"6":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.0}},"df":2,"6":{"docs":{},"df":0,"6":{"docs":{},"df":0,"6":{"docs":{},"df":0,"6":{"docs":{},"df":0,"7":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.4142135623730951}},"df":1}}}}},"7":{"docs":{},"df":0,"4":{"docs":{},"df":0,"5":{"docs":{},"df":0,"5":{"docs":{},"df":0,"0":{"docs":{},"df":0,".":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{"https://phlip9.com/notes/statistics probability/testing whether a coin is fair/":{"tf":1.0}},"df":1}}}}}}}}}},"7":{"docs":{},"df":0,"3":{"docs":{},"df":0,"3":{"docs":{"https://phlip9.com/notes/android/root phone with magisk/":{"tf":1.0}},"df":1}},"5":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.7320508075688772}},"df":1}},"8":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":2.449489742783178}},"df":1,"1":{"docs":{},"df":0,"2":{"docs":{"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.4142135623730951}},"df":1}},"5":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.4142135623730951}},"df":1}},"9":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/winsorize/":{"tf":1.0}},"df":2,".":{"docs":{},"df":0,"1":{"docs":{"https://phlip9.com/notes/reproducible builds/nix/nix auto-allocate-uids -> nixbld users/":{"tf":1.0}},"df":1}},"3":{"docs":{},"df":0,"7":{"docs":{},"df":0,"5":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1}}},"5":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1}}},"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{"https://phlip9.com/notes/lang/gdb ref/":{"tf":11.0},"https://phlip9.com/notes/networking/CIDR/":{"tf":3.872983346207417},"https://phlip9.com/notes/performance/bit hacks/":{"tf":3.1622776601683795}},"df":3,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.0},"https://phlip9.com/notes/lang/gdb ref/":{"tf":1.0},"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.7320508075688772}},"df":3},"1":{"docs":{"https://phlip9.com/notes/performance/bit hacks/":{"tf":2.449489742783178}},"df":1}},"1":{"docs":{},"df":0,"0":{"docs":{"https://phlip9.com/notes/lang/gdb ref/":{"tf":1.0}},"df":1}},"2":{"docs":{},"df":0,"0":{"docs":{"https://phlip9.com/notes/lang/gdb ref/":{"tf":1.0}},"df":1}},"3":{"docs":{},"df":0,"0":{"docs":{"https://phlip9.com/notes/lang/gdb ref/":{"tf":1.0}},"df":1}},"4":{"docs":{},"df":0,"0":{"docs":{"https://phlip9.com/notes/lang/gdb ref/":{"tf":1.0}},"df":1}},"5":{"docs":{},"df":0,"0":{"docs":{"https://phlip9.com/notes/lang/gdb ref/":{"tf":1.0}},"df":1}},"6":{"docs":{},"df":0,"0":{"docs":{"https://phlip9.com/notes/lang/gdb ref/":{"tf":1.0}},"df":1}},"7":{"docs":{},"df":0,"0":{"docs":{"https://phlip9.com/notes/lang/gdb ref/":{"tf":1.0}},"df":1}},"8":{"docs":{},"df":0,"0":{"docs":{"https://phlip9.com/notes/lang/gdb ref/":{"tf":1.0}},"df":1}},"9":{"docs":{},"df":0,"0":{"docs":{"https://phlip9.com/notes/lang/gdb ref/":{"tf":1.0}},"df":1}},"a":{"docs":{},"df":0,"0":{"docs":{"https://phlip9.com/notes/lang/gdb ref/":{"tf":1.0}},"df":1}},"b":{"docs":{},"df":0,"0":{"docs":{"https://phlip9.com/notes/lang/gdb ref/":{"tf":1.0}},"df":1}},"c":{"docs":{},"df":0,"0":{"docs":{"https://phlip9.com/notes/lang/gdb ref/":{"tf":1.0}},"df":1}},"d":{"docs":{},"df":0,"0":{"docs":{"https://phlip9.com/notes/lang/gdb ref/":{"tf":1.0}},"df":1}},"e":{"docs":{},"df":0,"0":{"docs":{"https://phlip9.com/notes/lang/gdb ref/":{"tf":1.0}},"df":1}},"f":{"docs":{},"df":0,"0":{"docs":{"https://phlip9.com/notes/lang/gdb ref/":{"tf":1.0}},"df":1}}},"1":{"docs":{},"df":0,"1":{"docs":{},"df":0,"1":{"docs":{"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.0}},"df":1}}}},"1":{"docs":{},"df":0,"1":{"docs":{},"df":0,"1":{"docs":{},"df":0,"1":{"docs":{"https://phlip9.com/notes/performance/bit hacks/":{"tf":2.23606797749979}},"df":1}}}},":":{"docs":{},"df":0,":":{"docs":{},"df":0,"/":{"docs":{},"df":0,"8":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"v":{"docs":{"https://phlip9.com/notes/networking/ipv6 address space/":{"tf":1.0}},"df":1}}}}}}}}}}},"1":{"docs":{"https://phlip9.com/notes/networking/CIDR/":{"tf":1.0},"https://phlip9.com/notes/performance/bit hacks/":{"tf":3.1622776601683795}},"df":2,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.0}},"df":1}},"1":{"docs":{},"df":0,"0":{"docs":{},"df":0,"1":{"docs":{},"df":0,"0":{"docs":{},"df":0,"1":{"docs":{},"df":0,"0":{"docs":{},"df":0,"1":{"docs":{},"df":0,"0":{"docs":{},"df":0,"1":{"docs":{},"df":0,"1":{"docs":{},"df":0,"1":{"docs":{},"df":0,"1":{"docs":{},"df":0,"1":{"docs":{},"df":0,"0":{"docs":{},"df":0,"1":{"docs":{},"df":0,"1":{"docs":{},"df":0,"1":{"docs":{},"df":0,"1":{"docs":{"https://phlip9.com/notes/postgres/snippets/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}},"1":{"docs":{},"df":0,"1":{"docs":{},"df":0,"1":{"docs":{"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.0}},"df":1}}}}},"3":{"docs":{},"df":0,"1":{"docs":{"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0}},"df":1}},"7":{"docs":{},"df":0,"6":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.0}},"df":1},"9":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.0}},"df":1}},"a":{"docs":{"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.0}},"df":1},"c":{"docs":{"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.0}},"df":1},"e":{"docs":{"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.0}},"df":1},"g":{"docs":{"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.0}},"df":1}},"1":{"docs":{},"df":0,"0":{"docs":{"https://phlip9.com/notes/networking/CIDR/":{"tf":1.0}},"df":1,"1":{"docs":{},"df":0,"0":{"docs":{},"df":0,"1":{"docs":{},"df":0,"1":{"docs":{"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.0}},"df":1}}},"1":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.4142135623730951}},"df":1},"1":{"docs":{"https://phlip9.com/notes/performance/bit hacks/":{"tf":2.0}},"df":1}},"1":{"docs":{},"df":0,"0":{"docs":{"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.7320508075688772}},"df":1},"1":{"docs":{"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.7320508075688772}},"df":1}}}}},"1":{"docs":{"https://phlip9.com/notes/networking/CIDR/":{"tf":1.0}},"df":1,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.0}},"df":1}},"1":{"docs":{},"df":0,"1":{"docs":{"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.0}},"df":1}}},"1":{"docs":{},"df":0,"0":{"docs":{},"df":0,"1":{"docs":{"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.0}},"df":1}}}}}},":":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,":":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,":":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,":":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,":":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{"https://phlip9.com/notes/networking/network interfaces/":{"tf":2.0}},"df":1}}}}}}}}}}}}}},"1":{"docs":{},"df":0,"2":{"docs":{},"df":0,":":{"docs":{},"df":0,"3":{"docs":{},"df":0,"4":{"docs":{},"df":0,":":{"docs":{},"df":0,"7":{"docs":{},"df":0,"7":{"docs":{},"df":0,":":{"docs":{},"df":0,"5":{"docs":{},"df":0,"5":{"docs":{},"df":0,":":{"docs":{},"df":0,"a":{"docs":{},"df":0,"a":{"docs":{"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}},"a":{"docs":{},"df":0,"b":{"docs":{"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.0}},"df":1}},"e":{"docs":{},"df":0,"f":{"docs":{"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.0}},"df":1}}},"1":{"docs":{"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/foreign bank account report (FBAR)/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.0},"https://phlip9.com/notes/crypto/acme protocol/":{"tf":2.449489742783178}},"df":3,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,":":{"docs":{},"df":0,":":{"docs":{},"df":0,"/":{"docs":{},"df":0,"8":{"docs":{},"df":0,"d":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"c":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/networking/ipv6 address space/":{"tf":1.0}},"df":1}}}}}}}}}}}},"1":{"docs":{"https://phlip9.com/notes/networking/CIDR/":{"tf":1.4142135623730951}},"df":1}},"5":{"docs":{},"df":0,"8":{"docs":{},"df":0,".":{"docs":{},"df":0,"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"d":{"docs":{},"df":0,"i":{"docs":{},"df":0,"a":{"docs":{},"df":0,"w":{"docs":{},"df":0,"i":{"docs":{},"df":0,"k":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/bip158 - compact block filters/":{"tf":1.0}},"df":1}}}}}}}}}}}}},"2":{"docs":{"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/foreign bank account report (FBAR)/":{"tf":1.0}},"df":1,"8":{"docs":{},"df":0,"b":{"docs":{},"df":0,"e":{"docs":{},"df":0,"3":{"docs":{},"df":0,"d":{"docs":{},"df":0,"c":{"docs":{},"df":0,"e":{"docs":{},"df":0,"0":{"docs":{},"df":0,"e":{"docs":{},"df":0,"b":{"docs":{},"df":0,"4":{"docs":{},"df":0,"5":{"docs":{},"df":0,"b":{"docs":{},"df":0,"7":{"docs":{},"df":0,"9":{"docs":{},"df":0,"4":{"docs":{},"df":0,"f":{"docs":{},"df":0,"c":{"docs":{},"df":0,"0":{"docs":{},"df":0,"8":{"docs":{},"df":0,"3":{"docs":{},"df":0,"d":{"docs":{},"df":0,"f":{"docs":{},"df":0,"3":{"docs":{},"df":0,"f":{"docs":{},"df":0,"8":{"docs":{},"df":0,"4":{"docs":{},"df":0,"f":{"docs":{},"df":0,"4":{"docs":{},"df":0,"f":{"docs":{},"df":0,"7":{"docs":{},"df":0,"4":{"docs":{},"df":0,"6":{"docs":{},"df":0,"7":{"docs":{},"df":0,"2":{"docs":{},"df":0,"4":{"docs":{},"df":0,"a":{"docs":{},"df":0,"8":{"docs":{},"df":0,"6":{"docs":{},"df":0,"b":{"docs":{},"df":0,"1":{"docs":{},"df":0,"6":{"docs":{},"df":0,"1":{"docs":{},"df":0,"5":{"docs":{},"df":0,"9":{"docs":{},"df":0,"2":{"docs":{},"df":0,"4":{"docs":{},"df":0,"6":{"docs":{},"df":0,"3":{"docs":{},"df":0,"5":{"docs":{},"df":0,"6":{"docs":{},"df":0,"5":{"docs":{},"df":0,"e":{"docs":{},"df":0,"6":{"docs":{},"df":0,"3":{"docs":{},"df":0,"4":{"docs":{},"df":0,"3":{"docs":{},"df":0,"f":{"docs":{},"df":0,"f":{"docs":{},"df":0,"8":{"docs":{},"df":0,"3":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"f":{"docs":{"https://phlip9.com/notes/postgres/types of scans/":{"tf":1.0}},"df":1,"'":{"docs":{},"df":0,":":{"docs":{},"df":0,":":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"x":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/postgres/types of scans/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"3":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/fastpay/":{"tf":1.0}},"df":1,"2":{"docs":{},"df":0,"b":{"docs":{"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.0}},"df":1}}},"4":{"docs":{"https://phlip9.com/notes/android/OTA updates for rooted android phone/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.0}},"df":2,"6":{"docs":{},"df":0,"d":{"docs":{},"df":0,"3":{"docs":{},"df":0,"2":{"docs":{},"df":0,"9":{"docs":{},"df":0,"8":{"docs":{},"df":0,"b":{"docs":{},"df":0,"9":{"docs":{},"df":0,"9":{"docs":{},"df":0,"7":{"docs":{},"df":0,"6":{"docs":{},"df":0,"d":{"docs":{},"df":0,"5":{"docs":{},"df":0,"0":{"docs":{},"df":0,"f":{"docs":{},"df":0,"a":{"docs":{},"df":0,"3":{"docs":{},"df":0,"7":{"docs":{},"df":0,"9":{"docs":{},"df":0,"f":{"docs":{},"df":0,"a":{"docs":{},"df":0,"0":{"docs":{},"df":0,"7":{"docs":{},"df":0,"1":{"docs":{},"df":0,"f":{"docs":{},"df":0,"5":{"docs":{},"df":0,"7":{"docs":{},"df":0,"b":{"docs":{},"df":0,"c":{"docs":{},"df":0,"1":{"docs":{},"df":0,"1":{"docs":{},"df":0,"5":{"docs":{},"df":0,"8":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"a":{"docs":{},"df":0,"5":{"docs":{},"df":0,"b":{"docs":{"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":1.4142135623730951}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"b":{"docs":{"https://phlip9.com/notes/performance/bit hacks/":{"tf":2.8284271247461903}},"df":1}},"5":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.4142135623730951}},"df":1,"0":{"docs":{},"df":0,"0":{"docs":{"https://phlip9.com/notes/lang/gdb ref/":{"tf":1.0}},"df":1}}},"6":{"docs":{"https://phlip9.com/notes/android/OTA updates for rooted android phone/":{"tf":1.0},"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/foreign bank account report (FBAR)/":{"tf":1.0},"https://phlip9.com/notes/misc/arm target triples/":{"tf":1.0}},"df":3},"7":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.4142135623730951}},"df":1},"8":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.4142135623730951},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":2,"b":{"docs":{"https://phlip9.com/notes/performance/bit hacks/":{"tf":3.605551275463989}},"df":1}},"a":{"docs":{},"df":0,"b":{"docs":{},"df":0,"c":{"docs":{"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.0}},"df":1}}},"b":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,".":{"docs":{},"df":0,".":{"docs":{},"df":0,"=":{"docs":{},"df":0,"0":{"docs":{},"df":0,"b":{"docs":{},"df":0,"0":{"docs":{},"df":0,"1":{"docs":{},"df":0,"1":{"docs":{},"df":0,"1":{"docs":{},"df":0,"1":{"docs":{},"df":0,"1":{"docs":{},"df":0,"1":{"docs":{},"df":0,"1":{"docs":{"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}},"_":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"1":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.7320508075688772}},"df":1}},"1":{"docs":{},"df":0,"0":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.4142135623730951}},"df":1}}},"1":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0}},"df":1}}}}}},"1":{"docs":{},"df":0,"_":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0}},"df":1}}}}}}},"1":{"docs":{},"df":0,"0":{"docs":{},"df":0,"_":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0}},"df":1}}}}}}}},"1":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"_":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0}},"df":1}}}}}}}}},"1":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"_":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0}},"df":1}}}}}}}},"1":{"docs":{},"df":0,"1":{"docs":{},"df":0,"1":{"docs":{},"df":0,"1":{"docs":{},"df":0,"1":{"docs":{},"df":0,"1":{"docs":{},"df":0,"1":{"docs":{"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.0}},"df":1}}}}}}}},"e":{"docs":{},"df":0,"b":{"docs":{},"df":0,"f":{"docs":{},"df":0,"5":{"docs":{},"df":0,"9":{"docs":{},"df":0,"3":{"docs":{},"df":0,"3":{"docs":{},"df":0,"9":{"docs":{},"df":0,"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"a":{"docs":{},"df":0,"5":{"docs":{},"df":0,"3":{"docs":{},"df":0,"4":{"docs":{},"df":0,"f":{"docs":{},"df":0,"4":{"docs":{},"df":0,"2":{"docs":{},"df":0,"1":{"docs":{},"df":0,"7":{"docs":{},"df":0,"f":{"docs":{},"df":0,"8":{"docs":{},"df":0,"a":{"docs":{},"df":0,"a":{"docs":{},"df":0,"0":{"docs":{},"df":0,"9":{"docs":{},"df":0,"7":{"docs":{},"df":0,"2":{"docs":{},"df":0,"d":{"docs":{},"df":0,"1":{"docs":{},"df":0,"4":{"docs":{},"df":0,"d":{"docs":{},"df":0,"c":{"docs":{},"df":0,"4":{"docs":{},"df":0,"9":{"docs":{},"df":0,"e":{"docs":{},"df":0,"7":{"docs":{},"df":0,"2":{"docs":{},"df":0,"0":{"docs":{},"df":0,"7":{"docs":{},"df":0,"b":{"docs":{},"df":0,"e":{"docs":{},"df":0,"2":{"docs":{},"df":0,"2":{"docs":{},"df":0,"5":{"docs":{},"df":0,"5":{"docs":{},"df":0,"1":{"docs":{},"df":0,"1":{"docs":{},"df":0,"0":{"docs":{},"df":0,"7":{"docs":{},"df":0,"3":{"docs":{},"df":0,"c":{"docs":{},"df":0,"6":{"docs":{},"df":0,"6":{"docs":{},"df":0,"1":{"docs":{},"df":0,"a":{"docs":{},"df":0,"e":{"docs":{},"df":0,"0":{"docs":{},"df":0,"1":{"docs":{},"df":0,"d":{"docs":{},"df":0,"a":{"docs":{},"df":0,"0":{"docs":{},"df":0,"a":{"docs":{"https://phlip9.com/notes/android/android cli setup/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"u":{"docs":{},"df":0,"8":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.7320508075688772},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0},"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":1.4142135623730951}},"df":3}},"x":{"docs":{},"df":0,"0":{"docs":{"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.0}},"df":1,"0":{"docs":{"https://phlip9.com/notes/performance/bit hacks/":{"tf":2.23606797749979}},"df":1,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"1":{"docs":{},"df":0,"u":{"docs":{},"df":0,"l":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.4142135623730951}},"df":2}}}},"2":{"docs":{},"df":0,"u":{"docs":{},"df":0,"l":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.0}},"df":2}}}},"3":{"docs":{},"df":0,"u":{"docs":{},"df":0,"l":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0}},"df":1}}}},"4":{"docs":{},"df":0,"u":{"docs":{},"df":0,"l":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.0}},"df":2}}}},"6":{"docs":{},"df":0,"u":{"docs":{},"df":0,"l":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0}},"df":1}}}}},"1":{"docs":{},"df":0,"0":{"docs":{},"df":0,"u":{"docs":{},"df":0,"l":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.0}},"df":2}}}},"8":{"docs":{},"df":0,"u":{"docs":{},"df":0,"l":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0}},"df":1}}}}},"2":{"docs":{},"df":0,"0":{"docs":{},"df":0,"u":{"docs":{},"df":0,"l":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.0}},"df":2}}}}},"8":{"docs":{},"df":0,"0":{"docs":{},"df":0,"u":{"docs":{},"df":0,"l":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0}},"df":1}}}}},"e":{"docs":{},"df":0,"6":{"docs":{},"df":0,"u":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0}},"df":1}}}}},"2":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"u":{"docs":{},"df":0,"l":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0}},"df":1}}}}}},"4":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"u":{"docs":{},"df":0,"l":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0}},"df":1}}}}}}}},"6":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"u":{"docs":{},"df":0,"l":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}},"_":{"docs":{},"df":0,"f":{"docs":{},"df":0,"f":{"docs":{},"df":0,"f":{"docs":{},"df":0,"f":{"docs":{"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.0}},"df":1,"_":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"_":{"docs":{},"df":0,"f":{"docs":{},"df":0,"f":{"docs":{},"df":0,"f":{"docs":{},"df":0,"f":{"docs":{"https://phlip9.com/notes/performance/simdjson talk/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}},"_":{"docs":{},"df":0,"u":{"docs":{},"df":0,"8":{"docs":{"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.0}},"df":1}}},"f":{"docs":{},"df":0,"f":{"docs":{},"df":0,"_":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"f":{"docs":{},"df":0,"f":{"docs":{"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.0}},"df":1,"_":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"f":{"docs":{},"df":0,"f":{"docs":{},"df":0,"_":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"f":{"docs":{},"df":0,"f":{"docs":{"https://phlip9.com/notes/performance/simdjson talk/":{"tf":1.0}},"df":1}}}}}}}}}}}}}},"f":{"docs":{},"df":0,"f":{"docs":{},"df":0,"f":{"docs":{},"df":0,"f":{"docs":{"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.0}},"df":1}}}}}}}},"1":{"docs":{"https://phlip9.com/notes/performance/bit hacks/":{"tf":2.0}},"df":1,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"_":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.0}},"df":1}}},"1":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.4142135623730951}},"df":1}}}}}},"1":{"docs":{},"df":0,"_":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.4142135623730951}},"df":1}}},"1":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.0}},"df":1},"1":{"docs":{"https://phlip9.com/notes/performance/bit hacks/":{"tf":4.242640687119285}},"df":1,"_":{"docs":{},"df":0,"0":{"docs":{},"df":0,"1":{"docs":{},"df":0,"0":{"docs":{},"df":0,"1":{"docs":{},"df":0,"_":{"docs":{},"df":0,"0":{"docs":{},"df":0,"1":{"docs":{},"df":0,"0":{"docs":{},"df":0,"1":{"docs":{},"df":0,"_":{"docs":{},"df":0,"u":{"docs":{},"df":0,"6":{"docs":{},"df":0,"4":{"docs":{"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}},"6":{"docs":{},"df":0,"0":{"docs":{},"df":0,"6":{"docs":{},"df":0,"_":{"docs":{},"df":0,"0":{"docs":{},"df":0,"6":{"docs":{},"df":0,"0":{"docs":{},"df":0,"6":{"docs":{},"df":0,"_":{"docs":{},"df":0,"0":{"docs":{},"df":0,"6":{"docs":{},"df":0,"0":{"docs":{},"df":0,"6":{"docs":{},"df":0,"_":{"docs":{},"df":0,"0":{"docs":{},"df":0,"6":{"docs":{},"df":0,"0":{"docs":{},"df":0,"6":{"docs":{"https://phlip9.com/notes/performance/simdjson talk/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}},"f":{"docs":{"https://phlip9.com/notes/performance/bit hacks/":{"tf":2.8284271247461903}},"df":1,"0":{"docs":{},"df":0,"f":{"docs":{},"df":0,"_":{"docs":{},"df":0,"0":{"docs":{},"df":0,"f":{"docs":{},"df":0,"0":{"docs":{},"df":0,"f":{"docs":{"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.4142135623730951}},"df":1,"_":{"docs":{},"df":0,"0":{"docs":{},"df":0,"f":{"docs":{},"df":0,"0":{"docs":{},"df":0,"f":{"docs":{},"df":0,"_":{"docs":{},"df":0,"0":{"docs":{},"df":0,"f":{"docs":{},"df":0,"0":{"docs":{},"df":0,"f":{"docs":{"https://phlip9.com/notes/performance/simdjson talk/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}},"f":{"docs":{},"df":0,"f":{"docs":{},"df":0,"f":{"docs":{},"df":0,"f":{"docs":{},"df":0,"f":{"docs":{},"df":0,"f":{"docs":{},"df":0,"u":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.0}},"df":1}}}}}}}},"u":{"docs":{},"df":0,"l":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.0}},"df":1}}}},"1":{"docs":{"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.4142135623730951}},"df":1,"1":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"_":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"1":{"docs":{},"df":0,"0":{"docs":{"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.4142135623730951}},"df":1}}}}}}},"1":{"docs":{},"df":0,"1":{"docs":{},"df":0,"_":{"docs":{},"df":0,"1":{"docs":{},"df":0,"1":{"docs":{},"df":0,"1":{"docs":{},"df":0,"1":{"docs":{"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.0}},"df":1}}}}}}}}},"2":{"docs":{},"df":0,"c":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0}},"df":1}}}}}}}}},"3":{"docs":{},"df":0,"3":{"docs":{},"df":0,"3":{"docs":{},"df":0,"3":{"docs":{},"df":0,"_":{"docs":{},"df":0,"3":{"docs":{},"df":0,"3":{"docs":{},"df":0,"3":{"docs":{},"df":0,"3":{"docs":{},"df":0,"_":{"docs":{},"df":0,"3":{"docs":{},"df":0,"3":{"docs":{},"df":0,"3":{"docs":{},"df":0,"3":{"docs":{},"df":0,"_":{"docs":{},"df":0,"3":{"docs":{},"df":0,"3":{"docs":{},"df":0,"3":{"docs":{},"df":0,"3":{"docs":{"https://phlip9.com/notes/performance/simdjson talk/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}},"6":{"docs":{"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":1.4142135623730951}},"df":1,"_":{"docs":{},"df":0,"u":{"docs":{},"df":0,"8":{"docs":{"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":1.0}},"df":1}}}},"b":{"docs":{},"df":0,"f":{"docs":{},"df":0,"f":{"docs":{},"df":0,"f":{"docs":{},"df":0,"f":{"docs":{},"df":0,"f":{"docs":{},"df":0,"f":{"docs":{},"df":0,"f":{"docs":{"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0}},"df":1}}}}}}}}},"5":{"docs":{},"df":0,"5":{"docs":{},"df":0,"5":{"docs":{},"df":0,"8":{"docs":{},"df":0,"5":{"docs":{},"df":0,"3":{"docs":{},"df":0,"8":{"docs":{},"df":0,"0":{"docs":{"https://phlip9.com/notes/lang/gdb ref/":{"tf":1.0}},"df":1}}}}}}},"c":{"docs":{"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":1.4142135623730951}},"df":1,"_":{"docs":{},"df":0,"u":{"docs":{},"df":0,"8":{"docs":{"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":1.0}},"df":1}}}}},"7":{"docs":{},"df":0,"f":{"docs":{"https://phlip9.com/notes/performance/bit hacks/":{"tf":4.123105625617661}},"df":1,"7":{"docs":{},"df":0,"f":{"docs":{},"df":0,"_":{"docs":{},"df":0,"7":{"docs":{},"df":0,"f":{"docs":{},"df":0,"7":{"docs":{},"df":0,"f":{"docs":{},"df":0,"_":{"docs":{},"df":0,"7":{"docs":{},"df":0,"f":{"docs":{},"df":0,"7":{"docs":{},"df":0,"f":{"docs":{},"df":0,"_":{"docs":{},"df":0,"7":{"docs":{},"df":0,"f":{"docs":{},"df":0,"7":{"docs":{},"df":0,"f":{"docs":{},"df":0,"_":{"docs":{},"df":0,"u":{"docs":{},"df":0,"6":{"docs":{},"df":0,"4":{"docs":{"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}},"f":{"docs":{},"df":0,"f":{"docs":{"https://phlip9.com/notes/performance/simdjson talk/":{"tf":1.0}},"df":1}}}},"8":{"docs":{},"df":0,"0":{"docs":{"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.7320508075688772},"https://phlip9.com/notes/performance/simdjson talk/":{"tf":1.0}},"df":2,"0":{"docs":{},"df":0,"7":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"7":{"docs":{},"df":0,"f":{"docs":{"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0}},"df":1}}}}}},"8":{"docs":{},"df":0,"0":{"docs":{},"df":0,"_":{"docs":{},"df":0,"8":{"docs":{},"df":0,"0":{"docs":{},"df":0,"8":{"docs":{},"df":0,"0":{"docs":{"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.4142135623730951}},"df":1,"_":{"docs":{},"df":0,"8":{"docs":{},"df":0,"0":{"docs":{},"df":0,"8":{"docs":{},"df":0,"0":{"docs":{},"df":0,"_":{"docs":{},"df":0,"8":{"docs":{},"df":0,"0":{"docs":{},"df":0,"8":{"docs":{},"df":0,"0":{"docs":{"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.0}},"df":1,"_":{"docs":{},"df":0,"u":{"docs":{},"df":0,"6":{"docs":{},"df":0,"4":{"docs":{"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.4142135623730951}},"df":1}}}}}}}}}}}}}}}}}}}}},"_":{"docs":{},"df":0,"u":{"docs":{},"df":0,"8":{"docs":{"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.0}},"df":1}}}},"8":{"docs":{},"df":0,"8":{"docs":{},"df":0,"8":{"docs":{},"df":0,"_":{"docs":{},"df":0,"8":{"docs":{},"df":0,"8":{"docs":{},"df":0,"8":{"docs":{},"df":0,"8":{"docs":{"https://phlip9.com/notes/performance/bit hacks/":{"tf":2.0}},"df":1}}}}}}}}},"a":{"docs":{},"df":0,"0":{"docs":{"https://phlip9.com/notes/performance/simdjson talk/":{"tf":1.4142135623730951}},"df":1,"2":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0}},"df":1}}}}}}},"5":{"docs":{},"df":0,"f":{"docs":{},"df":0,"7":{"docs":{},"df":0,"f":{"docs":{},"df":0,"f":{"docs":{},"df":0,"f":{"docs":{},"df":0,"f":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0}},"df":1}}}}}}}}}}}}},"b":{"docs":{},"df":0,"0":{"docs":{},"df":0,"b":{"docs":{},"df":0,"0":{"docs":{},"df":0,"_":{"docs":{},"df":0,"b":{"docs":{},"df":0,"0":{"docs":{},"df":0,"b":{"docs":{},"df":0,"0":{"docs":{"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.4142135623730951}},"df":1}}}}}}}},"1":{"docs":{},"df":0,"b":{"docs":{},"df":0,"1":{"docs":{},"df":0,"_":{"docs":{},"df":0,"b":{"docs":{},"df":0,"1":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.4142135623730951}},"df":1}}}}}}}},"2":{"docs":{},"df":0,"b":{"docs":{},"df":0,"2":{"docs":{},"df":0,"_":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.7320508075688772}},"df":1}}}}}}}},"3":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"_":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.4142135623730951}},"df":1}}}}}}}},"f":{"docs":{"https://phlip9.com/notes/performance/simdjson talk/":{"tf":1.4142135623730951}},"df":1}},"c":{"docs":{},"df":0,"2":{"docs":{"https://phlip9.com/notes/performance/simdjson talk/":{"tf":1.0}},"df":1}},"e":{"docs":{},"df":0,"0":{"docs":{"https://phlip9.com/notes/performance/simdjson talk/":{"tf":1.4142135623730951}},"df":1},"d":{"docs":{"https://phlip9.com/notes/performance/simdjson talk/":{"tf":1.0}},"df":1}},"f":{"docs":{},"df":0,"0":{"docs":{"https://phlip9.com/notes/performance/simdjson talk/":{"tf":1.0}},"df":1,"f":{"docs":{},"df":0,"0":{"docs":{},"df":0,"_":{"docs":{},"df":0,"f":{"docs":{},"df":0,"0":{"docs":{},"df":0,"f":{"docs":{},"df":0,"0":{"docs":{},"df":0,"_":{"docs":{},"df":0,"f":{"docs":{},"df":0,"0":{"docs":{},"df":0,"f":{"docs":{},"df":0,"0":{"docs":{},"df":0,"_":{"docs":{},"df":0,"f":{"docs":{},"df":0,"0":{"docs":{},"df":0,"f":{"docs":{},"df":0,"0":{"docs":{"https://phlip9.com/notes/performance/simdjson talk/":{"tf":1.4142135623730951}},"df":1}}}}}}}}}}}}}}}}}},"f":{"docs":{"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.0}},"df":1,"f":{"docs":{},"df":0,"f":{"docs":{},"df":0,"_":{"docs":{},"df":0,"f":{"docs":{},"df":0,"f":{"docs":{},"df":0,"f":{"docs":{},"df":0,"f":{"docs":{},"df":0,"_":{"docs":{},"df":0,"u":{"docs":{},"df":0,"3":{"docs":{},"df":0,"2":{"docs":{"https://phlip9.com/notes/networking/CIDR/":{"tf":1.0}},"df":1}}}}}}}}},"f":{"docs":{},"df":0,"f":{"docs":{},"df":0,"f":{"docs":{},"df":0,"f":{"docs":{},"df":0,"f":{"docs":{},"df":0,"f":{"docs":{},"df":0,"f":{"docs":{},"df":0,"f":{"docs":{},"df":0,"c":{"docs":{},"df":0,"0":{"docs":{},"df":0,"u":{"docs":{},"df":0,"l":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.4142135623730951}},"df":1}}}}}}}}}}}}}}}}},"x":{"docs":{},"df":0,"x":{"docs":{},"df":0,"x":{"docs":{},"df":0,"x":{"docs":{},"df":0,"x":{"docs":{},"df":0,"x":{"docs":{"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.4142135623730951}},"df":1}}}}}}},"}":{"docs":{},"df":0,"^":{"docs":{},"df":0,"\\":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"f":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/AI ML/Markov Decision Process (MDP)/":{"tf":1.0}},"df":1}}}}}}}}},"1":{"docs":{"https://phlip9.com/notes/AI ML/Expectimax Search/":{"tf":2.23606797749979},"https://phlip9.com/notes/AI ML/Markov Decision Process (MDP)/":{"tf":2.6457513110645907},"https://phlip9.com/notes/WSL/WSL2 custom kernel/":{"tf":1.7320508075688772},"https://phlip9.com/notes/android/OTA updates for rooted android phone/":{"tf":1.0},"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.4142135623730951},"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/foreign bank account report (FBAR)/":{"tf":1.0},"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/money services business (MSB)/":{"tf":1.0},"https://phlip9.com/notes/b l o c k c h a i n/fastpay/":{"tf":1.0},"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":2.0},"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":2.449489742783178},"https://phlip9.com/notes/btc-ln/BOLT 4 - onion routing protocol/":{"tf":1.4142135623730951},"https://phlip9.com/notes/btc-ln/BOLT 7 - p2p node and channel discovery/":{"tf":1.7320508075688772},"https://phlip9.com/notes/btc-ln/BOLT 8 - secure noise transport/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/atomic multipath payments (AMP)/":{"tf":2.0},"https://phlip9.com/notes/btc-ln/breez lightning service providers/":{"tf":1.7320508075688772},"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/zero-conf channels/":{"tf":1.4142135623730951},"https://phlip9.com/notes/combinatorics/k-combinations of a multiset/":{"tf":4.123105625617661},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.7320508075688772},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/gramine/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":2.23606797749979},"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.7320508075688772},"https://phlip9.com/notes/confidential computing/marblerun/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":1.0},"https://phlip9.com/notes/crypto/(talk) authenticated data structures for stateless validation/":{"tf":1.0},"https://phlip9.com/notes/crypto/biscuit authz/":{"tf":1.4142135623730951},"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":2.449489742783178},"https://phlip9.com/notes/design/form design/":{"tf":1.0},"https://phlip9.com/notes/devops/algo wireguard VPN server/":{"tf":1.7320508075688772},"https://phlip9.com/notes/devops/deployment strategies/":{"tf":1.4142135623730951},"https://phlip9.com/notes/devops/docker compose/":{"tf":1.0},"https://phlip9.com/notes/devops/service mesh/":{"tf":1.0},"https://phlip9.com/notes/distributed systems/papers/(2020) Semi-Fast Byzantine-tolerant Shared Register without Reliable Broadcast/":{"tf":4.0},"https://phlip9.com/notes/distributed systems/papers/(2021) Leaderless Consensus/":{"tf":1.0},"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":1.0},"https://phlip9.com/notes/keyboards/moergo glove80/":{"tf":1.0},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":2.6457513110645907},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":3.3166247903554},"https://phlip9.com/notes/lang/flutter/flutter setup/":{"tf":1.0},"https://phlip9.com/notes/lang/lua/":{"tf":5.385164807134504},"https://phlip9.com/notes/lang/operator fixity and precedence/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":3.1622776601683795},"https://phlip9.com/notes/lang/rust/rr with rust/":{"tf":1.7320508075688772},"https://phlip9.com/notes/management/relieve often - why generals were more successful in WWII/":{"tf":1.0},"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":2.8284271247461903},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":4.0},"https://phlip9.com/notes/misc/setting up a headless raspbian boot image/":{"tf":1.7320508075688772},"https://phlip9.com/notes/networking/CIDR/":{"tf":1.0},"https://phlip9.com/notes/networking/ipv6 address space/":{"tf":1.0},"https://phlip9.com/notes/networking/network interfaces/":{"tf":2.0},"https://phlip9.com/notes/performance/bit hacks/":{"tf":4.123105625617661},"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.4142135623730951},"https://phlip9.com/notes/performance/simdjson talk/":{"tf":2.449489742783178},"https://phlip9.com/notes/postgres/snippets/":{"tf":2.0},"https://phlip9.com/notes/reproducible builds/nix/nix auto-allocate-uids -> nixbld users/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/CDF confidence bands - DKW inequality/":{"tf":1.4142135623730951},"https://phlip9.com/notes/statistics probability/cheat sheet/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/herbie - float error fixer/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/kelly criterion + ELO/":{"tf":2.449489742783178},"https://phlip9.com/notes/statistics probability/multinomial distribution/":{"tf":1.7320508075688772},"https://phlip9.com/notes/statistics probability/p-value/":{"tf":1.4142135623730951},"https://phlip9.com/notes/statistics probability/testing whether a coin is fair/":{"tf":1.7320508075688772},"https://phlip9.com/notes/statistics probability/winsorize/":{"tf":2.6457513110645907}},"df":66,"&":{"docs":{},"df":0,"g":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/lang/lua/":{"tf":1.0}},"df":1}}},",":{"docs":{},"df":0,"0":{"docs":{},"df":0,"4":{"docs":{},"df":0,"8":{"docs":{},"df":0,",":{"docs":{},"df":0,"5":{"docs":{},"df":0,"7":{"docs":{},"df":0,"6":{"docs":{"https://phlip9.com/notes/networking/CIDR/":{"tf":1.0}},"df":1}}}}}}},"7":{"docs":{"https://phlip9.com/notes/reproducible builds/nix/nix auto-allocate-uids -> nixbld users/":{"tf":1.0}},"df":1},"9":{"docs":{"https://phlip9.com/notes/reproducible builds/nix/nix auto-allocate-uids -> nixbld users/":{"tf":1.0}},"df":1}},".":{"docs":{},"df":0,".":{"docs":{},"df":0,"=":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":1.0}},"df":1}}},"0":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.7320508075688772},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.4142135623730951},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":6.164414002968976},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.4142135623730951},"https://phlip9.com/notes/statistics probability/multinomial distribution/":{"tf":2.0},"https://phlip9.com/notes/statistics probability/testing whether a coin is fair/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/winsorize/":{"tf":1.7320508075688772}},"df":8,",":{"docs":{},"df":0,"2":{"docs":{},"df":0,",":{"docs":{},"df":0,"3":{"docs":{},"df":0,",":{"docs":{},"df":0,"4":{"docs":{},"df":0,",":{"docs":{},"df":0,"5":{"docs":{},"df":0,",":{"docs":{},"df":0,"6":{"docs":{},"df":0,",":{"docs":{},"df":0,"7":{"docs":{},"df":0,",":{"docs":{},"df":0,"8":{"docs":{},"df":0,",":{"docs":{},"df":0,"9":{"docs":{},"df":0,",":{"docs":{},"df":0,"1":{"docs":{},"df":0,"0":{"docs":{"https://phlip9.com/notes/statistics probability/winsorize/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}},".":{"docs":{},"df":0,"4":{"docs":{},"df":0,"1":{"docs":{"https://phlip9.com/notes/android/android cli setup/":{"tf":1.0}},"df":1}}},"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"6":{"docs":{},"df":0,"8":{"docs":{},"df":0,".":{"docs":{},"df":0,"2":{"docs":{},"df":0,"6":{"docs":{},"df":0,"9":{"docs":{},"df":0,"%":{"docs":{},"df":0,"$":{"docs":{},"df":0,"\\":{"docs":{},"df":0,"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"g":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{"https://phlip9.com/notes/statistics probability/testing whether a coin is fair/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}},"1":{"docs":{},"df":0,"3":{"docs":{},"df":0,"2":{"docs":{},"df":0,"5":{"docs":{"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0}},"df":1}}}}},"1":{"docs":{},"df":0,"1":{"docs":{},"df":0,".":{"docs":{},"df":0,"3":{"docs":{"https://phlip9.com/notes/ios/ios setup/":{"tf":1.0}},"df":1}}},"5":{"docs":{"https://phlip9.com/notes/lang/ATS/Install ATS2/":{"tf":1.0}},"df":1},"9":{"docs":{},"df":0,"4":{"docs":{"https://phlip9.com/notes/postgres/types of scans/":{"tf":1.0}},"df":1}},"m":{"docs":{},"df":0,"i":{"docs":{},"df":0,"b":{"docs":{"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.0}},"df":1}}}},"2":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1},"3":{"docs":{},"df":0,"9":{"docs":{},"df":0,"6":{"docs":{"https://phlip9.com/notes/android/root phone with magisk/":{"tf":1.0}},"df":1}}},"4":{"docs":{"https://phlip9.com/notes/performance/simdjson talk/":{"tf":1.0}},"df":1,"8":{"docs":{},"df":0,"2":{"docs":{},"df":0,"6":{"docs":{"https://phlip9.com/notes/statistics probability/MAD - median absolute deviation/":{"tf":1.0}},"df":1}}},"m":{"docs":{},"df":0,"i":{"docs":{},"df":0,"b":{"docs":{"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.0}},"df":1}}}},"5":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 8 - secure noise transport/":{"tf":1.0},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.4142135623730951},"https://phlip9.com/notes/statistics probability/testing whether a coin is fair/":{"tf":1.0}},"df":3,"*":{"docs":{},"df":0,"w":{"docs":{},"df":0,"w":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1,"_":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1},"x":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1},"z":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1}}}}},"k":{"docs":{"https://phlip9.com/notes/devops/nomad/":{"tf":1.0}},"df":1},"m":{"docs":{},"df":0,"i":{"docs":{},"df":0,"b":{"docs":{"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.0}},"df":1}}}},"6":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.4142135623730951},"https://phlip9.com/notes/performance/simdjson talk/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/nix/nix debug broken package build/":{"tf":1.7320508075688772}},"df":3},"7":{"docs":{},"df":0,"4":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0}},"df":1}},"8":{"docs":{"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.0}},"df":2},"9":{"docs":{},"df":0,"5":{"docs":{},"df":0,"9":{"docs":{},"df":0,"9":{"docs":{},"df":0,"9":{"docs":{},"df":0,"5":{"docs":{},"df":0,".":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{"https://phlip9.com/notes/statistics probability/testing whether a coin is fair/":{"tf":1.0}},"df":1}}}}}}}}}}},"/":{"docs":{},"df":0,"(":{"docs":{},"df":0,"s":{"docs":{},"df":0,"q":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{},"df":0,"(":{"docs":{},"df":0,"x":{"docs":{},"df":0,"+":{"docs":{},"df":0,"1":{"docs":{"https://phlip9.com/notes/statistics probability/herbie - float error fixer/":{"tf":1.0}},"df":1}}}}}}}}},"0":{"docs":{},"df":0,"/":{"docs":{},"df":0,"1":{"docs":{"https://phlip9.com/notes/reproducible builds/nix/nix debug broken package build/":{"tf":1.0}},"df":1}}},"1":{"docs":{},"df":0,"2":{"docs":{},"df":0,"8":{"docs":{"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.7320508075688772}},"df":1,"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"o":{"docs":{},"df":0,"p":{"docs":{},"df":0,"b":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"k":{"docs":{},"df":0,"r":{"docs":{},"df":0,"f":{"docs":{},"df":0,"c":{"docs":{},"df":0,"4":{"docs":{},"df":0,"2":{"docs":{},"df":0,"9":{"docs":{},"df":0,"1":{"docs":{"https://phlip9.com/notes/networking/ipv6 address space/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}},"2":{"docs":{"https://phlip9.com/notes/statistics probability/standard error/":{"tf":1.0}},"df":1}},"0":{"docs":{"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0},"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/foreign bank account report (FBAR)/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":2.23606797749979},"https://phlip9.com/notes/design/form design/":{"tf":1.0},"https://phlip9.com/notes/devops/nomad/":{"tf":1.0},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/lua/":{"tf":2.0},"https://phlip9.com/notes/lang/operator fixity and precedence/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":2.0},"https://phlip9.com/notes/lang/rust/rr with rust/":{"tf":1.0},"https://phlip9.com/notes/networking/ipv6 address space/":{"tf":1.0},"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.0},"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.4142135623730951},"https://phlip9.com/notes/performance/simdjson talk/":{"tf":1.0},"https://phlip9.com/notes/postgres/snippets/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.4142135623730951},"https://phlip9.com/notes/router/lightning router/lightning router overview/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/G-test - multinomial goodness-of-fit/":{"tf":1.0}},"df":20,"*":{"docs":{},"df":0,"*":{"docs":{},"df":0,"(":{"docs":{},"df":0,"r":{"docs":{},"df":0,"/":{"docs":{},"df":0,"4":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{"https://phlip9.com/notes/statistics probability/kelly criterion + ELO/":{"tf":1.0}},"df":1}}}}}}}},",":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/foreign bank account report (FBAR)/":{"tf":1.0},"https://phlip9.com/notes/fuzzing/fuzzcheck-rs/":{"tf":1.0}},"df":2}}},"1":{"docs":{},"df":0,"7":{"docs":{},"df":0,"0":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0}},"df":1}}}},".":{"docs":{},"df":0,"0":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.7320508075688772},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.7320508075688772}},"df":2,".":{"docs":{},"df":0,"0":{"docs":{},"df":0,".":{"docs":{},"df":0,"0":{"docs":{"https://phlip9.com/notes/networking/CIDR/":{"tf":1.0}},"df":1,"/":{"docs":{},"df":0,"8":{"docs":{"https://phlip9.com/notes/networking/ipv6 address space/":{"tf":1.0}},"df":1}}},"4":{"docs":{"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/gramine/":{"tf":1.0},"https://phlip9.com/notes/devops/azure CLI/":{"tf":1.0}},"df":3}}}}},"2":{"docs":{},"df":0,"5":{"docs":{},"df":0,"5":{"docs":{},"df":0,".":{"docs":{},"df":0,"2":{"docs":{},"df":0,"5":{"docs":{},"df":0,"5":{"docs":{},"df":0,".":{"docs":{},"df":0,"2":{"docs":{},"df":0,"5":{"docs":{},"df":0,"5":{"docs":{},"df":0,"1":{"docs":{},"df":0,"0":{"docs":{},"df":0,".":{"docs":{},"df":0,"0":{"docs":{},"df":0,".":{"docs":{},"df":0,"0":{"docs":{},"df":0,".":{"docs":{},"df":0,"0":{"docs":{},"df":0,"/":{"docs":{},"df":0,"8":{"docs":{},"df":0,"2":{"docs":{},"df":0,"^":{"docs":{},"df":0,"2":{"docs":{},"df":0,"4":{"docs":{"https://phlip9.com/notes/networking/CIDR/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}},"6":{"docs":{},"df":0,"9":{"docs":{},"df":0,".":{"docs":{},"df":0,"6":{"docs":{},"df":0,"9":{"docs":{},"df":0,".":{"docs":{},"df":0,"0":{"docs":{},"df":0,"/":{"docs":{},"df":0,"2":{"docs":{},"df":0,"4":{"docs":{"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.0}},"df":1}}}},"1":{"docs":{"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.7320508075688772}},"df":1,"/":{"docs":{},"df":0,"2":{"docs":{},"df":0,"4":{"docs":{"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.0}},"df":1}}},"1":{"docs":{},"df":0,"1":{"docs":{"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.4142135623730951}},"df":1}},"2":{"docs":{},"df":0,"9":{"docs":{},"df":0,":":{"docs":{},"df":0,"3":{"docs":{},"df":0,"7":{"docs":{},"df":0,"2":{"docs":{},"df":0,"6":{"docs":{},"df":0,"9":{"docs":{"https://phlip9.com/notes/android/android cli setup/":{"tf":1.4142135623730951}},"df":1}}}}}}}}},"2":{"docs":{},"df":0,"5":{"docs":{},"df":0,"5":{"docs":{"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.0}},"df":1}}}}}}}}},"a":{"docs":{"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.0}},"df":1},"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0}},"df":1}}}}},"0":{"docs":{"https://phlip9.com/notes/btc-ln/atomic multipath payments (AMP)/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0},"https://phlip9.com/notes/devops/deployment strategies/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/operator fixity and precedence/":{"tf":2.0},"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.0},"https://phlip9.com/notes/networking/CIDR/":{"tf":1.0},"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/rebuilderd/":{"tf":1.0}},"df":8,"$":{"docs":{},"df":0,"1":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"/":{"docs":{},"df":0,"m":{"docs":{},"df":0,"o":{"docs":{"https://phlip9.com/notes/devops/secrets/1password - secrets automation/":{"tf":1.0}},"df":1}}}}}}},".":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"1":{"docs":{},"df":0,"0":{"docs":{},"df":0,".":{"docs":{},"df":0,"6":{"docs":{},"df":0,"1":{"docs":{},"df":0,"6":{"docs":{},"df":0,"4":{"docs":{},"df":0,"7":{"docs":{},"df":0,"7":{"docs":{},"df":0,"9":{"docs":{},"df":0,"9":{"docs":{},"df":0,"8":{"docs":{},"df":0,"7":{"docs":{},"df":0,"7":{"docs":{},"df":0,"7":{"docs":{},"df":0,"8":{"docs":{},"df":0,"1":{"docs":{},"df":0,"8":{"docs":{},"df":0,"6":{"docs":{"https://phlip9.com/notes/statistics probability/CDF confidence bands - DKW inequality/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}},"1":{"docs":{},"df":0,"0":{"docs":{},"df":0,".":{"docs":{},"df":0,"5":{"docs":{},"df":0,"1":{"docs":{},"df":0,"4":{"docs":{},"df":0,"6":{"docs":{},"df":0,"9":{"docs":{},"df":0,"9":{"docs":{},"df":0,"7":{"docs":{},"df":0,"8":{"docs":{},"df":0,"4":{"docs":{},"df":0,"6":{"docs":{},"df":0,"5":{"docs":{},"df":0,"8":{"docs":{},"df":0,"3":{"docs":{},"df":0,"9":{"docs":{},"df":0,"8":{"docs":{},"df":0,"5":{"docs":{"https://phlip9.com/notes/statistics probability/CDF confidence bands - DKW inequality/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}},"1":{"docs":{},"df":0,"0":{"docs":{},"df":0,".":{"docs":{},"df":0,"3":{"docs":{},"df":0,"8":{"docs":{},"df":0,"7":{"docs":{},"df":0,"0":{"docs":{},"df":0,"2":{"docs":{},"df":0,"2":{"docs":{},"df":0,"7":{"docs":{},"df":0,"5":{"docs":{},"df":0,"6":{"docs":{},"df":0,"0":{"docs":{},"df":0,"2":{"docs":{},"df":0,"0":{"docs":{},"df":0,"4":{"docs":{},"df":0,"9":{"docs":{},"df":0,"4":{"docs":{},"df":0,"9":{"docs":{},"df":0,"6":{"docs":{"https://phlip9.com/notes/statistics probability/CDF confidence bands - DKW inequality/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}},"/":{"docs":{},"df":0,"y":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/postgres/postgres performance tuning/":{"tf":1.0}},"df":1}}},"0":{"docs":{"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/money services business (MSB)/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/rr with rust/":{"tf":1.0},"https://phlip9.com/notes/networking/CIDR/":{"tf":1.4142135623730951},"https://phlip9.com/notes/networking/network interfaces/":{"tf":3.4641016151377544},"https://phlip9.com/notes/performance/bit hacks/":{"tf":2.8284271247461903},"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/testing whether a coin is fair/":{"tf":1.0}},"df":8,".":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"1":{"docs":{},"df":0,"0":{"docs":{},"df":0,".":{"docs":{},"df":0,"1":{"docs":{},"df":0,"9":{"docs":{},"df":0,"4":{"docs":{},"df":0,"9":{"docs":{},"df":0,"4":{"docs":{},"df":0,"7":{"docs":{},"df":0,"4":{"docs":{},"df":0,"6":{"docs":{},"df":0,"0":{"docs":{},"df":0,"3":{"docs":{},"df":0,"5":{"docs":{},"df":0,"2":{"docs":{},"df":0,"0":{"docs":{},"df":0,"4":{"docs":{},"df":0,"0":{"docs":{},"df":0,"5":{"docs":{},"df":0,"2":{"docs":{"https://phlip9.com/notes/statistics probability/CDF confidence bands - DKW inequality/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}},"1":{"docs":{},"df":0,"0":{"docs":{},"df":0,".":{"docs":{},"df":0,"1":{"docs":{},"df":0,"6":{"docs":{},"df":0,"2":{"docs":{},"df":0,"7":{"docs":{},"df":0,"6":{"docs":{},"df":0,"2":{"docs":{},"df":0,"3":{"docs":{},"df":0,"6":{"docs":{},"df":0,"3":{"docs":{},"df":0,"0":{"docs":{},"df":0,"7":{"docs":{},"df":0,"1":{"docs":{},"df":0,"8":{"docs":{},"df":0,"7":{"docs":{},"df":0,"2":{"docs":{},"df":0,"9":{"docs":{},"df":0,"2":{"docs":{"https://phlip9.com/notes/statistics probability/CDF confidence bands - DKW inequality/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}},"1":{"docs":{},"df":0,"0":{"docs":{},"df":0,".":{"docs":{},"df":0,"1":{"docs":{},"df":0,"2":{"docs":{},"df":0,"2":{"docs":{},"df":0,"3":{"docs":{},"df":0,"8":{"docs":{},"df":0,"7":{"docs":{},"df":0,"3":{"docs":{},"df":0,"4":{"docs":{},"df":0,"1":{"docs":{},"df":0,"5":{"docs":{},"df":0,"3":{"docs":{},"df":0,"4":{"docs":{},"df":0,"0":{"docs":{},"df":0,"4":{"docs":{},"df":0,"0":{"docs":{},"df":0,"8":{"docs":{},"df":0,"2":{"docs":{"https://phlip9.com/notes/statistics probability/CDF confidence bands - DKW inequality/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}},"0":{"docs":{},"df":0,".":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"1":{"docs":{},"df":0,"0":{"docs":{},"df":0,".":{"docs":{},"df":0,"0":{"docs":{},"df":0,"6":{"docs":{},"df":0,"1":{"docs":{},"df":0,"6":{"docs":{},"df":0,"4":{"docs":{},"df":0,"7":{"docs":{},"df":0,"7":{"docs":{},"df":0,"9":{"docs":{},"df":0,"9":{"docs":{},"df":0,"8":{"docs":{},"df":0,"7":{"docs":{},"df":0,"7":{"docs":{},"df":0,"7":{"docs":{},"df":0,"8":{"docs":{},"df":0,"1":{"docs":{},"df":0,"8":{"docs":{},"df":0,"6":{"docs":{"https://phlip9.com/notes/statistics probability/CDF confidence bands - DKW inequality/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}},"1":{"docs":{},"df":0,"0":{"docs":{},"df":0,".":{"docs":{},"df":0,"0":{"docs":{},"df":0,"5":{"docs":{},"df":0,"1":{"docs":{},"df":0,"4":{"docs":{},"df":0,"6":{"docs":{},"df":0,"9":{"docs":{},"df":0,"9":{"docs":{},"df":0,"7":{"docs":{},"df":0,"8":{"docs":{},"df":0,"4":{"docs":{},"df":0,"6":{"docs":{},"df":0,"5":{"docs":{},"df":0,"8":{"docs":{},"df":0,"3":{"docs":{},"df":0,"9":{"docs":{},"df":0,"8":{"docs":{},"df":0,"5":{"docs":{"https://phlip9.com/notes/statistics probability/CDF confidence bands - DKW inequality/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}},"1":{"docs":{},"df":0,"0":{"docs":{},"df":0,".":{"docs":{},"df":0,"0":{"docs":{},"df":0,"3":{"docs":{},"df":0,"8":{"docs":{},"df":0,"7":{"docs":{},"df":0,"0":{"docs":{},"df":0,"2":{"docs":{},"df":0,"2":{"docs":{},"df":0,"7":{"docs":{},"df":0,"5":{"docs":{},"df":0,"6":{"docs":{},"df":0,"0":{"docs":{},"df":0,"2":{"docs":{},"df":0,"0":{"docs":{},"df":0,"4":{"docs":{},"df":0,"9":{"docs":{},"df":0,"4":{"docs":{},"df":0,"9":{"docs":{},"df":0,"5":{"docs":{"https://phlip9.com/notes/statistics probability/CDF confidence bands - DKW inequality/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}},"0":{"docs":{},"df":0,".":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"1":{"docs":{},"df":0,"0":{"docs":{},"df":0,".":{"docs":{},"df":0,"0":{"docs":{},"df":0,"1":{"docs":{},"df":0,"9":{"docs":{},"df":0,"4":{"docs":{},"df":0,"9":{"docs":{},"df":0,"4":{"docs":{},"df":0,"7":{"docs":{},"df":0,"4":{"docs":{},"df":0,"6":{"docs":{},"df":0,"0":{"docs":{},"df":0,"3":{"docs":{},"df":0,"5":{"docs":{},"df":0,"2":{"docs":{},"df":0,"0":{"docs":{},"df":0,"4":{"docs":{},"df":0,"0":{"docs":{},"df":0,"5":{"docs":{},"df":0,"2":{"docs":{"https://phlip9.com/notes/statistics probability/CDF confidence bands - DKW inequality/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}},"1":{"docs":{},"df":0,"0":{"docs":{},"df":0,".":{"docs":{},"df":0,"0":{"docs":{},"df":0,"1":{"docs":{},"df":0,"6":{"docs":{},"df":0,"2":{"docs":{},"df":0,"7":{"docs":{},"df":0,"6":{"docs":{},"df":0,"2":{"docs":{},"df":0,"3":{"docs":{},"df":0,"6":{"docs":{},"df":0,"3":{"docs":{},"df":0,"0":{"docs":{},"df":0,"7":{"docs":{},"df":0,"1":{"docs":{},"df":0,"8":{"docs":{},"df":0,"7":{"docs":{},"df":0,"2":{"docs":{},"df":0,"9":{"docs":{},"df":0,"2":{"docs":{"https://phlip9.com/notes/statistics probability/CDF confidence bands - DKW inequality/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}},"1":{"docs":{},"df":0,"0":{"docs":{},"df":0,".":{"docs":{},"df":0,"0":{"docs":{},"df":0,"1":{"docs":{},"df":0,"2":{"docs":{},"df":0,"2":{"docs":{},"df":0,"3":{"docs":{},"df":0,"8":{"docs":{},"df":0,"7":{"docs":{},"df":0,"3":{"docs":{},"df":0,"4":{"docs":{},"df":0,"1":{"docs":{},"df":0,"5":{"docs":{},"df":0,"3":{"docs":{},"df":0,"4":{"docs":{},"df":0,"0":{"docs":{},"df":0,"4":{"docs":{},"df":0,"0":{"docs":{},"df":0,"8":{"docs":{},"df":0,"2":{"docs":{"https://phlip9.com/notes/statistics probability/CDF confidence bands - DKW inequality/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}},"0":{"docs":{"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0}},"df":1,"0":{"docs":{"https://phlip9.com/notes/performance/bit hacks/":{"tf":2.449489742783178}},"df":1}}}}},"3":{"docs":{},"df":0,".":{"docs":{},"df":0,"5":{"docs":{},"df":0,"3":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1}}}},"7":{"docs":{},"df":0,"5":{"docs":{},"df":0,"5":{"docs":{"https://phlip9.com/notes/confidential computing/gramine/":{"tf":1.0}},"df":1}}},"k":{"docs":{"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/foreign bank account report (FBAR)/":{"tf":1.0}},"df":1},"x":{"docs":{"https://phlip9.com/notes/crypto/(talk) authenticated data structures for stateless validation/":{"tf":1.0}},"df":1}},"1":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0},"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.0}},"df":2,"0":{"docs":{"https://phlip9.com/notes/networking/CIDR/":{"tf":1.4142135623730951}},"df":1,".":{"docs":{},"df":0,"1":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/financial instituion/":{"tf":1.0},"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/money services business (MSB)/":{"tf":1.0}},"df":2}}},"3":{"docs":{},"df":0,"5":{"docs":{},"df":0,"0":{"docs":{"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/foreign bank account report (FBAR)/":{"tf":1.0}},"df":1}}}}}},"2":{"docs":{},"df":0,"4":{"docs":{"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.0}},"df":1}},"3":{"docs":{},"df":0,"2":{"docs":{"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.0}},"df":1}},"5":{"docs":{"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.0}},"df":1,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"g":{"docs":{},"df":0,"$":{"docs":{},"df":0,"1":{"docs":{},"df":0,"3":{"docs":{},"df":0,"h":{"docs":{},"df":0,"t":{"docs":{},"df":0,"t":{"docs":{},"df":0,"p":{"docs":{},"df":0,"s":{"docs":{},"df":0,":":{"docs":{},"df":0,"/":{"docs":{},"df":0,"/":{"docs":{},"df":0,"w":{"docs":{},"df":0,"w":{"docs":{},"df":0,"w":{"docs":{},"df":0,".":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"z":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,".":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"/":{"docs":{},"df":0,"q":{"docs":{},"df":0,"w":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"k":{"docs":{"https://phlip9.com/notes/misc/water distillation setup/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"6":{"docs":{"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0}},"df":1},"f":{"docs":{},"df":0,"t":{"docs":{},"df":0,"$":{"docs":{},"df":0,"1":{"docs":{},"df":0,"1":{"docs":{},"df":0,"h":{"docs":{},"df":0,"t":{"docs":{},"df":0,"t":{"docs":{},"df":0,"p":{"docs":{},"df":0,"s":{"docs":{},"df":0,":":{"docs":{},"df":0,"/":{"docs":{},"df":0,"/":{"docs":{},"df":0,"w":{"docs":{},"df":0,"w":{"docs":{},"df":0,"w":{"docs":{},"df":0,".":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"z":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,".":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"/":{"docs":{},"df":0,"d":{"docs":{},"df":0,"p":{"docs":{},"df":0,"/":{"docs":{},"df":0,"b":{"docs":{},"df":0,"0":{"docs":{},"df":0,"8":{"docs":{},"df":0,"p":{"docs":{},"df":0,"t":{"docs":{},"df":0,"y":{"docs":{},"df":0,"j":{"docs":{},"df":0,"3":{"docs":{},"df":0,"g":{"docs":{},"df":0,"x":{"docs":{"https://phlip9.com/notes/misc/water distillation setup/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"k":{"docs":{"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/foreign bank account report (FBAR)/":{"tf":1.0}},"df":1},"m":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.4142135623730951}},"df":1}},"m":{"docs":{"https://phlip9.com/notes/misc/water distillation setup/":{"tf":1.0}},"df":1}},"t":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,":":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,":":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"z":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.0}},"df":1}}}}}}}}}},"x":{"docs":{"https://phlip9.com/notes/crypto/(talk) authenticated data structures for stateless validation/":{"tf":1.0}},"df":1}},"1":{"docs":{"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.4142135623730951},"https://phlip9.com/notes/b l o c k c h a i n/fastpay/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/BOLT 11 - invoices/":{"tf":1.4142135623730951},"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.7320508075688772},"https://phlip9.com/notes/misc/setting up a headless raspbian boot image/":{"tf":1.4142135623730951},"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.0}},"df":8,".":{"docs":{},"df":0,"0":{"docs":{},"df":0,".":{"docs":{},"df":0,"1":{"docs":{},"df":0,"2":{"docs":{"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0}},"df":1},"7":{"docs":{"https://phlip9.com/notes/android/android cli setup/":{"tf":1.7320508075688772}},"df":1}}}}},"0":{"docs":{"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.0}},"df":1,".":{"docs":{},"df":0,"0":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1}},"0":{"docs":{"https://phlip9.com/notes/networking/CIDR/":{"tf":1.4142135623730951}},"df":1,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"1":{"docs":{"https://phlip9.com/notes/lang/operator fixity and precedence/":{"tf":2.0}},"df":1,"0":{"docs":{"https://phlip9.com/notes/networking/CIDR/":{"tf":1.0}},"df":1},"1":{"docs":{"https://phlip9.com/notes/networking/CIDR/":{"tf":2.23606797749979}},"df":1,"1":{"docs":{},"df":0,"1":{"docs":{},"df":0,"1":{"docs":{},"df":0,"0":{"docs":{},"df":0,"1":{"docs":{},"df":0,"0":{"docs":{"https://phlip9.com/notes/networking/ipv6 address space/":{"tf":1.0}},"df":1}}}}}}}},"2":{"docs":{},"df":0,"m":{"docs":{},"df":0,"i":{"docs":{},"df":0,"b":{"docs":{"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.0}},"df":1}}}},":":{"docs":{},"df":0,"1":{"docs":{},"df":0,"9":{"docs":{"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.0}},"df":1}},"4":{"docs":{},"df":0,"6":{"docs":{"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0}},"df":1}}},"t":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,":":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,":":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"z":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.0}},"df":1}}}}}}}}},"1":{"docs":{},"df":0,"2":{"docs":{},"df":0,":":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,":":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"z":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.0}},"df":1}}}}}}}}}}},"2":{"docs":{"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":2.0},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.0},"https://phlip9.com/notes/lang/flutter/flutter setup/":{"tf":1.4142135623730951},"https://phlip9.com/notes/misc/arm target triples/":{"tf":1.0}},"df":6,"0":{"docs":{"https://phlip9.com/notes/crypto/(talk) authenticated data structures for stateless validation/":{"tf":1.0}},"df":1,"b":{"docs":{"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.0}},"df":1}},"2":{"docs":{},"df":0,"0":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0}},"df":1},"5":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0}},"df":1}},"3":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":3.1622776601683795},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":2.6457513110645907}},"df":2,"\"":{"docs":{},"df":0,".":{"docs":{},"df":0,"p":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0}},"df":1}}}}}}}}}},"0":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0}},"df":1},"4":{"docs":{"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.0}},"df":1},"5":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0}},"df":1}}},"4":{"docs":{},"df":0,"0":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0}},"df":1,"l":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0}},"df":1}},"5":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0}},"df":1}},"5":{"docs":{"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0}},"df":1},"6":{"docs":{"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.4142135623730951}},"df":1,"0":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0}},"df":1}}},"7":{"docs":{"https://phlip9.com/notes/performance/bit hacks/":{"tf":3.1622776601683795}},"df":1,".":{"docs":{},"df":0,"0":{"docs":{},"df":0,".":{"docs":{},"df":0,"0":{"docs":{},"df":0,".":{"docs":{},"df":0,"0":{"docs":{},"df":0,"/":{"docs":{},"df":0,"8":{"docs":{"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.0}},"df":1}}},"1":{"docs":{"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.4142135623730951}},"df":1,"/":{"docs":{},"df":0,"8":{"docs":{"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.7320508075688772}},"df":1}}}}}}}},"0":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0}},"df":1},"5":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0}},"df":1},"9":{"docs":{"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.0}},"df":1}},"8":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel TDX/":{"tf":1.0},"https://phlip9.com/notes/networking/CIDR/":{"tf":1.0},"https://phlip9.com/notes/performance/bit hacks/":{"tf":2.23606797749979}},"df":7,"0":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0}},"df":1},"b":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/networking/ipv6 address space/":{"tf":1.0}},"df":1}},"t":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0}},"df":1}}}},"k":{"docs":{},"df":0,"i":{"docs":{},"df":0,"b":{"docs":{"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.0}},"df":1}}},"t":{"docs":{},"df":0,"2":{"docs":{},"df":0,"1":{"docs":{},"df":0,":":{"docs":{},"df":0,"5":{"docs":{},"df":0,"7":{"docs":{},"df":0,":":{"docs":{},"df":0,"1":{"docs":{},"df":0,"8":{"docs":{},"df":0,"z":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.4142135623730951}},"df":1}}}}}}}}}}},"3":{"docs":{"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.0},"https://phlip9.com/notes/ios/ios setup/":{"tf":1.0},"https://phlip9.com/notes/lang/flutter/flutter setup/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.0}},"df":4,",":{"docs":{},"df":0,"1":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0}},"df":1}}}},".":{"docs":{},"df":0,"1":{"docs":{"https://phlip9.com/notes/ios/ios setup/":{"tf":1.0},"https://phlip9.com/notes/lang/flutter/flutter setup/":{"tf":1.0}},"df":2}},"0":{"docs":{"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0}},"df":1},"2":{"docs":{},"df":0,"6":{"docs":{},"df":0,"8":{"docs":{},"df":0,"1":{"docs":{},"df":0,"6":{"docs":{"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.0}},"df":1}}}}},"3":{"docs":{},"df":0,"3":{"docs":{"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.0}},"df":1}},"4":{"docs":{},"df":0,"4":{"docs":{},"df":0,"3":{"docs":{},"df":0,"1":{"docs":{"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.0}},"df":1}}},"5":{"docs":{},"df":0,"0":{"docs":{},"df":0,"8":{"docs":{"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.0}},"df":1}}},"8":{"docs":{"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.0}},"df":1}},":":{"docs":{},"df":0,"2":{"docs":{},"df":0,"9":{"docs":{},"df":0,":":{"docs":{},"df":0,"5":{"docs":{},"df":0,"0":{"docs":{"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.4142135623730951}},"df":1},"2":{"docs":{"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.4142135623730951}},"df":1},"5":{"docs":{"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.4142135623730951}},"df":1}}}}},"3":{"docs":{},"df":0,"0":{"docs":{},"df":0,":":{"docs":{},"df":0,"0":{"docs":{},"df":0,"2":{"docs":{"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.4142135623730951}},"df":1},"5":{"docs":{"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.4142135623730951}},"df":1}},"1":{"docs":{},"df":0,"2":{"docs":{"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.4142135623730951}},"df":1}}}}}},"m":{"docs":{},"df":0,"m":{"docs":{"https://phlip9.com/notes/misc/water distillation setup/":{"tf":1.0}},"df":1}},"t":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,":":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,":":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"z":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.0}},"df":1}}}}}}}}}}},"4":{"docs":{"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.0},"https://phlip9.com/notes/ios/ios setup/":{"tf":1.0},"https://phlip9.com/notes/lang/flutter/flutter setup/":{"tf":1.0},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.7320508075688772},"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.4142135623730951}},"df":7,"5":{"docs":{},"df":0,"2":{"docs":{"https://phlip9.com/notes/devops/algo wireguard VPN server/":{"tf":1.7320508075688772}},"df":1}}},"5":{"docs":{"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/foreign bank account report (FBAR)/":{"tf":1.7320508075688772},"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":2.0},"https://phlip9.com/notes/fuzzing/fuzzcheck-rs/":{"tf":1.0},"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.0},"https://phlip9.com/notes/performance/simdjson talk/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/testing whether a coin is fair/":{"tf":1.0}},"df":7,".":{"docs":{},"df":0,"a":{"docs":{"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.0}},"df":1},"b":{"docs":{"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.0}},"df":1}},"0":{"docs":{"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.0}},"df":1,"0":{"docs":{"https://phlip9.com/notes/android/ADB over TCP inside WSL2/":{"tf":1.0},"https://phlip9.com/notes/networking/network interfaces/":{"tf":3.1622776601683795}},"df":2,"x":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0}},"df":1}},"8":{"docs":{"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.0}},"df":1}},"8":{"docs":{"https://phlip9.com/notes/WSL/WSL2 custom kernel/":{"tf":1.0}},"df":1},":":{"docs":{},"df":0,"5":{"docs":{},"df":0,"6":{"docs":{"https://phlip9.com/notes/misc/setting up a headless raspbian boot image/":{"tf":1.0}},"df":1},"7":{"docs":{"https://phlip9.com/notes/misc/setting up a headless raspbian boot image/":{"tf":1.0}},"df":1},"8":{"docs":{"https://phlip9.com/notes/misc/setting up a headless raspbian boot image/":{"tf":1.4142135623730951}},"df":1}}},"m":{"docs":{},"df":0,"i":{"docs":{},"df":0,"b":{"docs":{"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.0}},"df":1}}},"t":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,":":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,":":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"z":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.4142135623730951}},"df":1}}}}}}}}}}},"6":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/BOLT 8 - secure noise transport/":{"tf":1.4142135623730951},"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":2.0},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":2.449489742783178},"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.0},"https://phlip9.com/notes/ios/ios setup/":{"tf":1.0},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0},"https://phlip9.com/notes/lang/flutter/flutter setup/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.0},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.7320508075688772},"https://phlip9.com/notes/networking/ipv6 address space/":{"tf":1.0},"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.0},"https://phlip9.com/notes/performance/bit hacks/":{"tf":2.449489742783178},"https://phlip9.com/notes/performance/simdjson talk/":{"tf":1.7320508075688772},"https://phlip9.com/notes/postgres/snippets/":{"tf":1.4142135623730951}},"df":18,",":{"docs":{},"df":0,"7":{"docs":{},"df":0,"7":{"docs":{},"df":0,"7":{"docs":{},"df":0,",":{"docs":{},"df":0,"2":{"docs":{},"df":0,"1":{"docs":{},"df":0,"6":{"docs":{"https://phlip9.com/notes/networking/CIDR/":{"tf":1.0}},"df":1}}}}}}}},".":{"docs":{},"df":0,"0":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1,".":{"docs":{},"df":0,"6":{"docs":{"https://phlip9.com/notes/reproducible builds/nix/nix debug spurrious rebuilds/":{"tf":1.0}},"df":1}}}}},"7":{"docs":{"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.0},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0},"https://phlip9.com/notes/lang/lua/":{"tf":1.0}},"df":3,"2":{"docs":{"https://phlip9.com/notes/postgres/snippets/":{"tf":1.0}},"df":1,".":{"docs":{},"df":0,"1":{"docs":{},"df":0,"6":{"docs":{},"df":0,".":{"docs":{},"df":0,"0":{"docs":{},"df":0,".":{"docs":{},"df":0,"0":{"docs":{"https://phlip9.com/notes/networking/CIDR/":{"tf":1.0}},"df":1,"/":{"docs":{},"df":0,"1":{"docs":{},"df":0,"6":{"docs":{"https://phlip9.com/notes/networking/ipv6 address space/":{"tf":1.0}},"df":1}}}}}}}},"9":{"docs":{},"df":0,".":{"docs":{},"df":0,"1":{"docs":{},"df":0,"6":{"docs":{},"df":0,"0":{"docs":{},"df":0,".":{"docs":{},"df":0,"1":{"docs":{},"df":0,".":{"docs":{},"df":0,":":{"docs":{},"df":0,"2":{"docs":{},"df":0,"2":{"docs":{},"df":0,"0":{"docs":{},"df":0,"5":{"docs":{"https://phlip9.com/notes/android/ADB over TCP inside WSL2/":{"tf":1.0}},"df":1}}}}}},":":{"docs":{},"df":0,"2":{"docs":{},"df":0,"2":{"docs":{},"df":0,"0":{"docs":{},"df":0,"5":{"docs":{"https://phlip9.com/notes/android/ADB over TCP inside WSL2/":{"tf":1.0}},"df":1}}}}}},"2":{"docs":{},"df":0,"5":{"docs":{},"df":0,"2":{"docs":{"https://phlip9.com/notes/android/ADB over TCP inside WSL2/":{"tf":1.0}},"df":1}}}}}},"7":{"docs":{},"df":0,"5":{"docs":{},"df":0,".":{"docs":{},"df":0,"2":{"docs":{},"df":0,"5":{"docs":{},"df":0,"5":{"docs":{"https://phlip9.com/notes/android/ADB over TCP inside WSL2/":{"tf":1.0}},"df":1}}}}}}}}}},"2":{"docs":{},"df":0,"0":{"docs":{},"df":0,".":{"docs":{},"df":0,"1":{"docs":{},"df":0,"1":{"docs":{},"df":0,"2":{"docs":{},"df":0,".":{"docs":{},"df":0,"1":{"docs":{"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.0}},"df":1}}},"4":{"docs":{},"df":0,".":{"docs":{},"df":0,"2":{"docs":{},"df":0,"8":{"docs":{},"df":0,"/":{"docs":{},"df":0,"2":{"docs":{},"df":0,"0":{"docs":{"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.0}},"df":1}}}}}}}},"2":{"docs":{},"df":0,"7":{"docs":{},"df":0,".":{"docs":{},"df":0,"2":{"docs":{},"df":0,"5":{"docs":{},"df":0,"5":{"docs":{"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.0}},"df":1}}}}}}}}},"1":{"docs":{},"df":0,".":{"docs":{},"df":0,"3":{"docs":{},"df":0,"2":{"docs":{},"df":0,".":{"docs":{},"df":0,"0":{"docs":{},"df":0,"/":{"docs":{},"df":0,"2":{"docs":{},"df":0,"0":{"docs":{"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.0}},"df":1}}}},"1":{"docs":{"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.0}},"df":1}}}}}}},"3":{"docs":{},"df":0,"1":{"docs":{},"df":0,".":{"docs":{},"df":0,"2":{"docs":{},"df":0,"5":{"docs":{},"df":0,"5":{"docs":{},"df":0,".":{"docs":{},"df":0,"2":{"docs":{},"df":0,"5":{"docs":{},"df":0,"5":{"docs":{},"df":0,"1":{"docs":{},"df":0,"7":{"docs":{},"df":0,"2":{"docs":{},"df":0,".":{"docs":{},"df":0,"1":{"docs":{},"df":0,"6":{"docs":{},"df":0,".":{"docs":{},"df":0,"0":{"docs":{},"df":0,".":{"docs":{},"df":0,"0":{"docs":{},"df":0,"/":{"docs":{},"df":0,"1":{"docs":{},"df":0,"2":{"docs":{},"df":0,"2":{"docs":{},"df":0,"^":{"docs":{},"df":0,"2":{"docs":{},"df":0,"0":{"docs":{"https://phlip9.com/notes/networking/CIDR/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}},"1":{"docs":{"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.4142135623730951}},"df":2}},"5":{"docs":{},"df":0,"0":{"docs":{},"df":0,"f":{"docs":{},"df":0,"7":{"docs":{},"df":0,"e":{"docs":{},"df":0,"5":{"docs":{},"df":0,"9":{"docs":{},"df":0,"9":{"docs":{},"df":0,"7":{"docs":{},"df":0,"a":{"docs":{},"df":0,"8":{"docs":{},"df":0,"c":{"docs":{},"df":0,"b":{"docs":{},"df":0,"5":{"docs":{},"df":0,"b":{"docs":{},"df":0,"a":{"docs":{},"df":0,"2":{"docs":{},"df":0,"0":{"docs":{},"df":0,"7":{"docs":{},"df":0,"3":{"docs":{},"df":0,"f":{"docs":{},"df":0,"7":{"docs":{},"df":0,"a":{"docs":{},"df":0,"4":{"docs":{},"df":0,"3":{"docs":{},"df":0,"1":{"docs":{},"df":0,"2":{"docs":{},"df":0,"e":{"docs":{},"df":0,"4":{"docs":{},"df":0,"3":{"docs":{},"df":0,"f":{"docs":{},"df":0,"5":{"docs":{},"df":0,"7":{"docs":{},"df":0,"7":{"docs":{},"df":0,"1":{"docs":{},"df":0,"a":{"docs":{},"df":0,"4":{"docs":{},"df":0,"0":{"docs":{},"df":0,"9":{"docs":{},"df":0,"e":{"docs":{},"df":0,"0":{"docs":{},"df":0,"6":{"docs":{},"df":0,"1":{"docs":{},"df":0,"0":{"docs":{},"df":0,"b":{"docs":{},"df":0,"2":{"docs":{},"df":0,"0":{"docs":{},"df":0,"4":{"docs":{},"df":0,"2":{"docs":{},"df":0,"8":{"docs":{},"df":0,"d":{"docs":{},"df":0,"f":{"docs":{},"df":0,"f":{"docs":{},"df":0,"e":{"docs":{},"df":0,"b":{"docs":{},"df":0,"e":{"docs":{},"df":0,"5":{"docs":{},"df":0,"1":{"docs":{},"df":0,"e":{"docs":{},"df":0,"5":{"docs":{},"df":0,"3":{"docs":{},"df":0,"a":{"docs":{},"df":0,"6":{"docs":{},"df":0,"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{},"df":0,"f":{"docs":{},"df":0,"b":{"docs":{},"df":0,"5":{"docs":{},"df":0,"6":{"docs":{},"df":0,"9":{"docs":{},"df":0,"1":{"docs":{},"df":0,"0":{"docs":{},"df":0,"4":{"docs":{},"df":0,"5":{"docs":{},"df":0,"b":{"docs":{},"df":0,"0":{"docs":{},"df":0,"8":{"docs":{},"df":0,"1":{"docs":{},"df":0,"9":{"docs":{},"df":0,"b":{"docs":{},"df":0,"2":{"docs":{},"df":0,"9":{"docs":{},"df":0,"7":{"docs":{},"df":0,"5":{"docs":{},"df":0,"4":{"docs":{},"df":0,"d":{"docs":{},"df":0,"d":{"docs":{},"df":0,"6":{"docs":{},"df":0,"f":{"docs":{},"df":0,"5":{"docs":{},"df":0,"c":{"docs":{},"df":0,"f":{"docs":{},"df":0,"d":{"docs":{},"df":0,"2":{"docs":{},"df":0,"0":{"docs":{},"df":0,"8":{"docs":{},"df":0,"3":{"docs":{},"df":0,"7":{"docs":{},"df":0,"b":{"docs":{},"df":0,"0":{"docs":{},"df":0,"e":{"docs":{},"df":0,"6":{"docs":{},"df":0,"f":{"docs":{},"df":0,"7":{"docs":{},"df":0,"6":{"docs":{},"df":0,"e":{"docs":{},"df":0,"2":{"docs":{},"df":0,"3":{"docs":{},"df":0,"0":{"docs":{},"df":0,"7":{"docs":{},"df":0,"1":{"docs":{},"df":0,"4":{"docs":{},"df":0,"6":{"docs":{},"df":0,"d":{"docs":{},"df":0,"d":{"docs":{},"df":0,"3":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"b":{"docs":{},"df":0,"5":{"docs":{},"df":0,"2":{"docs":{},"df":0,"0":{"docs":{},"df":0,"3":{"docs":{},"df":0,"b":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"m":{"docs":{},"df":0,"i":{"docs":{},"df":0,"b":{"docs":{"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.4142135623730951}},"df":1}}}},"6":{"docs":{},"df":0,"6":{"docs":{},"df":0,"5":{"docs":{"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.0}},"df":1}}},"7":{"docs":{},"df":0,"7":{"docs":{},"df":0,"4":{"docs":{},"df":0,"3":{"docs":{},"df":0,"2":{"docs":{"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.0}},"df":1}}}}},"8":{"docs":{},"df":0,".":{"docs":{},"df":0,"1":{"docs":{},"df":0,"2":{"docs":{},"df":0,"8":{"docs":{},"df":0,".":{"docs":{},"df":0,"1":{"docs":{},"df":0,".":{"docs":{},"df":0,"1":{"docs":{},"df":0,"9":{"docs":{},"df":0,"0":{"docs":{"https://phlip9.com/notes/devops/algo wireguard VPN server/":{"tf":1.0}},"df":1}}}}}}}}}}}},"8":{"docs":{"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.0},"https://phlip9.com/notes/fuzzing/fuzzing/":{"tf":1.0}},"df":2,".":{"docs":{},"df":0,"0":{"docs":{},"df":0,"4":{"docs":{"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.7320508075688772}},"df":1,".":{"docs":{},"df":0,"6":{"docs":{"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0}},"df":1}}}}},"0":{"docs":{},"df":0,".":{"docs":{},"df":0,"0":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.4142135623730951}},"df":1}}},"6":{"docs":{"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0}},"df":1}},"9":{"docs":{"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.0}},"df":1,"2":{"docs":{},"df":0,".":{"docs":{},"df":0,"1":{"docs":{},"df":0,"6":{"docs":{},"df":0,"8":{"docs":{},"df":0,".":{"docs":{},"df":0,"0":{"docs":{},"df":0,".":{"docs":{},"df":0,"0":{"docs":{"https://phlip9.com/notes/networking/CIDR/":{"tf":1.0}},"df":1,"/":{"docs":{},"df":0,"2":{"docs":{},"df":0,"4":{"docs":{"https://phlip9.com/notes/networking/ipv6 address space/":{"tf":1.0}},"df":1}}}}}},"2":{"docs":{},"df":0,".":{"docs":{},"df":0,"0":{"docs":{"https://phlip9.com/notes/networking/CIDR/":{"tf":1.0}},"df":1}},"5":{"docs":{},"df":0,"5":{"docs":{},"df":0,".":{"docs":{},"df":0,"2":{"docs":{},"df":0,"5":{"docs":{},"df":0,"5":{"docs":{},"df":0,"1":{"docs":{},"df":0,"9":{"docs":{},"df":0,"2":{"docs":{},"df":0,".":{"docs":{},"df":0,"1":{"docs":{},"df":0,"6":{"docs":{},"df":0,"8":{"docs":{},"df":0,".":{"docs":{},"df":0,"0":{"docs":{},"df":0,".":{"docs":{},"df":0,"0":{"docs":{},"df":0,"/":{"docs":{},"df":0,"1":{"docs":{},"df":0,"6":{"docs":{},"df":0,"2":{"docs":{},"df":0,"^":{"docs":{},"df":0,"1":{"docs":{},"df":0,"6":{"docs":{"https://phlip9.com/notes/networking/CIDR/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}},"3":{"docs":{},"df":0,".":{"docs":{},"df":0,"5":{"docs":{"https://phlip9.com/notes/networking/CIDR/":{"tf":1.4142135623730951}},"df":1,"\"":{"docs":{},"df":0,".":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{"https://phlip9.com/notes/networking/CIDR/":{"tf":1.0}},"df":1}}}}}},"/":{"docs":{},"df":0,"2":{"docs":{},"df":0,"3":{"docs":{"https://phlip9.com/notes/networking/CIDR/":{"tf":1.4142135623730951}},"df":1}}}}}}}}}}}},"4":{"docs":{"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0}},"df":1},"8":{"docs":{},"df":0,"0":{"docs":{},"df":0,"1":{"docs":{},"df":0,"7":{"docs":{},"df":0,"b":{"docs":{"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":1.0}},"df":1,"0":{"docs":{},"df":0,"2":{"docs":{},"df":0,"f":{"docs":{},"df":0,"f":{"docs":{},"df":0,"a":{"docs":{},"df":0,"2":{"docs":{},"df":0,"d":{"docs":{},"df":0,"4":{"docs":{},"df":0,"5":{"docs":{},"df":0,"f":{"docs":{},"df":0,"3":{"docs":{},"df":0,"0":{"docs":{},"df":0,"1":{"docs":{},"df":0,"f":{"docs":{},"df":0,"6":{"docs":{},"df":0,"b":{"docs":{},"df":0,"9":{"docs":{},"df":0,"b":{"docs":{},"df":0,"a":{"docs":{},"df":0,"6":{"docs":{},"df":0,"4":{"docs":{},"df":0,"2":{"docs":{},"df":0,"4":{"docs":{},"df":0,"c":{"docs":{},"df":0,"4":{"docs":{},"df":0,"e":{"docs":{},"df":0,"8":{"docs":{},"df":0,"4":{"docs":{},"df":0,"9":{"docs":{},"df":0,"2":{"docs":{},"df":0,"5":{"docs":{},"df":0,"1":{"docs":{},"df":0,"b":{"docs":{"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":1.4142135623730951}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"9":{"docs":{},"df":0,"7":{"docs":{"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.4142135623730951}},"df":2},"9":{"docs":{"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.4142135623730951}},"df":2}}},":":{"docs":{},"df":0,"1":{"docs":{"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.0}},"df":1}},"_":{"docs":{},"df":0,"u":{"docs":{},"df":0,"8":{"docs":{"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.0}},"df":1}}},"e":{"docs":{"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/G-test - multinomial goodness-of-fit/":{"tf":1.0}},"df":2,"c":{"docs":{},"df":0,"c":{"docs":{},"df":0,"6":{"docs":{},"df":0,"2":{"docs":{},"df":0,"9":{"docs":{},"df":0,"9":{"docs":{},"df":0,"d":{"docs":{},"df":0,"b":{"docs":{},"df":0,"9":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"8":{"docs":{},"df":0,"2":{"docs":{},"df":0,"3":{"docs":{},"df":0,"\\":{"docs":{},"df":0,"p":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"c":{"docs":{"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":2.8284271247461903}},"df":1}}}}}}}}}}}}}}}}}}}},"k":{"docs":{"https://phlip9.com/notes/devops/nomad/":{"tf":1.0}},"df":1},"m":{"docs":{"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.0},"https://phlip9.com/notes/misc/kintsugi/":{"tf":1.0}},"df":2,"i":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.0}},"df":1}}},"p":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{},"df":0,"s":{"docs":{},"df":0,"w":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/devops/secrets/1password - secrets automation/":{"tf":1.7320508075688772}},"df":1}}}}}}}},"s":{"docs":{"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.4142135623730951}},"df":1,"e":{"docs":{},"df":0,"c":{"docs":{"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.0}},"df":1}},"t":{"docs":{"https://phlip9.com/notes/btc-ln/breez lightning service providers/":{"tf":1.4142135623730951}},"df":1}},"x":{"docs":{},"df":0,"x":{"docs":{},"df":0,"x":{"docs":{},"df":0,"x":{"docs":{},"df":0,"x":{"docs":{},"df":0,"x":{"docs":{},"df":0,"x":{"docs":{"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.4142135623730951}},"df":1}}}}}}},"}":{"docs":{},"df":0,"(":{"docs":{},"df":0,"p":{"docs":{},"df":0,"_":{"docs":{},"df":0,"f":{"docs":{"https://phlip9.com/notes/statistics probability/testing whether a coin is fair/":{"tf":1.4142135623730951}},"df":1}}}}}},"2":{"docs":{"https://phlip9.com/notes/AI ML/Expectimax Search/":{"tf":1.7320508075688772},"https://phlip9.com/notes/AI ML/Markov Decision Process (MDP)/":{"tf":1.0},"https://phlip9.com/notes/WSL/WSL2 custom kernel/":{"tf":1.0},"https://phlip9.com/notes/android/OTA updates for rooted android phone/":{"tf":1.0},"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0},"https://phlip9.com/notes/android/root phone with magisk/":{"tf":1.0},"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/foreign bank account report (FBAR)/":{"tf":1.0},"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/money services business (MSB)/":{"tf":1.0},"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":2.0},"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":2.8284271247461903},"https://phlip9.com/notes/btc-ln/BOLT 4 - onion routing protocol/":{"tf":1.4142135623730951},"https://phlip9.com/notes/btc-ln/BOLT 7 - p2p node and channel discovery/":{"tf":1.7320508075688772},"https://phlip9.com/notes/btc-ln/BOLT 8 - secure noise transport/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/atomic multipath payments (AMP)/":{"tf":1.7320508075688772},"https://phlip9.com/notes/btc-ln/breez lightning service providers/":{"tf":1.7320508075688772},"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.0},"https://phlip9.com/notes/combinatorics/k-combinations of a multiset/":{"tf":4.898979485566356},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":2.6457513110645907},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.7320508075688772},"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/marblerun/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":1.0},"https://phlip9.com/notes/crypto/(talk) authenticated data structures for stateless validation/":{"tf":1.0},"https://phlip9.com/notes/crypto/biscuit authz/":{"tf":1.4142135623730951},"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":1.4142135623730951},"https://phlip9.com/notes/design/form design/":{"tf":1.0},"https://phlip9.com/notes/devops/deployment strategies/":{"tf":1.0},"https://phlip9.com/notes/devops/docker compose/":{"tf":1.0},"https://phlip9.com/notes/distributed systems/papers/(2020) Semi-Fast Byzantine-tolerant Shared Register without Reliable Broadcast/":{"tf":2.8284271247461903},"https://phlip9.com/notes/distributed systems/papers/(2021) Leaderless Consensus/":{"tf":1.0},"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":1.0},"https://phlip9.com/notes/ios/ios setup/":{"tf":1.0},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":3.605551275463989},"https://phlip9.com/notes/lang/flutter/flutter setup/":{"tf":1.0},"https://phlip9.com/notes/lang/lua/":{"tf":3.1622776601683795},"https://phlip9.com/notes/lang/operator fixity and precedence/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/rust/rr with rust/":{"tf":1.0},"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":2.23606797749979},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":2.449489742783178},"https://phlip9.com/notes/misc/setting up a headless raspbian boot image/":{"tf":1.4142135623730951},"https://phlip9.com/notes/networking/CIDR/":{"tf":1.0},"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.7320508075688772},"https://phlip9.com/notes/performance/bit hacks/":{"tf":2.23606797749979},"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.0},"https://phlip9.com/notes/performance/simdjson talk/":{"tf":1.4142135623730951},"https://phlip9.com/notes/reproducible builds/nix/nix debug broken package build/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.7320508075688772},"https://phlip9.com/notes/statistics probability/CDF confidence bands - DKW inequality/":{"tf":1.7320508075688772},"https://phlip9.com/notes/statistics probability/G-test - multinomial goodness-of-fit/":{"tf":2.23606797749979},"https://phlip9.com/notes/statistics probability/testing whether a coin is fair/":{"tf":2.6457513110645907}},"df":56,"&":{"docs":{},"df":0,"g":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/lang/lua/":{"tf":1.0}},"df":1}}},"*":{"docs":{},"df":0,"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"z":{"docs":{},"df":0,"e":{"docs":{},"df":0,"o":{"docs":{},"df":0,"f":{"docs":{},"df":0,"(":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0}},"df":1}}}}}}}}}}},",":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,",":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{"https://phlip9.com/notes/devops/nomad/":{"tf":1.0}},"df":1}}}}}}}},".":{"docs":{},"df":0,"0":{"docs":{"https://phlip9.com/notes/crypto/dex - open-source OIDC & OAuth 2.0 provider/":{"tf":1.7320508075688772},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.4142135623730951},"https://phlip9.com/notes/misc/optimization solvers/":{"tf":1.0},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.7320508075688772},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.7320508075688772},"https://phlip9.com/notes/statistics probability/G-test - multinomial goodness-of-fit/":{"tf":1.0}},"df":8},"1":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0}},"df":1,"2":{"docs":{},"df":0,"1":{"docs":{"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.4142135623730951}},"df":1}},"5":{"docs":{},"df":0,".":{"docs":{},"df":0,"1":{"docs":{},"df":0,"0":{"docs":{},"df":0,"1":{"docs":{},"df":0,".":{"docs":{},"df":0,"1":{"docs":{"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/gramine/":{"tf":1.4142135623730951}},"df":2}}}}}}},"k":{"docs":{},"df":0,"i":{"docs":{},"df":0,"b":{"docs":{"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.0}},"df":1}}}},"2":{"docs":{},"df":0,"4":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0}},"df":1},"k":{"docs":{},"df":0,"i":{"docs":{},"df":0,"b":{"docs":{"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.0}},"df":1}}}},"3":{"docs":{},"df":0,"m":{"docs":{"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.0}},"df":1,"i":{"docs":{},"df":0,"b":{"docs":{"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.0}},"df":1}}}},"5":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.7320508075688772},"https://phlip9.com/notes/performance/simdjson talk/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/winsorize/":{"tf":1.4142135623730951}},"df":3},"7":{"docs":{},"df":0,"7":{"docs":{},"df":0,"2":{"docs":{"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0}},"df":1}}}},"0":{"docs":{"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/breez lightning service providers/":{"tf":1.4142135623730951},"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0},"https://phlip9.com/notes/lang/lua/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.0},"https://phlip9.com/notes/performance/simdjson talk/":{"tf":1.0}},"df":7,",":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0}},"df":1}}}},".":{"docs":{},"df":0,"0":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.7320508075688772}},"df":1,"4":{"docs":{"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/gramine/":{"tf":1.4142135623730951}},"df":3}}},"0":{"docs":{"https://phlip9.com/notes/crypto/acme protocol/":{"tf":1.0},"https://phlip9.com/notes/devops/consul/":{"tf":1.0},"https://phlip9.com/notes/keyboards/moergo glove80/":{"tf":1.0},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.0}},"df":6,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,".":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"1":{"docs":{},"df":0,"0":{"docs":{},"df":0,".":{"docs":{},"df":0,"0":{"docs":{},"df":0,"1":{"docs":{},"df":0,"3":{"docs":{},"df":0,"7":{"docs":{},"df":0,"8":{"docs":{},"df":0,"4":{"docs":{},"df":0,"8":{"docs":{},"df":0,"6":{"docs":{},"df":0,"7":{"docs":{},"df":0,"1":{"docs":{},"df":0,"1":{"docs":{},"df":0,"9":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"2":{"docs":{},"df":0,"3":{"docs":{},"df":0,"4":{"docs":{},"df":0,"7":{"docs":{"https://phlip9.com/notes/statistics probability/CDF confidence bands - DKW inequality/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}},"1":{"docs":{},"df":0,"0":{"docs":{},"df":0,".":{"docs":{},"df":0,"0":{"docs":{},"df":0,"1":{"docs":{},"df":0,"1":{"docs":{},"df":0,"5":{"docs":{},"df":0,"0":{"docs":{},"df":0,"9":{"docs":{},"df":0,"0":{"docs":{},"df":0,"3":{"docs":{},"df":0,"7":{"docs":{},"df":0,"0":{"docs":{},"df":0,"6":{"docs":{},"df":0,"5":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"6":{"docs":{},"df":0,"8":{"docs":{},"df":0,"2":{"docs":{},"df":0,"4":{"docs":{"https://phlip9.com/notes/statistics probability/CDF confidence bands - DKW inequality/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}},"1":{"docs":{},"df":0,"0":{"docs":{},"df":0,".":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"8":{"docs":{},"df":0,"6":{"docs":{},"df":0,"5":{"docs":{},"df":0,"4":{"docs":{},"df":0,"0":{"docs":{},"df":0,"9":{"docs":{},"df":0,"1":{"docs":{},"df":0,"9":{"docs":{},"df":0,"1":{"docs":{},"df":0,"3":{"docs":{},"df":0,"0":{"docs":{},"df":0,"1":{"docs":{},"df":0,"1":{"docs":{},"df":0,"4":{"docs":{},"df":0,"2":{"docs":{},"df":0,"6":{"docs":{"https://phlip9.com/notes/statistics probability/CDF confidence bands - DKW inequality/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}},":":{"docs":{},"df":0,":":{"docs":{},"df":0,"/":{"docs":{},"df":0,"3":{"docs":{},"df":0,"g":{"docs":{},"df":0,"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"b":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/networking/ipv6 address space/":{"tf":1.0}},"df":1}}}}}}}}}}},"1":{"docs":{},"df":0,":":{"docs":{},"df":0,"1":{"docs":{},"df":0,":":{"docs":{},"df":0,":":{"docs":{},"df":0,"1":{"docs":{},"df":0,"/":{"docs":{},"df":0,"1":{"docs":{},"df":0,"2":{"docs":{},"df":0,"8":{"docs":{},"df":0,"p":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/networking/ipv6 address space/":{"tf":1.0}},"df":1}}}}}}}}},"2":{"docs":{},"df":0,"/":{"docs":{},"df":0,"1":{"docs":{},"df":0,"2":{"docs":{},"df":0,"8":{"docs":{},"df":0,"t":{"docs":{},"df":0,"u":{"docs":{},"df":0,"r":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/networking/ipv6 address space/":{"tf":1.0}},"df":1}}}}}}}}}}}},"2":{"docs":{},"df":0,"0":{"docs":{},"df":0,":":{"docs":{},"df":0,":":{"docs":{},"df":0,"/":{"docs":{},"df":0,"2":{"docs":{},"df":0,"8":{"docs":{},"df":0,"o":{"docs":{},"df":0,"v":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"y":{"docs":{"https://phlip9.com/notes/networking/ipv6 address space/":{"tf":1.0}},"df":1}}}}}}}}}}}}},":":{"docs":{},"df":0,":":{"docs":{},"df":0,"/":{"docs":{},"df":0,"4":{"docs":{},"df":0,"8":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"v":{"docs":{"https://phlip9.com/notes/networking/ipv6 address space/":{"tf":1.0}},"df":1}}}}}}}}}}}},"3":{"docs":{},"df":0,":":{"docs":{},"df":0,":":{"docs":{},"df":0,"/":{"docs":{},"df":0,"3":{"docs":{},"df":0,"2":{"docs":{},"df":0,"a":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/networking/ipv6 address space/":{"tf":1.0}},"df":1}}}}}}}}}}}}},"5":{"docs":{},"df":0,"4":{"docs":{},"df":0,"7":{"docs":{},"df":0,":":{"docs":{},"df":0,"6":{"docs":{},"df":0,"1":{"docs":{},"df":0,"4":{"docs":{},"df":0,"3":{"docs":{},"df":0,":":{"docs":{},"df":0,"b":{"docs":{},"df":0,"9":{"docs":{},"df":0,":":{"docs":{},"df":0,"9":{"docs":{},"df":0,"0":{"docs":{},"df":0,"5":{"docs":{},"df":0,":":{"docs":{},"df":0,"6":{"docs":{},"df":0,"1":{"docs":{},"df":0,"b":{"docs":{},"df":0,"9":{"docs":{},"df":0,":":{"docs":{},"df":0,"2":{"docs":{},"df":0,"a":{"docs":{},"df":0,"3":{"docs":{},"df":0,":":{"docs":{},"df":0,"6":{"docs":{},"df":0,"a":{"docs":{},"df":0,"f":{"docs":{},"df":0,"f":{"docs":{},"df":0,"/":{"docs":{},"df":0,"1":{"docs":{},"df":0,"2":{"docs":{},"df":0,"8":{"docs":{"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},":":{"docs":{},"df":0,"/":{"docs":{},"df":0,"3":{"docs":{},"df":0,"2":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"d":{"docs":{},"df":0,"o":{"docs":{"https://phlip9.com/notes/networking/ipv6 address space/":{"tf":1.0}},"df":1}}}}}}}}}},"d":{"docs":{},"df":0,"b":{"docs":{},"df":0,"8":{"docs":{},"df":0,":":{"docs":{},"df":0,":":{"docs":{},"df":0,"/":{"docs":{},"df":0,"3":{"docs":{},"df":0,"2":{"docs":{},"df":0,"d":{"docs":{},"df":0,"o":{"docs":{},"df":0,"c":{"docs":{},"df":0,"u":{"docs":{},"df":0,"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"/":{"docs":{},"df":0,"e":{"docs":{},"df":0,"x":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{},"df":0,"p":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/networking/ipv6 address space/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"2":{"docs":{"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.4142135623730951}},"df":2,"0":{"docs":{},"df":0,"4":{"docs":{},"df":0,"1":{"docs":{},"df":0,"6":{"docs":{"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.4142135623730951}},"df":2}}}},":":{"docs":{},"df":0,":":{"docs":{},"df":0,"/":{"docs":{},"df":0,"1":{"docs":{},"df":0,"6":{"docs":{},"df":0,"6":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"4":{"docs":{"https://phlip9.com/notes/networking/ipv6 address space/":{"tf":1.0}},"df":1}}}}}}}}}},"5":{"docs":{"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.0}},"df":1},"7":{"docs":{"https://phlip9.com/notes/AI ML/Expectimax Search/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":2.0}},"df":3},"9":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 4 - onion routing protocol/":{"tf":1.0}},"df":1},"m":{"docs":{},"df":0,"m":{"docs":{"https://phlip9.com/notes/misc/water distillation setup/":{"tf":1.0}},"df":1,"$":{"docs":{},"df":0,"1":{"docs":{},"df":0,"8":{"docs":{},"df":0,"h":{"docs":{},"df":0,"t":{"docs":{},"df":0,"t":{"docs":{},"df":0,"p":{"docs":{},"df":0,"s":{"docs":{},"df":0,":":{"docs":{},"df":0,"/":{"docs":{},"df":0,"/":{"docs":{},"df":0,"w":{"docs":{},"df":0,"w":{"docs":{},"df":0,"w":{"docs":{},"df":0,".":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"z":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,".":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"/":{"docs":{},"df":0,"q":{"docs":{},"df":0,"w":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"k":{"docs":{"https://phlip9.com/notes/misc/water distillation setup/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"1":{"docs":{"https://phlip9.com/notes/crypto/acme protocol/":{"tf":1.0}},"df":1,"0":{"docs":{"https://phlip9.com/notes/lang/rust/rr with rust/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":2.0}},"df":3,"0":{"docs":{},"df":0,"7":{"docs":{},"df":0,"2":{"docs":{},"df":0,"7":{"docs":{"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.4142135623730951}},"df":2}}}}},"1":{"docs":{"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.4142135623730951}},"df":2,"0":{"docs":{},"df":0,"9":{"docs":{},"df":0,"2":{"docs":{},"df":0,"7":{"docs":{"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.4142135623730951}},"df":2}}}}},"2":{"docs":{"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":2.23606797749979},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":3.1622776601683795}},"df":2},"5":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0}},"df":1},"6":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/btc utreexo - utxo accumulator/":{"tf":1.0},"https://phlip9.com/notes/fuzzing/fuzzing/":{"tf":1.0}},"df":2},"7":{"docs":{"https://phlip9.com/notes/devops/nomad/":{"tf":1.0},"https://phlip9.com/notes/fuzzing/fuzzing/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/multinomial distribution/":{"tf":1.0}},"df":3},"8":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":1.0},"https://phlip9.com/notes/fuzzing/fuzzing/":{"tf":1.0},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0}},"df":6,"b":{"docs":{},"df":0,"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"g":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0}},"df":1}}}},"d":{"docs":{},"df":0,"o":{"docs":{},"df":0,"c":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0}},"df":1}}},"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"s":{"docs":{},"df":0,"u":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":2.0}},"df":1}}}}},"9":{"docs":{"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/foreign bank account report (FBAR)/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/lightning network notes/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel SGX/secure time/":{"tf":1.0},"https://phlip9.com/notes/fuzzing/fuzzing/":{"tf":1.0}},"df":6,"d":{"docs":{},"df":0,"o":{"docs":{},"df":0,"c":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0}},"df":1}}}}},"2":{"docs":{},"df":0,"0":{"docs":{"https://phlip9.com/notes/android/root phone with magisk/":{"tf":1.0},"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/foreign bank account report (FBAR)/":{"tf":1.0},"https://phlip9.com/notes/b l o c k c h a i n/fastpay/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.0},"https://phlip9.com/notes/distributed systems/papers/(2020) Semi-Fast Byzantine-tolerant Shared Register without Reliable Broadcast/":{"tf":1.4142135623730951},"https://phlip9.com/notes/performance/simdjson talk/":{"tf":1.0}},"df":6,"1":{"docs":{},"df":0,"1":{"docs":{},"df":0,"2":{"docs":{},"df":0,"6":{"docs":{"https://phlip9.com/notes/devops/algo wireguard VPN server/":{"tf":1.0}},"df":1}}}}},"1":{"docs":{"https://phlip9.com/notes/WSL/WSL2 custom kernel/":{"tf":1.0},"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":2.0},"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/marblerun/":{"tf":1.0},"https://phlip9.com/notes/distributed systems/papers/(2021) Leaderless Consensus/":{"tf":1.4142135623730951},"https://phlip9.com/notes/statistics probability/multinomial distribution/":{"tf":1.0}},"df":7,"/":{"docs":{},"df":0,"0":{"docs":{},"df":0,"9":{"docs":{},"df":0,"/":{"docs":{},"df":0,"2":{"docs":{},"df":0,"4":{"docs":{"https://phlip9.com/notes/confidential computing/intel TDX/":{"tf":1.0}},"df":1}}}}},"1":{"docs":{},"df":0,"2":{"docs":{},"df":0,"/":{"docs":{},"df":0,"1":{"docs":{},"df":0,"2":{"docs":{"https://phlip9.com/notes/btc-ln/submarine swaps/":{"tf":1.0}},"df":1}}}}}},"d":{"docs":{},"df":0,"o":{"docs":{},"df":0,"c":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0}},"df":1}}}},"2":{"docs":{"https://phlip9.com/notes/WSL/WSL2 custom kernel/":{"tf":1.0},"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/foreign bank account report (FBAR)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.4142135623730951},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0},"https://phlip9.com/notes/misc/setting up a headless raspbian boot image/":{"tf":1.0}},"df":5,"/":{"docs":{},"df":0,"0":{"docs":{},"df":0,"1":{"docs":{},"df":0,"/":{"docs":{},"df":0,"1":{"docs":{},"df":0,"5":{"docs":{"https://phlip9.com/notes/android/root phone with magisk/":{"tf":1.0}},"df":1}}}},"2":{"docs":{},"df":0,"/":{"docs":{},"df":0,"1":{"docs":{},"df":0,"8":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0}},"df":1}}}},"3":{"docs":{"https://phlip9.com/notes/devops/kubernetes/":{"tf":1.0}},"df":1,"/":{"docs":{},"df":0,"1":{"docs":{},"df":0,"8":{"docs":{"https://phlip9.com/notes/misc/water distillation setup/":{"tf":1.0}},"df":1}}}},"7":{"docs":{"https://phlip9.com/notes/devops/kubernetes/":{"tf":1.0}},"df":1},"8":{"docs":{"https://phlip9.com/notes/devops/secrets/1password - secrets automation/":{"tf":1.0}},"df":1}}}},"3":{"docs":{"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":3.4641016151377544},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.0}},"df":2}},"4":{"docs":{"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.0}},"df":2,"8":{"docs":{"https://phlip9.com/notes/devops/azure CLI/":{"tf":1.0}},"df":1}},"7":{"docs":{},"df":0,"0":{"docs":{"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.4142135623730951}},"df":2}},":":{"docs":{},"df":0,"0":{"docs":{},"df":0,"4":{"docs":{},"df":0,":":{"docs":{},"df":0,"0":{"docs":{},"df":0,"4":{"docs":{"https://phlip9.com/notes/WSL/WSL2 custom kernel/":{"tf":1.0}},"df":1}}}}},"1":{"docs":{},"df":0,"0":{"docs":{"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.7320508075688772}},"df":1}}}},"1":{"docs":{"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.0}},"df":1,"0":{"docs":{},"df":0,"4":{"docs":{"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":1.0}},"df":1}},"1":{"docs":{},"df":0,"9":{"docs":{"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.4142135623730951}},"df":2}},":":{"docs":{},"df":0,"4":{"docs":{},"df":0,"8":{"docs":{},"df":0,":":{"docs":{},"df":0,"1":{"docs":{},"df":0,"1":{"docs":{"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0}},"df":1}}}}}}},"2":{"docs":{"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.0},"https://phlip9.com/notes/devops/nomad/":{"tf":1.0}},"df":2,".":{"docs":{},"df":0,"0":{"docs":{},"df":0,"4":{"docs":{"https://phlip9.com/notes/lang/flutter/flutter setup/":{"tf":1.4142135623730951}},"df":1}}},"4":{"docs":{},"df":0,"4":{"docs":{},"df":0,"2":{"docs":{},"df":0,"0":{"docs":{},"df":0,"9":{"docs":{},"df":0,"3":{"docs":{},"df":0,"5":{"docs":{},"df":0,"9":{"docs":{},"df":0,"5":{"docs":{},"df":0,"a":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0}},"df":1}}}}}}}}}},"8":{"docs":{},"df":0,"8":{"docs":{},"df":0,"g":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0}},"df":1}}}},"3":{"docs":{"https://phlip9.com/notes/networking/CIDR/":{"tf":1.0}},"df":1,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"_":{"docs":{},"df":0,"o":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"7":{"docs":{},"df":0,"q":{"docs":{},"df":0,".":{"docs":{},"df":0,"i":{"docs":{},"df":0,"m":{"docs":{},"df":0,"g":{"docs":{"https://phlip9.com/notes/android/root phone with magisk/":{"tf":1.7320508075688772}},"df":1}}}}}}}}}}}}},"2":{"docs":{"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0}},"df":1},":":{"docs":{},"df":0,"2":{"docs":{},"df":0,"0":{"docs":{},"df":0,":":{"docs":{},"df":0,"1":{"docs":{},"df":0,"8":{"docs":{"https://phlip9.com/notes/WSL/WSL2 custom kernel/":{"tf":1.0}},"df":1}}}}}}},"4":{"docs":{"https://phlip9.com/notes/android/android cli setup/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.7320508075688772},"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.4142135623730951}},"df":4,"/":{"docs":{},"df":0,"4":{"docs":{},"df":0,"0":{"docs":{"https://phlip9.com/notes/misc/water distillation setup/":{"tf":1.7320508075688772}},"df":1,"$":{"docs":{},"df":0,"2":{"docs":{},"df":0,"1":{"docs":{},"df":0,"h":{"docs":{},"df":0,"t":{"docs":{},"df":0,"t":{"docs":{},"df":0,"p":{"docs":{},"df":0,"s":{"docs":{},"df":0,":":{"docs":{},"df":0,"/":{"docs":{},"df":0,"/":{"docs":{},"df":0,"w":{"docs":{},"df":0,"w":{"docs":{},"df":0,"w":{"docs":{},"df":0,".":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"z":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,".":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"/":{"docs":{},"df":0,"d":{"docs":{},"df":0,"p":{"docs":{},"df":0,"/":{"docs":{},"df":0,"b":{"docs":{},"df":0,"0":{"docs":{},"df":0,"7":{"docs":{},"df":0,"c":{"docs":{},"df":0,"g":{"docs":{},"df":0,"t":{"docs":{},"df":0,"1":{"docs":{},"df":0,"8":{"docs":{},"df":0,"j":{"docs":{},"df":0,"4":{"docs":{"https://phlip9.com/notes/misc/water distillation setup/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"b":{"docs":{"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.0}},"df":1},"k":{"docs":{},"df":0,"i":{"docs":{},"df":0,"b":{"docs":{"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.0}},"df":1}}}},"5":{"docs":{"https://phlip9.com/notes/WSL/WSL2 custom kernel/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.0},"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.0}},"df":3,"$":{"docs":{},"df":0,"3":{"docs":{},"df":0,"0":{"docs":{},"df":0,"/":{"docs":{},"df":0,"m":{"docs":{},"df":0,"o":{"docs":{"https://phlip9.com/notes/devops/secrets/1password - secrets automation/":{"tf":1.0}},"df":1}}}}}},"*":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1}},".":{"docs":{},"df":0,"0":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1}},"0":{"docs":{"https://phlip9.com/notes/statistics probability/testing whether a coin is fair/":{"tf":1.0}},"df":1},"5":{"docs":{"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":1.4142135623730951},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":2,".":{"docs":{},"df":0,"0":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1,".":{"docs":{},"df":0,"0":{"docs":{},"df":0,".":{"docs":{},"df":0,"0":{"docs":{"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.0}},"df":1}}}}},"2":{"docs":{},"df":0,"5":{"docs":{},"df":0,"5":{"docs":{},"df":0,".":{"docs":{},"df":0,"0":{"docs":{},"df":0,".":{"docs":{},"df":0,"0":{"docs":{"https://phlip9.com/notes/networking/CIDR/":{"tf":1.0}},"df":1}}},"2":{"docs":{},"df":0,"4":{"docs":{},"df":0,"0":{"docs":{},"df":0,".":{"docs":{},"df":0,"0":{"docs":{"https://phlip9.com/notes/android/ADB over TCP inside WSL2/":{"tf":1.0},"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.4142135623730951}},"df":2}}}},"5":{"docs":{},"df":0,"4":{"docs":{},"df":0,".":{"docs":{},"df":0,"0":{"docs":{"https://phlip9.com/notes/networking/CIDR/":{"tf":1.4142135623730951}},"df":1}}},"5":{"docs":{},"df":0,".":{"docs":{},"df":0,"0":{"docs":{"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.4142135623730951}},"df":1}}}}}}}}}}},"6":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.7320508075688772},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.4142135623730951},"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":2.23606797749979},"https://phlip9.com/notes/lang/gdb ref/":{"tf":1.0},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0},"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.4142135623730951}},"df":6,"(":{"docs":{},"df":0,"n":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"c":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.0}},"df":1}}}}},"1":{"docs":{"https://phlip9.com/notes/performance/simdjson talk/":{"tf":1.0}},"df":1}},"8":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"8":{"docs":{},"df":0,"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{"https://phlip9.com/notes/networking/network interfaces/":{"tf":2.0}},"df":1}}}}}}}},"6":{"docs":{"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.7320508075688772},"https://phlip9.com/notes/misc/setting up a headless raspbian boot image/":{"tf":2.449489742783178}},"df":2,"0":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1,"1":{"docs":{},"df":0,":":{"docs":{},"df":0,"6":{"docs":{},"df":0,"4":{"docs":{},"df":0,"6":{"docs":{},"df":0,":":{"docs":{},"df":0,"c":{"docs":{},"df":0,"a":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,":":{"docs":{},"df":0,"2":{"docs":{},"df":0,"f":{"docs":{},"df":0,"b":{"docs":{},"df":0,"5":{"docs":{},"df":0,":":{"docs":{},"df":0,"d":{"docs":{},"df":0,"c":{"docs":{},"df":0,"b":{"docs":{},"df":0,"2":{"docs":{},"df":0,":":{"docs":{},"df":0,"5":{"docs":{},"df":0,"9":{"docs":{},"df":0,"5":{"docs":{},"df":0,"c":{"docs":{},"df":0,":":{"docs":{},"df":0,"1":{"docs":{},"df":0,"f":{"docs":{},"df":0,"8":{"docs":{},"df":0,"1":{"docs":{},"df":0,":":{"docs":{},"df":0,"c":{"docs":{},"df":0,"f":{"docs":{},"df":0,"c":{"docs":{},"df":0,"6":{"docs":{"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}},"b":{"docs":{},"df":0,"0":{"docs":{},"df":0,"e":{"docs":{},"df":0,":":{"docs":{},"df":0,"7":{"docs":{},"df":0,"5":{"docs":{},"df":0,"7":{"docs":{},"df":0,"6":{"docs":{},"df":0,":":{"docs":{},"df":0,"9":{"docs":{},"df":0,"8":{"docs":{},"df":0,"b":{"docs":{},"df":0,"c":{"docs":{},"df":0,":":{"docs":{},"df":0,"5":{"docs":{},"df":0,"e":{"docs":{},"df":0,"6":{"docs":{},"df":0,"c":{"docs":{},"df":0,":":{"docs":{},"df":0,"7":{"docs":{},"df":0,"e":{"docs":{},"df":0,"b":{"docs":{},"df":0,"1":{"docs":{"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}},":":{"docs":{},"df":0,"1":{"docs":{},"df":0,"/":{"docs":{},"df":0,"6":{"docs":{},"df":0,"4":{"docs":{"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}},"4":{"docs":{},"df":0,":":{"docs":{},"df":0,"a":{"docs":{},"df":0,"8":{"docs":{},"df":0,"8":{"docs":{},"df":0,"0":{"docs":{},"df":0,":":{"docs":{},"df":0,"2":{"docs":{},"df":0,":":{"docs":{},"df":0,"d":{"docs":{},"df":0,"0":{"docs":{},"df":0,":":{"docs":{},"df":0,":":{"docs":{},"df":0,"2":{"docs":{},"df":0,"1":{"docs":{},"df":0,"d":{"docs":{},"df":0,"0":{"docs":{},"df":0,":":{"docs":{},"df":0,"e":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"1":{"docs":{"https://phlip9.com/notes/devops/algo wireguard VPN server/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}},"1":{"docs":{},"df":0,"6":{"docs":{"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":2.0}},"df":2}}},"7":{"docs":{},"df":0,"1":{"docs":{},"df":0,"m":{"docs":{},"df":0,"i":{"docs":{},"df":0,"b":{"docs":{"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.0}},"df":1}}}},"5":{"docs":{},"df":0,"m":{"docs":{},"df":0,"i":{"docs":{},"df":0,"b":{"docs":{"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.0}},"df":1}}}},"b":{"docs":{"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.0}},"df":1}},"8":{"docs":{"https://phlip9.com/notes/confidential computing/intel TDX/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.0}},"df":2,"b":{"docs":{"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.0}},"df":1},"m":{"docs":{},"df":0,"i":{"docs":{},"df":0,"b":{"docs":{"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.0}},"df":1}}}},"9":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1},"^":{"docs":{},"df":0,"0":{"docs":{"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.4142135623730951}},"df":1},"1":{"docs":{},"df":0,"6":{"docs":{"https://phlip9.com/notes/performance/bit hacks/":{"tf":2.0}},"df":1}},"2":{"docs":{},"df":0,"4":{"docs":{"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.7320508075688772}},"df":1}},"3":{"docs":{},"df":0,"2":{"docs":{"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.7320508075688772}},"df":1}},"8":{"docs":{"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.7320508075688772}},"df":1}},"e":{"docs":{},"df":0,"0":{"docs":{},"df":0,"a":{"docs":{},"df":0,"4":{"docs":{},"df":0,"0":{"docs":{},"df":0,"d":{"docs":{},"df":0,"3":{"docs":{},"df":0,"e":{"docs":{},"df":0,"4":{"docs":{},"df":0,"4":{"docs":{},"df":0,"a":{"docs":{"https://phlip9.com/notes/btc-ln/lightning rod/":{"tf":1.0}},"df":1}}}}}}}}}}},"f":{"docs":{},"df":0,"+":{"docs":{},"df":0,"1":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/fastpay/":{"tf":1.7320508075688772}},"df":1}}},"k":{"docs":{"https://phlip9.com/notes/devops/nomad/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/CDF confidence bands - DKW inequality/":{"tf":1.0}},"df":2},"m":{"docs":{"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0}},"df":1},"n":{"docs":{"https://phlip9.com/notes/devops/deployment strategies/":{"tf":1.0}},"df":1,"d":{"docs":{"https://phlip9.com/notes/lang/lua/":{"tf":1.0},"https://phlip9.com/notes/performance/bit hacks/":{"tf":2.0}},"df":2}},"r":{"docs":{"https://phlip9.com/notes/AI ML/Expectimax Search/":{"tf":1.0}},"df":1}},"3":{"docs":{"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/monetary instruments/":{"tf":1.0},"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.7320508075688772},"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":2.449489742783178},"https://phlip9.com/notes/btc-ln/BOLT 4 - onion routing protocol/":{"tf":1.4142135623730951},"https://phlip9.com/notes/btc-ln/breez lightning service providers/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.0},"https://phlip9.com/notes/combinatorics/k-combinations of a multiset/":{"tf":2.449489742783178},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/gramine/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.7320508075688772},"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/marblerun/":{"tf":1.0},"https://phlip9.com/notes/devops/docker compose/":{"tf":1.0},"https://phlip9.com/notes/distributed systems/papers/(2020) Semi-Fast Byzantine-tolerant Shared Register without Reliable Broadcast/":{"tf":2.23606797749979},"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":1.4142135623730951},"https://phlip9.com/notes/ios/ios setup/":{"tf":1.0},"https://phlip9.com/notes/keyboards/moergo glove80/":{"tf":1.7320508075688772},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":3.1622776601683795},"https://phlip9.com/notes/lang/flutter/flutter setup/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/lua/":{"tf":4.0},"https://phlip9.com/notes/lang/operator fixity and precedence/":{"tf":2.23606797749979},"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.0},"https://phlip9.com/notes/management/relieve often - why generals were more successful in WWII/":{"tf":1.0},"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":1.0},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.7320508075688772},"https://phlip9.com/notes/misc/water distillation setup/":{"tf":1.0},"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.0},"https://phlip9.com/notes/performance/bit hacks/":{"tf":2.0},"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":2.0},"https://phlip9.com/notes/performance/simdjson talk/":{"tf":1.4142135623730951},"https://phlip9.com/notes/postgres/snippets/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/arubanetworks captive portal/":{"tf":1.4142135623730951},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.0}},"df":34,"$":{"docs":{},"df":0,"0":{"docs":{},"df":0,"/":{"docs":{},"df":0,"m":{"docs":{},"df":0,"o":{"docs":{"https://phlip9.com/notes/devops/secrets/1password - secrets automation/":{"tf":1.0}},"df":1}}}}},"&":{"docs":{},"df":0,"g":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/lang/lua/":{"tf":1.0}},"df":1}}},".":{"docs":{},"df":0,"0":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.7320508075688772},"https://phlip9.com/notes/lang/flutter/flutter setup/":{"tf":1.0},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.4142135623730951},"https://phlip9.com/notes/statistics probability/winsorize/":{"tf":1.4142135623730951}},"df":5,".":{"docs":{},"df":0,"3":{"docs":{},"df":0,".":{"docs":{},"df":0,"1":{"docs":{"https://phlip9.com/notes/ios/ios setup/":{"tf":1.0}},"df":1}}}},"m":{"docs":{},"df":0,"i":{"docs":{},"df":0,"b":{"docs":{"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.0}},"df":1}}}},"1":{"docs":{},"df":0,"1":{"docs":{"https://phlip9.com/notes/lang/rust/rr with rust/":{"tf":1.0}},"df":1},"4":{"docs":{},"df":0,"1":{"docs":{},"df":0,"5":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.7320508075688772}},"df":1}}}},"2":{"docs":{},"df":0,"9":{"docs":{},"df":0,"0":{"docs":{},"df":0,"5":{"docs":{},"df":0,"9":{"docs":{},"df":0,"9":{"docs":{},"df":0,".":{"docs":{},"df":0,"9":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"%":{"docs":{},"df":0,"\"":{"docs":{},"df":0,"t":{"docs":{},"df":0,"h":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"e":{"docs":{"https://phlip9.com/notes/statistics probability/testing whether a coin is fair/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}},"3":{"docs":{},"df":0,".":{"docs":{},"df":0,"9":{"docs":{"https://phlip9.com/notes/lang/flutter/flutter setup/":{"tf":1.4142135623730951}},"df":1}},"m":{"docs":{},"df":0,"i":{"docs":{},"df":0,"b":{"docs":{"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.0}},"df":1}}}},"4":{"docs":{"https://phlip9.com/notes/performance/simdjson talk/":{"tf":2.23606797749979}},"df":1},"5":{"docs":{"https://phlip9.com/notes/performance/simdjson talk/":{"tf":1.7320508075688772}},"df":1,"8":{"docs":{"https://phlip9.com/notes/statistics probability/winsorize/":{"tf":1.4142135623730951}},"df":1},"m":{"docs":{},"df":0,"i":{"docs":{},"df":0,"b":{"docs":{"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.4142135623730951}},"df":1}}}},"6":{"docs":{},"df":0,".":{"docs":{},"df":0,"1":{"docs":{"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0}},"df":1}}},"7":{"docs":{},"df":0,"g":{"docs":{},"df":0,"h":{"docs":{},"df":0,"z":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0}},"df":1}}}},"8":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0}},"df":1,"k":{"docs":{},"df":0,"i":{"docs":{},"df":0,"b":{"docs":{"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.0}},"df":1}}}},"b":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.0}},"df":1}},"0":{"docs":{"https://phlip9.com/notes/btc-ln/breez lightning service providers/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/secure time/":{"tf":1.0},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0},"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":3.4641016151377544}},"df":4,"0":{"docs":{"https://phlip9.com/notes/performance/simdjson talk/":{"tf":1.0}},"df":1,"0":{"docs":{},"df":0,"0":{"docs":{"https://phlip9.com/notes/reproducible builds/nix/nix auto-allocate-uids -> nixbld users/":{"tf":1.0}},"df":1}}},"2":{"docs":{"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.7320508075688772}},"df":2},"7":{"docs":{},"df":0,"2":{"docs":{"https://phlip9.com/notes/confidential computing/gramine/":{"tf":1.7320508075688772},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.4142135623730951}},"df":2}},"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{"https://phlip9.com/notes/btc-ln/lightning network notes/":{"tf":1.0},"https://phlip9.com/notes/misc/kintsugi/":{"tf":1.0}},"df":2}}},"t":{"docs":{},"df":0,"1":{"docs":{},"df":0,"2":{"docs":{},"df":0,":":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,":":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"z":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.4142135623730951}},"df":1}}}}}}}}}}},"1":{"docs":{"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/financial instituion/":{"tf":1.0},"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/foreign bank account report (FBAR)/":{"tf":1.0},"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/money services business (MSB)/":{"tf":1.0},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.4142135623730951}},"df":4,"3":{"docs":{"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.0}},"df":1,"3":{"docs":{},"df":0,"7":{"docs":{"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.4142135623730951}},"df":1}}},"8":{"docs":{},"df":0,"b":{"docs":{"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.0}},"df":1}}},"2":{"docs":{"https://phlip9.com/notes/WSL/WSL2 custom kernel/":{"tf":1.0},"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":2.0},"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":3.0},"https://phlip9.com/notes/btc-ln/BOLT 7 - p2p node and channel discovery/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":2.23606797749979},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":3.3166247903554},"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.0},"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":3.1622776601683795},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":2.23606797749979},"https://phlip9.com/notes/networking/CIDR/":{"tf":1.7320508075688772},"https://phlip9.com/notes/performance/bit hacks/":{"tf":2.449489742783178},"https://phlip9.com/notes/performance/simdjson talk/":{"tf":2.23606797749979},"https://phlip9.com/notes/reproducible builds/nix/nix auto-allocate-uids -> nixbld users/":{"tf":1.0}},"df":13,"2":{"docs":{"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.4142135623730951}},"df":1},"6":{"docs":{},"df":0,"9":{"docs":{},"df":0,"f":{"docs":{},"df":0,"b":{"docs":{},"df":0,"c":{"docs":{"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":1.0}},"df":1}}}}},"7":{"docs":{},"df":0,"6":{"docs":{},"df":0,"8":{"docs":{"https://phlip9.com/notes/android/root phone with magisk/":{"tf":1.0}},"df":1}},"8":{"docs":{},"df":0,"7":{"docs":{"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.0}},"df":1}}},"8":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1},"b":{"docs":{"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.4142135623730951}},"df":2,"i":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.0}},"df":1}}}},"3":{"docs":{"https://phlip9.com/notes/android/android cli setup/":{"tf":2.0},"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0},"https://phlip9.com/notes/ios/ios setup/":{"tf":1.0},"https://phlip9.com/notes/lang/flutter/flutter setup/":{"tf":1.4142135623730951}},"df":4,".":{"docs":{},"df":0,"0":{"docs":{},"df":0,".":{"docs":{},"df":0,"1":{"docs":{"https://phlip9.com/notes/lang/flutter/flutter setup/":{"tf":1.0}},"df":1},"3":{"docs":{"https://phlip9.com/notes/android/android cli setup/":{"tf":1.0}},"df":1}}}},"0":{"docs":{"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.0}},"df":1},"2":{"docs":{},"df":0,"2":{"docs":{},"df":0,"5":{"docs":{"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.0}},"df":1}}},"7":{"docs":{},"df":0,"0":{"docs":{},"df":0,"8":{"docs":{},"df":0,"a":{"docs":{},"df":0,"a":{"docs":{"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":1.4142135623730951}},"df":1}}}}},";":{"docs":{},"df":0,"g":{"docs":{},"df":0,"o":{"docs":{},"df":0,"o":{"docs":{},"df":0,"g":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"_":{"docs":{},"df":0,"a":{"docs":{},"df":0,"p":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,";":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"m":{"docs":{},"df":0,"6":{"docs":{},"df":0,"4":{"docs":{"https://phlip9.com/notes/android/android cli setup/":{"tf":1.0}},"df":1}}}}},"x":{"docs":{},"df":0,"8":{"docs":{},"df":0,"6":{"docs":{},"df":0,"_":{"docs":{},"df":0,"6":{"docs":{},"df":0,"4":{"docs":{"https://phlip9.com/notes/android/android cli setup/":{"tf":1.0}},"df":1}}}}}}},"_":{"docs":{},"df":0,"p":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"y":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,";":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"m":{"docs":{},"df":0,"6":{"docs":{},"df":0,"4":{"docs":{"https://phlip9.com/notes/android/android cli setup/":{"tf":1.0}},"df":1}}}}},"x":{"docs":{},"df":0,"8":{"docs":{},"df":0,"6":{"docs":{},"df":0,"_":{"docs":{},"df":0,"6":{"docs":{},"df":0,"4":{"docs":{"https://phlip9.com/notes/android/android cli setup/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"4":{"docs":{},"df":0,"5":{"docs":{"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.4142135623730951}},"df":2},":":{"docs":{},"df":0,"f":{"docs":{},"df":0,"4":{"docs":{},"df":0,":":{"docs":{},"df":0,"a":{"docs":{},"df":0,"a":{"docs":{},"df":0,":":{"docs":{},"df":0,"9":{"docs":{},"df":0,"1":{"docs":{},"df":0,":":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,":":{"docs":{},"df":0,"6":{"docs":{},"df":0,"0":{"docs":{"https://phlip9.com/notes/networking/network interfaces/":{"tf":2.449489742783178}},"df":1},"1":{"docs":{"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.0}},"df":1},"2":{"docs":{"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.0}},"df":1},"3":{"docs":{"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}},"b":{"docs":{"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.0}},"df":1}},"5":{"docs":{},"df":0,".":{"docs":{},"df":0,"9":{"docs":{},"df":0,"9":{"docs":{},"df":0,".":{"docs":{},"df":0,"0":{"docs":{},"df":0,".":{"docs":{},"df":0,"0":{"docs":{"https://phlip9.com/notes/networking/CIDR/":{"tf":1.0}},"df":1,"/":{"docs":{},"df":0,"1":{"docs":{},"df":0,"6":{"docs":{"https://phlip9.com/notes/networking/CIDR/":{"tf":1.0}},"df":1}}}}}}}}}},"1":{"docs":{"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.0}},"df":1}},"6":{"docs":{},"df":0,"0":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.7320508075688772}},"df":1,".":{"docs":{},"df":0,"0":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1}},"0":{"docs":{"https://phlip9.com/notes/devops/algo wireguard VPN server/":{"tf":2.0},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.4142135623730951}},"df":3},"5":{"docs":{},"df":0,"5":{"docs":{},"df":0,"3":{"docs":{},"df":0,"6":{"docs":{"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.0}},"df":1}}}},"8":{"docs":{},"df":0,"5":{"docs":{},"df":0,"7":{"docs":{},"df":0,"6":{"docs":{"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.0}},"df":1}}},"6":{"docs":{},"df":0,"0":{"docs":{},"df":0,"8":{"docs":{"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.0}},"df":1}}},"7":{"docs":{},"df":0,"0":{"docs":{},"df":0,"4":{"docs":{"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.0}},"df":1}},"6":{"docs":{},"df":0,"8":{"docs":{"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.0}},"df":1}}}}},":":{"docs":{},"df":0,"f":{"docs":{},"df":0,"4":{"docs":{},"df":0,":":{"docs":{},"df":0,"a":{"docs":{},"df":0,"a":{"docs":{},"df":0,":":{"docs":{},"df":0,"9":{"docs":{},"df":0,"1":{"docs":{},"df":0,":":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,":":{"docs":{},"df":0,"6":{"docs":{},"df":0,"0":{"docs":{"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}},"b":{"docs":{"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.0}},"df":1}},"7":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0}},"df":1},"8":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0},"https://phlip9.com/notes/performance/simdjson talk/":{"tf":1.0}},"df":2,"4":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":2.23606797749979}},"df":1},"6":{"docs":{},"df":0,"5":{"docs":{},"df":0,"4":{"docs":{"https://phlip9.com/notes/android/ADB over TCP inside WSL2/":{"tf":1.0}},"df":1}}},"8":{"docs":{},"df":0,"8":{"docs":{},"df":0,"a":{"docs":{},"df":0,"4":{"docs":{},"df":0,"5":{"docs":{"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":1.0}},"df":1}}}}},"9":{"docs":{},"df":0,"1":{"docs":{},"df":0,"2":{"docs":{"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.0}},"df":1}}}},"9":{"docs":{},"df":0,"1":{"docs":{"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.0}},"df":1},"9":{"docs":{},"df":0,"3":{"docs":{},"df":0,"6":{"docs":{},"df":0,"0":{"docs":{"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.0}},"df":1}}}}},"a":{"docs":{},"df":0,"h":{"docs":{"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0}},"df":1}},"f":{"docs":{"https://phlip9.com/notes/distributed systems/papers/(2021) Leaderless Consensus/":{"tf":1.0}},"df":1},"k":{"docs":{"https://phlip9.com/notes/devops/nomad/":{"tf":1.0}},"df":1},"r":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0}},"df":1}}},"4":{"docs":{"https://phlip9.com/notes/AI ML/Markov Decision Process (MDP)/":{"tf":1.0},"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0},"https://phlip9.com/notes/b l o c k c h a i n/btc utreexo - utxo accumulator/":{"tf":1.0},"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.7320508075688772},"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":2.0},"https://phlip9.com/notes/btc-ln/BOLT 4 - onion routing protocol/":{"tf":2.0},"https://phlip9.com/notes/btc-ln/breez lightning service providers/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.0},"https://phlip9.com/notes/combinatorics/k-combinations of a multiset/":{"tf":1.7320508075688772},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.0},"https://phlip9.com/notes/crypto/(talk) authenticated data structures for stateless validation/":{"tf":1.0},"https://phlip9.com/notes/devops/azure CLI/":{"tf":1.0},"https://phlip9.com/notes/devops/docker compose/":{"tf":1.0},"https://phlip9.com/notes/distributed systems/papers/(2020) Semi-Fast Byzantine-tolerant Shared Register without Reliable Broadcast/":{"tf":1.4142135623730951},"https://phlip9.com/notes/keyboards/moergo glove80/":{"tf":1.0},"https://phlip9.com/notes/lang/flutter/flutter setup/":{"tf":1.0},"https://phlip9.com/notes/lang/lua/":{"tf":1.0},"https://phlip9.com/notes/lang/operator fixity and precedence/":{"tf":2.449489742783178},"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.0},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.4142135623730951},"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.0},"https://phlip9.com/notes/performance/bit hacks/":{"tf":2.8284271247461903},"https://phlip9.com/notes/performance/simdjson talk/":{"tf":2.23606797749979},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.0}},"df":26,"*":{"docs":{},"df":0,"x":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1,"_":{"docs":{},"df":0,"s":{"docs":{},"df":0,"q":{"docs":{},"df":0,"u":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1}}}}}}}},".":{"docs":{},"df":0,"0":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":2.23606797749979},"https://phlip9.com/notes/statistics probability/winsorize/":{"tf":1.4142135623730951}},"df":2,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"9":{"docs":{},"df":0,"9":{"docs":{},"df":0,".":{"docs":{},"df":0,"9":{"docs":{},"df":0,"9":{"docs":{},"df":0,"3":{"docs":{},"df":0,"%":{"docs":{},"df":0,"$":{"docs":{},"df":0,"4":{"docs":{"https://phlip9.com/notes/statistics probability/testing whether a coin is fair/":{"tf":1.0}},"df":1}}}}}}}}}}}},"g":{"docs":{},"df":0,"i":{"docs":{},"df":0,"b":{"docs":{"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0}},"df":1}}},"k":{"docs":{"https://phlip9.com/notes/misc/setting up a headless raspbian boot image/":{"tf":1.0}},"df":1}},"4":{"docs":{},"df":0,"1":{"docs":{},"df":0,"7":{"docs":{},"df":0,"2":{"docs":{},"df":0,"9":{"docs":{},"df":0,"9":{"docs":{},"df":0,".":{"docs":{},"df":0,"9":{"docs":{},"df":0,"9":{"docs":{},"df":0,"9":{"docs":{},"df":0,"%":{"docs":{},"df":0,"\"":{"docs":{},"df":0,"f":{"docs":{},"df":0,"i":{"docs":{},"df":0,"v":{"docs":{},"df":0,"e":{"docs":{"https://phlip9.com/notes/statistics probability/testing whether a coin is fair/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}},"9":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/winsorize/":{"tf":1.4142135623730951}},"df":2,"m":{"docs":{},"df":0,"i":{"docs":{},"df":0,"b":{"docs":{"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.0}},"df":1}}}},"e":{"docs":{"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.4142135623730951}},"df":2}},"0":{"docs":{"https://phlip9.com/notes/crypto/(talk) authenticated data structures for stateless validation/":{"tf":1.0},"https://phlip9.com/notes/networking/ipv6 address space/":{"tf":1.0}},"df":2,"0":{"docs":{"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.4142135623730951}},"df":3},"9":{"docs":{},"df":0,"6":{"docs":{"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.4142135623730951}},"df":1}},"m":{"docs":{"https://phlip9.com/notes/devops/nomad/":{"tf":1.0}},"df":1}},"1":{"docs":{},"df":0,"9":{"docs":{},"df":0,"4":{"docs":{},"df":0,"5":{"docs":{},"df":0,"6":{"docs":{},"df":0,"0":{"docs":{"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.0}},"df":1}}}},"7":{"docs":{},"df":0,"6":{"docs":{},"df":0,"2":{"docs":{},"df":0,"9":{"docs":{},"df":0,"4":{"docs":{},"df":0,"4":{"docs":{},"df":0,"a":{"docs":{},"df":0,"3":{"docs":{},"df":0,"0":{"docs":{},"df":0,"1":{"docs":{},"df":0,"4":{"docs":{},"df":0,"1":{"docs":{},"df":0,"8":{"docs":{},"df":0,"a":{"docs":{},"df":0,"6":{"docs":{},"df":0,"c":{"docs":{},"df":0,"6":{"docs":{},"df":0,"8":{"docs":{},"df":0,"0":{"docs":{},"df":0,"2":{"docs":{},"df":0,"1":{"docs":{},"df":0,"c":{"docs":{},"df":0,"5":{"docs":{},"df":0,"c":{"docs":{},"df":0,"8":{"docs":{},"df":0,"6":{"docs":{},"df":0,"4":{"docs":{},"df":0,"f":{"docs":{},"df":0,"5":{"docs":{},"df":0,"4":{"docs":{},"df":0,"a":{"docs":{},"df":0,"3":{"docs":{},"df":0,"c":{"docs":{},"df":0,"e":{"docs":{},"df":0,"3":{"docs":{},"df":0,"e":{"docs":{},"df":0,"0":{"docs":{},"df":0,"1":{"docs":{},"df":0,"3":{"docs":{},"df":0,"5":{"docs":{},"df":0,"7":{"docs":{},"df":0,"1":{"docs":{},"df":0,"b":{"docs":{},"df":0,"d":{"docs":{},"df":0,"3":{"docs":{},"df":0,"8":{"docs":{},"df":0,"d":{"docs":{},"df":0,"a":{"docs":{},"df":0,"4":{"docs":{},"df":0,"4":{"docs":{},"df":0,"8":{"docs":{},"df":0,"4":{"docs":{},"df":0,"3":{"docs":{},"df":0,"9":{"docs":{},"df":0,"6":{"docs":{},"df":0,"9":{"docs":{},"df":0,"5":{"docs":{},"df":0,"f":{"docs":{},"df":0,"5":{"docs":{},"df":0,"8":{"docs":{},"df":0,"2":{"docs":{"https://phlip9.com/notes/android/android cli setup/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"2":{"docs":{"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.0}},"df":1,"\"":{"docs":{},"df":0,".":{"docs":{},"df":0,"p":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.4142135623730951}},"df":1}}}}}}}}}},".":{"docs":{},"df":0,"0":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0}},"df":1}},"0":{"docs":{},"df":0,"6":{"docs":{},"df":0,"9":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0}},"df":1}}},"8":{"docs":{"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":2.6457513110645907},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":3.7416573867739413}},"df":2},"9":{"docs":{"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":2.8284271247461903},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":4.0}},"df":2,"4":{"docs":{},"df":0,"9":{"docs":{},"df":0,"6":{"docs":{},"df":0,"7":{"docs":{},"df":0,"2":{"docs":{},"df":0,"9":{"docs":{},"df":0,"6":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"1":{"docs":{"https://phlip9.com/notes/performance/simdjson talk/":{"tf":1.0}},"df":1}}}}}}}}}}}}},"3":{"docs":{},"df":0,",":{"docs":{},"df":0,"1":{"docs":{},"df":0,"0":{"docs":{"https://phlip9.com/notes/confidential computing/gramine/":{"tf":1.0}},"df":1},"2":{"docs":{"https://phlip9.com/notes/confidential computing/gramine/":{"tf":1.0}},"df":1}}},"1":{"docs":{"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":2.6457513110645907},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":3.7416573867739413}},"df":2},"2":{"docs":{},"df":0,"b":{"docs":{"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.0}},"df":1}},"3":{"docs":{},"df":0,"6":{"docs":{},"df":0,"1":{"docs":{},"df":0,"a":{"docs":{},"df":0,"f":{"docs":{},"df":0,"f":{"docs":{},"df":0,"e":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"b":{"docs":{},"df":0,"7":{"docs":{},"df":0,"5":{"docs":{},"df":0,"a":{"docs":{},"df":0,"f":{"docs":{},"df":0,"f":{"docs":{},"df":0,"e":{"docs":{},"df":0,"e":{"docs":{},"df":0,"9":{"docs":{},"df":0,"b":{"docs":{},"df":0,"a":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"7":{"docs":{},"df":0,"e":{"docs":{},"df":0,"0":{"docs":{},"df":0,"5":{"docs":{},"df":0,"4":{"docs":{},"df":0,"a":{"docs":{},"df":0,"5":{"docs":{},"df":0,"e":{"docs":{},"df":0,"1":{"docs":{},"df":0,"4":{"docs":{},"df":0,"8":{"docs":{},"df":0,"8":{"docs":{},"df":0,"3":{"docs":{},"df":0,"2":{"docs":{},"df":0,"1":{"docs":{},"df":0,"3":{"docs":{},"df":0,"e":{"docs":{},"df":0,"5":{"docs":{},"df":0,"a":{"docs":{},"df":0,"1":{"docs":{},"df":0,"2":{"docs":{},"df":0,"1":{"docs":{},"df":0,"b":{"docs":{},"df":0,"6":{"docs":{},"df":0,"7":{"docs":{},"df":0,"d":{"docs":{},"df":0,"7":{"docs":{},"df":0,"4":{"docs":{},"df":0,"a":{"docs":{},"df":0,"0":{"docs":{},"df":0,"e":{"docs":{},"df":0,"1":{"docs":{},"df":0,"2":{"docs":{},"df":0,"e":{"docs":{},"df":0,"9":{"docs":{},"df":0,"d":{"docs":{},"df":0,"2":{"docs":{},"df":0,"b":{"docs":{},"df":0,"7":{"docs":{},"df":0,"a":{"docs":{"https://phlip9.com/notes/confidential computing/marblerun/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"6":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0}},"df":1},"b":{"docs":{"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.0}},"df":1}},"4":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0},"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.4142135623730951}},"df":3,"2":{"docs":{},"df":0,"e":{"docs":{},"df":0,"9":{"docs":{},"df":0,"d":{"docs":{},"df":0,"d":{"docs":{},"df":0,"9":{"docs":{},"df":0,"d":{"docs":{},"df":0,"1":{"docs":{},"df":0,"a":{"docs":{},"df":0,"3":{"docs":{},"df":0,"e":{"docs":{},"df":0,"3":{"docs":{},"df":0,"9":{"docs":{},"df":0,"c":{"docs":{},"df":0,"2":{"docs":{},"df":0,"0":{"docs":{},"df":0,"3":{"docs":{},"df":0,"c":{"docs":{},"df":0,"e":{"docs":{},"df":0,"1":{"docs":{},"df":0,"3":{"docs":{},"df":0,"1":{"docs":{},"df":0,"4":{"docs":{},"df":0,"9":{"docs":{},"df":0,"2":{"docs":{},"df":0,"0":{"docs":{},"df":0,"9":{"docs":{},"df":0,"0":{"docs":{},"df":0,"d":{"docs":{},"df":0,"7":{"docs":{"https://phlip9.com/notes/postgres/snippets/":{"tf":1.7320508075688772}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"3":{"docs":{"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.4142135623730951}},"df":2}},"5":{"docs":{"https://phlip9.com/notes/misc/setting up a headless raspbian boot image/":{"tf":1.0}},"df":1,"1":{"docs":{},"df":0,"0":{"docs":{"https://phlip9.com/notes/lang/gdb ref/":{"tf":1.0}},"df":1}},"6":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.7320508075688772}},"df":2},"m":{"docs":{},"df":0,"i":{"docs":{},"df":0,"b":{"docs":{"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.0}},"df":1}}}},"6":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0}},"df":1,"0":{"docs":{},"df":0,"6":{"docs":{},"df":0,"0":{"docs":{},"df":0,"1":{"docs":{},"df":0,"6":{"docs":{},"df":0,"8":{"docs":{},"df":0,"0":{"docs":{"https://phlip9.com/notes/btc-ln/zero-conf channels/":{"tf":1.0}},"df":1}}}}}}},"5":{"docs":{"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.0}},"df":1}},"7":{"docs":{},"df":0,"9":{"docs":{},"df":0,"1":{"docs":{"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.4142135623730951}},"df":2}},"m":{"docs":{},"df":0,"i":{"docs":{},"df":0,"b":{"docs":{"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.0}},"df":1}}}},"8":{"docs":{"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.4142135623730951}},"df":1,"0":{"docs":{"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.0}},"df":1},"4":{"docs":{},"df":0,"8":{"docs":{"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.0}},"df":1}},"b":{"docs":{"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.0}},"df":1}},"9":{"docs":{},"df":0,"1":{"docs":{},"df":0,"8":{"docs":{"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.4142135623730951}},"df":2}},"6":{"docs":{},"df":0,"f":{"docs":{"https://phlip9.com/notes/keyboards/moergo glove80/":{"tf":1.4142135623730951}},"df":1}},"9":{"docs":{"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.4142135623730951}},"df":2}},"e":{"docs":{},"df":0,"7":{"docs":{},"df":0,"1":{"docs":{},"df":0,"8":{"docs":{},"df":0,"d":{"docs":{},"df":0,"3":{"docs":{},"df":0,"c":{"docs":{},"df":0,"1":{"docs":{},"df":0,"7":{"docs":{},"df":0,"d":{"docs":{},"df":0,"3":{"docs":{},"df":0,"f":{"docs":{},"df":0,"4":{"docs":{},"df":0,"c":{"docs":{},"df":0,"6":{"docs":{},"df":0,"7":{"docs":{},"df":0,"e":{"docs":{},"df":0,"2":{"docs":{},"df":0,"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"a":{"docs":{},"df":0,"2":{"docs":{},"df":0,"6":{"docs":{},"df":0,"d":{"docs":{},"df":0,"a":{"docs":{},"df":0,"2":{"docs":{},"df":0,"f":{"docs":{},"df":0,"e":{"docs":{},"df":0,"b":{"docs":{},"df":0,"6":{"docs":{},"df":0,"6":{"docs":{"https://phlip9.com/notes/postgres/snippets/":{"tf":1.7320508075688772}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}},"d":{"docs":{},"df":0,"1":{"docs":{},"df":0,"2":{"docs":{},"df":0,".":{"docs":{},"df":0,".":{"docs":{},"df":0,"b":{"docs":{},"df":0,"9":{"docs":{},"df":0,"a":{"docs":{},"df":0,"3":{"docs":{},"df":0,"3":{"docs":{},"df":0,"c":{"docs":{},"df":0,"f":{"docs":{"https://phlip9.com/notes/confidential computing/gramine/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}},"t":{"docs":{},"df":0,"h":{"docs":{"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.4142135623730951}},"df":1}},"x":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/standard error/":{"tf":1.0}},"df":2,"^":{"docs":{},"df":0,"2":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1}}}},"5":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.4142135623730951},"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.7320508075688772},"https://phlip9.com/notes/btc-ln/BOLT 4 - onion routing protocol/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.0},"https://phlip9.com/notes/distributed systems/papers/(2020) Semi-Fast Byzantine-tolerant Shared Register without Reliable Broadcast/":{"tf":1.0},"https://phlip9.com/notes/fuzzing/fuzzcheck-rs/":{"tf":1.0},"https://phlip9.com/notes/keyboards/moergo glove80/":{"tf":1.0},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0},"https://phlip9.com/notes/lang/lua/":{"tf":3.1622776601683795},"https://phlip9.com/notes/lang/operator fixity and precedence/":{"tf":2.449489742783178},"https://phlip9.com/notes/misc/kintsugi/":{"tf":1.4142135623730951},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.4142135623730951},"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.0},"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.0},"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.0},"https://phlip9.com/notes/performance/simdjson talk/":{"tf":1.0}},"df":18,"*":{"docs":{},"df":0,"m":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.0}},"df":1}}}},",":{"docs":{},"df":0,"8":{"docs":{},"df":0,"5":{"docs":{},"df":0,"0":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0}},"df":1}}}},".":{"docs":{},"df":0,"0":{"docs":{"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.7320508075688772},"https://phlip9.com/notes/statistics probability/testing whether a coin is fair/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/winsorize/":{"tf":1.0}},"df":4,"g":{"docs":{},"df":0,"h":{"docs":{},"df":0,"z":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0}},"df":1}}}},"1":{"docs":{},"df":0,"0":{"docs":{},"df":0,".":{"docs":{},"df":0,"4":{"docs":{},"df":0,"3":{"docs":{"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0}},"df":1}},"6":{"docs":{},"df":0,"0":{"docs":{},"df":0,".":{"docs":{},"df":0,"1":{"docs":{"https://phlip9.com/notes/WSL/WSL2 custom kernel/":{"tf":1.0}},"df":1}}}},"9":{"docs":{},"df":0,"3":{"docs":{},"df":0,".":{"docs":{},"df":0,"2":{"docs":{"https://phlip9.com/notes/WSL/WSL2 custom kernel/":{"tf":1.7320508075688772},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.4142135623730951}},"df":2}}}}}},"m":{"docs":{},"df":0,"i":{"docs":{},"df":0,"b":{"docs":{"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.0}},"df":1}}}},"2":{"docs":{"https://phlip9.com/notes/reproducible builds/nix/nix debug broken package build/":{"tf":1.0}},"df":1,"7":{"docs":{},"df":0,".":{"docs":{},"df":0,"1":{"docs":{},"df":0,"3":{"docs":{},"df":0,".":{"docs":{},"df":0,"a":{"docs":{},"df":0,"p":{"docs":{},"df":0,"k":{"docs":{"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":3.0}},"df":1}}}}}}}}}},"0":{"docs":{"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/foreign bank account report (FBAR)/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/breez lightning service providers/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0},"https://phlip9.com/notes/devops/deployment strategies/":{"tf":1.0},"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.0},"https://phlip9.com/notes/performance/simdjson talk/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.4142135623730951},"https://phlip9.com/notes/statistics probability/testing whether a coin is fair/":{"tf":1.4142135623730951}},"df":9,"0":{"docs":{},"df":0,"$":{"docs":{},"df":0,"3":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"/":{"docs":{},"df":0,"m":{"docs":{},"df":0,"o":{"docs":{"https://phlip9.com/notes/devops/secrets/1password - secrets automation/":{"tf":1.0}},"df":1}}}}}}},"0":{"docs":{"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.0}},"df":1},"k":{"docs":{"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/foreign bank account report (FBAR)/":{"tf":1.0}},"df":1}},"1":{"docs":{},"df":0,"7":{"docs":{},"df":0,"4":{"docs":{},"df":0,"8":{"docs":{},"df":0,"7":{"docs":{"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":1.4142135623730951}},"df":1}}}}}},"1":{"docs":{"https://phlip9.com/notes/android/linux ADB udev setup/":{"tf":1.0}},"df":1,"0":{"docs":{"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0},"https://phlip9.com/notes/misc/pop_OS! tweaks/":{"tf":1.0}},"df":2},"1":{"docs":{"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":4.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":6.164414002968976}},"df":3},"2":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0},"https://phlip9.com/notes/performance/simdjson talk/":{"tf":1.0}},"df":2,"0":{"docs":{},"df":0,"0":{"docs":{"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.0}},"df":1}}}},"2":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1,"1":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"1":{"docs":{"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.4142135623730951}},"df":2}}}},"3":{"docs":{},"df":0,"4":{"docs":{},"df":0,"5":{"docs":{},"df":0,"4":{"docs":{},"df":0,"0":{"docs":{},"df":0,"8":{"docs":{"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.0}},"df":1}}}},"6":{"docs":{},"df":0,"8":{"docs":{},"df":0,"8":{"docs":{},"df":0,"0":{"docs":{"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.0}},"df":1}}}}}},"4":{"docs":{},"df":0,"2":{"docs":{},"df":0,"8":{"docs":{},"df":0,"8":{"docs":{},"df":0,"0":{"docs":{"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.0}},"df":1}}}}},"8":{"docs":{},"df":0,"m":{"docs":{"https://phlip9.com/notes/misc/setting up a headless raspbian boot image/":{"tf":1.4142135623730951}},"df":1}}},"3":{"docs":{},"df":0,"c":{"docs":{},"df":0,"b":{"docs":{},"df":0,"9":{"docs":{},"df":0,"7":{"docs":{},"df":0,"5":{"docs":{},"df":0,"9":{"docs":{},"df":0,"0":{"docs":{},"df":0,"7":{"docs":{},"df":0,"e":{"docs":{},"df":0,"a":{"docs":{"https://phlip9.com/notes/btc-ln/zero-conf channels/":{"tf":1.0}},"df":1}}}}}}}}}}},"4":{"docs":{"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":1.0},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0},"https://phlip9.com/notes/networking/ipv6 address space/":{"tf":1.0}},"df":3,"4":{"docs":{},"df":0,"b":{"docs":{"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.0}},"df":1}}},"5":{"docs":{"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0}},"df":1,"4":{"docs":{},"df":0,"2":{"docs":{},"df":0,"3":{"docs":{},"df":0,"8":{"docs":{},"df":0,"9":{"docs":{},"df":0,"6":{"docs":{"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.0}},"df":1}}},"9":{"docs":{},"df":0,"3":{"docs":{},"df":0,"2":{"docs":{"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.0}},"df":1}}}}}},"5":{"docs":{},"df":0,"4":{"docs":{"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.7320508075688772}},"df":1},"5":{"docs":{"https://phlip9.com/notes/lang/gdb ref/":{"tf":1.0}},"df":1}}},"6":{"docs":{"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.7320508075688772}},"df":1,"9":{"docs":{},"df":0,"5":{"docs":{},"df":0,"3":{"docs":{},"df":0,"1":{"docs":{},"df":0,"2":{"docs":{},"df":0,"8":{"docs":{"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.0}},"df":1}}}}}}},"7":{"docs":{},"df":0,"0":{"docs":{},"df":0,"5":{"docs":{"https://phlip9.com/notes/crypto/tls exported keying material/":{"tf":1.0}},"df":1}},"3":{"docs":{},"df":0,"9":{"docs":{},"df":0,"7":{"docs":{"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.0}},"df":1}}},"4":{"docs":{},"df":0,"1":{"docs":{"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.4142135623730951}},"df":2}},"6":{"docs":{},"df":0,"8":{"docs":{},"df":0,"0":{"docs":{"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.4142135623730951}},"df":1}}}},"8":{"docs":{},"df":0,"6":{"docs":{},"df":0,"9":{"docs":{"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":1.0}},"df":1}}},"a":{"docs":{"https://phlip9.com/notes/android/root phone with magisk/":{"tf":1.0},"https://phlip9.com/notes/ios/ios setup/":{"tf":1.0},"https://phlip9.com/notes/lang/flutter/flutter setup/":{"tf":1.4142135623730951}},"df":3},"b":{"docs":{},"df":0,"0":{"docs":{},"df":0,"2":{"docs":{},"df":0,"f":{"docs":{},"df":0,"5":{"docs":{},"df":0,"1":{"docs":{"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":1.0}},"df":1}}}}},"i":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 11 - invoices/":{"tf":1.0}},"df":1}}},"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"8":{"docs":{},"df":0,"8":{"docs":{},"df":0,"0":{"docs":{},"df":0,"b":{"docs":{"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":2.0}},"df":1}}}}}},"g":{"docs":{},"df":0,"h":{"docs":{},"df":0,"z":{"docs":{"https://phlip9.com/notes/misc/setting up a headless raspbian boot image/":{"tf":1.0}},"df":1}}},"m":{"docs":{},"df":0,"i":{"docs":{},"df":0,"b":{"docs":{"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.0}},"df":1}}},"s":{"docs":{"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.0}},"df":1,"e":{"docs":{},"df":0,"c":{"docs":{"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.0}},"df":1}},"z":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0}},"df":1}},"x":{"docs":{},"df":0,"x":{"docs":{},"df":0,"x":{"docs":{"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0}},"df":1}}}},"6":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/fastpay/":{"tf":1.4142135623730951},"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.4142135623730951},"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.7320508075688772},"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.0},"https://phlip9.com/notes/combinatorics/k-combinations of a multiset/":{"tf":1.7320508075688772},"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.4142135623730951},"https://phlip9.com/notes/distributed systems/papers/(2020) Semi-Fast Byzantine-tolerant Shared Register without Reliable Broadcast/":{"tf":1.0},"https://phlip9.com/notes/keyboards/moergo glove80/":{"tf":1.0},"https://phlip9.com/notes/lang/operator fixity and precedence/":{"tf":1.0},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0},"https://phlip9.com/notes/networking/ipv6 address space/":{"tf":1.0},"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.0},"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.0},"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.0},"https://phlip9.com/notes/postgres/types of scans/":{"tf":1.0}},"df":15,",":{"docs":{},"df":0,"1":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{"https://phlip9.com/notes/devops/nomad/":{"tf":1.0}},"df":1}}}},".":{"docs":{},"df":0,"0":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.4142135623730951},"https://phlip9.com/notes/statistics probability/winsorize/":{"tf":1.0}},"df":2,".":{"docs":{},"df":0,"6":{"docs":{"https://phlip9.com/notes/lang/flutter/flutter setup/":{"tf":1.0}},"df":1}}},"1":{"docs":{},"df":0,".":{"docs":{},"df":0,"1":{"docs":{"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.4142135623730951}},"df":2},"8":{"docs":{"https://phlip9.com/notes/misc/pop_OS! tweaks/":{"tf":1.0}},"df":1}}},"2":{"docs":{},"df":0,"5":{"docs":{"https://phlip9.com/notes/performance/simdjson talk/":{"tf":1.0}},"df":1},"k":{"docs":{"https://phlip9.com/notes/misc/setting up a headless raspbian boot image/":{"tf":1.0}},"df":1}}},"0":{"docs":{"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":1.4142135623730951},"https://phlip9.com/notes/management/relieve often - why generals were more successful in WWII/":{"tf":1.4142135623730951}},"df":2},"1":{"docs":{},"df":0,"5":{"docs":{},"df":0,"a":{"docs":{},"df":0,"1":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.4142135623730951}},"df":2}}}}},"2":{"docs":{},"df":0,"2":{"docs":{},"df":0,"1":{"docs":{},"df":0,"3":{"docs":{},"df":0,"6":{"docs":{},"df":0,"9":{"docs":{},"df":0,"6":{"docs":{"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.0}},"df":1}}}}}}},"3":{"docs":{"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":2,"6":{"docs":{},"df":0,"6":{"docs":{},"df":0,"9":{"docs":{},"df":0,"8":{"docs":{},"df":0,"2":{"docs":{},"df":0,"4":{"docs":{"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.0}},"df":1}},"9":{"docs":{},"df":0,"6":{"docs":{"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.4142135623730951}},"df":1}}},"9":{"docs":{},"df":0,"1":{"docs":{},"df":0,"2":{"docs":{"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.0}},"df":1}},"2":{"docs":{},"df":0,"0":{"docs":{"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.0}},"df":1}}}}}}},"4":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.7320508075688772},"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.0},"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":2.8284271247461903},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":2.8284271247461903},"https://phlip9.com/notes/networking/ipv6 address space/":{"tf":1.4142135623730951},"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.7320508075688772},"https://phlip9.com/notes/postgres/snippets/":{"tf":1.0}},"df":8,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"s":{"docs":{},"df":0,"r":{"docs":{},"df":0,"2":{"docs":{},"df":0,"l":{"docs":{},"df":0,"7":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0}},"df":1}}}}},"t":{"docs":{},"df":0,"s":{"docs":{},"df":0,"r":{"docs":{},"df":0,"2":{"docs":{},"df":0,"l":{"docs":{},"df":0,"1":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0}},"df":1}}}}}}}},"8":{"docs":{},"df":0,"0":{"docs":{},"df":0,"9":{"docs":{},"df":0,"0":{"docs":{},"df":0,"6":{"docs":{},"df":0,"4":{"docs":{"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.0}},"df":1}}},"6":{"docs":{},"df":0,"0":{"docs":{},"df":0,"8":{"docs":{"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.0}},"df":1}}}}}},":":{"docs":{},"df":0,"f":{"docs":{},"df":0,"f":{"docs":{},"df":0,"9":{"docs":{},"df":0,"b":{"docs":{},"df":0,":":{"docs":{},"df":0,"1":{"docs":{},"df":0,":":{"docs":{},"df":0,":":{"docs":{},"df":0,"/":{"docs":{},"df":0,"4":{"docs":{},"df":0,"8":{"docs":{},"df":0,"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"c":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/networking/ipv6 address space/":{"tf":1.0}},"df":1}}}}}}}}}}},":":{"docs":{},"df":0,"/":{"docs":{},"df":0,"9":{"docs":{},"df":0,"6":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"g":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"h":{"docs":{},"df":0,"m":{"docs":{"https://phlip9.com/notes/networking/ipv6 address space/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}},"5":{"docs":{},"df":0,",":{"docs":{},"df":0,"5":{"docs":{},"df":0,"3":{"docs":{},"df":0,"6":{"docs":{"https://phlip9.com/notes/networking/CIDR/":{"tf":1.0}},"df":1}}}},"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"s":{"docs":{},"df":0,"r":{"docs":{},"df":0,"2":{"docs":{},"df":0,"l":{"docs":{},"df":0,"6":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0}},"df":1}}}}},"t":{"docs":{},"df":0,"s":{"docs":{},"df":0,"r":{"docs":{},"df":0,"2":{"docs":{},"df":0,"l":{"docs":{},"df":0,"8":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0}},"df":1}}}}}}}},"5":{"docs":{},"df":0,"1":{"docs":{},"df":0,"1":{"docs":{},"df":0,"4":{"docs":{},"df":0,"2":{"docs":{},"df":0,"4":{"docs":{"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.0}},"df":1}}}}},"3":{"docs":{},"df":0,"5":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 8 - secure noise transport/":{"tf":1.4142135623730951}},"df":1,"4":{"docs":{},"df":0,"5":{"docs":{},"df":0,"6":{"docs":{"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.0}},"df":1}}}},"6":{"docs":{"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.4142135623730951}},"df":1,"0":{"docs":{},"df":0,"1":{"docs":{"https://phlip9.com/notes/performance/simdjson talk/":{"tf":1.0}},"df":1}}}},"6":{"docs":{},"df":0,"9":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 8 - secure noise transport/":{"tf":1.0}},"df":1}}},"8":{"docs":{},"df":0,"5":{"docs":{"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":2.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":2.6457513110645907}},"df":2}},"e":{"docs":{},"df":0,"9":{"docs":{"https://phlip9.com/notes/lang/gdb ref/":{"tf":1.0}},"df":1}}},"6":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0}},"df":1,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"k":{"docs":{},"df":0,"s":{"docs":{},"df":0,"r":{"docs":{},"df":0,"2":{"docs":{},"df":0,"l":{"docs":{},"df":0,"4":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0}},"df":1}}}}}},"s":{"docs":{},"df":0,"r":{"docs":{},"df":0,"2":{"docs":{},"df":0,"l":{"docs":{},"df":0,"5":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0}},"df":1}}}}},"t":{"docs":{},"df":0,"s":{"docs":{},"df":0,"r":{"docs":{},"df":0,"2":{"docs":{},"df":0,"l":{"docs":{},"df":0,"9":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0}},"df":1}}}}}}}},"6":{"docs":{},"df":0,"6":{"docs":{},"df":0,"3":{"docs":{"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.4142135623730951}},"df":1},"8":{"docs":{"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.0}},"df":1}}},"7":{"docs":{},"df":0,"1":{"docs":{},"df":0,"7":{"docs":{"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.4142135623730951}},"df":1}},"4":{"docs":{},"df":0,"0":{"docs":{"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.0}},"df":1}}}},"7":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"k":{"docs":{},"df":0,"s":{"docs":{},"df":0,"r":{"docs":{},"df":0,"2":{"docs":{},"df":0,"l":{"docs":{},"df":0,"0":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0}},"df":1}}}}}},"s":{"docs":{},"df":0,"r":{"docs":{},"df":0,"2":{"docs":{},"df":0,"l":{"docs":{},"df":0,"2":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0}},"df":1}}}}},"t":{"docs":{},"df":0,"s":{"docs":{},"df":0,"r":{"docs":{},"df":0,"2":{"docs":{},"df":0,"l":{"docs":{},"df":0,"3":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0}},"df":1}}}}}}}},"2":{"docs":{},"df":0,"0":{"docs":{},"df":0,"6":{"docs":{"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.0}},"df":1}},"2":{"docs":{},"df":0,"0":{"docs":{"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.0}},"df":1},"2":{"docs":{"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.0}},"df":1},"9":{"docs":{"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.0}},"df":1}},"3":{"docs":{},"df":0,"3":{"docs":{"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.0}},"df":1}},"4":{"docs":{},"df":0,"0":{"docs":{"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.0}},"df":1}},"5":{"docs":{},"df":0,"7":{"docs":{"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.0}},"df":1}}}},"8":{"docs":{},"df":0,"5":{"docs":{"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.0}},"df":1},"6":{"docs":{},"df":0,"k":{"docs":{},"df":0,"i":{"docs":{},"df":0,"b":{"docs":{"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.0}},"df":1}}}}},"9":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":2.0}},"df":1,".":{"docs":{},"df":0,"3":{"docs":{},"df":0,"1":{"docs":{},"df":0,"2":{"docs":{},"df":0,".":{"docs":{},"df":0,"4":{"docs":{},"df":0,"2":{"docs":{},"df":0,".":{"docs":{},"df":0,"2":{"docs":{},"df":0,"5":{"docs":{},"df":0,"5":{"docs":{"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.0}},"df":1}}},"9":{"docs":{},"df":0,"6":{"docs":{},"df":0,"/":{"docs":{},"df":0,"2":{"docs":{},"df":0,"2":{"docs":{"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.0}},"df":1}}}}}}}}}}}}},"6":{"docs":{},"df":0,"b":{"docs":{"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.0}},"df":1}}},"m":{"docs":{},"df":0,"o":{"docs":{"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.0}},"df":1}},"s":{"docs":{},"df":0,"8":{"docs":{},"df":0,"i":{"docs":{},"df":0,"q":{"docs":{},"df":0,"o":{"docs":{},"df":0,"g":{"docs":{},"df":0,"y":{"docs":{},"df":0,"7":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{},"df":0,"2":{"docs":{},"df":0,"l":{"docs":{},"df":0,"s":{"docs":{},"df":0,"g":{"docs":{},"df":0,"o":{"docs":{},"df":0,"t":{"docs":{},"df":0,"z":{"docs":{},"df":0,"y":{"docs":{},"df":0,"i":{"docs":{},"df":0,"f":{"docs":{},"df":0,"g":{"docs":{"https://phlip9.com/notes/crypto/acme protocol/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}},"7":{"docs":{"https://phlip9.com/notes/WSL/WSL2 custom kernel/":{"tf":1.0},"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/BOLT 7 - p2p node and channel discovery/":{"tf":1.4142135623730951},"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.4142135623730951},"https://phlip9.com/notes/crypto/(talk) authenticated data structures for stateless validation/":{"tf":1.0},"https://phlip9.com/notes/distributed systems/papers/(2020) Semi-Fast Byzantine-tolerant Shared Register without Reliable Broadcast/":{"tf":1.0},"https://phlip9.com/notes/keyboards/moergo glove80/":{"tf":1.0},"https://phlip9.com/notes/lang/lua/":{"tf":1.7320508075688772},"https://phlip9.com/notes/lang/operator fixity and precedence/":{"tf":1.4142135623730951},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0},"https://phlip9.com/notes/networking/ipv6 address space/":{"tf":1.0},"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.0},"https://phlip9.com/notes/performance/bit hacks/":{"tf":2.449489742783178},"https://phlip9.com/notes/performance/simdjson talk/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.4142135623730951}},"df":18,".":{"docs":{},"df":0,"0":{"docs":{"https://phlip9.com/notes/statistics probability/winsorize/":{"tf":1.0}},"df":1},"1":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0}},"df":1},"3":{"docs":{},"df":0,".":{"docs":{},"df":0,"3":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.4142135623730951}},"df":1,".":{"docs":{},"df":0,"u":{"docs":{},"df":0,"f":{"docs":{},"df":0,"2":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.4142135623730951}},"df":1}}}}}}},"5":{"docs":{"https://phlip9.com/notes/statistics probability/winsorize/":{"tf":1.7320508075688772}},"df":1},"x":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1,".":{"docs":{},"df":0,"z":{"docs":{},"df":0,"i":{"docs":{},"df":0,"p":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1}}}}}},"0":{"docs":{"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":1.4142135623730951}},"df":1,"8":{"docs":{},"df":0,"8":{"docs":{"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.0}},"df":1}}},"1":{"docs":{},"df":0,"7":{"docs":{},"df":0,"3":{"docs":{},"df":0,"6":{"docs":{"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.0}},"df":1}}},"9":{"docs":{},"df":0,"5":{"docs":{},"df":0,"7":{"docs":{"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.4142135623730951}},"df":1}},"6":{"docs":{},"df":0,"2":{"docs":{"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.0}},"df":1}}},"m":{"docs":{},"df":0,"i":{"docs":{},"df":0,"b":{"docs":{"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.0}},"df":1}}}},"2":{"docs":{"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0}},"df":1,"0":{"docs":{},"df":0,"1":{"docs":{},"df":0,"1":{"docs":{"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.0}},"df":1}}},"b":{"docs":{"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.0}},"df":1}},"4":{"docs":{},"df":0,"0":{"docs":{},"df":0,"8":{"docs":{"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.0}},"df":1}},"k":{"docs":{"https://phlip9.com/notes/misc/setting up a headless raspbian boot image/":{"tf":1.0}},"df":1}},"5":{"docs":{"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/testing whether a coin is fair/":{"tf":1.4142135623730951}},"df":2},"6":{"docs":{},"df":0,"0":{"docs":{},"df":0,"6":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"6":{"docs":{"https://phlip9.com/notes/lang/flutter/flutter setup/":{"tf":1.0}},"df":1}}}}}}},"7":{"docs":{},"df":0,"0":{"docs":{},"df":0,"9":{"docs":{},"df":0,"d":{"docs":{},"df":0,"4":{"docs":{},"df":0,"9":{"docs":{"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":1.0}},"df":1}}}}},"2":{"docs":{},"df":0,"4":{"docs":{},"df":0,"0":{"docs":{},"df":0,"5":{"docs":{"https://phlip9.com/notes/android/android cli setup/":{"tf":1.4142135623730951}},"df":1}}}}},"8":{"docs":{"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.4142135623730951}},"df":2,"4":{"docs":{},"df":0,"0":{"docs":{"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.0}},"df":1}},"5":{"docs":{},"df":0,"a":{"docs":{"https://phlip9.com/notes/lang/gdb ref/":{"tf":1.0}},"df":1}}},"d":{"docs":{},"df":0,"d":{"docs":{},"df":0,"6":{"docs":{},"df":0,"a":{"docs":{},"df":0,"3":{"docs":{},"df":0,"0":{"docs":{},"df":0,"e":{"docs":{},"df":0,"8":{"docs":{},"df":0,"5":{"docs":{},"df":0,"5":{"docs":{},"df":0,"9":{"docs":{},"df":0,"d":{"docs":{},"df":0,"b":{"docs":{},"df":0,"3":{"docs":{},"df":0,"d":{"docs":{},"df":0,"a":{"docs":{},"df":0,"3":{"docs":{},"df":0,"b":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/postgres/snippets/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}},"t":{"docs":{},"df":0,"h":{"docs":{"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.4142135623730951}},"df":1}}},"8":{"docs":{"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.7320508075688772},"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/BOLT 8 - secure noise transport/":{"tf":1.4142135623730951},"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/gramine/":{"tf":1.0},"https://phlip9.com/notes/lang/flutter/flutter setup/":{"tf":1.0},"https://phlip9.com/notes/lang/operator fixity and precedence/":{"tf":2.23606797749979},"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.0},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":2.0},"https://phlip9.com/notes/misc/setting up a headless raspbian boot image/":{"tf":1.0},"https://phlip9.com/notes/performance/bit hacks/":{"tf":2.6457513110645907},"https://phlip9.com/notes/performance/simdjson talk/":{"tf":2.6457513110645907},"https://phlip9.com/notes/postgres/types of scans/":{"tf":1.7320508075688772},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.4142135623730951}},"df":14,".":{"docs":{},"df":0,"0":{"docs":{"https://phlip9.com/notes/android/android cli setup/":{"tf":1.0},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":2,".":{"docs":{},"df":0,"3":{"docs":{},"df":0,"0":{"docs":{},"df":0,"2":{"docs":{"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0}},"df":1}}}}},"8":{"docs":{},"df":0,".":{"docs":{},"df":0,"8":{"docs":{},"df":0,".":{"docs":{},"df":0,"8":{"docs":{"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.0}},"df":1}}}}}},"0":{"docs":{"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0},"https://phlip9.com/notes/crypto/acme protocol/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/router/lightning router/captive portal/arubanetworks captive portal/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":2.23606797749979}},"df":6,"2":{"docs":{},"df":0,".":{"docs":{},"df":0,"1":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.0}},"df":1}},"q":{"docs":{"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.0}},"df":1}}}}},"1":{"docs":{},"df":0,"6":{"docs":{},"df":0,"0":{"docs":{"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":1.0}},"df":1}},"9":{"docs":{},"df":0,"2":{"docs":{"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.0}},"df":1}},"f":{"docs":{},"df":0,"c":{"docs":{"https://phlip9.com/notes/lang/gdb ref/":{"tf":1.0}},"df":1}}},"2":{"docs":{},"df":0,"m":{"docs":{},"df":0,"i":{"docs":{},"df":0,"b":{"docs":{"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.0}},"df":1}}}},"3":{"docs":{},"df":0,"7":{"docs":{},"df":0,"2":{"docs":{"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.4142135623730951}},"df":1,":":{"docs":{},"df":0,"8":{"docs":{},"df":0,"3":{"docs":{},"df":0,"7":{"docs":{},"df":0,"2":{"docs":{"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.0}},"df":1}}}},"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"c":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"h":{"docs":{},"df":0,"o":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,":":{"docs":{},"df":0,"8":{"docs":{},"df":0,"3":{"docs":{},"df":0,"7":{"docs":{},"df":0,"2":{"docs":{"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}},"4":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0}},"df":1,"8":{"docs":{"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.0}},"df":1}},"5":{"docs":{"https://phlip9.com/notes/fuzzing/fuzzing/":{"tf":1.0}},"df":1,"1":{"docs":{},"df":0,"m":{"docs":{},"df":0,"i":{"docs":{},"df":0,"b":{"docs":{"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.0}},"df":1}}}},"4":{"docs":{},"df":0,"b":{"docs":{},"df":0,"5":{"docs":{},"df":0,"5":{"docs":{},"df":0,"3":{"docs":{"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":1.0}},"df":1}}}}}},"8":{"docs":{},"df":0,"0":{"docs":{"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.0}},"df":1,"m":{"docs":{"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.0}},"df":1}}},"9":{"docs":{},"df":0,"1":{"docs":{},"df":0,"5":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/secure time/":{"tf":1.0}},"df":1}},"5":{"docs":{},"df":0,"2":{"docs":{},"df":0,"1":{"docs":{},"df":0,"1":{"docs":{},"df":0,"8":{"docs":{"https://phlip9.com/notes/android/android cli setup/":{"tf":1.0}},"df":1}}}}}},"]":{"docs":{},"df":0,"&":{"docs":{},"df":0,"g":{"docs":{},"df":0,"t":{"docs":{},"df":0,";":{"docs":{},"df":0,":":{"docs":{},"df":0,":":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"y":{"docs":{},"df":0,"_":{"docs":{},"df":0,"f":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"(":{"docs":{},"df":0,"&":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{},"df":0,"p":{"docs":{},"df":0,";":{"docs":{},"df":0,"b":{"docs":{},"df":0,"y":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"[":{"docs":{},"df":0,".":{"docs":{},"df":0,".":{"docs":{},"df":0,"]":{"docs":{},"df":0,")":{"docs":{},"df":0,".":{"docs":{},"df":0,"u":{"docs":{},"df":0,"n":{"docs":{},"df":0,"w":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"p":{"docs":{"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"c":{"docs":{},"df":0,"4":{"docs":{},"df":0,"f":{"docs":{},"df":0,"5":{"docs":{},"df":0,"7":{"docs":{},"df":0,"7":{"docs":{},"df":0,"5":{"docs":{},"df":0,"d":{"docs":{},"df":0,"7":{"docs":{},"df":0,"9":{"docs":{},"df":0,"6":{"docs":{},"df":0,"5":{"docs":{},"df":0,"0":{"docs":{},"df":0,"3":{"docs":{},"df":0,"e":{"docs":{},"df":0,"9":{"docs":{},"df":0,"6":{"docs":{},"df":0,"1":{"docs":{},"df":0,"3":{"docs":{},"df":0,"7":{"docs":{},"df":0,"f":{"docs":{},"df":0,"7":{"docs":{},"df":0,"7":{"docs":{},"df":0,"c":{"docs":{},"df":0,"6":{"docs":{},"df":0,"8":{"docs":{},"df":0,"a":{"docs":{},"df":0,"8":{"docs":{},"df":0,"2":{"docs":{},"df":0,"9":{"docs":{},"df":0,"a":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"5":{"docs":{},"df":0,"6":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"8":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"d":{"docs":{},"df":0,"7":{"docs":{},"df":0,"0":{"docs":{},"df":0,"1":{"docs":{},"df":0,"4":{"docs":{},"df":0,"0":{"docs":{},"df":0,"b":{"docs":{},"df":0,"0":{"docs":{},"df":0,"8":{"docs":{},"df":0,"1":{"docs":{},"df":0,"b":{"docs":{},"df":0,"0":{"docs":{},"df":0,"9":{"docs":{},"df":0,"4":{"docs":{},"df":0,"4":{"docs":{},"df":0,"9":{"docs":{},"df":0,"0":{"docs":{},"df":0,"c":{"docs":{},"df":0,"5":{"docs":{},"df":0,"7":{"docs":{},"df":0,"b":{"docs":{},"df":0,"f":{"docs":{},"df":0,"f":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"7":{"docs":{},"df":0,"4":{"docs":{},"df":0,"9":{"docs":{},"df":0,"2":{"docs":{"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.7320508075688772}},"df":2}}}}},"t":{"docs":{},"df":0,"h":{"docs":{"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.4142135623730951}},"df":1}}},"9":{"docs":{"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.0},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0},"https://phlip9.com/notes/lang/lua/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/operator fixity and precedence/":{"tf":3.3166247903554}},"df":6,".":{"docs":{},"df":0,"1":{"docs":{"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.4142135623730951}},"df":2},"2":{"docs":{"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.4142135623730951}},"df":2},"8":{"docs":{},"df":0,"5":{"docs":{"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0}},"df":1}},"a":{"docs":{"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.0}},"df":1,".":{"docs":{},"df":0,"1":{"docs":{"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.0}},"df":1}}},"b":{"docs":{"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.0}},"df":1}},"0":{"docs":{"https://phlip9.com/notes/devops/consul/":{"tf":1.0},"https://phlip9.com/notes/management/relieve often - why generals were more successful in WWII/":{"tf":1.4142135623730951},"https://phlip9.com/notes/performance/simdjson talk/":{"tf":1.0}},"df":3,"%":{"docs":{},"df":0,"4":{"docs":{},"df":0,"0":{"docs":{"https://phlip9.com/notes/misc/uptime to downtime conversion/":{"tf":1.0}},"df":1}}}},"1":{"docs":{},"df":0,"2":{"docs":{"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.0}},"df":1,"3":{"docs":{},"df":0,"3":{"docs":{},"df":0,"3":{"docs":{},"df":0,"5":{"docs":{},"df":0,"_":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,".":{"docs":{},"df":0,"z":{"docs":{},"df":0,"i":{"docs":{},"df":0,"p":{"docs":{"https://phlip9.com/notes/android/android cli setup/":{"tf":1.4142135623730951}},"df":1}}}}}}}}}}}}}}}}},"2":{"docs":{},"df":0,"1":{"docs":{},"df":0,"6":{"docs":{"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.0}},"df":1}}},"3":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0}},"df":1,".":{"docs":{},"df":0,"5":{"docs":{},"df":0,"m":{"docs":{},"df":0,"i":{"docs":{},"df":0,"b":{"docs":{"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0}},"df":1}}}}}},"4":{"docs":{},"df":0,"3":{"docs":{"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.0}},"df":1},"8":{"docs":{"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.0}},"df":1}},"5":{"docs":{},"df":0,"1":{"docs":{},"df":0,"1":{"docs":{},"df":0,"0":{"docs":{"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.4142135623730951}},"df":2}}},"m":{"docs":{},"df":0,"i":{"docs":{},"df":0,"b":{"docs":{"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.4142135623730951}},"df":1}}}},"6":{"docs":{},"df":0,"b":{"docs":{"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.0}},"df":1}},"8":{"docs":{},"df":0,"4":{"docs":{"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.0}},"df":1}},"9":{"docs":{},"df":0,"%":{"docs":{},"df":0,"4":{"docs":{"https://phlip9.com/notes/misc/uptime to downtime conversion/":{"tf":1.0}},"df":1}},".":{"docs":{},"df":0,"9":{"docs":{"https://phlip9.com/notes/misc/uptime to downtime conversion/":{"tf":1.0}},"df":1,"%":{"docs":{},"df":0,"1":{"docs":{},"df":0,"0":{"docs":{"https://phlip9.com/notes/misc/uptime to downtime conversion/":{"tf":1.0}},"df":1}}},"9":{"docs":{},"df":0,"%":{"docs":{},"df":0,"1":{"docs":{"https://phlip9.com/notes/misc/uptime to downtime conversion/":{"tf":1.0}},"df":1}},"9":{"docs":{},"df":0,"%":{"docs":{},"df":0,"6":{"docs":{"https://phlip9.com/notes/misc/uptime to downtime conversion/":{"tf":1.0}},"df":1}},"9":{"docs":{},"df":0,"%":{"docs":{},"df":0,"3":{"docs":{},"df":0,"0":{"docs":{"https://phlip9.com/notes/misc/uptime to downtime conversion/":{"tf":1.0}},"df":1}}}}}}}}},"b":{"docs":{},"df":0,"8":{"docs":{},"df":0,"1":{"docs":{},"df":0,"3":{"docs":{},"df":0,"b":{"docs":{},"df":0,"0":{"docs":{},"df":0,"7":{"docs":{},"df":0,"a":{"docs":{},"df":0,"8":{"docs":{},"df":0,"7":{"docs":{},"df":0,"8":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/bip158 - compact block filters/":{"tf":1.0}},"df":1}}}}}}}}}}},"c":{"docs":{},"df":0,"5":{"docs":{},"df":0,"5":{"docs":{"https://phlip9.com/notes/lang/gdb ref/":{"tf":1.0}},"df":1}}},"e":{"docs":{},"df":0,"2":{"docs":{},"df":0,"8":{"docs":{},"df":0,"5":{"docs":{},"df":0,"7":{"docs":{},"df":0,"f":{"docs":{},"df":0,"7":{"docs":{},"df":0,"0":{"docs":{},"df":0,"5":{"docs":{},"df":0,"d":{"docs":{},"df":0,"4":{"docs":{"https://phlip9.com/notes/keyboards/moergo glove80/":{"tf":1.0}},"df":1,"_":{"docs":{},"df":0,"v":{"docs":{},"df":0,"0":{"docs":{},"df":0,".":{"docs":{},"df":0,"9":{"docs":{},"df":0,".":{"docs":{},"df":0,"9":{"docs":{},"df":0,"_":{"docs":{},"df":0,"p":{"docs":{},"df":0,"h":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"p":{"docs":{},"df":0,"k":{"docs":{},"df":0,"e":{"docs":{},"df":0,"y":{"docs":{"https://phlip9.com/notes/keyboards/moergo glove80/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}},"_":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":2.8284271247461903},"https://phlip9.com/notes/lang/rust/understanding sycamore reactivity/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/winsorize/":{"tf":1.4142135623730951}},"df":3,"5":{"docs":{},"df":0,"_":{"docs":{"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.0}},"df":1}},"6":{"docs":{},"df":0,"_":{"docs":{"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.0}},"df":1}},"7":{"docs":{},"df":0,"_":{"docs":{"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.0}},"df":1}},"_":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":2.0}},"df":1,"1":{"docs":{},"df":0,"_":{"docs":{},"df":0,"_":{"docs":{},"df":0,"_":{"docs":{},"df":0,"_":{"docs":{},"df":0,"_":{"docs":{},"df":0,"_":{"docs":{},"df":0,"_":{"docs":{},"df":0,"_":{"docs":{},"df":0,"1":{"docs":{},"df":0,"_":{"docs":{},"df":0,"_":{"docs":{},"df":0,"_":{"docs":{},"df":0,"_":{"docs":{},"df":0,"_":{"docs":{},"df":0,"_":{"docs":{},"df":0,"_":{"docs":{},"df":0,"_":{"docs":{},"df":0,"1":{"docs":{},"df":0,"_":{"docs":{},"df":0,"_":{"docs":{},"df":0,"_":{"docs":{},"df":0,"1":{"docs":{"https://phlip9.com/notes/performance/simdjson talk/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}},"_":{"docs":{"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":1.4142135623730951}},"df":1,"1":{"docs":{},"df":0,"1":{"docs":{},"df":0,"1":{"docs":{},"df":0,"1":{"docs":{},"df":0,"1":{"docs":{},"df":0,"1":{"docs":{},"df":0,"1":{"docs":{},"df":0,"1":{"docs":{},"df":0,"_":{"docs":{},"df":0,"_":{"docs":{},"df":0,"_":{"docs":{},"df":0,"_":{"docs":{},"df":0,"_":{"docs":{},"df":0,"_":{"docs":{},"df":0,"_":{"docs":{},"df":0,"_":{"docs":{},"df":0,"_":{"docs":{},"df":0,"_":{"docs":{},"df":0,"1":{"docs":{},"df":0,"1":{"docs":{},"df":0,"1":{"docs":{},"df":0,"_":{"docs":{"https://phlip9.com/notes/performance/simdjson talk/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}},"_":{"docs":{},"df":0,"_":{"docs":{},"df":0,"_":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.4142135623730951}},"df":1,"_":{"docs":{},"df":0,"_":{"docs":{},"df":0,"_":{"docs":{},"df":0,"_":{"docs":{},"df":0,"_":{"docs":{},"df":0,"_":{"docs":{},"df":0,"_":{"docs":{},"df":0,"_":{"docs":{},"df":0,"_":{"docs":{},"df":0,"_":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.4142135623730951}},"df":1,"_":{"docs":{},"df":0,"_":{"docs":{},"df":0,"_":{"docs":{},"df":0,"_":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}},"a":{"docs":{},"df":0,"d":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/lang/lua/":{"tf":1.0}},"df":1}}},"c":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/lang/lua/":{"tf":1.0}},"df":1}}},"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"c":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/lang/lua/":{"tf":1.0}},"df":1}}}}}},"d":{"docs":{},"df":0,"i":{"docs":{},"df":0,"v":{"docs":{"https://phlip9.com/notes/lang/lua/":{"tf":1.0}},"df":1}},"y":{"docs":{},"df":0,"n":{"docs":{},"df":0,"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{},"df":0,"f":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"g":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0}},"df":1}}}}}}}}}}},"e":{"docs":{},"df":0,"q":{"docs":{"https://phlip9.com/notes/lang/lua/":{"tf":1.0}},"df":1}},"f":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{},"df":0,"u":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"_":{"docs":{},"df":0,"_":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1}}}}}}}},"g":{"docs":{},"df":0,"c":{"docs":{"https://phlip9.com/notes/lang/lua/":{"tf":1.0}},"df":1}},"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"x":{"docs":{"https://phlip9.com/notes/lang/lua/":{"tf":1.4142135623730951}},"df":1}}},"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"_":{"docs":{},"df":0,"_":{"docs":{},"df":0,"(":{"docs":{},"df":0,"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{},"df":0,"f":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":3.0}},"df":1}}}}}}}}}},"p":{"docs":{},"df":0,"a":{"docs":{},"df":0,"i":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/lang/lua/":{"tf":1.0}},"df":1}}}}},"l":{"docs":{},"df":0,"e":{"docs":{"https://phlip9.com/notes/lang/lua/":{"tf":1.0}},"df":1,"n":{"docs":{"https://phlip9.com/notes/lang/lua/":{"tf":1.0}},"df":1}},"t":{"docs":{"https://phlip9.com/notes/lang/lua/":{"tf":1.0}},"df":1}},"m":{"docs":{},"df":0,"1":{"docs":{},"df":0,"2":{"docs":{},"df":0,"8":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/performance/simdjson talk/":{"tf":1.7320508075688772}},"df":1}}}},"o":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/lang/lua/":{"tf":1.0}},"df":1}},"u":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/lang/lua/":{"tf":1.0}},"df":1}}},"n":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"_":{"docs":{},"df":0,"_":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1}}}}},"e":{"docs":{},"df":0,"w":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"x":{"docs":{"https://phlip9.com/notes/lang/lua/":{"tf":1.4142135623730951}},"df":1}}}}}}}},"p":{"docs":{},"df":0,"a":{"docs":{},"df":0,"i":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/lang/lua/":{"tf":1.0}},"df":1}}},"o":{"docs":{},"df":0,"w":{"docs":{"https://phlip9.com/notes/lang/lua/":{"tf":1.0}},"df":1}},"u":{"docs":{},"df":0,"b":{"docs":{"https://phlip9.com/notes/__pub/":{"tf":1.0}},"df":1}}},"s":{"docs":{},"df":0,"u":{"docs":{},"df":0,"b":{"docs":{"https://phlip9.com/notes/lang/lua/":{"tf":1.0}},"df":1}}},"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/lang/lua/":{"tf":1.0}},"df":1}}}}},"u":{"docs":{},"df":0,"n":{"docs":{},"df":0,"m":{"docs":{"https://phlip9.com/notes/lang/lua/":{"tf":1.0}},"df":1}}}},"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"l":{"docs":{},"df":0,"_":{"docs":{},"df":0,"c":{"docs":{},"df":0,"a":{"docs":{},"df":0,"p":{"docs":{"https://phlip9.com/notes/lang/lua/":{"tf":1.0}},"df":1}}}}}},"r":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"y":{"docs":{},"df":0,"_":{"docs":{"https://phlip9.com/notes/lang/lua/":{"tf":1.0}},"df":1}}}}},"s":{"docs":{},"df":0,"y":{"docs":{},"df":0,"n":{"docs":{},"df":0,"c":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1}}}}}}},"b":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1}}}},"y":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.4142135623730951}},"df":1}}}},"f":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{},"df":0,"_":{"docs":{},"df":0,"p":{"docs":{},"df":0,"l":{"docs":{},"df":0,"u":{"docs":{},"df":0,"g":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"(":{"docs":{},"df":0,"p":{"docs":{},"df":0,"l":{"docs":{},"df":0,"u":{"docs":{},"df":0,"g":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"_":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}},"i":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.0}},"df":1,"c":{"docs":{},"df":0,"l":{"docs":{},"df":0,"u":{"docs":{},"df":0,"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"v":{"docs":{},"df":0,"e":{"docs":{},"df":0,"_":{"docs":{"https://phlip9.com/notes/lang/lua/":{"tf":1.0}},"df":1}}}}}}}},"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"x":{"docs":{"https://phlip9.com/notes/":{"tf":1.0}},"df":1}}},"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"_":{"docs":{},"df":0,"k":{"docs":{},"df":0,"e":{"docs":{},"df":0,"y":{"docs":{},"df":0,"_":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"q":{"docs":{},"df":0,"u":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"(":{"docs":{},"df":0,"s":{"docs":{},"df":0,"g":{"docs":{},"df":0,"x":{"docs":{},"df":0,"_":{"docs":{},"df":0,"k":{"docs":{},"df":0,"e":{"docs":{},"df":0,"y":{"docs":{},"df":0,"_":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"q":{"docs":{},"df":0,"u":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"_":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"_":{"docs":{"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.0}},"df":1}}}}},"m":{"docs":{},"df":0,"m":{"docs":{},"df":0,"_":{"docs":{},"df":0,"c":{"docs":{},"df":0,"m":{"docs":{},"df":0,"p":{"docs":{},"df":0,"e":{"docs":{},"df":0,"q":{"docs":{},"df":0,"_":{"docs":{},"df":0,"e":{"docs":{},"df":0,"p":{"docs":{},"df":0,"i":{"docs":{},"df":0,"8":{"docs":{},"df":0,"(":{"docs":{},"df":0,"s":{"docs":{},"df":0,"p":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{"https://phlip9.com/notes/performance/simdjson talk/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}},"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{},"df":0,"u":{"docs":{},"df":0,"_":{"docs":{},"df":0,"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"1":{"docs":{},"df":0,"2":{"docs":{},"df":0,"8":{"docs":{},"df":0,"(":{"docs":{},"df":0,"b":{"docs":{},"df":0,"y":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/performance/simdjson talk/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}},"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"x":{"docs":{},"df":0,"_":{"docs":{},"df":0,"e":{"docs":{},"df":0,"p":{"docs":{},"df":0,"u":{"docs":{},"df":0,"8":{"docs":{},"df":0,"(":{"docs":{},"df":0,"s":{"docs":{},"df":0,"p":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{"https://phlip9.com/notes/performance/simdjson talk/":{"tf":1.0}},"df":1}}}}}}}}}}}},"o":{"docs":{},"df":0,"v":{"docs":{},"df":0,"e":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{},"df":0,"k":{"docs":{},"df":0,"_":{"docs":{},"df":0,"e":{"docs":{},"df":0,"p":{"docs":{},"df":0,"i":{"docs":{},"df":0,"8":{"docs":{},"df":0,"(":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"y":{"docs":{},"df":0,"w":{"docs":{},"df":0,"h":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/performance/simdjson talk/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}},"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{},"df":0,"1":{"docs":{},"df":0,"_":{"docs":{},"df":0,"e":{"docs":{},"df":0,"p":{"docs":{},"df":0,"i":{"docs":{},"df":0,"8":{"docs":{"https://phlip9.com/notes/performance/simdjson talk/":{"tf":1.0}},"df":1}}}}}}}},"h":{"docs":{},"df":0,"u":{"docs":{},"df":0,"f":{"docs":{},"df":0,"f":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"_":{"docs":{},"df":0,"e":{"docs":{},"df":0,"p":{"docs":{},"df":0,"i":{"docs":{},"df":0,"8":{"docs":{},"df":0,"(":{"docs":{},"df":0,"x":{"docs":{"https://phlip9.com/notes/performance/simdjson talk/":{"tf":1.0}},"df":1}}}}}}}}}}}}},"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"u":{"docs":{},"df":0,"_":{"docs":{},"df":0,"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"1":{"docs":{},"df":0,"2":{"docs":{},"df":0,"8":{"docs":{},"df":0,"(":{"docs":{},"df":0,"b":{"docs":{},"df":0,"y":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/performance/simdjson talk/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}},"u":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"_":{"docs":{"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.0}},"df":1}}}}},"n":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{},"df":0,"e":{"docs":{"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.7320508075688772}},"df":1}}},"o":{"docs":{},"df":0,"b":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"g":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"[":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.7320508075688772}},"df":1}}}}}}}}}}}},"p":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"v":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"s":{"docs":{},"df":0,"_":{"docs":{"https://phlip9.com/notes/combinatorics/k-combinations of a multiset/":{"tf":1.0}},"df":1}}}}}}}}},"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"v":{"docs":{},"df":0,"e":{"docs":{},"df":0,"d":{"docs":{},"df":0,"1":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":2.0}},"df":1},"2":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":2.0}},"df":1},"3":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.4142135623730951}},"df":1},"4":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.4142135623730951}},"df":1}}}}}}}}},"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.0}},"df":1,"e":{"docs":{},"df":0,"d":{"docs":{},"df":0,"_":{"docs":{},"df":0,"b":{"docs":{},"df":0,"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"b":{"docs":{},"df":0,"_":{"docs":{},"df":0,"h":{"docs":{},"df":0,"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.0}},"df":1,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"*":{"docs":{},"df":0,")":{"docs":{},"df":0,"*":{"docs":{},"df":0,"b":{"docs":{},"df":0,"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"b":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}},"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"_":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0}},"df":1}}}}}}},"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"i":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"g":{"docs":{},"df":0,"_":{"docs":{"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.0}},"df":1}}}}}}}}},"u":{"docs":{},"df":0,"n":{"docs":{},"df":0,"f":{"docs":{},"df":0,"o":{"docs":{},"df":0,"l":{"docs":{},"df":0,"d":{"docs":{},"df":0,"(":{"docs":{},"df":0,"l":{"docs":{},"df":0,"_":{"docs":{},"df":0,"0":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0}},"df":1}}}}}}}},"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"z":{"docs":{},"df":0,"e":{"docs":{},"df":0,"d":{"docs":{},"df":0,"_":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0}},"df":1}}}}}}}}}}}}}},"{":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":1.4142135623730951}},"df":1}}},"a":{"docs":{},"df":0,"&":{"docs":{},"df":0,"g":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/lang/gdb ref/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/rr with rust/":{"tf":1.0}},"df":2}}},")":{"docs":{},"df":0,".":{"docs":{},"df":0,"w":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"p":{"docs":{},"df":0,"p":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"g":{"docs":{},"df":0,"_":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{},"df":0,"d":{"docs":{},"df":0,"(":{"docs":{},"df":0,"c":{"docs":{"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}},"+":{"docs":{},"df":0,"0":{"docs":{},"df":0,".":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"1":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1}}}}},"x":{"docs":{"https://phlip9.com/notes/android/android cli setup/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0}},"df":2}},",":{"docs":{},"df":0,"b":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.4142135623730951}},"df":1,",":{"docs":{},"df":0,"c":{"docs":{"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.0}},"df":1}}},"c":{"docs":{"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.0}},"df":1}},".":{"docs":{},"df":0,".":{"docs":{},"df":0,"b":{"docs":{"https://phlip9.com/notes/combinatorics/k-combinations of a multiset/":{"tf":1.0}},"df":1}},"k":{"docs":{},"df":0,".":{"docs":{},"df":0,"a":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 4 - onion routing protocol/":{"tf":1.0},"https://phlip9.com/notes/performance/profiling/":{"tf":1.0}},"df":2}}}},"/":{"docs":{},"df":0,"b":{"docs":{"https://phlip9.com/notes/devops/deployment strategies/":{"tf":1.0}},"df":1},"g":{"docs":{},"df":0,"s":{"docs":{},"df":0,"c":{"docs":{},"df":0,".":{"docs":{},"df":0,"p":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/confidential computing/gramine/":{"tf":1.4142135623730951}},"df":1}}}}}}},"[":{"docs":{},"df":0,"#":{"docs":{},"df":0,"a":{"docs":{"https://phlip9.com/notes/lang/lua/":{"tf":1.4142135623730951}},"df":1}},"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{"https://phlip9.com/notes/btc-ln/atomic multipath payments (AMP)/":{"tf":2.449489742783178}},"df":1}}}},"i":{"docs":{"https://phlip9.com/notes/lang/lua/":{"tf":1.0}},"df":1}},"_":{"docs":{"https://phlip9.com/notes/AI ML/Markov Decision Process (MDP)/":{"tf":1.7320508075688772}},"df":1,"0":{"docs":{"https://phlip9.com/notes/AI ML/Markov Decision Process (MDP)/":{"tf":1.0}},"df":1},"1":{"docs":{"https://phlip9.com/notes/AI ML/Expectimax Search/":{"tf":1.4142135623730951},"https://phlip9.com/notes/AI ML/Markov Decision Process (MDP)/":{"tf":1.0}},"df":2},"2":{"docs":{"https://phlip9.com/notes/AI ML/Expectimax Search/":{"tf":1.0}},"df":1},"i":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1},"k":{"docs":{"https://phlip9.com/notes/AI ML/Markov Decision Process (MDP)/":{"tf":1.0}},"df":1},"s":{"docs":{},"df":0,"}":{"docs":{},"df":0,"{":{"docs":{},"df":0,"\\":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"g":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"x":{"docs":{"https://phlip9.com/notes/AI ML/Markov Decision Process (MDP)/":{"tf":1.0}},"df":1}}}}}}}}}},"x":{"docs":{},"df":0,"*":{"docs":{},"df":0,"b":{"docs":{},"df":0,"_":{"docs":{},"df":0,"x":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1}}}}},"y":{"docs":{},"df":0,"*":{"docs":{},"df":0,"b":{"docs":{},"df":0,"_":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1}}}}},"z":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1,"*":{"docs":{},"df":0,"b":{"docs":{},"df":0,"_":{"docs":{},"df":0,"z":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1}}}}},"{":{"docs":{"https://phlip9.com/notes/AI ML/Markov Decision Process (MDP)/":{"tf":1.0}},"df":1}},"a":{"docs":{},"df":0,"a":{"docs":{},"df":0,"a":{"docs":{"https://phlip9.com/notes/devops/algo wireguard VPN server/":{"tf":2.0},"https://phlip9.com/notes/performance/bit hacks/":{"tf":2.0}},"df":2,"c":{"docs":{},"df":0,"3":{"docs":{},"df":0,"n":{"docs":{},"df":0,"z":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"1":{"docs":{},"df":0,"l":{"docs":{},"df":0,"z":{"docs":{},"df":0,"d":{"docs":{},"df":0,"i":{"docs":{},"df":0,"1":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"5":{"docs":{},"df":0,"a":{"docs":{},"df":0,"a":{"docs":{},"df":0,"a":{"docs":{},"df":0,"a":{"docs":{},"df":0,"i":{"docs":{},"df":0,"b":{"docs":{},"df":0,"3":{"docs":{},"df":0,"x":{"docs":{},"df":0,"6":{"docs":{},"df":0,"x":{"docs":{},"df":0,"x":{"docs":{},"df":0,"0":{"docs":{},"df":0,"6":{"docs":{},"df":0,"7":{"docs":{},"df":0,"4":{"docs":{},"df":0,"l":{"docs":{},"df":0,"y":{"docs":{},"df":0,"f":{"docs":{},"df":0,"2":{"docs":{},"df":0,"d":{"docs":{},"df":0,"g":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"d":{"docs":{},"df":0,"u":{"docs":{},"df":0,"a":{"docs":{},"df":0,"g":{"docs":{},"df":0,"j":{"docs":{},"df":0,"y":{"docs":{},"df":0,"a":{"docs":{},"df":0,"1":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"q":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"g":{"docs":{},"df":0,"c":{"docs":{},"df":0,"6":{"docs":{},"df":0,"p":{"docs":{},"df":0,"g":{"docs":{},"df":0,"h":{"docs":{},"df":0,"z":{"docs":{},"df":0,"m":{"docs":{},"df":0,"b":{"docs":{},"df":0,"w":{"docs":{},"df":0,"c":{"docs":{},"df":0,"k":{"docs":{"https://phlip9.com/notes/misc/prepping RPI for embedded dev/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"g":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"w":{"docs":{},"df":0,"2":{"docs":{},"df":0,"y":{"docs":{},"df":0,"r":{"docs":{},"df":0,"u":{"docs":{},"df":0,"x":{"docs":{},"df":0,"o":{"docs":{},"df":0,"y":{"docs":{},"df":0,"b":{"docs":{},"df":0,"9":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"w":{"docs":{},"df":0,"r":{"docs":{},"df":0,"z":{"docs":{},"df":0,"w":{"docs":{},"df":0,"4":{"docs":{},"df":0,"e":{"docs":{},"df":0,"/":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"l":{"docs":{},"df":0,"5":{"docs":{},"df":0,"g":{"docs":{},"df":0,"h":{"docs":{},"df":0,"5":{"docs":{},"df":0,"8":{"docs":{},"df":0,"j":{"docs":{},"df":0,"t":{"docs":{},"df":0,"n":{"docs":{},"df":0,"i":{"docs":{},"df":0,"/":{"docs":{},"df":0,"h":{"docs":{},"df":0,"n":{"docs":{},"df":0,"o":{"docs":{},"df":0,"x":{"docs":{},"df":0,"z":{"docs":{},"df":0,"z":{"docs":{"https://phlip9.com/notes/misc/setting up a headless raspbian boot image/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"d":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.0}},"df":1},"r":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{},"df":0,"6":{"docs":{},"df":0,"4":{"docs":{"https://phlip9.com/notes/lang/rust/rr with rust/":{"tf":1.0},"https://phlip9.com/notes/misc/arm target triples/":{"tf":1.0}},"df":2}}}}}},"b":{"docs":{},"df":0,")":{"docs":{},"df":0,"u":{"docs":{},"df":0,"s":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/btc utreexo - utxo accumulator/":{"tf":1.0}},"df":1}}},"7":{"docs":{},"df":0,"7":{"docs":{},"df":0,"9":{"docs":{},"df":0,"2":{"docs":{},"df":0,"5":{"docs":{},"df":0,"8":{"docs":{},"df":0,"8":{"docs":{"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0}},"df":1}}}}}}},"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.0}},"df":1}}}}},"c":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0}},"df":1},"i":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/reproducible builds/reproducible-builds.org/":{"tf":1.0}},"df":1}},"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.4142135623730951}},"df":2}},"v":{"docs":{"https://phlip9.com/notes/android/root phone with magisk/":{"tf":1.0},"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/money services business (MSB)/":{"tf":1.0},"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":2.0},"https://phlip9.com/notes/combinatorics/k-combinations of a multiset/":{"tf":2.0},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.4142135623730951},"https://phlip9.com/notes/design/form design/":{"tf":1.0},"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":1.0},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/lua/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/understanding sycamore reactivity/":{"tf":1.0},"https://phlip9.com/notes/misc/kintsugi/":{"tf":1.0},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.4142135623730951},"https://phlip9.com/notes/networking/CIDR/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/testing whether a coin is fair/":{"tf":1.4142135623730951},"https://phlip9.com/notes/statistics probability/winsorize/":{"tf":1.4142135623730951}},"df":16}},"s":{"docs":{},"df":0,"(":{"docs":{},"df":0,"x":{"docs":{"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0}},"df":1}},"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"c":{"docs":{"https://phlip9.com/notes/lang/rust/rust verification tools/":{"tf":1.0}},"df":1}}},"o":{"docs":{},"df":0,"l":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/secure time/":{"tf":1.4142135623730951},"https://phlip9.com/notes/devops/nomad/":{"tf":1.0},"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/nix/nix debug spurrious rebuilds/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/G-test - multinomial goodness-of-fit/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/MAD - median absolute deviation/":{"tf":1.4142135623730951},"https://phlip9.com/notes/statistics probability/testing whether a coin is fair/":{"tf":1.7320508075688772}},"df":10}}},"r":{"docs":{},"df":0,"b":{"docs":{"https://phlip9.com/notes/AI ML/Markov Decision Process (MDP)/":{"tf":1.4142135623730951}},"df":1}}},"t":{"docs":{},"df":0,"@":{"docs":{},"df":0,"y":{"docs":{},"df":0,"p":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.4142135623730951}},"df":1}}},"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":2.0},"https://phlip9.com/notes/confidential computing/marblerun/":{"tf":1.0},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":2.6457513110645907},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.7320508075688772},"https://phlip9.com/notes/lang/rust/rust verification tools/":{"tf":1.0},"https://phlip9.com/notes/networking/network interface card (NIC)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.4142135623730951}},"df":8}}}},"y":{"docs":{},"df":0,"p":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.7320508075688772}},"df":1}}},"u":{"docs":{},"df":0,"r":{"docs":{},"df":0,"d":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/statistics probability/multinomial distribution/":{"tf":1.0}},"df":1}}}}}}},"c":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"m":{"docs":{"https://phlip9.com/notes/misc/optimization solvers/":{"tf":1.0}},"df":1}}}},"c":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.7320508075688772},"https://phlip9.com/notes/networking/network interface card (NIC)/":{"tf":1.0}},"df":2}}},"p":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/android/android cli setup/":{"tf":1.0},"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/money services business (MSB)/":{"tf":2.23606797749979},"https://phlip9.com/notes/btc-ln/BOLT 11 - invoices/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":2.449489742783178},"https://phlip9.com/notes/btc-ln/BOLT 4 - onion routing protocol/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/BOLT 8 - secure noise transport/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/breez lightning service providers/":{"tf":1.4142135623730951},"https://phlip9.com/notes/btc-ln/zero-conf channels/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.4142135623730951},"https://phlip9.com/notes/crypto/(talk) authenticated data structures for stateless validation/":{"tf":1.0},"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/arubanetworks captive portal/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.4142135623730951},"https://phlip9.com/notes/statistics probability/testing whether a coin is fair/":{"tf":1.0}},"df":16,"_":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":2.0}},"df":1}}}}}}}},"c":{"docs":{},"df":0,"h":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.0}},"df":1}}}}}}},"o":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.0}},"df":1}}}},"s":{"docs":{},"df":0,"s":{"docs":{"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0},"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/money services business (MSB)/":{"tf":1.7320508075688772},"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.4142135623730951},"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":2.0},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.7320508075688772},"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.7320508075688772},"https://phlip9.com/notes/confidential computing/intel TDX/":{"tf":1.4142135623730951},"https://phlip9.com/notes/devops/algo wireguard VPN server/":{"tf":1.0},"https://phlip9.com/notes/devops/secrets/1password - secrets automation/":{"tf":1.7320508075688772},"https://phlip9.com/notes/devops/secrets/ejson (Shopify)/":{"tf":1.7320508075688772},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/sycamore x futures/":{"tf":1.0},"https://phlip9.com/notes/postgres/snippets/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/reproducible-builds.org/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":2.23606797749979},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":3.872983346207417},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":3.605551275463989}},"df":20,".":{"docs":{},"df":0,"&":{"docs":{},"df":0,"l":{"docs":{},"df":0,"t":{"docs":{},"df":0,";":{"docs":{},"df":0,"/":{"docs":{},"df":0,"p":{"docs":{},"df":0,"&":{"docs":{},"df":0,"g":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.0}},"df":2}}}}}}}}}}}}},"i":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0},"https://phlip9.com/notes/b l o c k c h a i n/fastpay/":{"tf":1.0},"https://phlip9.com/notes/fuzzing/fuzzcheck-rs/":{"tf":1.0},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0},"https://phlip9.com/notes/misc/kintsugi/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.0}},"df":6}}}}},"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"o":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":1.0}},"df":1}},"p":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"h":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/fastpay/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.0},"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":1.0}},"df":3}}}}}},"r":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.0},"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":1.0},"https://phlip9.com/notes/networking/CIDR/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/multinomial distribution/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/winsorize/":{"tf":1.0}},"df":7}},"u":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/foreign bank account report (FBAR)/":{"tf":5.385164807134504},"https://phlip9.com/notes/b l o c k c h a i n/fastpay/":{"tf":3.872983346207417},"https://phlip9.com/notes/b l o c k c h a i n/sui/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/BOLT 4 - onion routing protocol/":{"tf":1.0},"https://phlip9.com/notes/crypto/acme protocol/":{"tf":3.0},"https://phlip9.com/notes/devops/algo wireguard VPN server/":{"tf":1.0},"https://phlip9.com/notes/devops/azure CLI/":{"tf":1.7320508075688772},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.4142135623730951}},"df":8}}}},"u":{"docs":{},"df":0,"m":{"docs":{"https://phlip9.com/notes/crypto/(talk) authenticated data structures for stateless validation/":{"tf":1.0}},"df":1,"u":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/btc utreexo - utxo accumulator/":{"tf":2.8284271247461903},"https://phlip9.com/notes/crypto/(talk) authenticated data structures for stateless validation/":{"tf":2.0}},"df":2}}},"r":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/secure time/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/herbie - float error fixer/":{"tf":1.4142135623730951},"https://phlip9.com/notes/statistics probability/standard error/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/testing whether a coin is fair/":{"tf":1.4142135623730951}},"df":4}}},"h":{"docs":{},"df":0,"i":{"docs":{},"df":0,"e":{"docs":{},"df":0,"v":{"docs":{"https://phlip9.com/notes/postgres/postgres performance tuning/":{"tf":1.0}},"df":1}}}},"i":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/misc/kintsugi/":{"tf":1.0}},"df":1}},"k":{"docs":{"https://phlip9.com/notes/distributed systems/papers/(2020) Semi-Fast Byzantine-tolerant Shared Register without Reliable Broadcast/":{"tf":1.7320508075688772}},"df":1,"n":{"docs":{},"df":0,"o":{"docs":{},"df":0,"w":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"d":{"docs":{},"df":0,"g":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.4142135623730951}},"df":3}}}}}}}},"l":{"docs":{"https://phlip9.com/notes/crypto/biscuit authz/":{"tf":1.0},"https://phlip9.com/notes/devops/AKS - azure kubernetes service/":{"tf":1.0}},"df":2},"m":{"docs":{"https://phlip9.com/notes/crypto/acme protocol/":{"tf":2.6457513110645907},"https://phlip9.com/notes/crypto/smallstep - private online CA & ACME server/":{"tf":1.7320508075688772}},"df":2,"e":{"docs":{},"df":0,"/":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"g":{"docs":{},"df":0,"o":{"docs":{"https://phlip9.com/notes/crypto/acme protocol/":{"tf":1.0}},"df":1}}}},"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"w":{"docs":{"https://phlip9.com/notes/crypto/acme protocol/":{"tf":1.7320508075688772}},"df":1}}}}}},"q":{"docs":{},"df":0,"u":{"docs":{},"df":0,"i":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0},"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":1.0}},"df":2}}}},"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"y":{"docs":{},"df":0,"m":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0}},"df":1}}}}},"t":{"docs":{"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/foreign bank account report (FBAR)/":{"tf":1.0},"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/money services business (MSB)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":1.0},"https://phlip9.com/notes/crypto/dex - open-source OIDC & OAuth 2.0 provider/":{"tf":1.0},"https://phlip9.com/notes/devops/nomad/":{"tf":1.0},"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.0}},"df":7,"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/AI ML/Expectimax Search/":{"tf":1.0},"https://phlip9.com/notes/AI ML/Markov Decision Process (MDP)/":{"tf":3.3166247903554},"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0},"https://phlip9.com/notes/combinatorics/k-combinations of a multiset/":{"tf":1.0},"https://phlip9.com/notes/lang/koka-lang/":{"tf":1.4142135623730951},"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.7320508075688772}},"df":7}},"v":{"docs":{"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/money services business (MSB)/":{"tf":2.449489742783178},"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.7320508075688772},"https://phlip9.com/notes/crypto/dex - open-source OIDC & OAuth 2.0 provider/":{"tf":1.0},"https://phlip9.com/notes/misc/optimization solvers/":{"tf":1.0},"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.0}},"df":8}},"o":{"docs":{"https://phlip9.com/notes/misc/kintsugi/":{"tf":1.7320508075688772}},"df":1,"r":{"docs":{"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":2.23606797749979},"https://phlip9.com/notes/lang/rust/understanding sycamore reactivity/":{"tf":1.0}},"df":2}},"u":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/AI ML/Markov Decision Process (MDP)/":{"tf":1.0},"https://phlip9.com/notes/android/OTA updates for rooted android phone/":{"tf":1.0},"https://phlip9.com/notes/android/android cli setup/":{"tf":1.0},"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":2.0},"https://phlip9.com/notes/b l o c k c h a i n/btc utreexo - utxo accumulator/":{"tf":1.0},"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/BOLT 7 - p2p node and channel discovery/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/submarine swaps/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":2.0},"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.0},"https://phlip9.com/notes/crypto/biscuit authz/":{"tf":1.0},"https://phlip9.com/notes/design/form design/":{"tf":1.0},"https://phlip9.com/notes/devops/service mesh/":{"tf":1.0},"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":2.0},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.7320508075688772},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0},"https://phlip9.com/notes/lang/flutter/flutter setup/":{"tf":1.0},"https://phlip9.com/notes/lang/koka-lang/":{"tf":1.0},"https://phlip9.com/notes/lang/lua/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/understanding sycamore reactivity/":{"tf":1.4142135623730951},"https://phlip9.com/notes/misc/kintsugi/":{"tf":1.4142135623730951},"https://phlip9.com/notes/misc/pop_OS! tweaks/":{"tf":1.0},"https://phlip9.com/notes/misc/uptime to downtime conversion/":{"tf":1.0},"https://phlip9.com/notes/networking/network interface card (NIC)/":{"tf":1.0},"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.0},"https://phlip9.com/notes/performance/simdjson talk/":{"tf":1.7320508075688772},"https://phlip9.com/notes/postgres/types of scans/":{"tf":1.4142135623730951},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/arubanetworks captive portal/":{"tf":1.4142135623730951},"https://phlip9.com/notes/statistics probability/standard error/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/testing whether a coin is fair/":{"tf":1.7320508075688772}},"df":34}}}},"y":{"docs":{},"df":0,"c":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":1.0}},"df":1}}}},"d":{"docs":{"https://phlip9.com/notes/btc-ln/breez lightning service providers/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/submarine swaps/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0},"https://phlip9.com/notes/crypto/biscuit authz/":{"tf":1.4142135623730951},"https://phlip9.com/notes/devops/algo wireguard VPN server/":{"tf":1.0},"https://phlip9.com/notes/devops/docker compose/":{"tf":1.0},"https://phlip9.com/notes/devops/secrets/ejson-kms (AWS)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/devops/service mesh/":{"tf":2.0},"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":1.0},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0},"https://phlip9.com/notes/lang/lua/":{"tf":1.0},"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/nix/nix auto-allocate-uids -> nixbld users/":{"tf":1.0}},"df":15,"a":{"docs":{},"df":0,"f":{"docs":{},"df":0,"r":{"docs":{},"df":0,"u":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":2.449489742783178}},"df":1,"'":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1},".":{"docs":{},"df":0,"1":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1}},"_":{"docs":{},"df":0,"b":{"docs":{},"df":0,"u":{"docs":{},"df":0,"s":{"docs":{},"df":0,"_":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"v":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1,"e":{"docs":{},"df":0,".":{"docs":{},"df":0,"i":{"docs":{},"df":0,"2":{"docs":{},"df":0,"c":{"docs":{},"df":0,"_":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"v":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1}}}}}}}}},"s":{"docs":{},"df":0,"p":{"docs":{},"df":0,"i":{"docs":{},"df":0,"_":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"v":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}},"d":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"p":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"y":{"docs":{},"df":0,"_":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"x":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":2.23606797749979}},"df":1}}}}}}}}}}}},"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"x":{"docs":{},"df":0,"p":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.4142135623730951}},"df":1,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,".":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"x":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}},"p":{"docs":{},"df":0,"i":{"docs":{},"df":0,"x":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{},"df":0,"b":{"docs":{},"df":0,"u":{"docs":{},"df":0,"f":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1}}}}}}}}}}}}}},"p":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0},"https://phlip9.com/notes/misc/water distillation setup/":{"tf":2.23606797749979},"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.7320508075688772}},"df":3,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"s":{"docs":{},"df":0,"$":{"docs":{},"df":0,"1":{"docs":{},"df":0,"4":{"docs":{},"df":0,"h":{"docs":{},"df":0,"t":{"docs":{},"df":0,"t":{"docs":{},"df":0,"p":{"docs":{},"df":0,"s":{"docs":{},"df":0,":":{"docs":{},"df":0,"/":{"docs":{},"df":0,"/":{"docs":{},"df":0,"w":{"docs":{},"df":0,"w":{"docs":{},"df":0,"w":{"docs":{},"df":0,".":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"z":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,".":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"/":{"docs":{},"df":0,"r":{"docs":{},"df":0,"u":{"docs":{},"df":0,"b":{"docs":{},"df":0,"b":{"docs":{"https://phlip9.com/notes/misc/water distillation setup/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"w":{"docs":{},"df":0,"a":{"docs":{},"df":0,"y":{"docs":{"https://phlip9.com/notes/android/root phone with magisk/":{"tf":1.4142135623730951}},"df":1}}}},"b":{"docs":{"https://phlip9.com/notes/android/ADB over TCP inside WSL2/":{"tf":3.1622776601683795},"https://phlip9.com/notes/android/OTA updates for rooted android phone/":{"tf":1.4142135623730951},"https://phlip9.com/notes/android/android cli setup/":{"tf":2.449489742783178},"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":2.449489742783178},"https://phlip9.com/notes/android/linux ADB udev setup/":{"tf":2.0},"https://phlip9.com/notes/android/root phone with magisk/":{"tf":2.449489742783178}},"df":6,"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"c":{"docs":{},"df":0,"k":{"docs":{"https://phlip9.com/notes/android/root phone with magisk/":{"tf":1.7320508075688772},"https://phlip9.com/notes/devops/algo wireguard VPN server/":{"tf":1.0}},"df":2}}}},"u":{"docs":{},"df":0,"s":{"docs":{"https://phlip9.com/notes/android/linux ADB udev setup/":{"tf":1.0}},"df":1}}},"d":{"docs":{"https://phlip9.com/notes/WSL/WSL2 custom kernel/":{"tf":1.0},"https://phlip9.com/notes/android/android cli setup/":{"tf":1.0},"https://phlip9.com/notes/b l o c k c h a i n/btc utreexo - utxo accumulator/":{"tf":1.0},"https://phlip9.com/notes/b l o c k c h a i n/fastpay/":{"tf":1.0},"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/breez lightning service providers/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/lightning network notes/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":3.1622776601683795},"https://phlip9.com/notes/confidential computing/gramine/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0},"https://phlip9.com/notes/design/form design/":{"tf":1.0},"https://phlip9.com/notes/devops/algo wireguard VPN server/":{"tf":2.23606797749979},"https://phlip9.com/notes/devops/linkerd/":{"tf":1.4142135623730951},"https://phlip9.com/notes/fuzzing/fuzzcheck-rs/":{"tf":1.0},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0},"https://phlip9.com/notes/lang/lua/":{"tf":1.7320508075688772},"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.7320508075688772},"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":3.872983346207417},"https://phlip9.com/notes/misc/kintsugi/":{"tf":2.23606797749979},"https://phlip9.com/notes/misc/prepping RPI for embedded dev/":{"tf":1.7320508075688772},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.7320508075688772},"https://phlip9.com/notes/misc/setting up a headless raspbian boot image/":{"tf":1.0},"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.0},"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/nix/nix debug broken package build/":{"tf":1.4142135623730951},"https://phlip9.com/notes/reproducible builds/nix/nix debug spurrious rebuilds/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.0}},"df":30,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.4142135623730951}},"df":1}}},"i":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/atomic multipath payments (AMP)/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/breez lightning service providers/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.0},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0},"https://phlip9.com/notes/postgres/postgres performance tuning/":{"tf":1.4142135623730951},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":2.23606797749979},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":3.0}},"df":12,"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/reproducible-builds.org/":{"tf":1.0}},"df":2,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"_":{"docs":{},"df":0,"d":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":2.6457513110645907}},"df":1,"_":{"docs":{},"df":0,"s":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":2.8284271247461903}},"df":1}}}}}},"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"x":{"docs":{},"df":0,"t":{"docs":{},"df":0,"_":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"g":{"docs":{},"df":0,"t":{"docs":{},"df":0,"h":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":2.23606797749979}},"df":1}}}}}}}}}}}}}}}}}}}}}},"r":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/fastpay/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.0},"https://phlip9.com/notes/devops/azure CLI/":{"tf":1.0},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.0},"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.7320508075688772}},"df":6,"@":{"docs":{},"df":0,"(":{"docs":{},"df":0,"x":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0}},"df":1}}},"_":{"docs":{},"df":0,"p":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1}}}},"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"s":{"docs":{"https://phlip9.com/notes/android/android cli setup/":{"tf":1.0},"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/foreign bank account report (FBAR)/":{"tf":1.0},"https://phlip9.com/notes/b l o c k c h a i n/fastpay/":{"tf":1.7320508075688772},"https://phlip9.com/notes/btc-ln/BOLT 7 - p2p node and channel discovery/":{"tf":1.4142135623730951},"https://phlip9.com/notes/btc-ln/submarine swaps/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel TDX/":{"tf":1.4142135623730951},"https://phlip9.com/notes/devops/azure CLI/":{"tf":2.23606797749979},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.4142135623730951},"https://phlip9.com/notes/networking/CIDR/":{"tf":3.0},"https://phlip9.com/notes/networking/ipv6 address space/":{"tf":3.1622776601683795},"https://phlip9.com/notes/networking/network interface card (NIC)/":{"tf":1.7320508075688772},"https://phlip9.com/notes/networking/network interfaces/":{"tf":3.605551275463989},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.7320508075688772},"https://phlip9.com/notes/router/lightning router/captive portal/arubanetworks captive portal/":{"tf":3.3166247903554},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":3.1622776601683795},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":2.449489742783178},"https://phlip9.com/notes/router/lightning router/lightning router overview/":{"tf":1.0}},"df":19,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"c":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"p":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 7 - p2p node and channel discovery/":{"tf":1.0}},"df":1}}}}}}}}}},"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"r":{"docs":{},"df":0,"f":{"docs":{},"df":0,"c":{"docs":{},"df":0,"4":{"docs":{},"df":0,"2":{"docs":{},"df":0,"9":{"docs":{},"df":0,"1":{"docs":{"https://phlip9.com/notes/networking/ipv6 address space/":{"tf":1.0}},"df":1}}}}}}}}},"f":{"docs":{},"df":0,"d":{"docs":{},"df":0,"6":{"docs":{},"df":0,"c":{"docs":{},"df":0,":":{"docs":{},"df":0,"6":{"docs":{},"df":0,"5":{"docs":{},"df":0,"7":{"docs":{},"df":0,"8":{"docs":{},"df":0,":":{"docs":{},"df":0,"6":{"docs":{},"df":0,"5":{"docs":{},"df":0,"0":{"docs":{},"df":0,"2":{"docs":{},"df":0,":":{"docs":{},"df":0,":":{"docs":{},"df":0,"8":{"docs":{},"df":0,"5":{"docs":{},"df":0,"a":{"docs":{},"df":0,"/":{"docs":{},"df":0,"1":{"docs":{},"df":0,"2":{"docs":{},"df":0,"8":{"docs":{"https://phlip9.com/notes/networking/ipv6 address space/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}},"r":{"docs":{},"df":0,"f":{"docs":{},"df":0,"c":{"docs":{},"df":0,"3":{"docs":{},"df":0,"8":{"docs":{},"df":0,"4":{"docs":{},"df":0,"9":{"docs":{"https://phlip9.com/notes/networking/ipv6 address space/":{"tf":1.0}},"df":1}}}}}}}}}},"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 7 - p2p node and channel discovery/":{"tf":1.0}},"df":1}}}},"u":{"docs":{},"df":0,"s":{"docs":{"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":2}}},"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"i":{"docs":{},"df":0,"y":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/sui/":{"tf":1.0}},"df":1}}}}},"h":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/lang/rust/rust verification tools/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.0}},"df":2}}},"j":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/winsorize/":{"tf":1.4142135623730951}},"df":2}},"u":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/confidential computing/gramine/":{"tf":1.0},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0},"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.0}},"df":3}}}},"m":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/marblerun/":{"tf":1.0}},"df":2,"@":{"docs":{},"df":0,"e":{"docs":{},"df":0,"x":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{},"df":0,"p":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,".":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"g":{"docs":{"https://phlip9.com/notes/crypto/acme protocol/":{"tf":1.4142135623730951}},"df":1}}}}}}}}}}}},"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.0}},"df":2}}}}},"t":{"docs":{"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":1.0}},"df":1}}},"o":{"docs":{},"df":0,"b":{"docs":{"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":2.0}},"df":2},"p":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/distributed systems/papers/(2021) Leaderless Consensus/":{"tf":1.4142135623730951},"https://phlip9.com/notes/fuzzing/fuzzcheck-rs/":{"tf":1.0}},"df":2}}},"t":{"docs":{"https://phlip9.com/notes/fuzzing/fuzzing/":{"tf":1.0}},"df":1},"v":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"c":{"docs":{},"df":0,"e":{"docs":{},"df":0,"d":{"docs":{},"df":0,"/":{"docs":{},"df":0,"c":{"docs":{},"df":0,"p":{"docs":{},"df":0,"u":{"docs":{"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0}},"df":1}}}},"\\":{"docs":{},"df":0,"p":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0}},"df":1}}}}}}},"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"g":{"docs":{"https://phlip9.com/notes/combinatorics/k-combinations of a multiset/":{"tf":1.0},"https://phlip9.com/notes/fuzzing/fuzzcheck-rs/":{"tf":1.0},"https://phlip9.com/notes/networking/network interface card (NIC)/":{"tf":1.0},"https://phlip9.com/notes/postgres/postgres performance tuning/":{"tf":1.0}},"df":4}}}}},"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"u":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/reproducible builds/nix/links/":{"tf":1.0}},"df":1}}}},"r":{"docs":{},"df":0,"s":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/AI ML/Expectimax Search/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/marblerun/":{"tf":1.0}},"df":2}}}},"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 11 - invoices/":{"tf":1.4142135623730951},"https://phlip9.com/notes/btc-ln/BOLT 4 - onion routing protocol/":{"tf":1.7320508075688772},"https://phlip9.com/notes/btc-ln/BOLT 7 - p2p node and channel discovery/":{"tf":1.7320508075688772},"https://phlip9.com/notes/btc-ln/hosted channels/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.4142135623730951}},"df":7}}}}},"i":{"docs":{},"df":0,"c":{"docs":{"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":1.0}},"df":1},"s":{"docs":{"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/foreign bank account report (FBAR)/":{"tf":1.0},"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":1.0}},"df":2,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"y":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.0}},"df":2}},"u":{"docs":{},"df":0,"r":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0}},"df":1}}}}}}}}}},"e":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/gramine/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel TDX/":{"tf":1.0}},"df":4,"a":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0}},"df":1}},"s":{"docs":{},"df":0,"m":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.7320508075688772},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":2.0},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":2.0},"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.4142135623730951}},"df":4,"c":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0}},"df":1}}}}}},"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"v":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0}},"df":1}}}}}}},"n":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0}},"df":2}}},"x":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0}},"df":1}},"f":{"docs":{},"df":0,"a":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0},"https://phlip9.com/notes/nvim/universal-ctags Notes/":{"tf":1.0}},"df":3}}}},"f":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/foreign bank account report (FBAR)/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0},"https://phlip9.com/notes/lang/koka-lang/":{"tf":1.0},"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.4142135623730951}},"df":6}}},"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/reproducible builds/rebuilderd/":{"tf":1.0}},"df":1}}}},"l":{"docs":{"https://phlip9.com/notes/fuzzing/fuzzing/":{"tf":1.0}},"df":1},"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"_":{"docs":{},"df":0,"d":{"docs":{},"df":0,"r":{"docs":{},"df":0,"v":{"docs":{"https://phlip9.com/notes/reproducible builds/nix/nix debug spurrious rebuilds/":{"tf":1.4142135623730951}},"df":1}}}},"w":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/btc-ln/lightning rod/":{"tf":1.0},"https://phlip9.com/notes/management/relieve often - why generals were more successful in WWII/":{"tf":1.0}},"df":2}}}}}}}},"g":{"docs":{"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/nix/nix debug spurrious rebuilds/":{"tf":1.0}},"df":2,"a":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/AI ML/Expectimax Search/":{"tf":1.0},"https://phlip9.com/notes/android/root phone with magisk/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0},"https://phlip9.com/notes/keyboards/moergo glove80/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/rust/rr with rust/":{"tf":1.0},"https://phlip9.com/notes/management/relieve often - why generals were more successful in WWII/":{"tf":1.0},"https://phlip9.com/notes/misc/kintsugi/":{"tf":1.0},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0},"https://phlip9.com/notes/misc/setting up a headless raspbian boot image/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.4142135623730951}},"df":12,"s":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/WSL/WSL2 custom kernel/":{"tf":1.0},"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/secure time/":{"tf":1.4142135623730951},"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":1.4142135623730951},"https://phlip9.com/notes/networking/CIDR/":{"tf":1.4142135623730951},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/multinomial distribution/":{"tf":1.0}},"df":10}}}}},"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"c":{"docs":{"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/money services business (MSB)/":{"tf":1.4142135623730951}},"df":1},"t":{"docs":{"https://phlip9.com/notes/AI ML/Expectimax Search/":{"tf":2.23606797749979},"https://phlip9.com/notes/AI ML/Markov Decision Process (MDP)/":{"tf":1.0},"https://phlip9.com/notes/devops/algo wireguard VPN server/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":2.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":3.1622776601683795}},"df":6,"'":{"docs":{"https://phlip9.com/notes/AI ML/Expectimax Search/":{"tf":1.0}},"df":1}}}},"g":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"g":{"docs":{"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/foreign bank account report (FBAR)/":{"tf":1.7320508075688772},"https://phlip9.com/notes/b l o c k c h a i n/btc utreexo - utxo accumulator/":{"tf":1.0},"https://phlip9.com/notes/b l o c k c h a i n/fastpay/":{"tf":2.449489742783178},"https://phlip9.com/notes/crypto/(talk) authenticated data structures for stateless validation/":{"tf":1.0},"https://phlip9.com/notes/devops/AKS - azure kubernetes service/":{"tf":1.0},"https://phlip9.com/notes/devops/service mesh/":{"tf":1.0},"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.0}},"df":7},"s":{"docs":{},"df":0,"s":{"docs":{"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.4142135623730951}},"df":2}}}}},"n":{"docs":{},"df":0,"o":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/confidential computing/marblerun/":{"tf":1.0}},"df":1}}}},"o":{"docs":{"https://phlip9.com/notes/misc/optimization solvers/":{"tf":1.0}},"df":1},"r":{"docs":{},"df":0,"e":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/BOLT 7 - p2p node and channel discovery/":{"tf":1.0},"https://phlip9.com/notes/crypto/tls exported keying material/":{"tf":1.4142135623730951},"https://phlip9.com/notes/distributed systems/papers/(2021) Leaderless Consensus/":{"tf":1.0},"https://phlip9.com/notes/lang/flutter/flutter setup/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.0}},"df":6,"e":{"docs":{},"df":0,"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/money services business (MSB)/":{"tf":1.0},"https://phlip9.com/notes/b l o c k c h a i n/fastpay/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.0}},"df":3}}}}}}}},"h":{"docs":{},"df":0,"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0}},"df":1}}}},"i":{"docs":{"https://phlip9.com/notes/AI ML/":{"tf":1.0}},"df":1,"m":{"docs":{"https://phlip9.com/notes/btc-ln/lightning libs/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.4142135623730951}},"df":2},"n":{"docs":{},"df":0,"'":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/lang/rust/rr with rust/":{"tf":1.0},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":2}}},"r":{"docs":{},"df":0,"p":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/router/lightning router/lightning router overview/":{"tf":1.0}},"df":1}}}}}},"j":{"docs":{},"df":0,"a":{"docs":{},"df":0,"x":{"docs":{"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.0}},"df":1}}},"k":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":2.449489742783178},"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.0},"https://phlip9.com/notes/devops/AKS - azure kubernetes service/":{"tf":1.4142135623730951}},"df":3},"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.0}},"df":1}}}}}},"r":{"docs":{},"df":0,"m":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1}}},"b":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/fastpay/":{"tf":1.0},"https://phlip9.com/notes/b l o c k c h a i n/sui/":{"tf":1.0}},"df":2}}}}},"g":{"docs":{"https://phlip9.com/notes/confidential computing/gramine/":{"tf":1.0},"https://phlip9.com/notes/crypto/acme protocol/":{"tf":1.0},"https://phlip9.com/notes/distributed systems/papers/(2021) Leaderless Consensus/":{"tf":1.0}},"df":3,"e":{"docs":{},"df":0,"b":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{"https://phlip9.com/notes/lang/koka-lang/":{"tf":1.0},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":2}}},"r":{"docs":{},"df":0,"m":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.4142135623730951}},"df":2}}}}}}}},"o":{"docs":{"https://phlip9.com/notes/devops/algo wireguard VPN server/":{"tf":2.23606797749979}},"df":1,".":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"f":{"docs":{},"df":0,"i":{"docs":{},"df":0,"g":{"docs":{"https://phlip9.com/notes/devops/algo wireguard VPN server/":{"tf":1.0}},"df":1}}}}}}},"/":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"f":{"docs":{},"df":0,"i":{"docs":{},"df":0,"g":{"docs":{},"df":0,".":{"docs":{},"df":0,"c":{"docs":{},"df":0,"f":{"docs":{},"df":0,"g":{"docs":{"https://phlip9.com/notes/devops/algo wireguard VPN server/":{"tf":1.0}},"df":1}}}},"s":{"docs":{},"df":0,"/":{"docs":{},"df":0,"1":{"docs":{},"df":0,"7":{"docs":{},"df":0,"8":{"docs":{},"df":0,".":{"docs":{},"df":0,"1":{"docs":{},"df":0,"2":{"docs":{},"df":0,"8":{"docs":{},"df":0,".":{"docs":{},"df":0,"1":{"docs":{},"df":0,".":{"docs":{},"df":0,"1":{"docs":{},"df":0,"9":{"docs":{},"df":0,"0":{"docs":{},"df":0,"/":{"docs":{},"df":0,"w":{"docs":{},"df":0,"i":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"g":{"docs":{},"df":0,"u":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"d":{"docs":{},"df":0,"/":{"docs":{},"df":0,"p":{"docs":{},"df":0,"h":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"p":{"docs":{},"df":0,"p":{"docs":{},"df":0,"h":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,".":{"docs":{},"df":0,"p":{"docs":{},"df":0,"n":{"docs":{},"df":0,"g":{"docs":{"https://phlip9.com/notes/devops/algo wireguard VPN server/":{"tf":1.0}},"df":1}}}}}}}}},"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"p":{"docs":{},"df":0,".":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"f":{"docs":{"https://phlip9.com/notes/devops/algo wireguard VPN server/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"h":{"docs":{},"df":0,"m":{"docs":{"https://phlip9.com/notes/AI ML/Expectimax Search/":{"tf":1.0},"https://phlip9.com/notes/AI ML/Markov Decision Process (MDP)/":{"tf":2.449489742783178},"https://phlip9.com/notes/combinatorics/k-combinations of a multiset/":{"tf":1.7320508075688772},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.4142135623730951},"https://phlip9.com/notes/distributed systems/papers/(2020) Semi-Fast Byzantine-tolerant Shared Register without Reliable Broadcast/":{"tf":1.0},"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.7320508075688772},"https://phlip9.com/notes/statistics probability/multinomial distribution/":{"tf":1.0}},"df":9}}}}}}},"i":{"docs":{},"df":0,"a":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/BOLT 7 - p2p node and channel discovery/":{"tf":1.0},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0}},"df":3,"s":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.0},"https://phlip9.com/notes/networking/network interfaces/":{"tf":2.0}},"df":2}},"b":{"docs":{},"df":0,"a":{"docs":{},"df":0,"b":{"docs":{},"df":0,"a":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":2.0}},"df":1}}}},"c":{"docs":{"https://phlip9.com/notes/btc-ln/atomic multipath payments (AMP)/":{"tf":3.1622776601683795},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.7320508075688772}},"df":2},"g":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/design/form design/":{"tf":1.7320508075688772}},"df":1,"(":{"docs":{},"df":0,"5":{"docs":{},"df":0,"1":{"docs":{},"df":0,"2":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0}},"df":1}}}}}},"k":{"docs":{"https://phlip9.com/notes/reproducible builds/reproducible-builds.org/":{"tf":1.0}},"df":1}},"l":{"docs":{},"df":0,"_":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"_":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/performance/simdjson talk/":{"tf":1.4142135623730951}},"df":1}}}}}}}}},"o":{"docs":{},"df":0,"c":{"docs":{"https://phlip9.com/notes/combinatorics/k-combinations of a multiset/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":3.1622776601683795},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel TDX/":{"tf":1.0},"https://phlip9.com/notes/devops/azure CLI/":{"tf":1.7320508075688772},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":3.0},"https://phlip9.com/notes/networking/CIDR/":{"tf":1.7320508075688772},"https://phlip9.com/notes/networking/ipv6 address space/":{"tf":1.4142135623730951},"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.0},"https://phlip9.com/notes/performance/simdjson talk/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/nix/nix auto-allocate-uids -> nixbld users/":{"tf":2.6457513110645907}},"df":12,"'":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0}},"df":1},":":{"docs":{},"df":0,":":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"c":{"docs":{},"df":0,":":{"docs":{},"df":0,":":{"docs":{},"df":0,"g":{"docs":{},"df":0,"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"b":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"&":{"docs":{},"df":0,"g":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.4142135623730951}},"df":1,";":{"docs":{},"df":0,"&":{"docs":{},"df":0,"g":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}},"b":{"docs":{},"df":0,"o":{"docs":{},"df":0,"x":{"docs":{},"df":0,"e":{"docs":{},"df":0,"d":{"docs":{},"df":0,":":{"docs":{},"df":0,":":{"docs":{},"df":0,"b":{"docs":{},"df":0,"o":{"docs":{},"df":0,"x":{"docs":{},"df":0,"&":{"docs":{},"df":0,"l":{"docs":{},"df":0,"t":{"docs":{},"df":0,";":{"docs":{},"df":0,"(":{"docs":{},"df":0,"d":{"docs":{},"df":0,"y":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.0}},"df":1}}}},"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"d":{"docs":{},"df":0,":":{"docs":{},"df":0,":":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,":":{"docs":{},"df":0,":":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,":":{"docs":{},"df":0,":":{"docs":{},"df":0,"c":{"docs":{},"df":0,"u":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"s":{"docs":{},"df":0,"y":{"docs":{},"df":0,"n":{"docs":{},"df":0,"c":{"docs":{},"df":0,":":{"docs":{},"df":0,":":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"c":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"&":{"docs":{},"df":0,"l":{"docs":{},"df":0,"t":{"docs":{},"df":0,";":{"docs":{},"df":0,"w":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"p":{"docs":{},"df":0,":":{"docs":{},"df":0,":":{"docs":{},"df":0,"f":{"docs":{},"df":0,"i":{"docs":{},"df":0,"l":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,":":{"docs":{},"df":0,":":{"docs":{},"df":0,"b":{"docs":{},"df":0,"o":{"docs":{},"df":0,"x":{"docs":{},"df":0,"e":{"docs":{},"df":0,"d":{"docs":{},"df":0,":":{"docs":{},"df":0,":":{"docs":{},"df":0,"b":{"docs":{},"df":0,"o":{"docs":{},"df":0,"x":{"docs":{"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"w":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.7320508075688772},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":2.6457513110645907},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":3.1622776601683795},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":2.0},"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel TDX/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":1.0},"https://phlip9.com/notes/crypto/(talk) authenticated data structures for stateless validation/":{"tf":1.4142135623730951},"https://phlip9.com/notes/crypto/TLS self-signed pubkey-only certs/":{"tf":1.0},"https://phlip9.com/notes/crypto/acme protocol/":{"tf":1.4142135623730951},"https://phlip9.com/notes/devops/consul/":{"tf":1.0},"https://phlip9.com/notes/devops/nomad/":{"tf":1.0},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0},"https://phlip9.com/notes/lang/gdb ref/":{"tf":1.0},"https://phlip9.com/notes/lang/koka-lang/":{"tf":1.0},"https://phlip9.com/notes/lang/operator fixity and precedence/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/sycamore x futures/":{"tf":1.7320508075688772},"https://phlip9.com/notes/lang/rust/understanding sycamore reactivity/":{"tf":1.0},"https://phlip9.com/notes/management/relieve often - why generals were more successful in WWII/":{"tf":1.0},"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":1.7320508075688772},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0},"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.4142135623730951},"https://phlip9.com/notes/reproducible builds/nix/nix debug broken package build/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/reproducible-builds.org/":{"tf":1.4142135623730951},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/router/lightning router/captive portal/arubanetworks captive portal/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":3.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":2.0},"https://phlip9.com/notes/router/lightning router/lightning router overview/":{"tf":1.7320508075688772},"https://phlip9.com/notes/statistics probability/CDF confidence bands - DKW inequality/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/testing whether a coin is fair/":{"tf":1.4142135623730951}},"df":32,"(":{"docs":{},"df":0,"u":{"docs":{},"df":0,"n":{"docs":{},"df":0,"u":{"docs":{},"df":0,"s":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.7320508075688772}},"df":1}}}}}}},"u":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":1.0}},"df":1}}},"o":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/foreign bank account report (FBAR)/":{"tf":1.0},"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.0}},"df":2,"g":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/BOLT 11 - invoices/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":1.0},"https://phlip9.com/notes/devops/secrets/ejson-kms (AWS)/":{"tf":1.0},"https://phlip9.com/notes/misc/kintsugi/":{"tf":1.0},"https://phlip9.com/notes/networking/CIDR/":{"tf":1.0},"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/lightning router overview/":{"tf":1.0}},"df":11,"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/crypto/(talk) authenticated data structures for stateless validation/":{"tf":1.0},"https://phlip9.com/notes/devops/secrets/ejson-kms (AWS)/":{"tf":1.0},"https://phlip9.com/notes/devops/service mesh/":{"tf":1.0},"https://phlip9.com/notes/networking/CIDR/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/testing whether a coin is fair/":{"tf":1.0}},"df":5}}}}}},"p":{"docs":{},"df":0,"h":{"docs":{},"df":0,"a":{"docs":{"https://phlip9.com/notes/AI ML/Expectimax Search/":{"tf":2.449489742783178},"https://phlip9.com/notes/statistics probability/CDF confidence bands - DKW inequality/":{"tf":1.0}},"df":2,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/AI ML/Markov Decision Process (MDP)/":{"tf":1.0}},"df":1}}}}}},"n":{"docs":{"https://phlip9.com/notes/crypto/acme protocol/":{"tf":1.4142135623730951}},"df":1}},"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.7320508075688772},"https://phlip9.com/notes/android/root phone with magisk/":{"tf":1.0},"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.4142135623730951},"https://phlip9.com/notes/btc-ln/breez lightning service providers/":{"tf":1.0},"https://phlip9.com/notes/combinatorics/k-combinations of a multiset/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0},"https://phlip9.com/notes/crypto/TLS self-signed pubkey-only certs/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.0},"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":1.0},"https://phlip9.com/notes/misc/kintsugi/":{"tf":1.0},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0},"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.0},"https://phlip9.com/notes/performance/simdjson talk/":{"tf":1.4142135623730951},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.4142135623730951},"https://phlip9.com/notes/reproducible builds/reproducible-builds.org/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.0}},"df":18}}}}},"t":{"docs":{"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":1.4142135623730951},"https://phlip9.com/notes/keyboards/moergo glove80/":{"tf":1.0},"https://phlip9.com/notes/lang/gdb ref/":{"tf":1.0},"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":2.0},"https://phlip9.com/notes/misc/pop_OS! tweaks/":{"tf":1.4142135623730951},"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.0}},"df":6,"e":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.0}},"df":1,"n":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":1.0},"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":1.0},"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":1.4142135623730951},"https://phlip9.com/notes/misc/setting up a headless raspbian boot image/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/arubanetworks captive portal/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/p-value/":{"tf":1.0}},"df":9}}},"h":{"docs":{},"df":0,"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"g":{"docs":{},"df":0,"h":{"docs":{"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.4142135623730951}},"df":2}}}}}},"w":{"docs":{},"df":0,"a":{"docs":{},"df":0,"y":{"docs":{"https://phlip9.com/notes/AI ML/Markov Decision Process (MDP)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/android/ADB over TCP inside WSL2/":{"tf":1.0},"https://phlip9.com/notes/b l o c k c h a i n/fastpay/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/breez lightning service providers/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.0},"https://phlip9.com/notes/combinatorics/k-combinations of a multiset/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/marblerun/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":1.0},"https://phlip9.com/notes/design/form design/":{"tf":1.0},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/rust/understanding sycamore reactivity/":{"tf":1.0},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0},"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.0},"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.0},"https://phlip9.com/notes/performance/profiling/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/reproducible-builds.org/":{"tf":1.7320508075688772}},"df":19}}}},"m":{"docs":{},"df":0,"b":{"docs":{},"df":0,"i":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.4142135623730951}},"df":1}}},"g":{"docs":{},"df":0,"u":{"docs":{"https://phlip9.com/notes/lang/operator fixity and precedence/":{"tf":1.0}},"df":1}}}},"d":{"docs":{"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":2.8284271247461903},"https://phlip9.com/notes/lang/rust/rr with rust/":{"tf":1.0}},"df":2,"6":{"docs":{},"df":0,"4":{"docs":{"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/gramine/":{"tf":1.4142135623730951}},"df":2,"/":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"u":{"docs":{},"df":0,"x":{"docs":{"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.0}},"df":1}}}}}}}},"’":{"docs":{"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.0}},"df":1}},"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/foreign bank account report (FBAR)/":{"tf":1.0}},"df":1}}},"l":{"docs":{"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/foreign bank account report (FBAR)/":{"tf":1.0}},"df":1},"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/btc-ln/breez lightning service providers/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":1.0}},"df":3}},"u":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/foreign bank account report (FBAR)/":{"tf":1.0},"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/money services business (MSB)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.7320508075688772},"https://phlip9.com/notes/btc-ln/BOLT 4 - onion routing protocol/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/submarine swaps/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/zero-conf channels/":{"tf":1.7320508075688772},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0},"https://phlip9.com/notes/fuzzing/fuzzcheck-rs/":{"tf":1.0},"https://phlip9.com/notes/misc/uptime to downtime conversion/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.4142135623730951}},"df":11,"_":{"docs":{},"df":0,"m":{"docs":{},"df":0,"s":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.0}},"df":1}}}}}}}}},"p":{"docs":{"https://phlip9.com/notes/AI ML/Expectimax Search/":{"tf":2.8284271247461903},"https://phlip9.com/notes/AI ML/Markov Decision Process (MDP)/":{"tf":3.4641016151377544},"https://phlip9.com/notes/android/android cli setup/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.4142135623730951},"https://phlip9.com/notes/btc-ln/atomic multipath payments (AMP)/":{"tf":2.6457513110645907},"https://phlip9.com/notes/btc-ln/breez lightning service providers/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.7320508075688772},"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":2.0},"https://phlip9.com/notes/confidential computing/marblerun/":{"tf":1.7320508075688772},"https://phlip9.com/notes/crypto/dex - open-source OIDC & OAuth 2.0 provider/":{"tf":1.0},"https://phlip9.com/notes/crypto/smallstep - private online CA & ACME server/":{"tf":2.0},"https://phlip9.com/notes/devops/AKS - azure kubernetes service/":{"tf":1.4142135623730951},"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":3.605551275463989},"https://phlip9.com/notes/keyboards/moergo glove80/":{"tf":1.0},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0},"https://phlip9.com/notes/misc/kintsugi/":{"tf":1.0},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":2.0},"https://phlip9.com/notes/networking/CIDR/":{"tf":2.0},"https://phlip9.com/notes/performance/bit hacks/":{"tf":6.557438524302},"https://phlip9.com/notes/performance/simdjson talk/":{"tf":2.449489742783178},"https://phlip9.com/notes/reproducible builds/nix/links/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.4142135623730951},"https://phlip9.com/notes/statistics probability/G-test - multinomial goodness-of-fit/":{"tf":2.0},"https://phlip9.com/notes/statistics probability/cheat sheet/":{"tf":2.0},"https://phlip9.com/notes/statistics probability/p-value/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/testing whether a coin is fair/":{"tf":1.7320508075688772}},"df":29,";":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0}},"df":1,"&":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{},"df":0,"p":{"docs":{"https://phlip9.com/notes/android/android cli setup/":{"tf":1.0},"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/gramine/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":2.0},"https://phlip9.com/notes/distributed systems/papers/(2020) Semi-Fast Byzantine-tolerant Shared Register without Reliable Broadcast/":{"tf":1.0},"https://phlip9.com/notes/lang/ATS/Install ATS2/":{"tf":1.0},"https://phlip9.com/notes/lang/operator fixity and precedence/":{"tf":1.0},"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":1.4142135623730951},"https://phlip9.com/notes/misc/prepping RPI for embedded dev/":{"tf":1.0},"https://phlip9.com/notes/performance/bit hacks/":{"tf":2.6457513110645907},"https://phlip9.com/notes/performance/simdjson talk/":{"tf":1.4142135623730951}},"df":11}}}},"'":{"docs":{},"df":0,"_":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0}},"df":1},"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/crypto/TLS self-signed pubkey-only certs/":{"tf":1.0}},"df":1}}}}},"(":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"p":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.4142135623730951}},"df":1}}}}}}},"*":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"r":{"docs":{},"df":0,")":{"docs":{},"df":0,".":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"_":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/combinatorics/k-combinations of a multiset/":{"tf":1.0}},"df":1}}}}}}}}}}}}},"0":{"docs":{"https://phlip9.com/notes/AI ML/Expectimax Search/":{"tf":1.0}},"df":1},"[":{"docs":{},"df":0,"&":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{},"df":0,"p":{"docs":{},"df":0,";":{"docs":{},"df":0,"[":{"docs":{},"df":0,"u":{"docs":{},"df":0,"8":{"docs":{"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":2.23606797749979}},"df":1}}}}}}}},"b":{"docs":{},"df":0,"\"":{"docs":{},"df":0,"f":{"docs":{},"df":0,"i":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":1.0}},"df":1}}}}},"t":{"docs":{"https://phlip9.com/notes/combinatorics/k-combinations of a multiset/":{"tf":1.0}},"df":1},"u":{"docs":{},"df":0,"8":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":3.1622776601683795},"https://phlip9.com/notes/crypto/TLS self-signed pubkey-only certs/":{"tf":1.0},"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":3.1622776601683795},"https://phlip9.com/notes/crypto/tls exported keying material/":{"tf":1.0},"https://phlip9.com/notes/performance/simdjson talk/":{"tf":1.4142135623730951}},"df":5}}},"\\":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"x":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/AI ML/Expectimax Search/":{"tf":1.0}},"df":1,"{":{"docs":{},"df":0,"(":{"docs":{},"df":0,"1":{"docs":{"https://phlip9.com/notes/AI ML/Expectimax Search/":{"tf":1.0}},"df":1},"2":{"docs":{"https://phlip9.com/notes/AI ML/Expectimax Search/":{"tf":1.0}},"df":1}}}}}}}},"a":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0}},"df":1,"r":{"docs":{},"df":0,"r":{"docs":{},"df":0,"[":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/combinatorics/k-combinations of a multiset/":{"tf":1.0}},"df":1}}}}},"b":{"docs":{},"df":0,"e":{"docs":{},"df":0,"h":{"docs":{},"df":0,"a":{"docs":{},"df":0,"v":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/keyboards/moergo glove80/":{"tf":1.0}},"df":1}}}}}}}},"c":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"f":{"docs":{"https://phlip9.com/notes/crypto/TLS self-signed pubkey-only certs/":{"tf":1.0}},"df":1}}}}},"i":{"docs":{},"df":0,"p":{"docs":{},"df":0,"h":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"x":{"docs":{},"df":0,"t":{"docs":{},"df":0,"[":{"docs":{},"df":0,".":{"docs":{},"df":0,".":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{},"df":0,"_":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}},"e":{"docs":{},"df":0,"v":{"docs":{"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.0}},"df":1}},"f":{"docs":{},"df":0,"(":{"docs":{},"df":0,"x":{"docs":{},"df":0,"_":{"docs":{},"df":0,"1":{"docs":{"https://phlip9.com/notes/AI ML/Expectimax Search/":{"tf":1.0}},"df":1}}}}},"h":{"docs":{},"df":0,"t":{"docs":{},"df":0,"_":{"docs":{},"df":0,"h":{"docs":{},"df":0,"p":{"docs":{"https://phlip9.com/notes/keyboards/moergo glove80/":{"tf":1.4142135623730951}},"df":1}},"{":{"docs":{},"df":0,"h":{"docs":{},"df":0,"p":{"docs":{},"df":0,",":{"docs":{},"df":0,"b":{"docs":{},"df":0,"l":{"docs":{},"df":0,",":{"docs":{},"df":0,"t":{"docs":{},"df":0,"p":{"docs":{"https://phlip9.com/notes/keyboards/moergo glove80/":{"tf":1.0}},"df":1}}}}}}}}}}}},"k":{"docs":{"https://phlip9.com/notes/crypto/TLS self-signed pubkey-only certs/":{"tf":1.0}},"df":1,"e":{"docs":{},"df":0,"y":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.0}},"df":1,"i":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.0}},"df":1}},"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"q":{"docs":{},"df":0,"u":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.0}},"df":1}}}}}}}}},"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.4142135623730951}},"df":1}}}},"l":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/keyboards/moergo glove80/":{"tf":1.4142135623730951}},"df":1}},"m":{"docs":{},"df":0,".":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0}},"df":1}}}},"s":{"docs":{},"df":0,"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"r":{"docs":{},"df":0,"c":{"docs":{"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0}},"df":1}}}}}},"a":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"_":{"docs":{},"df":0,"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0}},"df":1}}}}}}}}}}}},"o":{"docs":{"https://phlip9.com/notes/keyboards/moergo glove80/":{"tf":1.4142135623730951}},"df":1},"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{},"df":0,"[":{"docs":{},"df":0,"(":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/combinatorics/k-combinations of a multiset/":{"tf":1.0}},"df":1}}}}}},"t":{"docs":{"https://phlip9.com/notes/keyboards/moergo glove80/":{"tf":1.4142135623730951}},"df":1},"u":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/combinatorics/k-combinations of a multiset/":{"tf":1.4142135623730951},"https://phlip9.com/notes/crypto/tls exported keying material/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.7320508075688772}},"df":3}}},"o":{"docs":{},"df":0,"s":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":2.449489742783178}},"df":1}}}}},"p":{"docs":{},"df":0,"_":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/statistics probability/G-test - multinomial goodness-of-fit/":{"tf":1.0}},"df":1}},"t":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0}},"df":1}}},"q":{"docs":{},"df":0,"_":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/statistics probability/G-test - multinomial goodness-of-fit/":{"tf":1.4142135623730951}},"df":1}}},"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"p":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.0}},"df":1,".":{"docs":{},"df":0,"b":{"docs":{},"df":0,"o":{"docs":{},"df":0,"d":{"docs":{},"df":0,"y":{"docs":{},"df":0,".":{"docs":{},"df":0,"c":{"docs":{},"df":0,"p":{"docs":{},"df":0,"u":{"docs":{},"df":0,"s":{"docs":{},"df":0,"v":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}},"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{},"df":0,"f":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0},"https://phlip9.com/notes/crypto/tls exported keying material/":{"tf":1.0}},"df":2}}},"i":{"docs":{},"df":0,"z":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.0}},"df":1}},"t":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":2.0},"https://phlip9.com/notes/performance/bit hacks/":{"tf":2.23606797749979}},"df":3}}},"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"g":{"docs":{"https://phlip9.com/notes/keyboards/moergo glove80/":{"tf":1.0}},"df":1}},"m":{"docs":{},"df":0,"p":{"docs":{},"df":0,"_":{"docs":{},"df":0,"k":{"docs":{},"df":0,"e":{"docs":{},"df":0,"y":{"docs":{},"df":0,"_":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"q":{"docs":{},"df":0,"u":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.4142135623730951}},"df":1}}}}}}}}}}}}}},"o":{"docs":{"https://phlip9.com/notes/keyboards/moergo glove80/":{"tf":1.4142135623730951}},"df":1,"g":{"docs":{"https://phlip9.com/notes/keyboards/moergo glove80/":{"tf":1.4142135623730951}},"df":1}}},"x":{"docs":{"https://phlip9.com/notes/statistics probability/multinomial distribution/":{"tf":1.0}},"df":1}},"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"f":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/foreign bank account report (FBAR)/":{"tf":1.0}},"df":1}}}}},"t":{"docs":{"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.4142135623730951}},"df":1,")":{"docs":{},"df":0,"r":{"docs":{},"df":0,"f":{"docs":{},"df":0,"c":{"docs":{},"df":0,"7":{"docs":{},"df":0,"4":{"docs":{},"df":0,"5":{"docs":{},"df":0,"0":{"docs":{"https://phlip9.com/notes/networking/ipv6 address space/":{"tf":1.0}},"df":1}}}}}}}}},"x":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0}},"df":1}},"n":{"docs":{},"df":0,"a":{"docs":{},"df":0,"i":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"s":{"docs":{},"df":0,".":{"docs":{},"df":0,"g":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/lang/ATS/Install ATS2/":{"tf":1.0}},"df":1}}}}}}}}}},"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"g":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1}}}},"y":{"docs":{},"df":0,"s":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/btc-ln/zero-conf channels/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0},"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/rust verification tools/":{"tf":1.0}},"df":4},"t":{"docs":{"https://phlip9.com/notes/devops/nomad/":{"tf":1.0}},"df":1}},"t":{"docs":{"https://phlip9.com/notes/lang/flutter/flutter setup/":{"tf":1.7320508075688772}},"df":1},"z":{"docs":{"https://phlip9.com/notes/devops/secrets/1password - secrets automation/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/rust verification tools/":{"tf":1.4142135623730951},"https://phlip9.com/notes/postgres/postgres performance tuning/":{"tf":2.23606797749979},"https://phlip9.com/notes/postgres/types of scans/":{"tf":1.4142135623730951}},"df":4}}}},"d":{"docs":{},"df":0,"(":{"docs":{},"df":0,"q":{"docs":{"https://phlip9.com/notes/statistics probability/G-test - multinomial goodness-of-fit/":{"tf":1.0}},"df":1}},"/":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/misc/setting up a headless raspbian boot image/":{"tf":1.0}},"df":1}}},"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"s":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.0}},"df":1}}}}},"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/android/":{"tf":1.0},"https://phlip9.com/notes/android/ADB over TCP inside WSL2/":{"tf":2.0},"https://phlip9.com/notes/android/OTA updates for rooted android phone/":{"tf":1.4142135623730951},"https://phlip9.com/notes/android/android cli setup/":{"tf":2.6457513110645907},"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":5.744562646538029},"https://phlip9.com/notes/android/linux ADB udev setup/":{"tf":1.0},"https://phlip9.com/notes/android/root phone with magisk/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":1.0},"https://phlip9.com/notes/devops/algo wireguard VPN server/":{"tf":1.0},"https://phlip9.com/notes/ios/ios setup/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0},"https://phlip9.com/notes/lang/flutter/flutter setup/":{"tf":3.4641016151377544}},"df":13,".":{"docs":{},"df":0,"r":{"docs":{},"df":0,"u":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/android/linux ADB udev setup/":{"tf":1.0}},"df":1}}}},"/":{"docs":{},"df":0,"a":{"docs":{},"df":0,"p":{"docs":{},"df":0,"p":{"docs":{},"df":0,"/":{"docs":{},"df":0,"s":{"docs":{},"df":0,"r":{"docs":{},"df":0,"c":{"docs":{},"df":0,"/":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0}},"df":1}}}}}}}}}}},"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0}},"df":1}}}}}}}}}}}},"c":{"docs":{},"df":0,"m":{"docs":{},"df":0,"d":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/android/android cli setup/":{"tf":2.23606797749979}},"df":1}}}}}},"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"b":{"docs":{},"df":0,"u":{"docs":{},"df":0,"g":{"docs":{},"df":0,".":{"docs":{},"df":0,"k":{"docs":{},"df":0,"e":{"docs":{},"df":0,"y":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.7320508075688772}},"df":1}}}}}}}}}}}}},"e":{"docs":{},"df":0,"m":{"docs":{},"df":0,"u":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0}},"df":1}}}}},"1":{"docs":{},"df":0,"2":{"docs":{"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0}},"df":1}},"_":{"docs":{},"df":0,"h":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"=":{"docs":{},"df":0,"$":{"docs":{},"df":0,"h":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"/":{"docs":{},"df":0,".":{"docs":{},"df":0,"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"c":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"/":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/android/android cli setup/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}},"p":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"h":{"docs":{},"df":0,"=":{"docs":{},"df":0,"$":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{},"df":0,"_":{"docs":{},"df":0,"h":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"/":{"docs":{},"df":0,"c":{"docs":{},"df":0,"m":{"docs":{},"df":0,"d":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/android/android cli setup/":{"tf":1.0}},"df":1}}}}}}}}}}},"p":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"h":{"docs":{},"df":0,":":{"docs":{},"df":0,"$":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{},"df":0,"_":{"docs":{},"df":0,"h":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"/":{"docs":{},"df":0,"b":{"docs":{},"df":0,"u":{"docs":{},"df":0,"i":{"docs":{},"df":0,"l":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/android/android cli setup/":{"tf":1.0}},"df":1}}}}},"p":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"f":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"m":{"docs":{"https://phlip9.com/notes/android/android cli setup/":{"tf":1.0}},"df":1}}}}}}}}}}}}},"s":{"docs":{},"df":0,"d":{"docs":{},"df":0,"k":{"docs":{},"df":0,"_":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"o":{"docs":{},"df":0,"t":{"docs":{},"df":0,"/":{"docs":{},"df":0,"b":{"docs":{},"df":0,"u":{"docs":{},"df":0,"i":{"docs":{},"df":0,"l":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0}},"df":1}}}}},"p":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"f":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"m":{"docs":{"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0}},"df":1}}}}}}}},"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"o":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0}},"df":1,"s":{"docs":{},"df":0,"/":{"docs":{},"df":0,"b":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"s":{"docs":{},"df":0,"d":{"docs":{},"df":0,"k":{"docs":{},"df":0,"_":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"o":{"docs":{},"df":0,"t":{"docs":{},"df":0,"/":{"docs":{},"df":0,"c":{"docs":{},"df":0,"m":{"docs":{},"df":0,"d":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"s":{"docs":{},"df":0,"d":{"docs":{},"df":0,"k":{"docs":{},"df":0,"_":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"o":{"docs":{},"df":0,"t":{"docs":{},"df":0,"=":{"docs":{},"df":0,"$":{"docs":{},"df":0,"h":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"/":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}},"v":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"=":{"docs":{},"df":0,"3":{"docs":{},"df":0,"1":{"docs":{},"df":0,".":{"docs":{},"df":0,"0":{"docs":{},"df":0,".":{"docs":{},"df":0,"0":{"docs":{"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0}},"df":1}}}}},"3":{"docs":{},"df":0,".":{"docs":{},"df":0,"0":{"docs":{},"df":0,".":{"docs":{},"df":0,"1":{"docs":{"https://phlip9.com/notes/android/android cli setup/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}},"t":{"docs":{},"df":0,"u":{"docs":{},"df":0,"d":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"=":{"docs":{},"df":0,"$":{"docs":{},"df":0,"h":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"/":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}},"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"b":{"docs":{},"df":0,"u":{"docs":{},"df":0,"g":{"docs":{},"df":0,"k":{"docs":{},"df":0,"e":{"docs":{},"df":0,"y":{"docs":{"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0}},"df":1}}}}}}}},"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"b":{"docs":{},"df":0,"i":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"m":{"docs":{},"df":0,"v":{"docs":{},"df":0,"7":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"t":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"o":{"docs":{},"df":0,"f":{"docs":{},"df":0,"t":{"docs":{},"df":0,"?":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"u":{"docs":{},"df":0,"x":{"docs":{"https://phlip9.com/notes/misc/arm target triples/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"g":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.4142135623730951}},"df":1}},"n":{"docs":{},"df":0,"o":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.0},"https://phlip9.com/notes/fuzzing/fuzzcheck-rs/":{"tf":1.0},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/rust verification tools/":{"tf":1.0}},"df":4},"u":{"docs":{},"df":0,"n":{"docs":{},"df":0,"c":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":2.449489742783178},"https://phlip9.com/notes/btc-ln/BOLT 7 - p2p node and channel discovery/":{"tf":2.23606797749979},"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/secure time/":{"tf":1.4142135623730951}},"df":5}}},"y":{"docs":{"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/rr with rust/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/testing whether a coin is fair/":{"tf":1.0}},"df":3}},"u":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/foreign bank account report (FBAR)/":{"tf":1.0}},"df":1}}}}},"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"y":{"docs":{},"df":0,"m":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/lua/":{"tf":1.4142135623730951}},"df":3}}},"t":{"docs":{},"df":0,"h":{"docs":{"https://phlip9.com/notes/AI ML/Expectimax Search/":{"tf":1.4142135623730951},"https://phlip9.com/notes/android/root phone with magisk/":{"tf":1.0},"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/foreign bank account report (FBAR)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/money services business (MSB)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/submarine swaps/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.0},"https://phlip9.com/notes/design/form design/":{"tf":1.0},"https://phlip9.com/notes/devops/service mesh/":{"tf":1.0},"https://phlip9.com/notes/keyboards/moergo glove80/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/rr with rust/":{"tf":1.7320508075688772},"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":1.0},"https://phlip9.com/notes/misc/kintsugi/":{"tf":2.0},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.4142135623730951},"https://phlip9.com/notes/networking/CIDR/":{"tf":1.0},"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.4142135623730951},"https://phlip9.com/notes/postgres/postgres performance tuning/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.7320508075688772},"https://phlip9.com/notes/reproducible builds/nix/nix debug broken package build/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.4142135623730951}},"df":25}}},"s":{"docs":{},"df":0,"w":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/networking/network interface card (NIC)/":{"tf":1.0}},"df":2}}}},"t":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0}},"df":1},"o":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/distributed systems/papers/(2021) Leaderless Consensus/":{"tf":1.0}},"df":1}},"n":{"docs":{},"df":0,"i":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/distributed systems/papers/(2021) Leaderless Consensus/":{"tf":1.0}},"df":1}}}}}}},"x":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"u":{"docs":{"https://phlip9.com/notes/keyboards/moergo glove80/":{"tf":1.0}},"df":1}}}},"y":{"docs":{},"df":0,"(":{"docs":{},"df":0,"|":{"docs":{},"df":0,"(":{"docs":{},"df":0,"b":{"docs":{},"df":0,"_":{"docs":{},"df":0,"x":{"docs":{"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.4142135623730951}},"df":1}}},"n":{"docs":{},"df":0,"b":{"docs":{},"df":0,"_":{"docs":{},"df":0,"x":{"docs":{"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.4142135623730951}},"df":1}}}}},"b":{"docs":{"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.0}},"df":1},"n":{"docs":{},"df":0,"b":{"docs":{"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.0}},"df":1}}}},"c":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"f":{"docs":{},"df":0,"c":{"docs":{},"df":0,"7":{"docs":{},"df":0,"7":{"docs":{},"df":0,"2":{"docs":{},"df":0,"3":{"docs":{"https://phlip9.com/notes/networking/ipv6 address space/":{"tf":1.0}},"df":1}}}},"8":{"docs":{},"df":0,"1":{"docs":{},"df":0,"5":{"docs":{},"df":0,"5":{"docs":{"https://phlip9.com/notes/networking/ipv6 address space/":{"tf":1.0}},"df":1}}}}}}}}}}},"h":{"docs":{},"df":0,"o":{"docs":{},"df":0,"w":{"docs":{},"df":0,":":{"docs":{},"df":0,":":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"&":{"docs":{},"df":0,"g":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/crypto/TLS self-signed pubkey-only certs/":{"tf":1.0}},"df":1}}}}}}}}}}}}},"m":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/devops/azure CLI/":{"tf":1.0}},"df":1}}},"o":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/financial instituion/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.0},"https://phlip9.com/notes/devops/secrets/ejson (Shopify)/":{"tf":1.0},"https://phlip9.com/notes/fuzzing/fuzzing/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/reproducible-builds.org/":{"tf":1.4142135623730951}},"df":5}},"t":{"docs":{},"df":0,"h":{"docs":{"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.4142135623730951},"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":1.0},"https://phlip9.com/notes/keyboards/moergo glove80/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":5}},"w":{"docs":{},"df":0,"h":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0},"https://phlip9.com/notes/performance/simdjson talk/":{"tf":1.0}},"df":2}},"i":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/performance/simdjson talk/":{"tf":1.4142135623730951}},"df":1}}}}}},"o":{"docs":{},"df":0,"c":{"docs":{},"df":0,"2":{"docs":{},"df":0,"1":{"docs":{},"df":0,"/":{"docs":{},"df":0,"b":{"docs":{},"df":0,"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"b":{"docs":{},"df":0,"/":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"/":{"docs":{},"df":0,"s":{"docs":{},"df":0,"r":{"docs":{},"df":0,"c":{"docs":{},"df":0,"/":{"docs":{},"df":0,"b":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{},"df":0,".":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/statistics probability/winsorize/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"p":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{"https://phlip9.com/notes/misc/optimization solvers/":{"tf":1.0}},"df":1}},"r":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.0}},"df":1}}},"i":{"docs":{"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0},"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/breez lightning service providers/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":3.605551275463989},"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":2.0},"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":2.0},"https://phlip9.com/notes/crypto/tls exported keying material/":{"tf":1.0},"https://phlip9.com/notes/devops/algo wireguard VPN server/":{"tf":1.7320508075688772},"https://phlip9.com/notes/devops/consul/":{"tf":1.0},"https://phlip9.com/notes/devops/deployment strategies/":{"tf":1.7320508075688772},"https://phlip9.com/notes/devops/linkerd/":{"tf":1.0},"https://phlip9.com/notes/devops/nomad/":{"tf":2.0},"https://phlip9.com/notes/devops/secrets/envkey/":{"tf":1.0},"https://phlip9.com/notes/devops/secrets/fortanix DSM/":{"tf":1.4142135623730951},"https://phlip9.com/notes/fuzzing/fuzzing/":{"tf":2.0},"https://phlip9.com/notes/ios/ios setup/":{"tf":1.0},"https://phlip9.com/notes/lang/flutter/flutter setup/":{"tf":1.4142135623730951},"https://phlip9.com/notes/networking/network interface card (NIC)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/lightning router overview/":{"tf":1.7320508075688772}},"df":20},"k":{"docs":{"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0}},"df":1,"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"g":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0}},"df":1}}}}},"n":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":1.0}},"df":1}}},"p":{"docs":{"https://phlip9.com/notes/android/OTA updates for rooted android phone/":{"tf":1.4142135623730951},"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":3.0},"https://phlip9.com/notes/android/root phone with magisk/":{"tf":1.4142135623730951},"https://phlip9.com/notes/btc-ln/breez lightning service providers/":{"tf":1.4142135623730951},"https://phlip9.com/notes/btc-ln/lightning rod/":{"tf":1.4142135623730951},"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/zero-conf channels/":{"tf":1.7320508075688772},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0},"https://phlip9.com/notes/devops/algo wireguard VPN server/":{"tf":1.4142135623730951},"https://phlip9.com/notes/devops/docker compose/":{"tf":1.4142135623730951},"https://phlip9.com/notes/devops/secrets/envkey/":{"tf":1.0},"https://phlip9.com/notes/ios/ios setup/":{"tf":2.449489742783178},"https://phlip9.com/notes/lang/flutter/flutter setup/":{"tf":2.23606797749979}},"df":14,"/":{"docs":{},"df":0,"b":{"docs":{},"df":0,"u":{"docs":{},"df":0,"i":{"docs":{},"df":0,"l":{"docs":{},"df":0,"d":{"docs":{},"df":0,"/":{"docs":{},"df":0,"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{},"df":0,"p":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{},"df":0,"s":{"docs":{},"df":0,"/":{"docs":{},"df":0,"a":{"docs":{},"df":0,"p":{"docs":{},"df":0,"k":{"docs":{},"df":0,"/":{"docs":{},"df":0,"p":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"y":{"docs":{},"df":0,"p":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"d":{"docs":{},"df":0,"/":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"l":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/btc-ln/breez lightning service providers/":{"tf":1.0}},"df":1}}},"a":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/WSL/WSL2 custom kernel/":{"tf":1.4142135623730951},"https://phlip9.com/notes/btc-ln/atomic multipath payments (AMP)/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.4142135623730951},"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":1.0}},"df":5,"t":{"docs":{"https://phlip9.com/notes/router/lightning router/lightning router overview/":{"tf":1.0}},"df":1}}},"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/WSL/WSL2 custom kernel/":{"tf":1.0},"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.4142135623730951},"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.0},"https://phlip9.com/notes/combinatorics/k-combinations of a multiset/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0},"https://phlip9.com/notes/devops/secrets/1password - secrets automation/":{"tf":1.0},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.7320508075688772},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0},"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":2.0},"https://phlip9.com/notes/misc/kintsugi/":{"tf":1.4142135623730951},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0},"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.4142135623730951},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.7320508075688772}},"df":14}},"n":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/btc utreexo - utxo accumulator/":{"tf":1.0},"https://phlip9.com/notes/crypto/(talk) authenticated data structures for stateless validation/":{"tf":2.0},"https://phlip9.com/notes/lang/lua/":{"tf":1.0}},"df":3,"/":{"docs":{},"df":0,"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{"https://phlip9.com/notes/crypto/(talk) authenticated data structures for stateless validation/":{"tf":1.0}},"df":1}}}},"i":{"docs":{},"df":0,"x":{"docs":{"https://phlip9.com/notes/AI ML/Expectimax Search/":{"tf":1.0},"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.7320508075688772},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":2.449489742783178}},"df":4}}}}},"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/misc/pop_OS! tweaks/":{"tf":1.4142135623730951}},"df":1}}},"l":{"docs":{"https://phlip9.com/notes/lang/flutter/flutter setup/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/rr with rust/":{"tf":1.0}},"df":2,"e":{"docs":{},"df":0,"'":{"docs":{"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.0}},"df":1}},"i":{"docs":{"https://phlip9.com/notes/AI ML/Markov Decision Process (MDP)/":{"tf":1.0},"https://phlip9.com/notes/WSL/WSL2 custom kernel/":{"tf":1.0},"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0},"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/foreign bank account report (FBAR)/":{"tf":1.0},"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/money services business (MSB)/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.4142135623730951},"https://phlip9.com/notes/devops/service mesh/":{"tf":1.0},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0},"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.0},"https://phlip9.com/notes/postgres/postgres performance tuning/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.7320508075688772},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.4142135623730951},"https://phlip9.com/notes/statistics probability/testing whether a coin is fair/":{"tf":1.0}},"df":14,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"c":{"docs":{"https://phlip9.com/notes/devops/k3s/":{"tf":1.0}},"df":1}}},"c":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/lightning rod/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":4.47213595499958},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":3.605551275463989},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":2.8284271247461903},"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":3.3166247903554},"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.7320508075688772},"https://phlip9.com/notes/confidential computing/intel SGX/secure time/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/marblerun/":{"tf":1.7320508075688772},"https://phlip9.com/notes/confidential computing/mystikos/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":2.449489742783178},"https://phlip9.com/notes/crypto/(talk) authenticated data structures for stateless validation/":{"tf":1.0},"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":2.23606797749979},"https://phlip9.com/notes/devops/docker compose/":{"tf":1.4142135623730951},"https://phlip9.com/notes/devops/linkerd/":{"tf":1.0},"https://phlip9.com/notes/devops/secrets/1password - secrets automation/":{"tf":1.0},"https://phlip9.com/notes/devops/secrets/ejson (Shopify)/":{"tf":1.0},"https://phlip9.com/notes/devops/service mesh/":{"tf":2.449489742783178},"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":1.0},"https://phlip9.com/notes/lang/operator fixity and precedence/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/rr with rust/":{"tf":1.0},"https://phlip9.com/notes/networking/network interface card (NIC)/":{"tf":1.7320508075688772},"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.7320508075688772},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.7320508075688772},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":2.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":2.449489742783178}},"df":27,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"'":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0}},"df":1},"/":{"docs":{},"df":0,"j":{"docs":{},"df":0,"o":{"docs":{},"df":0,"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"+":{"docs":{},"df":0,"j":{"docs":{},"df":0,"s":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/crypto/acme protocol/":{"tf":1.0}},"df":1}}}}}}}},"s":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/crypto/acme protocol/":{"tf":1.0}},"df":1}}}}},"s":{"docs":{},"df":0,"/":{"docs":{},"df":0,"x":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,".":{"docs":{},"df":0,"a":{"docs":{},"df":0,"p":{"docs":{},"df":0,"p":{"docs":{},"df":0,"/":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"s":{"docs":{},"df":0,"/":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"v":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"p":{"docs":{"https://phlip9.com/notes/ios/ios setup/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}},"’":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0}},"df":1}}}}}}}},"y":{"docs":{},"df":0,"_":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"f":{"docs":{},"df":0,"e":{"docs":{},"df":0,"_":{"docs":{},"df":0,"r":{"docs":{},"df":0,"u":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"(":{"docs":{},"df":0,"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{},"df":0,"f":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}},"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{"https://phlip9.com/notes/AI ML/Markov Decision Process (MDP)/":{"tf":1.0},"https://phlip9.com/notes/android/ADB over TCP inside WSL2/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/breez lightning service providers/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/secure time/":{"tf":1.0},"https://phlip9.com/notes/devops/deployment strategies/":{"tf":1.0},"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/lua/":{"tf":1.0},"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":2.8284271247461903},"https://phlip9.com/notes/performance/simdjson talk/":{"tf":1.4142135623730951},"https://phlip9.com/notes/statistics probability/CDF confidence bands - DKW inequality/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/multinomial distribution/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/testing whether a coin is fair/":{"tf":1.7320508075688772}},"df":13}}},"p":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/AI ML/Markov Decision Process (MDP)/":{"tf":1.0},"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":2.0}},"df":7}}},"v":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.4142135623730951}},"df":4},"x":{"docs":{"https://phlip9.com/notes/statistics probability/standard error/":{"tf":1.0}},"df":1,"e":{"docs":{},"df":0,"q":{"docs":{},"df":0,"(":{"docs":{},"df":0,"d":{"docs":{},"df":0,"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"b":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0}},"df":1}}}}}}}},"i":{"docs":{},"df":0,"m":{"docs":{"https://phlip9.com/notes/lang/rust/understanding sycamore reactivity/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/G-test - multinomial goodness-of-fit/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/testing whether a coin is fair/":{"tf":1.0}},"df":3}}}}}},"r":{"docs":{"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.7320508075688772}},"df":1,"i":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/foreign bank account report (FBAR)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.7320508075688772},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":2.449489742783178}},"df":3}}},"t":{"docs":{"https://phlip9.com/notes/WSL/WSL2 custom kernel/":{"tf":1.4142135623730951},"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":3.1622776601683795},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":4.0},"https://phlip9.com/notes/confidential computing/gramine/":{"tf":2.449489742783178},"https://phlip9.com/notes/devops/azure CLI/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/ATS/Install ATS2/":{"tf":1.0},"https://phlip9.com/notes/lang/flutter/flutter setup/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/rr with rust/":{"tf":1.4142135623730951},"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":1.0},"https://phlip9.com/notes/misc/pop_OS! tweaks/":{"tf":1.0},"https://phlip9.com/notes/misc/prepping RPI for embedded dev/":{"tf":2.0},"https://phlip9.com/notes/misc/scanning QR codes on desktop/":{"tf":1.0},"https://phlip9.com/notes/misc/setting up a headless raspbian boot image/":{"tf":1.4142135623730951},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":2.0}},"df":15,"o":{"docs":{"https://phlip9.com/notes/":{"tf":1.0},"https://phlip9.com/notes/b l o c k c h a i n/aptos/":{"tf":1.7320508075688772}},"df":2}}},"r":{"docs":{},"df":0,"b":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/confidential computing/intel TDX/":{"tf":1.0}},"df":1,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0},"https://phlip9.com/notes/networking/CIDR/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.4142135623730951}},"df":3}}}}}}},"c":{"docs":{},"df":0,"&":{"docs":{},"df":0,"l":{"docs":{},"df":0,"t":{"docs":{},"df":0,";":{"docs":{},"df":0,"b":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{},"df":0,"c":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"&":{"docs":{},"df":0,"g":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.7320508075688772}},"df":1}}}}}}}}}}}}}}}}},"c":{"docs":{},"df":0,"h":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"a":{"docs":{},"df":0,"g":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"&":{"docs":{},"df":0,"g":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.4142135623730951}},"df":1}}}}}}}}}}}}}}}}},"d":{"docs":{},"df":0,"y":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.0}},"df":1}}},"f":{"docs":{},"df":0,"i":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"y":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"m":{"docs":{},"df":0,"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"g":{"docs":{},"df":0,"g":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"&":{"docs":{},"df":0,"g":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.4142135623730951}},"df":1,";":{"docs":{},"df":0,"&":{"docs":{},"df":0,"g":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.0}},"df":1}}}}}}}}}}}}},"p":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"&":{"docs":{},"df":0,"g":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}},"k":{"docs":{},"df":0,"e":{"docs":{},"df":0,"y":{"docs":{},"df":0,"s":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"a":{"docs":{},"df":0,"g":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"&":{"docs":{},"df":0,"g":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.0}},"df":1}}}}}}}}}}}}}},"m":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"x":{"docs":{},"df":0,"&":{"docs":{},"df":0,"l":{"docs":{},"df":0,"t":{"docs":{},"df":0,";":{"docs":{},"df":0,"h":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{},"df":0,"h":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"p":{"docs":{},"df":0,"&":{"docs":{},"df":0,"l":{"docs":{},"df":0,"t":{"docs":{},"df":0,";":{"docs":{},"df":0,"k":{"docs":{"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":1.0}},"df":1},"p":{"docs":{},"df":0,"a":{"docs":{},"df":0,"y":{"docs":{},"df":0,"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"h":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{},"df":0,"h":{"docs":{"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}},"s":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"&":{"docs":{},"df":0,"g":{"docs":{},"df":0,"t":{"docs":{},"df":0,";":{"docs":{},"df":0,"&":{"docs":{},"df":0,"g":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}},"h":{"docs":{"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/rr with rust/":{"tf":1.0}},"df":2,".":{"docs":{},"df":0,"h":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0}},"df":1}},"/":{"docs":{},"df":0,"x":{"docs":{},"df":0,"8":{"docs":{},"df":0,"6":{"docs":{},"df":0,"/":{"docs":{},"df":0,"b":{"docs":{},"df":0,"o":{"docs":{},"df":0,"o":{"docs":{},"df":0,"t":{"docs":{},"df":0,"/":{"docs":{},"df":0,"b":{"docs":{},"df":0,"z":{"docs":{},"df":0,"i":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"g":{"docs":{"https://phlip9.com/notes/WSL/WSL2 custom kernel/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}},"=":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{},"df":0,"d":{"docs":{},"df":0,"6":{"docs":{},"df":0,"4":{"docs":{"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/gramine/":{"tf":1.4142135623730951},"https://phlip9.com/notes/devops/azure CLI/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.4142135623730951}},"df":4}}}}}},"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{},"df":0,"u":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":2.6457513110645907},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":2.23606797749979},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel TDX/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/mystikos/":{"tf":1.0},"https://phlip9.com/notes/misc/setting up a headless raspbian boot image/":{"tf":1.0}},"df":7}}}}}}},"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"u":{"docs":{},"df":0,"x":{"docs":{"https://phlip9.com/notes/reproducible builds/rebuilderd/":{"tf":1.0}},"df":1}}}}}}},"e":{"docs":{},"df":0,"a":{"docs":{"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/money services business (MSB)/":{"tf":1.0},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.7320508075688772},"https://phlip9.com/notes/misc/kintsugi/":{"tf":1.4142135623730951},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0},"https://phlip9.com/notes/postgres/types of scans/":{"tf":1.0}},"df":5},"n":{"docs":{},"df":0,"'":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/android/ADB over TCP inside WSL2/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/hosted channels/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0},"https://phlip9.com/notes/fuzzing/fuzzcheck-rs/":{"tf":1.0},"https://phlip9.com/notes/networking/network interface card (NIC)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/lightning router overview/":{"tf":1.0}},"df":7}},"’":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0}},"df":1}}}},"g":{"docs":{"https://phlip9.com/notes/confidential computing/gramine/":{"tf":1.0},"https://phlip9.com/notes/devops/azure CLI/":{"tf":1.0},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/gdb ref/":{"tf":1.0},"https://phlip9.com/notes/lang/lua/":{"tf":2.23606797749979}},"df":5,"0":{"docs":{"https://phlip9.com/notes/lang/gdb ref/":{"tf":1.0},"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.0}},"df":2,"+":{"docs":{},"df":0,"$":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"g":{"docs":{},"df":0,"1":{"docs":{"https://phlip9.com/notes/lang/gdb ref/":{"tf":1.0}},"df":1}}}}}}},"1":{"docs":{"https://phlip9.com/notes/lang/lua/":{"tf":1.0}},"df":1},"2":{"docs":{"https://phlip9.com/notes/lang/lua/":{"tf":1.0}},"df":1},"=":{"docs":{},"df":0,"b":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/lang/rust/rr with rust/":{"tf":1.0}},"df":1}}}},"c":{"docs":{"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.0}},"df":1},"s":{"docs":{},"df":0,".":{"docs":{},"df":0,"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"w":{"docs":{"https://phlip9.com/notes/lang/lua/":{"tf":1.0}},"df":1}}}},"[":{"docs":{},"df":0,"0":{"docs":{"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.0}},"df":1},"1":{"docs":{"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.0}},"df":1},"3":{"docs":{"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.0}},"df":1}}},"u":{"docs":{},"df":0,"a":{"docs":{},"df":0,"b":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/fuzzing/fuzzing/":{"tf":1.0}},"df":1}}},"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/gdb ref/":{"tf":1.0},"https://phlip9.com/notes/lang/operator fixity and precedence/":{"tf":2.23606797749979},"https://phlip9.com/notes/lang/rust/rr with rust/":{"tf":1.7320508075688772},"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.4142135623730951}},"df":6}}}}},"v":{"docs":{"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.0}},"df":1,"[":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{},"df":0,"x":{"docs":{"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.0}},"df":1}}}}}},"i":{"docs":{},"df":0,"s":{"docs":{"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.4142135623730951}},"df":3},"t":{"docs":{},"df":0,"h":{"docs":{},"df":0,"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/lang/lua/":{"tf":1.0},"https://phlip9.com/notes/lang/operator fixity and precedence/":{"tf":1.4142135623730951}},"df":2}}}},"i":{"docs":{"https://phlip9.com/notes/lang/operator fixity and precedence/":{"tf":2.0}},"df":1}}},"k":{"docs":{"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.4142135623730951}},"df":1},"m":{"docs":{"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.0},"https://phlip9.com/notes/devops/k3s/":{"tf":1.0},"https://phlip9.com/notes/ios/ios setup/":{"tf":1.0},"https://phlip9.com/notes/lang/flutter/flutter setup/":{"tf":1.0},"https://phlip9.com/notes/misc/arm target triples/":{"tf":2.6457513110645907},"https://phlip9.com/notes/misc/prepping RPI for embedded dev/":{"tf":1.0},"https://phlip9.com/notes/misc/setting up a headless raspbian boot image/":{"tf":1.4142135623730951}},"df":7,"6":{"docs":{},"df":0,"4":{"docs":{"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0},"https://phlip9.com/notes/ios/ios setup/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/flutter/flutter setup/":{"tf":1.7320508075688772}},"df":3}},"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"b":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0}},"df":1}}}},"o":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/money services business (MSB)/":{"tf":1.0}},"df":1}},"v":{"docs":{},"df":0,"6":{"docs":{"https://phlip9.com/notes/misc/arm target triples/":{"tf":1.0}},"df":1},"7":{"docs":{"https://phlip9.com/notes/misc/arm target triples/":{"tf":1.4142135623730951}},"df":1,"a":{"docs":{"https://phlip9.com/notes/misc/arm target triples/":{"tf":1.4142135623730951}},"df":1},"l":{"docs":{"https://phlip9.com/notes/misc/arm target triples/":{"tf":1.4142135623730951}},"df":1}},"8":{"docs":{"https://phlip9.com/notes/misc/arm target triples/":{"tf":1.0}},"df":1,"l":{"docs":{"https://phlip9.com/notes/misc/arm target triples/":{"tf":1.0}},"df":1}}}},"n":{"docs":{},"df":0,"d":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.4142135623730951}},"df":1}}},"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/android/root phone with magisk/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/devops/consul/":{"tf":1.0},"https://phlip9.com/notes/keyboards/moergo glove80/":{"tf":1.0},"https://phlip9.com/notes/lang/operator fixity and precedence/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/rr with rust/":{"tf":1.0},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.4142135623730951},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/CDF confidence bands - DKW inequality/":{"tf":1.4142135623730951},"https://phlip9.com/notes/statistics probability/standard error/":{"tf":1.4142135623730951}},"df":10}}}},"r":{"docs":{"https://phlip9.com/notes/combinatorics/k-combinations of a multiset/":{"tf":2.23606797749979}},"df":1,".":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/combinatorics/k-combinations of a multiset/":{"tf":1.0}},"df":1}}}},"[":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/combinatorics/k-combinations of a multiset/":{"tf":1.4142135623730951}},"df":1,".":{"docs":{},"df":0,".":{"docs":{},"df":0,"k":{"docs":{},"df":0,"]":{"docs":{},"df":0,".":{"docs":{},"df":0,"c":{"docs":{},"df":0,"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"_":{"docs":{},"df":0,"f":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"_":{"docs":{},"df":0,"s":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"e":{"docs":{},"df":0,"(":{"docs":{},"df":0,"&":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{},"df":0,"p":{"docs":{},"df":0,";":{"docs":{},"df":0,"m":{"docs":{},"df":0,"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{},"df":0,"[":{"docs":{},"df":0,"j":{"docs":{},"df":0,".":{"docs":{},"df":0,".":{"docs":{},"df":0,"(":{"docs":{},"df":0,"j":{"docs":{"https://phlip9.com/notes/combinatorics/k-combinations of a multiset/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"g":{"docs":{"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/money services business (MSB)/":{"tf":1.0}},"df":1}},"y":{"docs":{"https://phlip9.com/notes/combinatorics/k-combinations of a multiset/":{"tf":2.23606797749979},"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.0},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":3.605551275463989},"https://phlip9.com/notes/lang/lua/":{"tf":2.0},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":5,"_":{"docs":{},"df":0,"v":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0}},"df":1}},"p":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0}},"df":1}}},"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"f":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0}},"df":1}}},"s":{"docs":{},"df":0,"z":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"f":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0}},"df":1}}}}},"v":{"docs":{},"df":0,"i":{"docs":{},"df":0,"e":{"docs":{},"df":0,"w":{"docs":{},"df":0,"1":{"docs":{},"df":0,"&":{"docs":{},"df":0,"l":{"docs":{},"df":0,"t":{"docs":{},"df":0,";":{"docs":{},"df":0,"f":{"docs":{},"df":0,"6":{"docs":{},"df":0,"4":{"docs":{},"df":0,"&":{"docs":{},"df":0,"g":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/statistics probability/G-test - multinomial goodness-of-fit/":{"tf":2.449489742783178},"https://phlip9.com/notes/statistics probability/multinomial distribution/":{"tf":1.4142135623730951}},"df":2}}}}}}}}}}}}}}}}},"o":{"docs":{},"df":0,"w":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":2,"_":{"docs":{},"df":0,"g":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"p":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.4142135623730951}},"df":1,".":{"docs":{},"df":0,"a":{"docs":{},"df":0,"p":{"docs":{},"df":0,"p":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{},"df":0,"(":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"w":{"docs":{},"df":0,"_":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"g":{"docs":{},"df":0,"h":{"docs":{},"df":0,"t":{"docs":{},"df":0,"_":{"docs":{},"df":0,"1":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1},"2":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}},"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"g":{"docs":{},"df":0,"h":{"docs":{},"df":0,"t":{"docs":{},"df":0,"_":{"docs":{},"df":0,"1":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1,".":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1},"x":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1}}},"2":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1,".":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1},"x":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1}}}}}}}}}}}},"s":{"docs":{},"df":0,"z":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"f":{"docs":{},"df":0,"_":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"k":{"docs":{},"df":0,"e":{"docs":{},"df":0,"_":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{},"df":0,"t":{"docs":{},"df":0,"(":{"docs":{},"df":0,"s":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}},"t":{"docs":{"https://phlip9.com/notes/fuzzing/fuzzing/":{"tf":1.7320508075688772},"https://phlip9.com/notes/misc/kintsugi/":{"tf":1.4142135623730951}},"df":2,"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/foreign bank account report (FBAR)/":{"tf":1.0},"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":1.0},"https://phlip9.com/notes/fuzzing/fuzzing/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/testing whether a coin is fair/":{"tf":1.0}},"df":4}},"f":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":2.449489742783178},"https://phlip9.com/notes/reproducible builds/rebuilderd/":{"tf":1.4142135623730951}},"df":2}}}}}},"u":{"docs":{},"df":0,"b":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{},"df":0,"w":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"k":{"docs":{"https://phlip9.com/notes/router/lightning router/captive portal/arubanetworks captive portal/":{"tf":1.4142135623730951},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.4142135623730951}},"df":2}}}}}}},"o":{"docs":{"https://phlip9.com/notes/router/lightning router/captive portal/arubanetworks captive portal/":{"tf":1.0}},"df":1}}}}},"s":{"docs":{},"df":0,"_":{"docs":{},"df":0,"b":{"docs":{},"df":0,"y":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.7320508075688772}},"df":1}}}},"a":{"docs":{},"df":0,"p":{"docs":{"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.0}},"df":1}},"c":{"docs":{},"df":0,"i":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/performance/simdjson talk/":{"tf":1.0}},"df":1,"d":{"docs":{},"df":0,"o":{"docs":{},"df":0,"c":{"docs":{"https://phlip9.com/notes/WSL/WSL2 custom kernel/":{"tf":1.0}},"df":1}}}}},"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"b":{"docs":{"https://phlip9.com/notes/btc-ln/lightning network notes/":{"tf":1.0}},"df":1}}}},"d":{"docs":{},"df":0,"f":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0}},"df":1}},"k":{"docs":{"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/foreign bank account report (FBAR)/":{"tf":1.0},"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.4142135623730951},"https://phlip9.com/notes/btc-ln/breez lightning service providers/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/marblerun/":{"tf":1.0},"https://phlip9.com/notes/misc/kintsugi/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.0}},"df":9},"m":{"docs":{},"df":0,"y":{"docs":{},"df":0,"p":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/statistics probability/G-test - multinomial goodness-of-fit/":{"tf":1.0}},"df":1}}}}}},"s":{"docs":{"https://phlip9.com/notes/btc-ln/breez lightning service providers/":{"tf":1.0}},"df":1,"e":{"docs":{},"df":0,"m":{"docs":{},"df":0,"b":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"p":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"y":{"docs":{},"df":0,"p":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"d":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}},"r":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0}},"df":4,"!":{"docs":{},"df":0,"(":{"docs":{},"df":0,"(":{"docs":{},"df":0,"0":{"docs":{},"df":0,".":{"docs":{},"df":0,".":{"docs":{},"df":0,"=":{"docs":{},"df":0,"1":{"docs":{},"df":0,"2":{"docs":{},"df":0,"7":{"docs":{},"df":0,")":{"docs":{},"df":0,".":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"s":{"docs":{},"df":0,"(":{"docs":{},"df":0,"&":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{},"df":0,"p":{"docs":{},"df":0,";":{"docs":{},"df":0,"m":{"docs":{"https://phlip9.com/notes/performance/bit hacks/":{"tf":2.0}},"df":1}}}}}}}}}}}}}}}}}},"8":{"docs":{},"df":0,")":{"docs":{},"df":0,".":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"s":{"docs":{},"df":0,"(":{"docs":{},"df":0,"&":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{},"df":0,"p":{"docs":{},"df":0,";":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/performance/bit hacks/":{"tf":2.0}},"df":1}}}}}}}}}}}}}}}}}}}},"7":{"docs":{},"df":0,")":{"docs":{},"df":0,".":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"s":{"docs":{},"df":0,"(":{"docs":{},"df":0,"&":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{},"df":0,"p":{"docs":{},"df":0,";":{"docs":{},"df":0,"m":{"docs":{"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.4142135623730951}},"df":1}}}}}}}}}}}}}}}}}},"8":{"docs":{},"df":0,")":{"docs":{},"df":0,".":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"s":{"docs":{},"df":0,"(":{"docs":{},"df":0,"&":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{},"df":0,"p":{"docs":{},"df":0,";":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.4142135623730951}},"df":1}}}}}}}}}}}}}}}}}}}}}}},"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"_":{"docs":{},"df":0,"s":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"d":{"docs":{},"df":0,"(":{"docs":{},"df":0,"m":{"docs":{},"df":0,"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{},"df":0,".":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/combinatorics/k-combinations of a multiset/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}},"k":{"docs":{"https://phlip9.com/notes/combinatorics/k-combinations of a multiset/":{"tf":1.0}},"df":1},"x":{"docs":{"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.0}},"df":1}}},"(":{"docs":{},"df":0,"\"":{"docs":{},"df":0,"1":{"docs":{},"df":0,"2":{"docs":{},"df":0,"3":{"docs":{},"df":0,"\"":{"docs":{},"df":0,".":{"docs":{},"df":0,"p":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0}},"df":1}}}}}}}}}}}}}},"a":{"docs":{},"df":0,"p":{"docs":{},"df":0,"p":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"x":{"docs":{},"df":0,"e":{"docs":{},"df":0,"q":{"docs":{},"df":0,"(":{"docs":{},"df":0,"1":{"docs":{},"df":0,".":{"docs":{},"df":0,"0":{"docs":{"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0}},"df":1}}}}}}}}}}}},"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/lang/lua/":{"tf":1.0}},"df":1}}}},"h":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"g":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"s":{"docs":{},"df":0,".":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"g":{"docs":{},"df":0,"t":{"docs":{},"df":0,"h":{"docs":{"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0}},"df":1}}}}}}},"[":{"docs":{},"df":0,"2":{"docs":{"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0}},"df":1},"9":{"docs":{"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0}},"df":1}}}}}}}}}},"i":{"docs":{"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0}},"df":1,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,".":{"docs":{},"df":0,"p":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"(":{"docs":{},"df":0,"\"":{"docs":{},"df":0,"1":{"docs":{},"df":0,"2":{"docs":{},"df":0,"3":{"docs":{"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0}},"df":1}}}}}}}}}}}}},"s":{"docs":{},"df":0,"o":{"docs":{},"df":0,"k":{"docs":{},"df":0,"1":{"docs":{},"df":0,"2":{"docs":{},"df":0,"3":{"docs":{"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0}},"df":1}}}}}}},"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,".":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"g":{"docs":{},"df":0,"t":{"docs":{},"df":0,"h":{"docs":{"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0}},"df":1}}}}}}},"[":{"docs":{},"df":0,"1":{"docs":{"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0}},"df":1}}}}}},"p":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"(":{"docs":{},"df":0,"\"":{"docs":{},"df":0,"1":{"docs":{},"df":0,"2":{"docs":{},"df":0,"3":{"docs":{"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0}},"df":1}}}}}}}}}}}}},"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0}},"df":1}}},"w":{"docs":{"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0}},"df":1}}}},"t":{"docs":{"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/foreign bank account report (FBAR)/":{"tf":1.0}},"df":1}},"i":{"docs":{},"df":0,"g":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.4142135623730951},"https://phlip9.com/notes/devops/secrets/1password - secrets automation/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":2.8284271247461903},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/lua/":{"tf":1.0},"https://phlip9.com/notes/lang/operator fixity and precedence/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/arubanetworks captive portal/":{"tf":1.4142135623730951}},"df":7}},"s":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.0}},"df":3}}},"o":{"docs":{},"df":0,"c":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/combinatorics/k-combinations of a multiset/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.7320508075688772},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":2.0},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/operator fixity and precedence/":{"tf":3.4641016151377544},"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.4142135623730951},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/arubanetworks captive portal/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.4142135623730951}},"df":9}}},"u":{"docs":{},"df":0,"m":{"docs":{"https://phlip9.com/notes/android/root phone with magisk/":{"tf":1.0},"https://phlip9.com/notes/b l o c k c h a i n/fastpay/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/breez lightning service providers/":{"tf":1.4142135623730951},"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":1.0},"https://phlip9.com/notes/crypto/TLS self-signed pubkey-only certs/":{"tf":1.0},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.4142135623730951},"https://phlip9.com/notes/performance/simdjson talk/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/p-value/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/testing whether a coin is fair/":{"tf":1.4142135623730951},"https://phlip9.com/notes/statistics probability/winsorize/":{"tf":1.7320508075688772}},"df":13,"p":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/AI ML/Markov Decision Process (MDP)/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/CDF confidence bands - DKW inequality/":{"tf":1.4142135623730951},"https://phlip9.com/notes/statistics probability/G-test - multinomial goodness-of-fit/":{"tf":1.0}},"df":3}}},"r":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":2.23606797749979}},"df":3}}},"y":{"docs":{},"df":0,"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,".":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"v":{"docs":{"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":1.0}},"df":1}}}}}},"m":{"docs":{},"df":0,"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/devops/secrets/ejson (Shopify)/":{"tf":1.0}},"df":1}}}},"p":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/statistics probability/G-test - multinomial goodness-of-fit/":{"tf":1.0}},"df":1}}}}},"n":{"docs":{},"df":0,"c":{"docs":{"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.4142135623730951},"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":2.0},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":2.6457513110645907},"https://phlip9.com/notes/lang/rust/understanding sycamore reactivity/":{"tf":1.0}},"df":4,"&":{"docs":{},"df":0,"n":{"docs":{},"df":0,"b":{"docs":{},"df":0,"s":{"docs":{},"df":0,"p":{"docs":{},"df":0,";":{"docs":{},"df":0,"p":{"docs":{},"df":0,"a":{"docs":{},"df":0,"y":{"docs":{"https://phlip9.com/notes/btc-ln/lightning rod/":{"tf":1.0}},"df":1}}}}}}}}},"/":{"docs":{},"df":0,"a":{"docs":{},"df":0,"w":{"docs":{},"df":0,"a":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0}},"df":1}}}}}}}}}},"t":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":3.1622776601683795},"https://phlip9.com/notes/lang/ATS/Install ATS2/":{"tf":1.0}},"df":2,"e":{"docs":{},"df":0,"x":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1}}}},"m":{"docs":{"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.7320508075688772}},"df":1},"o":{"docs":{},"df":0,"m":{"docs":{"https://phlip9.com/notes/btc-ln/atomic multipath payments (AMP)/":{"tf":2.0},"https://phlip9.com/notes/btc-ln/submarine swaps/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.0},"https://phlip9.com/notes/devops/secrets/sops-nix/":{"tf":1.0}},"df":4}},"s":{"docs":{},"df":0,"'":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0}},"df":1},".":{"docs":{},"df":0,"h":{"docs":{},"df":0,"t":{"docs":{},"df":0,"m":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0}},"df":1}}}}},"/":{"docs":{},"df":0,"l":{"docs":{},"df":0,"f":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0}},"df":1}}},"1":{"docs":{"https://phlip9.com/notes/lang/ATS/Install ATS2/":{"tf":1.4142135623730951}},"df":1},"2":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/ATS/Install ATS2/":{"tf":2.23606797749979}},"df":2}},"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{"https://phlip9.com/notes/android/android cli setup/":{"tf":1.4142135623730951},"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0},"https://phlip9.com/notes/android/root phone with magisk/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":1.0},"https://phlip9.com/notes/ios/ios setup/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.4142135623730951},"https://phlip9.com/notes/misc/kintsugi/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/nix/nix debug broken package build/":{"tf":1.7320508075688772},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.0}},"df":10},"k":{"docs":{"https://phlip9.com/notes/btc-ln/zero-conf channels/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.7320508075688772},"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.7320508075688772},"https://phlip9.com/notes/confidential computing/intel SGX/secure time/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel TDX/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/reproducible-builds.org/":{"tf":2.23606797749979},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.7320508075688772},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":2.449489742783178}},"df":12}}},"e":{"docs":{},"df":0,"m":{"docs":{},"df":0,"p":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/foreign bank account report (FBAR)/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/zero-conf channels/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel SGX/secure time/":{"tf":1.0},"https://phlip9.com/notes/misc/kintsugi/":{"tf":1.4142135623730951},"https://phlip9.com/notes/reproducible builds/rebuilderd/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/arubanetworks captive portal/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.7320508075688772}},"df":9}}},"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"u":{"docs":{"https://phlip9.com/notes/crypto/biscuit authz/":{"tf":1.0}},"df":1}},"u":{"docs":{"https://phlip9.com/notes/crypto/biscuit authz/":{"tf":2.8284271247461903}},"df":1}},"s":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/android/root phone with magisk/":{"tf":1.4142135623730951},"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":3.872983346207417},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":4.123105625617661},"https://phlip9.com/notes/confidential computing/gramine/":{"tf":2.23606797749979},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":4.795831523312719},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":5.0},"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel TDX/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/marblerun/":{"tf":2.449489742783178},"https://phlip9.com/notes/confidential computing/mystikos/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":4.47213595499958}},"df":12,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"/":{"docs":{},"df":0,"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":2.23606797749979}},"df":1}}}}},"v":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"f":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"p":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}},"w":{"docs":{},"df":0,"i":{"docs":{},"df":0,"p":{"docs":{"https://phlip9.com/notes/confidential computing/intel TDX/":{"tf":1.0}},"df":1}}}}}}}}}}},"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"b":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":4.0},"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":2.0},"https://phlip9.com/notes/fuzzing/fuzzcheck-rs/":{"tf":1.0},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0}},"df":5,"e":{"docs":{},"df":0,"_":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{},"df":0,"k":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.0}},"df":1,".":{"docs":{},"df":0,"f":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"g":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.7320508075688772}},"df":1}}}},"x":{"docs":{},"df":0,"f":{"docs":{},"df":0,"r":{"docs":{},"df":0,"m":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.0}},"df":1}}}}}}}}}},"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{},"df":0,"k":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.4142135623730951}},"df":1}}}},"s":{"docs":{},"df":0,".":{"docs":{},"df":0,"f":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"g":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.0}},"df":1}}}}},"f":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"g":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.4142135623730951}},"df":1}}}},"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{},"df":0,"k":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.7320508075688772}},"df":1}}}}}}}}}}}}},"u":{"docs":{},"df":0,"d":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"b":{"docs":{},"df":0,"u":{"docs":{},"df":0,"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1}}}}},"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1}}},"i":{"docs":{},"df":0,"o":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1}},"m":{"docs":{},"df":0,"i":{"docs":{},"df":0,"x":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1}},"p":{"docs":{},"df":0,"3":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1}}}},"t":{"docs":{"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.0},"https://phlip9.com/notes/devops/secrets/ejson (Shopify)/":{"tf":1.4142135623730951}},"df":2,"o":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/crypto/(talk) authenticated data structures for stateless validation/":{"tf":1.0}},"df":1}}}}},"g":{"docs":{"https://phlip9.com/notes/WSL/WSL2 custom kernel/":{"tf":1.0}},"df":1,"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/lang/lua/":{"tf":1.0}},"df":1}}}}},"t":{"docs":{},"df":0,"h":{"docs":{"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":1.4142135623730951},"https://phlip9.com/notes/crypto/biscuit authz/":{"tf":1.7320508075688772},"https://phlip9.com/notes/devops/AKS - azure kubernetes service/":{"tf":1.0},"https://phlip9.com/notes/devops/service mesh/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/arubanetworks captive portal/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/lightning router overview/":{"tf":1.7320508075688772}},"df":7,"'":{"docs":{"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.4142135623730951}},"df":1},"/":{"docs":{},"df":0,"b":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"c":{"docs":{},"df":0,"u":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/crypto/biscuit authz/":{"tf":1.0}},"df":1}}}}}}}},"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.4142135623730951},"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/BOLT 8 - secure noise transport/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/crypto/(talk) authenticated data structures for stateless validation/":{"tf":1.4142135623730951},"https://phlip9.com/notes/crypto/dex - open-source OIDC & OAuth 2.0 provider/":{"tf":1.4142135623730951},"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":1.4142135623730951},"https://phlip9.com/notes/devops/azure CLI/":{"tf":1.0},"https://phlip9.com/notes/devops/consul/":{"tf":1.0},"https://phlip9.com/notes/devops/secrets/ejson-kms (AWS)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/distributed systems/papers/(2021) Leaderless Consensus/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.4142135623730951},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":3.1622776601683795},"https://phlip9.com/notes/router/lightning router/captive portal/arubanetworks captive portal/":{"tf":3.3166247903554},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":3.7416573867739413},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":4.898979485566356},"https://phlip9.com/notes/router/lightning router/lightning router overview/":{"tf":1.0}},"df":17,"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"d":{"docs":{},"df":0,"a":{"docs":{},"df":0,"v":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0}},"df":1}}}}},"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"/":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":1.0}},"df":1}}}}},"u":{"docs":{},"df":0,"t":{"docs":{},"df":0,"h":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":1.0}},"df":1}}}}}}},"_":{"docs":{},"df":0,"d":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"_":{"docs":{},"df":0,"s":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.4142135623730951}},"df":1}}}}}}}}}}}}}}}}},"o":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/financial instituion/":{"tf":1.0},"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/foreign bank account report (FBAR)/":{"tf":2.23606797749979},"https://phlip9.com/notes/b l o c k c h a i n/fastpay/":{"tf":1.4142135623730951},"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/BOLT 4 - onion routing protocol/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.7320508075688772},"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.0},"https://phlip9.com/notes/crypto/(talk) authenticated data structures for stateless validation/":{"tf":1.0},"https://phlip9.com/notes/crypto/biscuit authz/":{"tf":2.0},"https://phlip9.com/notes/crypto/smallstep - private online CA & ACME server/":{"tf":1.0},"https://phlip9.com/notes/distributed systems/papers/(2020) Semi-Fast Byzantine-tolerant Shared Register without Reliable Broadcast/":{"tf":1.0},"https://phlip9.com/notes/distributed systems/papers/(2021) Leaderless Consensus/":{"tf":1.0},"https://phlip9.com/notes/fuzzing/fuzzing/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/reproducible-builds.org/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":2.6457513110645907},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":3.7416573867739413}},"df":18,"i":{"docs":{},"df":0,"s":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.4142135623730951}},"df":1}}}},"z":{"docs":{"https://phlip9.com/notes/crypto/biscuit authz/":{"tf":1.4142135623730951}},"df":1}},"o":{"docs":{"https://phlip9.com/notes/btc-ln/breez lightning service providers/":{"tf":1.0},"https://phlip9.com/notes/keyboards/moergo glove80/":{"tf":1.0},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":2.0},"https://phlip9.com/notes/performance/simdjson talk/":{"tf":1.0},"https://phlip9.com/notes/postgres/snippets/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/nix/nix auto-allocate-uids -> nixbld users/":{"tf":2.8284271247461903}},"df":8,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"f":{"docs":{"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/gramine/":{"tf":1.0}},"df":2}}}},"g":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0}},"df":1}}}}},"m":{"docs":{"https://phlip9.com/notes/crypto/acme protocol/":{"tf":2.0},"https://phlip9.com/notes/crypto/smallstep - private online CA & ACME server/":{"tf":1.0},"https://phlip9.com/notes/devops/deployment strategies/":{"tf":1.4142135623730951},"https://phlip9.com/notes/devops/docker compose/":{"tf":1.0},"https://phlip9.com/notes/devops/secrets/1password - secrets automation/":{"tf":1.7320508075688772}},"df":5,"a":{"docs":{},"df":0,"k":{"docs":{"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0},"https://phlip9.com/notes/lang/ATS/Install ATS2/":{"tf":1.0}},"df":2},"t":{"docs":{"https://phlip9.com/notes/android/OTA updates for rooted android phone/":{"tf":1.4142135623730951},"https://phlip9.com/notes/android/root phone with magisk/":{"tf":1.4142135623730951},"https://phlip9.com/notes/devops/secrets/ejson-kms (AWS)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/keyboards/moergo glove80/":{"tf":1.0},"https://phlip9.com/notes/lang/lua/":{"tf":1.0},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/nix/links/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.7320508075688772}},"df":8}}},"n":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{"https://phlip9.com/notes/crypto/acme protocol/":{"tf":1.0}},"df":1,"i":{"docs":{"https://phlip9.com/notes/management/relieve often - why generals were more successful in WWII/":{"tf":1.7320508075688772}},"df":1}}}},"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"m":{"docs":{},"df":0,"o":{"docs":{},"df":0,"v":{"docs":{"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0}},"df":1}}}}}}}},"v":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.4142135623730951}},"df":3,"a":{"docs":{},"df":0,"i":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/AI ML/Markov Decision Process (MDP)/":{"tf":1.0},"https://phlip9.com/notes/android/OTA updates for rooted android phone/":{"tf":1.0},"https://phlip9.com/notes/android/android cli setup/":{"tf":1.0},"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0},"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/BOLT 11 - invoices/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.7320508075688772},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.7320508075688772},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/mystikos/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":2.23606797749979},"https://phlip9.com/notes/crypto/biscuit authz/":{"tf":1.0},"https://phlip9.com/notes/devops/azure CLI/":{"tf":1.0},"https://phlip9.com/notes/devops/consul/":{"tf":1.0},"https://phlip9.com/notes/devops/nomad/":{"tf":1.4142135623730951},"https://phlip9.com/notes/devops/service mesh/":{"tf":1.0},"https://phlip9.com/notes/lang/flutter/flutter setup/":{"tf":1.7320508075688772},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0},"https://phlip9.com/notes/misc/setting up a headless raspbian boot image/":{"tf":1.0},"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.0},"https://phlip9.com/notes/postgres/postgres performance tuning/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/nix/nix debug broken package build/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.4142135623730951}},"df":26}}},"d":{"docs":{"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.4142135623730951}},"df":1,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"a":{"docs":{},"df":0,"g":{"docs":{"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0}},"df":1}}}}}},"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"g":{"docs":{"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":1.4142135623730951}},"df":1}},"i":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/aptos/":{"tf":1.0}},"df":1},"s":{"docs":{"https://phlip9.com/notes/management/relieve often - why generals were more successful in WWII/":{"tf":1.0}},"df":1}}},"o":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/atomic multipath payments (AMP)/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.7320508075688772},"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":1.4142135623730951},"https://phlip9.com/notes/design/form design/":{"tf":1.7320508075688772},"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":1.7320508075688772},"https://phlip9.com/notes/fuzzing/fuzzcheck-rs/":{"tf":1.0},"https://phlip9.com/notes/lang/lua/":{"tf":1.0},"https://phlip9.com/notes/misc/prepping RPI for embedded dev/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/nix/nix auto-allocate-uids -> nixbld users/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":2.23606797749979}},"df":15}}},"r":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":4.47213595499958}},"df":1,".":{"docs":{},"df":0,"q":{"docs":{},"df":0,"u":{"docs":{},"df":0,"o":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,".":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"p":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{},"df":0,".":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"p":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{},"df":0,"d":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}},"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"p":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{},"df":0,"_":{"docs":{},"df":0,"d":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.4142135623730951}},"df":1}}}}}}}}}}}},"_":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{},"df":0,"p":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0}},"df":1}}}}}}}}}},"b":{"docs":{},"df":0,"u":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0}},"df":1}}}}}},"x":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":2.0},"https://phlip9.com/notes/performance/simdjson talk/":{"tf":1.0}},"df":2}},"w":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0},"https://phlip9.com/notes/design/form design/":{"tf":1.0},"https://phlip9.com/notes/devops/nomad/":{"tf":1.0},"https://phlip9.com/notes/devops/secrets/ejson (Shopify)/":{"tf":1.0},"https://phlip9.com/notes/devops/secrets/ejson-kms (AWS)/":{"tf":2.6457513110645907},"https://phlip9.com/notes/devops/secrets/mozilla SOPS/":{"tf":1.0},"https://phlip9.com/notes/devops/secrets/sy - share secrets safely/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.0}},"df":8,"a":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":1.0},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":2.0}},"df":2}},"r":{"docs":{"https://phlip9.com/notes/confidential computing/marblerun/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/mystikos/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":1.0},"https://phlip9.com/notes/devops/linkerd/":{"tf":1.7320508075688772},"https://phlip9.com/notes/fuzzing/fuzzcheck-rs/":{"tf":1.0},"https://phlip9.com/notes/fuzzing/fuzzing/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0}},"df":7,"e":{"docs":{},"df":0,".":{"docs":{},"df":0,"m":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/confidential computing/mystikos/":{"tf":1.0}},"df":1}}}}},"y":{"docs":{"https://phlip9.com/notes/design/form design/":{"tf":1.0},"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":1.0},"https://phlip9.com/notes/networking/network interface card (NIC)/":{"tf":1.0}},"df":3}},"k":{"docs":{"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":3.0}},"df":1},"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"2":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0}},"df":1}}}}},"y":{"docs":{},"df":0,"e":{"docs":{},"df":0,"k":{"docs":{},"df":0,"s":{"docs":{},"df":0,"/":{"docs":{},"df":0,"s":{"docs":{},"df":0,"g":{"docs":{},"df":0,"x":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0}},"df":1}}}}}}},"y":{"docs":{},"df":0,"y":{"docs":{},"df":0,"y":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0}},"df":1}}}}},"z":{"docs":{"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.7320508075688772},"https://phlip9.com/notes/confidential computing/gramine/":{"tf":1.4142135623730951},"https://phlip9.com/notes/devops/azure CLI/":{"tf":3.3166247903554},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.0}},"df":4,"_":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"p":{"docs":{},"df":0,"o":{"docs":{"https://phlip9.com/notes/devops/azure CLI/":{"tf":1.0}},"df":1,"=":{"docs":{},"df":0,"$":{"docs":{},"df":0,"(":{"docs":{},"df":0,"l":{"docs":{},"df":0,"s":{"docs":{},"df":0,"b":{"docs":{},"df":0,"_":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{"https://phlip9.com/notes/devops/azure CLI/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}},"u":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.7320508075688772},"https://phlip9.com/notes/confidential computing/gramine/":{"tf":1.7320508075688772},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":2.0},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":2.0},"https://phlip9.com/notes/confidential computing/mystikos/":{"tf":1.0},"https://phlip9.com/notes/devops/AKS - azure kubernetes service/":{"tf":2.449489742783178},"https://phlip9.com/notes/devops/azure CLI/":{"tf":2.8284271247461903},"https://phlip9.com/notes/devops/secrets/mozilla SOPS/":{"tf":1.4142135623730951},"https://phlip9.com/notes/postgres/postgres performance tuning/":{"tf":1.4142135623730951}},"df":9,"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"z":{"docs":{},"df":0,"u":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0}},"df":1}}}}}}}}},"b":{"docs":{"https://phlip9.com/notes/AI ML/Expectimax Search/":{"tf":2.0},"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/":{"tf":1.0},"https://phlip9.com/notes/b l o c k c h a i n/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.7320508075688772},"https://phlip9.com/notes/btc-ln/atomic multipath payments (AMP)/":{"tf":2.449489742783178},"https://phlip9.com/notes/btc-ln/lightning network notes/":{"tf":2.449489742783178},"https://phlip9.com/notes/combinatorics/k-combinations of a multiset/":{"tf":2.23606797749979},"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":1.0},"https://phlip9.com/notes/devops/algo wireguard VPN server/":{"tf":1.0},"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":1.0},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":2.8284271247461903},"https://phlip9.com/notes/lang/lua/":{"tf":3.0},"https://phlip9.com/notes/lang/operator fixity and precedence/":{"tf":3.0},"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.0},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":3.3166247903554},"https://phlip9.com/notes/performance/bit hacks/":{"tf":4.47213595499958},"https://phlip9.com/notes/postgres/postgres performance tuning/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":2.0},"https://phlip9.com/notes/statistics probability/G-test - multinomial goodness-of-fit/":{"tf":1.7320508075688772},"https://phlip9.com/notes/statistics probability/kelly criterion + ELO/":{"tf":1.4142135623730951},"https://phlip9.com/notes/statistics probability/winsorize/":{"tf":1.0}},"df":22,"\"":{"docs":{},"df":0,"e":{"docs":{},"df":0,"k":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0}},"df":1}}}}}},"m":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":1.0}},"df":1}}},"*":{"docs":{},"df":0,"b":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.4142135623730951}},"df":1}},",":{"docs":{},"df":0,"c":{"docs":{"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.0}},"df":1}},"/":{"docs":{},"df":0,"c":{"docs":{"https://phlip9.com/notes/android/OTA updates for rooted android phone/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/lightning rod/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.4142135623730951},"https://phlip9.com/notes/crypto/(talk) authenticated data structures for stateless validation/":{"tf":1.0},"https://phlip9.com/notes/performance/simdjson talk/":{"tf":1.0}},"df":6},"g":{"docs":{},"df":0,"s":{"docs":{},"df":0,"c":{"docs":{},"df":0,".":{"docs":{},"df":0,"p":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/confidential computing/gramine/":{"tf":1.4142135623730951}},"df":1}}}}}},"w":{"docs":{"https://phlip9.com/notes/btc-ln/breez lightning service providers/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/submarine swaps/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/marblerun/":{"tf":1.0},"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":1.0},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":2.0},"https://phlip9.com/notes/lang/rust/sycamore x futures/":{"tf":1.0},"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/G-test - multinomial goodness-of-fit/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/standard error/":{"tf":1.0}},"df":9}},"0":{"docs":{"https://phlip9.com/notes/performance/bit hacks/":{"tf":4.123105625617661}},"df":1,"+":{"docs":{},"df":0,"b":{"docs":{},"df":0,"1":{"docs":{"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.0}},"df":1,"+":{"docs":{},"df":0,"b":{"docs":{},"df":0,"2":{"docs":{"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.0}},"df":1,"+":{"docs":{},"df":0,"b":{"docs":{},"df":0,"3":{"docs":{"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.4142135623730951}},"df":1}}}}}}}}}},"1":{"docs":{"https://phlip9.com/notes/performance/bit hacks/":{"tf":3.7416573867739413},"https://phlip9.com/notes/performance/simdjson talk/":{"tf":2.449489742783178}},"df":2},"2":{"docs":{"https://phlip9.com/notes/performance/bit hacks/":{"tf":4.242640687119285},"https://phlip9.com/notes/performance/simdjson talk/":{"tf":2.0}},"df":2},"3":{"docs":{"https://phlip9.com/notes/performance/bit hacks/":{"tf":3.7416573867739413}},"df":1},"4":{"docs":{"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.4142135623730951}},"df":1},"5":{"docs":{"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.4142135623730951}},"df":1},"6":{"docs":{"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.7320508075688772}},"df":1},"7":{"docs":{"https://phlip9.com/notes/performance/bit hacks/":{"tf":2.0}},"df":1,"5":{"docs":{},"df":0,"3":{"docs":{},"df":0,"0":{"docs":{},"df":0,"b":{"docs":{},"df":0,"8":{"docs":{},"df":0,"0":{"docs":{"https://phlip9.com/notes/keyboards/moergo glove80/":{"tf":1.0}},"df":1}}}}}},"b":{"docs":{},"df":0,"c":{"docs":{"https://phlip9.com/notes/keyboards/moergo glove80/":{"tf":1.4142135623730951}},"df":1}}},"[":{"docs":{},"df":0,"b":{"docs":{},"df":0,"o":{"docs":{},"df":0,"b":{"docs":{"https://phlip9.com/notes/btc-ln/atomic multipath payments (AMP)/":{"tf":1.7320508075688772}},"df":1}}}},"^":{"docs":{},"df":0,"0":{"docs":{"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.0}},"df":1},"1":{"docs":{"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.0}},"df":1},"2":{"docs":{"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.0}},"df":1},"3":{"docs":{"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.0}},"df":1}},"_":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0},"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.0}},"df":2},"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{},"df":0,"k":{"docs":{"https://phlip9.com/notes/performance/bit hacks/":{"tf":2.0}},"df":1}}}},"n":{"docs":{"https://phlip9.com/notes/statistics probability/cheat sheet/":{"tf":2.23606797749979}},"df":1},"x":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0},"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.7320508075688772}},"df":2},"z":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1}},"a":{"docs":{},"df":0,"b":{"docs":{},"df":0,"a":{"docs":{"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.0}},"df":1},"y":{"docs":{},"df":0,"y":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.0}},"df":1}}}},"c":{"docs":{},"df":0,"k":{"docs":{"https://phlip9.com/notes/android/OTA updates for rooted android phone/":{"tf":1.0},"https://phlip9.com/notes/android/root phone with magisk/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/atomic multipath payments (AMP)/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/hosted channels/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.7320508075688772},"https://phlip9.com/notes/design/form design/":{"tf":1.0},"https://phlip9.com/notes/devops/deployment strategies/":{"tf":1.0},"https://phlip9.com/notes/devops/secrets/ejson-kms (AWS)/":{"tf":1.0},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0},"https://phlip9.com/notes/misc/kintsugi/":{"tf":1.4142135623730951},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0},"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.4142135623730951},"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.0},"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.4142135623730951},"https://phlip9.com/notes/reproducible builds/nix/nix auto-allocate-uids -> nixbld users/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/arubanetworks captive portal/":{"tf":1.4142135623730951},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.4142135623730951}},"df":22,"d":{"docs":{},"df":0,"o":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/reproducible builds/reproducible-builds.org/":{"tf":1.0}},"df":1}}}},"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0},"https://phlip9.com/notes/crypto/dex - open-source OIDC & OAuth 2.0 provider/":{"tf":1.0},"https://phlip9.com/notes/devops/k3s/":{"tf":1.0},"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":2.23606797749979},"https://phlip9.com/notes/misc/optimization solvers/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/rebuilderd/":{"tf":1.0}},"df":7}}},"g":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/btc-ln/breez lightning service providers/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0},"https://phlip9.com/notes/design/form design/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0}},"df":5,"p":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"c":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"s":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}},"o":{"docs":{},"df":0,"f":{"docs":{},"df":0,"f":{"docs":{"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":1.4142135623730951}},"df":1}}},"p":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"s":{"docs":{},"df":0,"u":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":4.123105625617661}},"df":1}}}}}}},"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/rr with rust/":{"tf":1.4142135623730951}},"df":3,"e":{"docs":{},"df":0,"+":{"docs":{},"df":0,"u":{"docs":{},"df":0,"n":{"docs":{},"df":0,"w":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.0}},"df":1}}}}}}},"/":{"docs":{},"df":0,"u":{"docs":{},"df":0,"n":{"docs":{},"df":0,"w":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.0}},"df":1}}}}}}}}}}}},"u":{"docs":{},"df":0,"p":{"docs":{},"df":0,"/":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/postgres/postgres performance tuning/":{"tf":1.0}},"df":1}}}}}}}}},"w":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel SGX/secure time/":{"tf":1.0},"https://phlip9.com/notes/devops/deployment strategies/":{"tf":1.7320508075688772},"https://phlip9.com/notes/lang/rust/rr with rust/":{"tf":2.0},"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.0}},"df":5}}}}}},"d":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/bip158 - compact block filters/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/breez lightning service providers/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/secure time/":{"tf":1.0},"https://phlip9.com/notes/crypto/(talk) authenticated data structures for stateless validation/":{"tf":2.23606797749979},"https://phlip9.com/notes/design/form design/":{"tf":1.0},"https://phlip9.com/notes/fuzzing/fuzzcheck-rs/":{"tf":1.0},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.0}},"df":8},"f":{"docs":{},"df":0,"e":{"docs":{},"df":0,"2":{"docs":{},"df":0,"7":{"docs":{},"df":0,"6":{"docs":{},"df":0,"2":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"6":{"docs":{},"df":0,"0":{"docs":{},"df":0,"a":{"docs":{},"df":0,"4":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.0}},"df":1}}}}}}}}}}}}}},"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"c":{"docs":{"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/foreign bank account report (FBAR)/":{"tf":1.0},"https://phlip9.com/notes/b l o c k c h a i n/fastpay/":{"tf":3.0},"https://phlip9.com/notes/btc-ln/breez lightning service providers/":{"tf":1.7320508075688772},"https://phlip9.com/notes/btc-ln/submarine swaps/":{"tf":1.7320508075688772},"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":1.7320508075688772},"https://phlip9.com/notes/devops/AKS - azure kubernetes service/":{"tf":1.0},"https://phlip9.com/notes/devops/linkerd/":{"tf":1.0},"https://phlip9.com/notes/devops/service mesh/":{"tf":1.0},"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.0}},"df":10}}}},"n":{"docs":{"https://phlip9.com/notes/crypto/(talk) authenticated data structures for stateless validation/":{"tf":1.0}},"df":1,"d":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 8 - secure noise transport/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":1.0},"https://phlip9.com/notes/crypto/acme protocol/":{"tf":1.0},"https://phlip9.com/notes/fuzzing/fuzzcheck-rs/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/CDF confidence bands - DKW inequality/":{"tf":2.23606797749979}},"df":5,"w":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{},"df":0,"t":{"docs":{},"df":0,"h":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/btc utreexo - utxo accumulator/":{"tf":1.0},"https://phlip9.com/notes/devops/AKS - azure kubernetes service/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/lightning router overview/":{"tf":2.0}},"df":3}}}}}},"k":{"docs":{"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/financial instituion/":{"tf":1.7320508075688772},"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/foreign bank account report (FBAR)/":{"tf":2.0},"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/monetary instruments/":{"tf":1.0},"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/money services business (MSB)/":{"tf":1.4142135623730951}},"df":4}},"r":{"docs":{"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":2.23606797749979},"https://phlip9.com/notes/lang/lua/":{"tf":1.4142135623730951},"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.0}},"df":3,".":{"docs":{},"df":0,"d":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0}},"df":1}}}},"e":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":2.23606797749979},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":3}},"s":{"docs":{},"df":0,"e":{"docs":{"https://phlip9.com/notes/AI ML/Markov Decision Process (MDP)/":{"tf":1.0},"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0},"https://phlip9.com/notes/android/root phone with magisk/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/BOLT 4 - onion routing protocol/":{"tf":1.4142135623730951},"https://phlip9.com/notes/btc-ln/atomic multipath payments (AMP)/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/submarine swaps/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":3.0},"https://phlip9.com/notes/confidential computing/gramine/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.7320508075688772},"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/secure time/":{"tf":1.7320508075688772},"https://phlip9.com/notes/confidential computing/mystikos/":{"tf":1.0},"https://phlip9.com/notes/crypto/(talk) authenticated data structures for stateless validation/":{"tf":1.0},"https://phlip9.com/notes/crypto/biscuit authz/":{"tf":2.0},"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":1.4142135623730951},"https://phlip9.com/notes/devops/secrets/sops-nix/":{"tf":1.0},"https://phlip9.com/notes/fuzzing/bolero - fuzzing + property testing/":{"tf":1.0},"https://phlip9.com/notes/fuzzing/fuzzcheck-rs/":{"tf":1.0},"https://phlip9.com/notes/fuzzing/fuzzing/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/operator fixity and precedence/":{"tf":1.0},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0},"https://phlip9.com/notes/networking/CIDR/":{"tf":1.0},"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.0},"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/nix/links/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/nix/nix auto-allocate-uids -> nixbld users/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.7320508075688772},"https://phlip9.com/notes/router/lightning router/captive portal/arubanetworks captive portal/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":2.23606797749979},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":2.449489742783178},"https://phlip9.com/notes/statistics probability/multinomial distribution/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/testing whether a coin is fair/":{"tf":1.0}},"df":34,"6":{"docs":{},"df":0,"4":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0},"https://phlip9.com/notes/performance/simdjson talk/":{"tf":1.0}},"df":2,"u":{"docs":{},"df":0,"r":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/crypto/acme protocol/":{"tf":1.7320508075688772}},"df":1}}}}},"n":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0}},"df":1}}}},"h":{"docs":{"https://phlip9.com/notes/WSL/WSL2 custom kernel/":{"tf":1.0},"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0},"https://phlip9.com/notes/android/root phone with magisk/":{"tf":1.0},"https://phlip9.com/notes/devops/algo wireguard VPN server/":{"tf":1.0},"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.4142135623730951},"https://phlip9.com/notes/reproducible builds/nix/nix auto-allocate-uids -> nixbld users/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/nix/nix debug broken package build/":{"tf":1.0}},"df":7,"r":{"docs":{},"df":0,"c":{"docs":{"https://phlip9.com/notes/android/android cli setup/":{"tf":1.7320508075688772},"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":2.0},"https://phlip9.com/notes/ios/ios setup/":{"tf":1.0},"https://phlip9.com/notes/lang/ATS/Install ATS2/":{"tf":1.7320508075688772},"https://phlip9.com/notes/lang/flutter/flutter setup/":{"tf":1.0}},"df":5}}},"i":{"docs":{"https://phlip9.com/notes/devops/secrets/ejson (Shopify)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":2.0}},"df":3,"c":{"docs":{"https://phlip9.com/notes/android/root phone with magisk/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel TDX/":{"tf":1.0},"https://phlip9.com/notes/crypto/(talk) authenticated data structures for stateless validation/":{"tf":1.0},"https://phlip9.com/notes/devops/azure CLI/":{"tf":2.0},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0},"https://phlip9.com/notes/misc/prepping RPI for embedded dev/":{"tf":1.0},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.4142135623730951},"https://phlip9.com/notes/misc/setting up a headless raspbian boot image/":{"tf":1.0},"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.0},"https://phlip9.com/notes/performance/profiling/":{"tf":1.0},"https://phlip9.com/notes/performance/simdjson talk/":{"tf":1.0},"https://phlip9.com/notes/postgres/snippets/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.0}},"df":16}}},"t":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.0}},"df":1,"c":{"docs":{},"df":0,"h":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/btc utreexo - utxo accumulator/":{"tf":1.4142135623730951},"https://phlip9.com/notes/postgres/postgres performance tuning/":{"tf":1.0}},"df":2}},"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/keyboards/moergo glove80/":{"tf":1.0}},"df":1}}}}},"y":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/statistics probability/testing whether a coin is fair/":{"tf":1.4142135623730951}},"df":1}}}}}},"z":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":2.0}},"df":1}}}},"b":{"docs":{},"df":0,"b":{"docs":{},"df":0,"b":{"docs":{"https://phlip9.com/notes/performance/bit hacks/":{"tf":2.0}},"df":1}},"c":{"docs":{},"df":0,".":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{"https://phlip9.com/notes/router/lightning router/captive portal/arubanetworks captive portal/":{"tf":2.6457513110645907}},"df":1}}}}}},"c":{"docs":{"https://phlip9.com/notes/distributed systems/papers/(2020) Semi-Fast Byzantine-tolerant Shared Register without Reliable Broadcast/":{"tf":1.4142135623730951}},"df":1,"p":{"docs":{"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":2.0}},"df":2}},"d":{"docs":{},"df":0,"6":{"docs":{},"df":0,"3":{"docs":{},"df":0,"7":{"docs":{},"df":0,"d":{"docs":{},"df":0,"7":{"docs":{},"df":0,"6":{"docs":{},"df":0,"6":{"docs":{},"df":0,"8":{"docs":{},"df":0,"a":{"docs":{},"df":0,"0":{"docs":{},"df":0,"b":{"docs":{},"df":0,"7":{"docs":{},"df":0,"1":{"docs":{},"df":0,"4":{"docs":{"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":2.6457513110645907}},"df":1}}}}}}}}}}}}}}},"e":{"docs":{"https://phlip9.com/notes/btc-ln/lightning rod/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/rr with rust/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":2.23606797749979},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":3.3166247903554}},"df":7,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/secure time/":{"tf":1.0}},"df":1}}},"d":{"docs":{"https://phlip9.com/notes/misc/kintsugi/":{"tf":1.0}},"df":1},"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/monetary instruments/":{"tf":1.7320508075688772},"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/money services business (MSB)/":{"tf":1.0}},"df":2}}}},"c":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0}},"df":1}},"h":{"docs":{},"df":0,"3":{"docs":{},"df":0,"2":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 11 - invoices/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.0}},"df":2}}},"o":{"docs":{},"df":0,"m":{"docs":{"https://phlip9.com/notes/AI ML/Expectimax Search/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":1.0},"https://phlip9.com/notes/crypto/acme protocol/":{"tf":1.0},"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":1.0},"https://phlip9.com/notes/keyboards/moergo glove80/":{"tf":1.0},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/operator fixity and precedence/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/rust verification tools/":{"tf":1.0},"https://phlip9.com/notes/management/relieve often - why generals were more successful in WWII/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/standard error/":{"tf":1.0}},"df":13}}},"e":{"docs":{},"df":0,"f":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.4142135623730951}},"df":1}}},"f":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/AI ML/Expectimax Search/":{"tf":1.0},"https://phlip9.com/notes/AI ML/Markov Decision Process (MDP)/":{"tf":1.0},"https://phlip9.com/notes/WSL/WSL2 custom kernel/":{"tf":1.0},"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0},"https://phlip9.com/notes/android/linux ADB udev setup/":{"tf":1.0},"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.4142135623730951},"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.7320508075688772},"https://phlip9.com/notes/btc-ln/BOLT 8 - secure noise transport/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/gramine/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.7320508075688772},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":1.0},"https://phlip9.com/notes/crypto/acme protocol/":{"tf":2.0},"https://phlip9.com/notes/design/form design/":{"tf":3.0},"https://phlip9.com/notes/devops/deployment strategies/":{"tf":1.0},"https://phlip9.com/notes/fuzzing/fuzzcheck-rs/":{"tf":1.0},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":2.0},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":2.0},"https://phlip9.com/notes/lang/operator fixity and precedence/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/understanding sycamore reactivity/":{"tf":1.0},"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":1.0},"https://phlip9.com/notes/misc/kintsugi/":{"tf":1.4142135623730951},"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.0},"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.4142135623730951},"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.0},"https://phlip9.com/notes/postgres/types of scans/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/router/lightning router/captive portal/arubanetworks captive portal/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":2.0},"https://phlip9.com/notes/statistics probability/G-test - multinomial goodness-of-fit/":{"tf":1.0}},"df":34,"e":{"docs":{},"df":0,"_":{"docs":{},"df":0,"d":{"docs":{},"df":0,"r":{"docs":{},"df":0,"v":{"docs":{"https://phlip9.com/notes/reproducible builds/nix/nix debug spurrious rebuilds/":{"tf":1.4142135623730951}},"df":1}}}}}}}},"g":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0},"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0},"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":1.0},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/gdb ref/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/rr with rust/":{"tf":1.0},"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":1.0},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0},"https://phlip9.com/notes/postgres/snippets/":{"tf":1.0}},"df":11,"n":{"docs":{"https://phlip9.com/notes/reproducible builds/nix/links/":{"tf":1.0}},"df":1},"{":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"g":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/AI ML/Expectimax Search/":{"tf":1.4142135623730951},"https://phlip9.com/notes/AI ML/Markov Decision Process (MDP)/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/G-test - multinomial goodness-of-fit/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/cheat sheet/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/p-value/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/testing whether a coin is fair/":{"tf":1.0}},"df":6}}}}}}}},"u":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.0}},"df":1}}},"h":{"docs":{},"df":0,"a":{"docs":{},"df":0,"v":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/keyboards/moergo glove80/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/rust/rust verification tools/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.0}},"df":3},"u":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0},"https://phlip9.com/notes/lang/lua/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/rust verification tools/":{"tf":1.0}},"df":3}}}}}},"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/android/ADB over TCP inside WSL2/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/BOLT 11 - invoices/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/reproducible-builds.org/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.4142135623730951}},"df":6}}}},"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"e":{"docs":{},"df":0,"v":{"docs":{"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0},"https://phlip9.com/notes/android/root phone with magisk/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.0},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.4142135623730951}},"df":7}}},"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"g":{"docs":{"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.0}},"df":1}},"w":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/gramine/":{"tf":2.0},"https://phlip9.com/notes/design/form design/":{"tf":1.0},"https://phlip9.com/notes/devops/consul/":{"tf":1.0},"https://phlip9.com/notes/lang/operator fixity and precedence/":{"tf":1.0},"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":1.0},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/winsorize/":{"tf":1.4142135623730951}},"df":8,"/":{"docs":{},"df":0,"a":{"docs":{},"df":0,"b":{"docs":{},"df":0,"o":{"docs":{},"df":0,"v":{"docs":{"https://phlip9.com/notes/statistics probability/winsorize/":{"tf":1.0}},"df":1}}}}}}}},"n":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{"https://phlip9.com/notes/statistics probability/winsorize/":{"tf":1.0}},"df":1,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"k":{"docs":{"https://phlip9.com/notes/misc/optimization solvers/":{"tf":1.4142135623730951},"https://phlip9.com/notes/performance/simdjson talk/":{"tf":1.0}},"df":2,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"g":{"docs":{},"df":0,"r":{"docs":{},"df":0,"f":{"docs":{},"df":0,"c":{"docs":{},"df":0,"5":{"docs":{},"df":0,"1":{"docs":{},"df":0,"8":{"docs":{},"df":0,"0":{"docs":{"https://phlip9.com/notes/networking/ipv6 address space/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}},"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"h":{"docs":{"https://phlip9.com/notes/misc/kintsugi/":{"tf":1.0}},"df":1}}},"f":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"i":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/foreign bank account report (FBAR)/":{"tf":1.0}},"df":1}}}}},"t":{"docs":{"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/foreign bank account report (FBAR)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/b l o c k c h a i n/fastpay/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/submarine swaps/":{"tf":1.0},"https://phlip9.com/notes/devops/secrets/ejson (Shopify)/":{"tf":1.0},"https://phlip9.com/notes/lang/operator fixity and precedence/":{"tf":1.0},"https://phlip9.com/notes/postgres/postgres performance tuning/":{"tf":1.0}},"df":6}}}}},"r":{"docs":{},"df":0,"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.4142135623730951}},"df":2}},"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"l":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/statistics probability/testing whether a coin is fair/":{"tf":1.0}},"df":1}}}}}}},"s":{"docs":{},"df":0,"p":{"docs":{},"df":0,"o":{"docs":{},"df":0,"k":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":1.4142135623730951}},"df":2}}},"t":{"docs":{"https://phlip9.com/notes/AI ML/Expectimax Search/":{"tf":2.0},"https://phlip9.com/notes/AI ML/Markov Decision Process (MDP)/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.0},"https://phlip9.com/notes/devops/service mesh/":{"tf":1.0},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0},"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":1.0},"https://phlip9.com/notes/misc/kintsugi/":{"tf":1.4142135623730951},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0},"https://phlip9.com/notes/postgres/postgres performance tuning/":{"tf":1.0}},"df":9}},"t":{"docs":{},"df":0,"a":{"docs":{"https://phlip9.com/notes/AI ML/Expectimax Search/":{"tf":2.449489742783178}},"df":1},"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/combinatorics/k-combinations of a multiset/":{"tf":1.0},"https://phlip9.com/notes/devops/AKS - azure kubernetes service/":{"tf":1.0},"https://phlip9.com/notes/fuzzing/fuzzing/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/rr with rust/":{"tf":1.4142135623730951},"https://phlip9.com/notes/misc/setting up a headless raspbian boot image/":{"tf":1.0},"https://phlip9.com/notes/performance/simdjson talk/":{"tf":1.0},"https://phlip9.com/notes/postgres/snippets/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/lightning router overview/":{"tf":1.0}},"df":8}}},"w":{"docs":{},"df":0,"e":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/money services business (MSB)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/BOLT 11 - invoices/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/BOLT 7 - p2p node and channel discovery/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/submarine swaps/":{"tf":1.0},"https://phlip9.com/notes/combinatorics/k-combinations of a multiset/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":2.0},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/marblerun/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":1.0},"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":1.0},"https://phlip9.com/notes/keyboards/moergo glove80/":{"tf":1.0},"https://phlip9.com/notes/lang/operator fixity and precedence/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/rust/rr with rust/":{"tf":1.0},"https://phlip9.com/notes/misc/kintsugi/":{"tf":1.7320508075688772},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":2.8284271247461903},"https://phlip9.com/notes/networking/CIDR/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/nix/nix debug spurrious rebuilds/":{"tf":1.4142135623730951},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.4142135623730951},"https://phlip9.com/notes/statistics probability/G-test - multinomial goodness-of-fit/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/multinomial distribution/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/winsorize/":{"tf":1.7320508075688772}},"df":27}}}}},"w":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/misc/kintsugi/":{"tf":1.0}},"df":1}}},"y":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.4142135623730951}},"df":3}}}}},"f":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/fastpay/":{"tf":2.0},"https://phlip9.com/notes/distributed systems/papers/(2020) Semi-Fast Byzantine-tolerant Shared Register without Reliable Broadcast/":{"tf":1.0},"https://phlip9.com/notes/distributed systems/papers/(2021) Leaderless Consensus/":{"tf":1.0}},"df":3}},"g":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1},"i":{"docs":{"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.0}},"df":1,"a":{"docs":{},"df":0,"s":{"docs":{"https://phlip9.com/notes/statistics probability/testing whether a coin is fair/":{"tf":1.0}},"df":1}},"d":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/lang/rust/sycamore x futures/":{"tf":1.0}},"df":1,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":1.0}},"df":2,"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"y":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0}},"df":1}}}}}}}}}}}}},"g":{"docs":{"https://phlip9.com/notes/android/root phone with magisk/":{"tf":1.0},"https://phlip9.com/notes/combinatorics/k-combinations of a multiset/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.7320508075688772},"https://phlip9.com/notes/confidential computing/marblerun/":{"tf":1.4142135623730951},"https://phlip9.com/notes/devops/docker compose/":{"tf":1.0},"https://phlip9.com/notes/devops/nomad/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.0},"https://phlip9.com/notes/misc/kintsugi/":{"tf":1.0},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.7320508075688772},"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/multinomial distribution/":{"tf":1.0}},"df":12,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.4142135623730951}},"df":1}}},"l":{"docs":{"https://phlip9.com/notes/statistics probability/CDF confidence bands - DKW inequality/":{"tf":1.0}},"df":1,"|":{"docs":{},"df":0,"f":{"docs":{},"df":0,"_":{"docs":{},"df":0,"n":{"docs":{},"df":0,"(":{"docs":{},"df":0,"x":{"docs":{"https://phlip9.com/notes/statistics probability/CDF confidence bands - DKW inequality/":{"tf":1.0}},"df":1}}}}}}},"r":{"docs":{"https://phlip9.com/notes/statistics probability/CDF confidence bands - DKW inequality/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/G-test - multinomial goodness-of-fit/":{"tf":2.0}},"df":2}},"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.0}},"df":1}}}},"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/crypto/(talk) authenticated data structures for stateless validation/":{"tf":1.7320508075688772}},"df":1}}}}},"l":{"docs":{"https://phlip9.com/notes/devops/secrets/1password - secrets automation/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/lightning router overview/":{"tf":1.0}},"df":2,"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0}},"df":1}}}}},"n":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.7320508075688772},"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":2.449489742783178}},"df":2,"/":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"u":{"docs":{"https://phlip9.com/notes/misc/setting up a headless raspbian boot image/":{"tf":1.4142135623730951}},"df":1}}}},"=":{"docs":{},"df":0,"f":{"docs":{},"df":0,"o":{"docs":{},"df":0,"o":{"docs":{"https://phlip9.com/notes/lang/rust/rr with rust/":{"tf":1.0}},"df":1}}}},"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.4142135623730951},"https://phlip9.com/notes/devops/k3s/":{"tf":1.0},"https://phlip9.com/notes/devops/minikube/":{"tf":1.0},"https://phlip9.com/notes/devops/nomad/":{"tf":1.0},"https://phlip9.com/notes/lang/gdb ref/":{"tf":1.0},"https://phlip9.com/notes/lang/operator fixity and precedence/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":2.8284271247461903},"https://phlip9.com/notes/lang/rust/rr with rust/":{"tf":1.4142135623730951},"https://phlip9.com/notes/misc/setting up a headless raspbian boot image/":{"tf":1.7320508075688772},"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.0},"https://phlip9.com/notes/postgres/snippets/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/nix/links/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/rebuilderd/":{"tf":1.7320508075688772},"https://phlip9.com/notes/reproducible builds/reproducible-builds.org/":{"tf":1.0}},"df":18}},"s":{"docs":{},"df":0,"c":{"docs":{},"df":0,"i":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1}}}},"u":{"docs":{},"df":0,"t":{"docs":{},"df":0,"h":{"docs":{"https://phlip9.com/notes/router/lightning router/lightning router overview/":{"tf":1.0}},"df":1}}}},"d":{"docs":{"https://phlip9.com/notes/android/ADB over TCP inside WSL2/":{"tf":1.0},"https://phlip9.com/notes/android/android cli setup/":{"tf":1.0},"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.4142135623730951},"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":2.449489742783178},"https://phlip9.com/notes/crypto/acme protocol/":{"tf":1.0},"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":1.0},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":3.0}},"df":9,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"g":{"docs":{},"df":0,"s":{"docs":{},"df":0,"/":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"x":{"docs":{},"df":0,".":{"docs":{},"df":0,"h":{"docs":{},"df":0,"t":{"docs":{},"df":0,"m":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}},"f":{"docs":{},"df":0,"m":{"docs":{},"df":0,"t":{"docs":{},"df":0,"_":{"docs":{},"df":0,"m":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"c":{"docs":{"https://phlip9.com/notes/misc/setting up a headless raspbian boot image/":{"tf":1.0}},"df":1}}}}}}}},"u":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.4142135623730951}},"df":1}}}}},"o":{"docs":{"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":2.6457513110645907}},"df":3,"n":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0}},"df":1,"1":{"docs":{"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/gramine/":{"tf":1.4142135623730951}},"df":2}}}},"s":{"docs":{},"df":0,"/":{"docs":{},"df":0,"u":{"docs":{},"df":0,"e":{"docs":{},"df":0,"f":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0}},"df":1}}}}},"a":{"docs":{},"df":0,"p":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.4142135623730951}},"df":1}}},"d":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"r":{"docs":{},"df":0,"c":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0}},"df":1}}}}}}}}},"u":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/confidential computing/intel TDX/":{"tf":1.0}},"df":1}}}}},"p":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/bip158 - compact block filters/":{"tf":1.0}},"df":1,"1":{"docs":{},"df":0,"5":{"docs":{},"df":0,"8":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/bip158 - compact block filters/":{"tf":1.4142135623730951}},"df":1}}}},"s":{"docs":{},"df":0,"c":{"docs":{},"df":0,"u":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/crypto/biscuit authz/":{"tf":1.7320508075688772}},"df":1}}}},"o":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/WSL/WSL2 custom kernel/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/gramine/":{"tf":1.0}},"df":2}}},"t":{"docs":{"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0},"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.7320508075688772},"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":2.0},"https://phlip9.com/notes/btc-ln/breez lightning service providers/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/lightning rod/":{"tf":1.0},"https://phlip9.com/notes/combinatorics/k-combinations of a multiset/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":3.0},"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":2.6457513110645907},"https://phlip9.com/notes/confidential computing/intel TDX/":{"tf":1.7320508075688772},"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":1.4142135623730951},"https://phlip9.com/notes/design/form design/":{"tf":1.0},"https://phlip9.com/notes/devops/azure CLI/":{"tf":1.0},"https://phlip9.com/notes/distributed systems/papers/(2021) Leaderless Consensus/":{"tf":1.0},"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":1.0},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0},"https://phlip9.com/notes/misc/kintsugi/":{"tf":2.23606797749979},"https://phlip9.com/notes/misc/pop_OS! tweaks/":{"tf":1.0},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":2.0},"https://phlip9.com/notes/networking/CIDR/":{"tf":3.1622776601683795},"https://phlip9.com/notes/networking/ipv6 address space/":{"tf":2.6457513110645907},"https://phlip9.com/notes/networking/network interface card (NIC)/":{"tf":1.0},"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.4142135623730951},"https://phlip9.com/notes/performance/bit hacks/":{"tf":5.385164807134504},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.0}},"df":25,"[":{"docs":{},"df":0,"2":{"docs":{},"df":0,"7":{"docs":{},"df":0,":":{"docs":{},"df":0,"0":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.0}},"df":1}}}},"5":{"docs":{},"df":0,"5":{"docs":{},"df":0,":":{"docs":{},"df":0,"6":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.0}},"df":1}}}}},"_":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"p":{"docs":{},"df":0,"t":{"docs":{},"df":0,"h":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1,"=":{"docs":{},"df":0,"4":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1},"b":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"_":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"p":{"docs":{},"df":0,"t":{"docs":{},"df":0,"h":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}},"b":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"g":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1}}}}}},"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/btc-ln/hosted channels/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/lightning libs/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.7320508075688772},"https://phlip9.com/notes/btc-ln/submarine swaps/":{"tf":1.4142135623730951},"https://phlip9.com/notes/btc-ln/zero-conf channels/":{"tf":1.0},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":6,"d":{"docs":{"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":2.23606797749979}},"df":1,".":{"docs":{},"df":0,"b":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{},"df":0,"c":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"_":{"docs":{},"df":0,"t":{"docs":{},"df":0,"x":{"docs":{},"df":0,"(":{"docs":{},"df":0,"s":{"docs":{},"df":0,"p":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"g":{"docs":{},"df":0,"_":{"docs":{},"df":0,"t":{"docs":{},"df":0,"x":{"docs":{"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}},"c":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"_":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"w":{"docs":{},"df":0,"_":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"s":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"(":{"docs":{},"df":0,"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{},"df":0,"p":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{},"df":0,"s":{"docs":{},"df":0,")":{"docs":{},"df":0,".":{"docs":{},"df":0,"a":{"docs":{},"df":0,"w":{"docs":{},"df":0,"a":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"f":{"docs":{},"df":0,"u":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{},"df":0,"_":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"w":{"docs":{},"df":0,"_":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"s":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"(":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"w":{"docs":{},"df":0,"_":{"docs":{},"df":0,"t":{"docs":{},"df":0,"x":{"docs":{},"df":0,")":{"docs":{},"df":0,".":{"docs":{},"df":0,"a":{"docs":{},"df":0,"w":{"docs":{},"df":0,"a":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"g":{"docs":{},"df":0,"n":{"docs":{},"df":0,"_":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"w":{"docs":{},"df":0,"_":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"s":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"_":{"docs":{},"df":0,"w":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"h":{"docs":{},"df":0,"_":{"docs":{},"df":0,"w":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{},"df":0,"(":{"docs":{},"df":0,"f":{"docs":{},"df":0,"u":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"d":{"docs":{},"df":0,"_":{"docs":{},"df":0,"t":{"docs":{},"df":0,"x":{"docs":{},"df":0,".":{"docs":{},"df":0,"h":{"docs":{},"df":0,"e":{"docs":{},"df":0,"x":{"docs":{},"df":0,")":{"docs":{},"df":0,".":{"docs":{},"df":0,"a":{"docs":{},"df":0,"w":{"docs":{},"df":0,"a":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"_":{"docs":{},"df":0,"c":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.0}},"df":1}}}},"c":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":2.0}},"df":1}}}}}}}},"f":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"g":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.4142135623730951}},"df":1}}}},"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"p":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0},"https://phlip9.com/notes/postgres/types of scans/":{"tf":2.449489742783178}},"df":2,"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"o":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1}}}}},"s":{"docs":{},"df":0,"k":{"docs":{"https://phlip9.com/notes/networking/CIDR/":{"tf":1.7320508075688772}},"df":1}}}},"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.0}},"df":1}}},"v":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.0}},"df":1}}},"w":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{"https://phlip9.com/notes/lang/operator fixity and precedence/":{"tf":1.0}},"df":1}}}}},"l":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/secure time/":{"tf":1.0}},"df":1,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"k":{"docs":{"https://phlip9.com/notes/fuzzing/fuzzing/":{"tf":1.4142135623730951},"https://phlip9.com/notes/misc/pop_OS! tweaks/":{"tf":1.0},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":3,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"i":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/reproducible builds/reproducible-builds.org/":{"tf":1.0}},"df":1}}}}}},"m":{"docs":{},"df":0,"e":{"docs":{"https://phlip9.com/notes/btc-ln/lightning network notes/":{"tf":1.0},"https://phlip9.com/notes/devops/secrets/ejson (Shopify)/":{"tf":1.0},"https://phlip9.com/notes/lang/lua/":{"tf":1.4142135623730951},"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":2.23606797749979}},"df":4}},"n":{"docs":{},"df":0,"k":{"docs":{"https://phlip9.com/notes/nvim/universal-ctags Notes/":{"tf":1.0}},"df":1}}},"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/android/android cli setup/":{"tf":1.0}},"df":1}}},"k":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.7320508075688772}},"df":1}}},"o":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":2.23606797749979}},"df":1}},"b":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":3.3166247903554},"https://phlip9.com/notes/lang/lua/":{"tf":1.0}},"df":4,"_":{"docs":{},"df":0,"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"z":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":3.4641016151377544},"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":2.449489742783178}},"df":2}}}}},"c":{"docs":{},"df":0,"k":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/bip158 - compact block filters/":{"tf":2.6457513110645907},"https://phlip9.com/notes/b l o c k c h a i n/btc utreexo - utxo accumulator/":{"tf":2.0},"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":2.23606797749979},"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":2.0},"https://phlip9.com/notes/crypto/biscuit authz/":{"tf":3.0},"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":2.8284271247461903},"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":1.0},"https://phlip9.com/notes/fuzzing/fuzzcheck-rs/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0},"https://phlip9.com/notes/lang/lua/":{"tf":1.0},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0},"https://phlip9.com/notes/networking/CIDR/":{"tf":1.0},"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.4142135623730951}},"df":17,"'":{"docs":{"https://phlip9.com/notes/crypto/biscuit authz/":{"tf":1.0}},"df":1},"_":{"docs":{},"df":0,"h":{"docs":{},"df":0,"e":{"docs":{},"df":0,"i":{"docs":{},"df":0,"g":{"docs":{},"df":0,"h":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 7 - p2p node and channel discovery/":{"tf":1.0}},"df":1}}}}}},"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"z":{"docs":{"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":1.4142135623730951}},"df":1}}},"t":{"docs":{},"df":0,"x":{"docs":{},"df":0,"_":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{},"df":0,"x":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 7 - p2p node and channel discovery/":{"tf":1.0}},"df":1}}}}}}},"c":{"docs":{},"df":0,"h":{"docs":{},"df":0,"a":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/":{"tf":1.0},"https://phlip9.com/notes/b l o c k c h a i n/fastpay/":{"tf":1.7320508075688772},"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/secure time/":{"tf":1.0}},"df":4}}}}},"h":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{},"df":0,"h":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.0}},"df":1}}}},"n":{"docs":{},"df":0,"u":{"docs":{},"df":0,"m":{"docs":{},"df":0,"b":{"docs":{"https://phlip9.com/notes/networking/CIDR/":{"tf":1.0}},"df":1}}}},"r":{"docs":{},"df":0,"f":{"docs":{},"df":0,"c":{"docs":{},"df":0,"6":{"docs":{},"df":0,"6":{"docs":{},"df":0,"6":{"docs":{},"df":0,"6":{"docs":{"https://phlip9.com/notes/networking/ipv6 address space/":{"tf":1.0}},"df":1}}}}}}},"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"z":{"docs":{"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":1.0}},"df":1}}}}},"g":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/bip158 - compact block filters/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":1.0},"https://phlip9.com/notes/devops/deployment strategies/":{"tf":1.4142135623730951},"https://phlip9.com/notes/devops/nomad/":{"tf":1.0},"https://phlip9.com/notes/devops/service mesh/":{"tf":1.0},"https://phlip9.com/notes/fuzzing/fuzzing/":{"tf":1.0}},"df":6,"'":{"docs":{"https://phlip9.com/notes/misc/kintsugi/":{"tf":1.0}},"df":1}},"o":{"docs":{},"df":0,"m":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/bip158 - compact block filters/":{"tf":1.0}},"df":1}}},"u":{"docs":{},"df":0,"e":{"docs":{"https://phlip9.com/notes/devops/deployment strategies/":{"tf":1.7320508075688772},"https://phlip9.com/notes/devops/linkerd/":{"tf":1.0},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.4142135623730951},"https://phlip9.com/notes/statistics probability/herbie - float error fixer/":{"tf":1.0}},"df":5,"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"o":{"docs":{},"df":0,"t":{"docs":{},"df":0,"h":{"docs":{"https://phlip9.com/notes/keyboards/moergo glove80/":{"tf":1.7320508075688772}},"df":1}}}}}}}},"m":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1,".":{"docs":{},"df":0,"d":{"docs":{},"df":0,"i":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1}}}}}},"1":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":2.8284271247461903}},"df":1},"2":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":2.8284271247461903}},"df":1},"[":{"docs":{},"df":0,"x":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1}}},"o":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/fuzzing/fuzzcheck-rs/":{"tf":1.0},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":4.58257569495584},"https://phlip9.com/notes/misc/setting up a headless raspbian boot image/":{"tf":1.0}},"df":3,".":{"docs":{},"df":0,"m":{"docs":{},"df":0,"t":{"docs":{},"df":0,"x":{"docs":{},"df":0,"_":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{},"df":0,"d":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1},"b":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1},"c":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1},"d":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1}}}}},"b":{"docs":{},"df":0,"1":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1},"2":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1}},"g":{"docs":{},"df":0,"1":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1},"2":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1}},"r":{"docs":{},"df":0,"1":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1},"2":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1}}}}}}}}}},"b":{"docs":{"https://phlip9.com/notes/btc-ln/atomic multipath payments (AMP)/":{"tf":3.0},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":2.8284271247461903}},"df":2},"d":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.7320508075688772},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/understanding sycamore reactivity/":{"tf":1.4142135623730951}},"df":4},"y":{"docs":{},"df":0,"/":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"p":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0}},"df":1}}}}}}}}},"i":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/misc/kintsugi/":{"tf":1.0}},"df":1}},"l":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.7320508075688772}},"df":1},"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{"https://phlip9.com/notes/fuzzing/bolero - fuzzing + property testing/":{"tf":1.4142135623730951},"https://phlip9.com/notes/fuzzing/fuzzing/":{"tf":1.0}},"df":2}}},"t":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 11 - invoices/":{"tf":1.4142135623730951},"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.7320508075688772},"https://phlip9.com/notes/btc-ln/BOLT 4 - onion routing protocol/":{"tf":1.4142135623730951},"https://phlip9.com/notes/btc-ln/BOLT 7 - p2p node and channel discovery/":{"tf":1.4142135623730951},"https://phlip9.com/notes/btc-ln/BOLT 8 - secure noise transport/":{"tf":1.4142135623730951}},"df":5}},"m":{"docs":{"https://phlip9.com/notes/misc/water distillation setup/":{"tf":1.0}},"df":1},"n":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/misc/kintsugi/":{"tf":1.0},"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.7320508075688772}},"df":2,"0":{"docs":{"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.4142135623730951}},"df":1}},"e":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1}},"o":{"docs":{},"df":0,"k":{"docs":{"https://phlip9.com/notes/fuzzing/fuzzcheck-rs/":{"tf":1.0},"https://phlip9.com/notes/lang/koka-lang/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/nix/links/":{"tf":1.4142135623730951}},"df":3},"l":{"docs":{"https://phlip9.com/notes/combinatorics/k-combinations of a multiset/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.7320508075688772},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":2.6457513110645907},"https://phlip9.com/notes/lang/koka-lang/":{"tf":1.0},"https://phlip9.com/notes/performance/bit hacks/":{"tf":3.7416573867739413},"https://phlip9.com/notes/performance/simdjson talk/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/G-test - multinomial goodness-of-fit/":{"tf":1.0}},"df":7,"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/lang/lua/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/operator fixity and precedence/":{"tf":1.7320508075688772}},"df":2}}}},"m":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0}},"df":1},"s":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0}},"df":1}},"t":{"docs":{"https://phlip9.com/notes/android/root phone with magisk/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":2.6457513110645907},"https://phlip9.com/notes/misc/pop_OS! tweaks/":{"tf":1.7320508075688772},"https://phlip9.com/notes/misc/setting up a headless raspbian boot image/":{"tf":2.449489742783178},"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.7320508075688772}},"df":6,".":{"docs":{},"df":0,"i":{"docs":{},"df":0,"m":{"docs":{},"df":0,"g":{"docs":{"https://phlip9.com/notes/android/root phone with magisk/":{"tf":2.6457513110645907}},"df":1}}}},"/":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"f":{"docs":{},"df":0,"i":{"docs":{},"df":0,"g":{"docs":{"https://phlip9.com/notes/misc/prepping RPI for embedded dev/":{"tf":1.0}},"df":1,".":{"docs":{},"df":0,"t":{"docs":{},"df":0,"x":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/misc/setting up a headless raspbian boot image/":{"tf":1.0}},"df":1}}}}}}}}}}},"_":{"docs":{},"df":0,"b":{"docs":{"https://phlip9.com/notes/android/root phone with magisk/":{"tf":1.4142135623730951}},"df":1}},"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/android/root phone with magisk/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.0},"https://phlip9.com/notes/keyboards/moergo glove80/":{"tf":1.4142135623730951},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":4}}}},"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"p":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/secure time/":{"tf":2.0}},"df":1,"1":{"docs":{"https://phlip9.com/notes/lang/ATS/Install ATS2/":{"tf":1.0}},"df":1}}}}}}}},"t":{"docs":{},"df":0,"h":{"docs":{"https://phlip9.com/notes/AI ML/Expectimax Search/":{"tf":1.4142135623730951},"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":3.3166247903554},"https://phlip9.com/notes/btc-ln/BOLT 7 - p2p node and channel discovery/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":2.0},"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":1.4142135623730951},"https://phlip9.com/notes/crypto/(talk) authenticated data structures for stateless validation/":{"tf":1.0},"https://phlip9.com/notes/fuzzing/fuzzcheck-rs/":{"tf":1.4142135623730951},"https://phlip9.com/notes/keyboards/moergo glove80/":{"tf":1.7320508075688772},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.4142135623730951},"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":1.0},"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.0},"https://phlip9.com/notes/performance/simdjson talk/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":2.0},"https://phlip9.com/notes/statistics probability/multinomial distribution/":{"tf":1.0}},"df":21,"e":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/btc-ln/breez lightning service providers/":{"tf":1.0}},"df":1}}},"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{"https://phlip9.com/notes/design/form design/":{"tf":1.0},"https://phlip9.com/notes/keyboards/moergo glove80/":{"tf":1.7320508075688772}},"df":2}}}},"u":{"docs":{},"df":0,"g":{"docs":{},"df":0,"h":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/misc/kintsugi/":{"tf":1.4142135623730951}},"df":1}}},"n":{"docs":{},"df":0,"c":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.4142135623730951}},"df":1},"d":{"docs":{"https://phlip9.com/notes/AI ML/Expectimax Search/":{"tf":3.1622776601683795},"https://phlip9.com/notes/AI ML/Markov Decision Process (MDP)/":{"tf":1.7320508075688772},"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/marblerun/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":1.4142135623730951},"https://phlip9.com/notes/crypto/acme protocol/":{"tf":1.0},"https://phlip9.com/notes/crypto/biscuit authz/":{"tf":1.0},"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":1.0},"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":3.4641016151377544},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0},"https://phlip9.com/notes/performance/simdjson talk/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/CDF confidence bands - DKW inequality/":{"tf":2.6457513110645907},"https://phlip9.com/notes/statistics probability/testing whether a coin is fair/":{"tf":2.449489742783178}},"df":14,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/fastpay/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.0},"https://phlip9.com/notes/networking/CIDR/":{"tf":1.0}},"df":3}}}}}},"w":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/misc/kintsugi/":{"tf":1.0}},"df":1}},"x":{"docs":{"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":1.0},"https://phlip9.com/notes/fuzzing/fuzzing/":{"tf":1.0},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":3.0},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":4}},"p":{"docs":{"https://phlip9.com/notes/btc-ln/atomic multipath payments (AMP)/":{"tf":2.6457513110645907}},"df":1},"r":{"docs":{"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0},"https://phlip9.com/notes/networking/network interfaces/":{"tf":3.3166247903554}},"df":2,"0":{"docs":{"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.0}},"df":1},"a":{"docs":{},"df":0,"d":{"docs":{},"df":0,"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.0}},"df":1}}}},"n":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{"https://phlip9.com/notes/AI ML/Expectimax Search/":{"tf":2.6457513110645907},"https://phlip9.com/notes/confidential computing/gramine/":{"tf":2.8284271247461903},"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":1.0},"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":1.4142135623730951},"https://phlip9.com/notes/performance/simdjson talk/":{"tf":1.4142135623730951}},"df":5,"=":{"docs":{},"df":0,"\"":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"b":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/lang/flutter/flutter setup/":{"tf":1.0}},"df":1}}}}}}}}},"d":{"docs":{"https://phlip9.com/notes/misc/kintsugi/":{"tf":1.0}},"df":1,"o":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/sui/":{"tf":1.0}},"df":1}}}}},"d":{"docs":{"https://phlip9.com/notes/networking/network interfaces/":{"tf":4.0}},"df":1},"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"k":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":3.3166247903554},"https://phlip9.com/notes/design/form design/":{"tf":1.0},"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":1.0},"https://phlip9.com/notes/lang/gdb ref/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/rr with rust/":{"tf":1.0},"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":1.0}},"df":7,"a":{"docs":{},"df":0,"g":{"docs":{"https://phlip9.com/notes/misc/kintsugi/":{"tf":1.4142135623730951}},"df":1}},"d":{"docs":{},"df":0,"o":{"docs":{},"df":0,"w":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.4142135623730951}},"df":1}}}},"p":{"docs":{},"df":0,"o":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/lang/rust/rr with rust/":{"tf":2.23606797749979}},"df":1,"h":{"docs":{},"df":0,"o":{"docs":{},"df":0,"o":{"docs":{},"df":0,"k":{"docs":{"https://phlip9.com/notes/reproducible builds/nix/nix debug broken package build/":{"tf":2.0}},"df":1}}}}}}}}}}},"e":{"docs":{},"df":0,"d":{"docs":{},"df":0,"m":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0}},"df":1}}}}}}}}}},"z":{"docs":{"https://phlip9.com/notes/btc-ln/breez lightning service providers/":{"tf":2.0},"https://phlip9.com/notes/btc-ln/lightning libs/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/lightning rod/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/submarine swaps/":{"tf":1.0}},"df":4}},"w":{"docs":{"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0},"https://phlip9.com/notes/devops/azure CLI/":{"tf":1.4142135623730951},"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":1.4142135623730951},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.0}},"df":4}},"i":{"docs":{},"df":0,"d":{"docs":{},"df":0,"g":{"docs":{"https://phlip9.com/notes/android/ADB over TCP inside WSL2/":{"tf":1.4142135623730951},"https://phlip9.com/notes/android/android cli setup/":{"tf":1.0},"https://phlip9.com/notes/b l o c k c h a i n/btc utreexo - utxo accumulator/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/submarine swaps/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/sycamore x futures/":{"tf":1.0},"https://phlip9.com/notes/networking/ipv6 address space/":{"tf":1.0},"https://phlip9.com/notes/networking/network interface card (NIC)/":{"tf":1.0},"https://phlip9.com/notes/networking/network interfaces/":{"tf":2.23606797749979}},"df":8}},"e":{"docs":{},"df":0,"f":{"docs":{"https://phlip9.com/notes/fuzzing/fuzzcheck-rs/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.0}},"df":2}},"g":{"docs":{},"df":0,"h":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1,"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"s":{"docs":{},"df":0,"=":{"docs":{},"df":0,"0":{"docs":{},"df":0,".":{"docs":{},"df":0,"5":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1}}}}}}}}}}},"n":{"docs":{},"df":0,"g":{"docs":{"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.0}},"df":1}},"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/fuzzing/fuzzing/":{"tf":1.0}},"df":1}}}},"t":{"docs":{},"df":0,"t":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"/":{"docs":{},"df":0,"f":{"docs":{},"df":0,"a":{"docs":{},"df":0,"i":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":1.0}},"df":1}}}}}}}}}},"o":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/confidential computing/intel TDX/":{"tf":1.0},"https://phlip9.com/notes/fuzzing/fuzzing/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.0}},"df":3,"b":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.0}},"df":1}}}},"c":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/android/ADB over TCP inside WSL2/":{"tf":1.0},"https://phlip9.com/notes/b l o c k c h a i n/fastpay/":{"tf":2.6457513110645907},"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":4.123105625617661},"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.4142135623730951},"https://phlip9.com/notes/distributed systems/papers/(2020) Semi-Fast Byzantine-tolerant Shared Register without Reliable Broadcast/":{"tf":1.7320508075688772},"https://phlip9.com/notes/distributed systems/papers/(2021) Leaderless Consensus/":{"tf":1.0},"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.0}},"df":7}}}},"e":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.0}},"df":1}}}},"k":{"docs":{},"df":0,"e":{"docs":{"https://phlip9.com/notes/fuzzing/fuzzcheck-rs/":{"tf":1.0}},"df":1,"n":{"docs":{"https://phlip9.com/notes/misc/kintsugi/":{"tf":1.7320508075688772},"https://phlip9.com/notes/reproducible builds/nix/nix debug broken package build/":{"tf":1.4142135623730951}},"df":2},"r":{"docs":{"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/financial instituion/":{"tf":1.4142135623730951}},"df":1,"a":{"docs":{},"df":0,"g":{"docs":{"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/foreign bank account report (FBAR)/":{"tf":1.0}},"df":1}}}}},"w":{"docs":{},"df":0,"n":{"docs":{},"df":0,"i":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.4142135623730951}},"df":1}}}},"s":{"docs":{"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.4142135623730951},"https://phlip9.com/notes/router/lightning router/lightning router overview/":{"tf":1.0}},"df":3,"e":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/crypto/acme protocol/":{"tf":1.0},"https://phlip9.com/notes/devops/azure CLI/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/sycamore x futures/":{"tf":1.4142135623730951},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":2.8284271247461903},"https://phlip9.com/notes/router/lightning router/captive portal/arubanetworks captive portal/":{"tf":3.3166247903554},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":3.7416573867739413},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":4.123105625617661}},"df":7,"'":{"docs":{"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.4142135623730951}},"df":2},"/":{"docs":{},"df":0,"c":{"docs":{},"df":0,"a":{"docs":{"https://phlip9.com/notes/crypto/(talk) authenticated data structures for stateless validation/":{"tf":1.0}},"df":1}},"o":{"docs":{"https://phlip9.com/notes/crypto/(talk) authenticated data structures for stateless validation/":{"tf":1.0}},"df":1}}}}}}},"u":{"docs":{},"df":0,"s":{"docs":{},"df":0,"h":{"docs":{"https://phlip9.com/notes/misc/kintsugi/":{"tf":2.0}},"df":1}}}},"s":{"docs":{"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0}},"df":1,"a":{"docs":{"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/foreign bank account report (FBAR)/":{"tf":1.0},"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/money services business (MSB)/":{"tf":1.0}},"df":2},"d":{"docs":{"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":2.0}},"df":2},"i":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{"https://phlip9.com/notes/fuzzing/fuzzing/":{"tf":1.0}},"df":1}}},"s":{"docs":{"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.0}},"df":1}},"t":{"docs":{},"df":0,"c":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/btc utreexo - utxo accumulator/":{"tf":1.7320508075688772},"https://phlip9.com/notes/btc-ln/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/atomic multipath payments (AMP)/":{"tf":2.0},"https://phlip9.com/notes/btc-ln/breez lightning service providers/":{"tf":1.4142135623730951},"https://phlip9.com/notes/btc-ln/lightning libs/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/submarine swaps/":{"tf":3.1622776601683795},"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":1.0}},"df":7,"_":{"docs":{},"df":0,"k":{"docs":{},"df":0,"e":{"docs":{},"df":0,"y":{"docs":{},"df":0,"_":{"docs":{},"df":0,"1":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 7 - p2p node and channel discovery/":{"tf":1.7320508075688772}},"df":1},"2":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 7 - p2p node and channel discovery/":{"tf":1.7320508075688772}},"df":1}}}}},"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"g":{"docs":{},"df":0,"_":{"docs":{},"df":0,"1":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 7 - p2p node and channel discovery/":{"tf":1.4142135623730951}},"df":1},"2":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 7 - p2p node and channel discovery/":{"tf":1.4142135623730951}},"df":1}}}}}}},"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"e":{"docs":{"https://phlip9.com/notes/postgres/types of scans/":{"tf":1.0}},"df":1,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"p":{"docs":{"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0}},"df":1}}}}}},"w":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 7 - p2p node and channel discovery/":{"tf":1.0}},"df":1}},"u":{"docs":{"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.0},"https://phlip9.com/notes/misc/prepping RPI for embedded dev/":{"tf":1.4142135623730951},"https://phlip9.com/notes/networking/network interface card (NIC)/":{"tf":1.0}},"df":3,"c":{"docs":{},"df":0,"h":{"docs":{},"df":0,"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/misc/water distillation setup/":{"tf":1.0}},"df":1}}}},"k":{"docs":{"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":2.0}},"df":1,"e":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0}},"df":1}}}},"f":{"docs":{"https://phlip9.com/notes/performance/simdjson talk/":{"tf":1.0}},"df":1,".":{"docs":{},"df":0,"d":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"_":{"docs":{},"df":0,"p":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/lang/gdb ref/":{"tf":1.0}},"df":1}}}}}}}}},"[":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/performance/simdjson talk/":{"tf":2.0}},"df":1}},"f":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.0},"https://phlip9.com/notes/devops/nomad/":{"tf":1.4142135623730951},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.7320508075688772},"https://phlip9.com/notes/networking/network interface card (NIC)/":{"tf":1.0},"https://phlip9.com/notes/postgres/types of scans/":{"tf":1.7320508075688772},"https://phlip9.com/notes/router/lightning router/lightning router overview/":{"tf":1.0}},"df":6}}}},"g":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.4142135623730951},"https://phlip9.com/notes/devops/deployment strategies/":{"tf":2.0},"https://phlip9.com/notes/devops/secrets/envkey/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/rr with rust/":{"tf":2.23606797749979}},"df":4},"i":{"docs":{},"df":0,"l":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/WSL/WSL2 custom kernel/":{"tf":2.0},"https://phlip9.com/notes/android/android cli setup/":{"tf":1.4142135623730951},"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":3.3166247903554},"https://phlip9.com/notes/android/root phone with magisk/":{"tf":1.0},"https://phlip9.com/notes/b l o c k c h a i n/bip158 - compact block filters/":{"tf":1.0},"https://phlip9.com/notes/b l o c k c h a i n/btc utreexo - utxo accumulator/":{"tf":1.0},"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.4142135623730951},"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":2.23606797749979},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":2.6457513110645907},"https://phlip9.com/notes/confidential computing/gramine/":{"tf":3.872983346207417},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0},"https://phlip9.com/notes/fuzzing/fuzzcheck-rs/":{"tf":1.0},"https://phlip9.com/notes/keyboards/moergo glove80/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/ATS/Install ATS2/":{"tf":1.0},"https://phlip9.com/notes/lang/flutter/flutter setup/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.4142135623730951},"https://phlip9.com/notes/misc/pop_OS! tweaks/":{"tf":1.0},"https://phlip9.com/notes/misc/prepping RPI for embedded dev/":{"tf":1.0},"https://phlip9.com/notes/misc/setting up a headless raspbian boot image/":{"tf":2.23606797749979},"https://phlip9.com/notes/postgres/types of scans/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":5.656854249492381},"https://phlip9.com/notes/reproducible builds/nix/links/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/nix/nix auto-allocate-uids -> nixbld users/":{"tf":2.0},"https://phlip9.com/notes/reproducible builds/nix/nix debug broken package build/":{"tf":3.7416573867739413},"https://phlip9.com/notes/reproducible builds/nix/nix debug spurrious rebuilds/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/rebuilderd/":{"tf":2.0},"https://phlip9.com/notes/reproducible builds/reproducible-builds.org/":{"tf":3.3166247903554}},"df":30,"+":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"p":{"docs":{},"df":0,"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"y":{"docs":{"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0}},"df":1}}}}}}},".":{"docs":{},"df":0,"g":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.4142135623730951}},"df":1}}}}},"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"g":{"docs":{"https://phlip9.com/notes/misc/setting up a headless raspbian boot image/":{"tf":1.0}},"df":1}}}},"/":{"docs":{},"df":0,"s":{"docs":{},"df":0,"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"r":{"docs":{},"df":0,"c":{"docs":{"https://phlip9.com/notes/reproducible builds/nix/nix debug broken package build/":{"tf":1.0}},"df":1}}}}}},"_":{"docs":{},"df":0,"d":{"docs":{},"df":0,"o":{"docs":{},"df":0,"c":{"docs":{},"df":0,"k":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"_":{"docs":{},"df":0,"i":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"g":{"docs":{},"df":0,"e":{"docs":{},"df":0,"(":{"docs":{},"df":0,"d":{"docs":{},"df":0,"o":{"docs":{},"df":0,"c":{"docs":{},"df":0,"k":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"_":{"docs":{},"df":0,"a":{"docs":{},"df":0,"p":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/confidential computing/gramine/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}},"p":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"h":{"docs":{"https://phlip9.com/notes/confidential computing/gramine/":{"tf":1.0}},"df":1}}}}},"e":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/nix/nix debug broken package build/":{"tf":1.0}},"df":2}},"k":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.4142135623730951}},"df":1,":":{"docs":{},"df":0,"8":{"docs":{},"df":0,"3":{"docs":{},"df":0,"7":{"docs":{},"df":0,"2":{"docs":{"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.0}},"df":1}}}}},"_":{"docs":{},"df":0,"t":{"docs":{},"df":0,"c":{"docs":{},"df":0,"p":{"docs":{},"df":0,"_":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"s":{"docs":{},"df":0,"p":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{},"df":0,"_":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"a":{"docs":{},"df":0,"b":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"d":{"docs":{},"df":0,"=":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"u":{"docs":{"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"p":{"docs":{},"df":0,"h":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{"https://phlip9.com/notes/reproducible builds/nix/nix debug broken package build/":{"tf":1.4142135623730951}},"df":1}}}},"s":{"docs":{},"df":0,".":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"g":{"docs":{"https://phlip9.com/notes/reproducible builds/reproducible-builds.org/":{"tf":1.4142135623730951}},"df":1}}}},"/":{"docs":{},"df":0,"n":{"docs":{},"df":0,"i":{"docs":{},"df":0,"x":{"docs":{"https://phlip9.com/notes/reproducible builds/nix/":{"tf":1.0}},"df":1}}}}},"t":{"docs":{},"df":0,"y":{"docs":{},"df":0,"p":{"docs":{},"df":0,"e":{"docs":{},"df":0,"=":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{"https://phlip9.com/notes/confidential computing/gramine/":{"tf":1.0}},"df":1}}}}}}}}}}}},"t":{"docs":{"https://phlip9.com/notes/WSL/WSL2 custom kernel/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.7320508075688772},"https://phlip9.com/notes/confidential computing/gramine/":{"tf":2.0},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/marblerun/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/mystikos/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":1.0},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0},"https://phlip9.com/notes/lang/lua/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/rust verification tools/":{"tf":1.0},"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":1.7320508075688772},"https://phlip9.com/notes/misc/optimization solvers/":{"tf":1.0},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.7320508075688772},"https://phlip9.com/notes/reproducible builds/nix/links/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/nix/nix debug broken package build/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/rebuilderd/":{"tf":1.0}},"df":19,"/":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0}},"df":1}}}}}}},"i":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":2}}}}},"l":{"docs":{},"df":0,"g":{"docs":{"https://phlip9.com/notes/misc/kintsugi/":{"tf":1.0}},"df":1}},"m":{"docs":{},"df":0,"p":{"docs":{"https://phlip9.com/notes/reproducible builds/nix/nix debug spurrious rebuilds/":{"tf":1.0}},"df":1}},"n":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{"https://phlip9.com/notes/android/android cli setup/":{"tf":1.0},"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/nix/nix auto-allocate-uids -> nixbld users/":{"tf":1.0}},"df":4}},"d":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/android/android cli setup/":{"tf":1.0},"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":3.0},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.4142135623730951},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.0}},"df":4,"e":{"docs":{},"df":0,".":{"docs":{},"df":0,"b":{"docs":{},"df":0,"u":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0}},"df":1}}}}},"c":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0}},"df":1}}}}}}}},"r":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/devops/nomad/":{"tf":1.0}},"df":1,"i":{"docs":{"https://phlip9.com/notes/devops/nomad/":{"tf":1.0}},"df":1}}}},"s":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/financial instituion/":{"tf":1.0},"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/monetary instruments/":{"tf":1.0},"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/money services business (MSB)/":{"tf":3.605551275463989},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.4142135623730951}},"df":4,"o":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1}},"y":{"docs":{},"df":0,"b":{"docs":{},"df":0,"o":{"docs":{},"df":0,"x":{"docs":{"https://phlip9.com/notes/android/root phone with magisk/":{"tf":1.0}},"df":1,"\\":{"docs":{},"df":0,"c":{"docs":{},"df":0,"u":{"docs":{},"df":0,"r":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"\\":{"docs":{},"df":0,"m":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"g":{"docs":{},"df":0,"w":{"docs":{},"df":0,"6":{"docs":{},"df":0,"4":{"docs":{},"df":0,"\\":{"docs":{},"df":0,"s":{"docs":{},"df":0,"s":{"docs":{},"df":0,"l":{"docs":{},"df":0,"\\":{"docs":{},"df":0,"c":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{},"df":0,"s":{"docs":{},"df":0,"\\":{"docs":{},"df":0,"c":{"docs":{},"df":0,"a":{"docs":{"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"t":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/android/OTA updates for rooted android phone/":{"tf":1.4142135623730951},"https://phlip9.com/notes/android/android cli setup/":{"tf":1.0},"https://phlip9.com/notes/keyboards/moergo glove80/":{"tf":1.0},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":2.449489742783178},"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.0}},"df":5,"&":{"docs":{},"df":0,"g":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/keyboards/moergo glove80/":{"tf":1.0}},"df":1}}},"(":{"docs":{},"df":0,"b":{"docs":{},"df":0,"o":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"d":{"docs":{},"df":0,".":{"docs":{},"df":0,"b":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"_":{"docs":{},"df":0,"d":{"docs":{},"df":0,"o":{"docs":{},"df":0,"w":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1}}}},"u":{"docs":{},"df":0,"p":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}},"_":{"docs":{},"df":0,"p":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1}}}}}}}},"y":{"docs":{"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0},"https://phlip9.com/notes/misc/kintsugi/":{"tf":1.0}},"df":2,"m":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0}},"df":1}}}}}}}}}}},"x":{"docs":{"https://phlip9.com/notes/performance/bit hacks/":{"tf":3.3166247903554}},"df":1,"*":{"docs":{},"df":0,"c":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1},"z":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1}}}},"y":{"docs":{},"df":0,"*":{"docs":{},"df":0,"c":{"docs":{},"df":0,"x":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1},"z":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1}}},"=":{"docs":{},"df":0,"/":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{},"df":0,"c":{"docs":{},"df":0,"/":{"docs":{},"df":0,"a":{"docs":{},"df":0,"p":{"docs":{},"df":0,"t":{"docs":{},"df":0,"/":{"docs":{},"df":0,"k":{"docs":{},"df":0,"e":{"docs":{},"df":0,"y":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"g":{"docs":{},"df":0,"s":{"docs":{},"df":0,"/":{"docs":{},"df":0,"d":{"docs":{},"df":0,"o":{"docs":{},"df":0,"c":{"docs":{},"df":0,"k":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,".":{"docs":{},"df":0,"g":{"docs":{},"df":0,"p":{"docs":{},"df":0,"g":{"docs":{"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}},"u":{"docs":{},"df":0,"s":{"docs":{},"df":0,"r":{"docs":{},"df":0,"/":{"docs":{},"df":0,"s":{"docs":{},"df":0,"h":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"/":{"docs":{},"df":0,"k":{"docs":{},"df":0,"e":{"docs":{},"df":0,"y":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"g":{"docs":{},"df":0,"s":{"docs":{},"df":0,"/":{"docs":{},"df":0,"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{},"df":0,"h":{"docs":{},"df":0,"l":{"docs":{},"df":0,"y":{"docs":{},"df":0,".":{"docs":{},"df":0,"g":{"docs":{},"df":0,"p":{"docs":{},"df":0,"g":{"docs":{"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"p":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{},"df":0,"s":{"docs":{"https://phlip9.com/notes/networking/network interface card (NIC)/":{"tf":1.7320508075688772},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":2.23606797749979}},"df":2}}}},"t":{"docs":{},"df":0,"e":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.4142135623730951},"https://phlip9.com/notes/btc-ln/BOLT 11 - invoices/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/BOLT 4 - onion routing protocol/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/BOLT 7 - p2p node and channel discovery/":{"tf":2.0},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":3.1622776601683795},"https://phlip9.com/notes/confidential computing/gramine/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":2.449489742783178},"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.7320508075688772},"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":2.8284271247461903},"https://phlip9.com/notes/crypto/tls exported keying material/":{"tf":1.0},"https://phlip9.com/notes/fuzzing/fuzzcheck-rs/":{"tf":1.0},"https://phlip9.com/notes/lang/lua/":{"tf":1.0},"https://phlip9.com/notes/performance/bit hacks/":{"tf":7.810249675906654},"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.7320508075688772},"https://phlip9.com/notes/performance/simdjson talk/":{"tf":3.605551275463989},"https://phlip9.com/notes/postgres/types of scans/":{"tf":1.0}},"df":16,"s":{"docs":{},"df":0,"[":{"docs":{},"df":0,"e":{"docs":{},"df":0,"x":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"n":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.7320508075688772}},"df":1}}}}}}}}}}},"z":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/distributed systems/papers/(2020) Semi-Fast Byzantine-tolerant Shared Register without Reliable Broadcast/":{"tf":1.7320508075688772}},"df":1}}}}}}},"z":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1,"*":{"docs":{},"df":0,"c":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1},"x":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1}}},"i":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"g":{"docs":{"https://phlip9.com/notes/WSL/WSL2 custom kernel/":{"tf":1.4142135623730951}},"df":1}}}}}},"c":{"docs":{"https://phlip9.com/notes/WSL/WSL2 custom kernel/":{"tf":1.7320508075688772},"https://phlip9.com/notes/b l o c k c h a i n/":{"tf":1.4142135623730951},"https://phlip9.com/notes/btc-ln/lightning network notes/":{"tf":1.7320508075688772},"https://phlip9.com/notes/combinatorics/k-combinations of a multiset/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.7320508075688772},"https://phlip9.com/notes/confidential computing/gramine/":{"tf":2.0},"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/mystikos/":{"tf":1.0},"https://phlip9.com/notes/crypto/acme protocol/":{"tf":1.0},"https://phlip9.com/notes/crypto/biscuit authz/":{"tf":1.0},"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":2.0},"https://phlip9.com/notes/fuzzing/fuzzing/":{"tf":2.23606797749979},"https://phlip9.com/notes/keyboards/moergo glove80/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":2.449489742783178},"https://phlip9.com/notes/lang/ATS/Install ATS2/":{"tf":1.0},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.7320508075688772},"https://phlip9.com/notes/lang/operator fixity and precedence/":{"tf":3.0},"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":2.23606797749979},"https://phlip9.com/notes/misc/optimization solvers/":{"tf":1.0},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":2.6457513110645907},"https://phlip9.com/notes/misc/setting up a headless raspbian boot image/":{"tf":1.0},"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.4142135623730951},"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":2.8284271247461903},"https://phlip9.com/notes/performance/simdjson talk/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/nix/nix debug broken package build/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":2.0},"https://phlip9.com/notes/statistics probability/cheat sheet/":{"tf":2.23606797749979}},"df":28,"+":{"docs":{},"df":0,"+":{"docs":{},"df":0,"n":{"docs":{},"df":0,"o":{"docs":{},"df":0,"w":{"docs":{"https://phlip9.com/notes/fuzzing/fuzzing/":{"tf":1.0}},"df":1}}}}},".":{"docs":{},"df":0,"i":{"docs":{},"df":0,"m":{"docs":{"https://phlip9.com/notes/lang/lua/":{"tf":1.4142135623730951}},"df":1}},"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/lang/lua/":{"tf":1.0}},"df":1}}}}},"/":{"docs":{},"df":0,"c":{"docs":{"https://phlip9.com/notes/fuzzing/fuzzing/":{"tf":1.0},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.0}},"df":3},"w":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{},"df":0,"o":{"docs":{},"df":0,"w":{"docs":{},"df":0,"s":{"docs":{},"df":0,"/":{"docs":{},"df":0,"s":{"docs":{},"df":0,"y":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"m":{"docs":{},"df":0,"3":{"docs":{},"df":0,"2":{"docs":{"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}},"1":{"docs":{},"df":0,".":{"docs":{},"df":0,"i":{"docs":{},"df":0,"m":{"docs":{"https://phlip9.com/notes/lang/lua/":{"tf":1.7320508075688772}},"df":1}},"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/lang/lua/":{"tf":1.0}},"df":1}}}}},"2":{"docs":{},"df":0,"e":{"docs":{"https://phlip9.com/notes/keyboards/moergo glove80/":{"tf":1.4142135623730951}},"df":1}}},"2":{"docs":{"https://phlip9.com/notes/lang/lua/":{"tf":1.7320508075688772}},"df":1,".":{"docs":{},"df":0,"i":{"docs":{},"df":0,"m":{"docs":{"https://phlip9.com/notes/lang/lua/":{"tf":1.7320508075688772}},"df":1}},"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/lang/lua/":{"tf":1.7320508075688772}},"df":1}}}}}},"5":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0}},"df":1},"7":{"docs":{},"df":0,"b":{"docs":{},"df":0,"8":{"docs":{},"df":0,"b":{"docs":{},"df":0,"5":{"docs":{},"df":0,"5":{"docs":{"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":1.0}},"df":1}}}}}},":":{"docs":{},"df":0,"\\":{"docs":{},"df":0,"u":{"docs":{},"df":0,"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"s":{"docs":{},"df":0,"\\":{"docs":{},"df":0,"p":{"docs":{},"df":0,"h":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"p":{"docs":{},"df":0,"9":{"docs":{},"df":0,"\\":{"docs":{},"df":0,".":{"docs":{},"df":0,"c":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"g":{"docs":{},"df":0,"o":{"docs":{},"df":0,"\\":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"g":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"y":{"docs":{},"df":0,"\\":{"docs":{},"df":0,"s":{"docs":{},"df":0,"r":{"docs":{},"df":0,"c":{"docs":{},"df":0,"\\":{"docs":{},"df":0,"g":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"h":{"docs":{},"df":0,"u":{"docs":{},"df":0,"b":{"docs":{},"df":0,".":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":2.8284271247461903}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"w":{"docs":{},"df":0,"s":{"docs":{},"df":0,"l":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"f":{"docs":{},"df":0,"i":{"docs":{},"df":0,"g":{"docs":{"https://phlip9.com/notes/WSL/WSL2 custom kernel/":{"tf":1.0}},"df":1}}}}}}}}}},"s":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"o":{"docs":{},"df":0,"p":{"docs":{},"df":0,"\\":{"docs":{},"df":0,"a":{"docs":{},"df":0,"p":{"docs":{},"df":0,"p":{"docs":{},"df":0,"s":{"docs":{},"df":0,"\\":{"docs":{},"df":0,"m":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"g":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"[":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"s":{"docs":{},"df":0,"u":{"docs":{"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":1.4142135623730951}},"df":1}}}}}}}}},"a":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":2.6457513110645907},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":2.0},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":2.23606797749979},"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.7320508075688772},"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":2.449489742783178},"https://phlip9.com/notes/crypto/(talk) authenticated data structures for stateless validation/":{"tf":1.7320508075688772},"https://phlip9.com/notes/crypto/TLS self-signed pubkey-only certs/":{"tf":1.4142135623730951},"https://phlip9.com/notes/crypto/acme protocol/":{"tf":3.4641016151377544},"https://phlip9.com/notes/crypto/smallstep - private online CA & ACME server/":{"tf":1.4142135623730951},"https://phlip9.com/notes/devops/consul/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.4142135623730951}},"df":12,".":{"docs":{},"df":0,"k":{"docs":{},"df":0,"e":{"docs":{},"df":0,"y":{"docs":{},"df":0,"_":{"docs":{},"df":0,"p":{"docs":{},"df":0,"a":{"docs":{},"df":0,"i":{"docs":{},"df":0,"r":{"docs":{},"df":0,".":{"docs":{},"df":0,"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"g":{"docs":{},"df":0,"n":{"docs":{},"df":0,"(":{"docs":{},"df":0,"&":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{},"df":0,"p":{"docs":{},"df":0,";":{"docs":{},"df":0,"t":{"docs":{},"df":0,"b":{"docs":{},"df":0,"s":{"docs":{},"df":0,"_":{"docs":{},"df":0,"c":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{},"df":0,"_":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"_":{"docs":{},"df":0,"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/crypto/TLS self-signed pubkey-only certs/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"p":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{},"df":0,"s":{"docs":{},"df":0,".":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"g":{"docs":{},"df":0,".":{"docs":{},"df":0,"w":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"_":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"g":{"docs":{},"df":0,"_":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"(":{"docs":{},"df":0,"w":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,".":{"docs":{},"df":0,"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"x":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/crypto/TLS self-signed pubkey-only certs/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"a":{"docs":{},"df":0,"s":{"docs":{},"df":0,"h":{"docs":{},"df":0,"i":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"'":{"docs":{"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/monetary instruments/":{"tf":1.0}},"df":1}}}}}}},"b":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/android/linux ADB udev setup/":{"tf":1.0},"https://phlip9.com/notes/keyboards/moergo glove80/":{"tf":1.4142135623730951},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.4142135623730951},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.0}},"df":4}},"c":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.4142135623730951}},"df":2}},"h":{"docs":{"https://phlip9.com/notes/AI ML/Expectimax Search/":{"tf":2.23606797749979},"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.7320508075688772},"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":1.0},"https://phlip9.com/notes/crypto/acme protocol/":{"tf":1.0},"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":2.0},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0},"https://phlip9.com/notes/misc/setting up a headless raspbian boot image/":{"tf":1.0},"https://phlip9.com/notes/performance/simdjson talk/":{"tf":1.4142135623730951},"https://phlip9.com/notes/postgres/postgres performance tuning/":{"tf":2.6457513110645907},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":2.23606797749979},"https://phlip9.com/notes/reproducible builds/nix/links/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":2.449489742783178},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":3.7416573867739413}},"df":17,"i":{"docs":{},"df":0,"x":{"docs":{"https://phlip9.com/notes/reproducible builds/nix/links/":{"tf":1.0}},"df":1}}}},"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"y":{"docs":{},"df":0,"/":{"docs":{},"df":0,"n":{"docs":{},"df":0,"i":{"docs":{},"df":0,"x":{"docs":{},"df":0,"o":{"docs":{"https://phlip9.com/notes/reproducible builds/nix/links/":{"tf":1.0}},"df":1}}}}}}}},"f":{"docs":{},"df":0,"e":{"docs":{"https://phlip9.com/notes/router/lightning router/lightning router overview/":{"tf":1.0}},"df":1}},"l":{"docs":{},"df":0,"c":{"docs":{},"df":0,"u":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/multinomial distribution/":{"tf":1.0}},"df":2}}},"d":{"docs":{},"df":0,"a":{"docs":{},"df":0,"v":{"docs":{"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":2.0}},"df":2}}},"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/foreign bank account report (FBAR)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.7320508075688772},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":2.449489742783178}},"df":4}}}}},"l":{"docs":{"https://phlip9.com/notes/AI ML/Markov Decision Process (MDP)/":{"tf":1.0},"https://phlip9.com/notes/WSL/WSL2 custom kernel/":{"tf":2.23606797749979},"https://phlip9.com/notes/android/OTA updates for rooted android phone/":{"tf":1.0},"https://phlip9.com/notes/android/root phone with magisk/":{"tf":1.0},"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/foreign bank account report (FBAR)/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.4142135623730951},"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":2.0},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.7320508075688772},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":2.23606797749979},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":2.6457513110645907},"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":2.23606797749979},"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.7320508075688772},"https://phlip9.com/notes/confidential computing/intel TDX/":{"tf":1.4142135623730951},"https://phlip9.com/notes/crypto/acme protocol/":{"tf":1.0},"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":1.0},"https://phlip9.com/notes/devops/service mesh/":{"tf":1.0},"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":1.4142135623730951},"https://phlip9.com/notes/keyboards/moergo glove80/":{"tf":1.0},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":3.0},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.7320508075688772},"https://phlip9.com/notes/lang/koka-lang/":{"tf":1.0},"https://phlip9.com/notes/lang/lua/":{"tf":2.449489742783178},"https://phlip9.com/notes/lang/rust/rr with rust/":{"tf":1.7320508075688772},"https://phlip9.com/notes/lang/rust/understanding sycamore reactivity/":{"tf":2.23606797749979},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":2.449489742783178},"https://phlip9.com/notes/networking/CIDR/":{"tf":1.4142135623730951},"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.0},"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.0},"https://phlip9.com/notes/performance/profiling/":{"tf":1.4142135623730951},"https://phlip9.com/notes/postgres/types of scans/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/multinomial distribution/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/standard error/":{"tf":1.0}},"df":32,"b":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"k":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.0},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0}},"df":2,"s":{"docs":{},"df":0,".":{"docs":{},"df":0,"f":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{},"df":0,"(":{"docs":{},"df":0,"(":{"docs":{},"df":0,"c":{"docs":{},"df":0,"b":{"docs":{"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}},"e":{"docs":{"https://phlip9.com/notes/performance/profiling/":{"tf":1.0}},"df":1,"r":{"docs":{"https://phlip9.com/notes/lang/lua/":{"tf":1.0},"https://phlip9.com/notes/performance/profiling/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/G-test - multinomial goodness-of-fit/":{"tf":1.0}},"df":3,"'":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0},"https://phlip9.com/notes/lang/lua/":{"tf":1.0}},"df":2}}}}},"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.7320508075688772}},"df":1}}}},"n":{"docs":{},"df":0,"'":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/android/ADB over TCP inside WSL2/":{"tf":1.4142135623730951},"https://phlip9.com/notes/android/root phone with magisk/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/BOLT 4 - onion routing protocol/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/breez lightning service providers/":{"tf":1.4142135623730951},"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/submarine swaps/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/secure time/":{"tf":1.0},"https://phlip9.com/notes/crypto/(talk) authenticated data structures for stateless validation/":{"tf":1.4142135623730951},"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/gdb ref/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/sycamore x futures/":{"tf":1.4142135623730951},"https://phlip9.com/notes/networking/ipv6 address space/":{"tf":1.0},"https://phlip9.com/notes/performance/simdjson talk/":{"tf":1.0}},"df":18}},"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/android/root phone with magisk/":{"tf":1.0},"https://phlip9.com/notes/devops/deployment strategies/":{"tf":1.4142135623730951},"https://phlip9.com/notes/devops/service mesh/":{"tf":1.0}},"df":3}}},"o":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/combinatorics/k-combinations of a multiset/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.0}},"df":2,"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,":":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"1":{"docs":{"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/gramine/":{"tf":1.0},"https://phlip9.com/notes/devops/azure CLI/":{"tf":1.0}},"df":3}}}}}}}}}}},"’":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0}},"df":1}}},"p":{"docs":{},"df":0,"a":{"docs":{},"df":0,"b":{"docs":{},"df":0,"i":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"y":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.4142135623730951}},"df":1}}}}}}},"l":{"docs":{"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0},"https://phlip9.com/notes/crypto/biscuit authz/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/rust verification tools/":{"tf":1.0}},"df":4,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"g":{"docs":{},"df":0,"x":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0}},"df":1}}}}}},"c":{"docs":{"https://phlip9.com/notes/btc-ln/atomic multipath payments (AMP)/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/breez lightning service providers/":{"tf":2.6457513110645907},"https://phlip9.com/notes/btc-ln/submarine swaps/":{"tf":1.4142135623730951},"https://phlip9.com/notes/devops/nomad/":{"tf":1.7320508075688772},"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":1.7320508075688772},"https://phlip9.com/notes/router/lightning router/lightning router overview/":{"tf":1.7320508075688772}},"df":6}},"i":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/btc-ln/breez lightning service providers/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/hosted channels/":{"tf":1.0}},"df":2}},"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"v":{"docs":{"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":3.0},"https://phlip9.com/notes/router/lightning router/captive portal/arubanetworks captive portal/":{"tf":3.605551275463989},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":6.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":5.0},"https://phlip9.com/notes/router/lightning router/lightning router overview/":{"tf":1.7320508075688772}},"df":5}},"u":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.4142135623730951},"https://phlip9.com/notes/nvim/universal-ctags Notes/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/lightning router overview/":{"tf":1.0}},"df":3}}}},"r":{"docs":{"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/money services business (MSB)/":{"tf":1.0}},"df":1,"d":{"docs":{"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/financial instituion/":{"tf":1.7320508075688772},"https://phlip9.com/notes/combinatorics/k-combinations of a multiset/":{"tf":1.0},"https://phlip9.com/notes/management/relieve often - why generals were more successful in WWII/":{"tf":1.0},"https://phlip9.com/notes/misc/prepping RPI for embedded dev/":{"tf":1.4142135623730951},"https://phlip9.com/notes/misc/setting up a headless raspbian boot image/":{"tf":2.0},"https://phlip9.com/notes/networking/network interface card (NIC)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.0}},"df":7,"b":{"docs":{},"df":0,"o":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/misc/kintsugi/":{"tf":1.0}},"df":1}}}}}},"e":{"docs":{"https://phlip9.com/notes/AI ML/Markov Decision Process (MDP)/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/secure time/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/marblerun/":{"tf":1.0},"https://phlip9.com/notes/devops/nomad/":{"tf":1.0},"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":1.0},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.4142135623730951},"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":1.4142135623730951},"https://phlip9.com/notes/networking/ipv6 address space/":{"tf":1.0},"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.0}},"df":11,"e":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/lang/operator fixity and precedence/":{"tf":1.0}},"df":1}},"f":{"docs":{},"df":0,"u":{"docs":{},"df":0,"l":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/misc/kintsugi/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.4142135623730951}},"df":4}}}}}},"g":{"docs":{},"df":0,"o":{"docs":{"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":2.449489742783178},"https://phlip9.com/notes/fuzzing/fuzzcheck-rs/":{"tf":1.7320508075688772},"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":3.3166247903554},"https://phlip9.com/notes/lang/rust/rr with rust/":{"tf":2.6457513110645907},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":2.0},"https://phlip9.com/notes/reproducible builds/nix/nix debug spurrious rebuilds/":{"tf":1.0}},"df":7,"'":{"docs":{"https://phlip9.com/notes/statistics probability/winsorize/":{"tf":1.0}},"df":1},".":{"docs":{},"df":0,"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"c":{"docs":{},"df":0,"k":{"docs":{"https://phlip9.com/notes/reproducible builds/nix/nix debug spurrious rebuilds/":{"tf":1.0}},"df":1}}}},"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/nix/nix debug spurrious rebuilds/":{"tf":1.0}},"df":2}}}}},"/":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"f":{"docs":{},"df":0,"i":{"docs":{},"df":0,"g":{"docs":{"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0}},"df":1,".":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.0}},"df":1}}}}}}}}}}}}}},"l":{"docs":{"https://phlip9.com/notes/btc-ln/lightning rod/":{"tf":2.0}},"df":1,"o":{"docs":{"https://phlip9.com/notes/AI ML/Markov Decision Process (MDP)/":{"tf":1.0}},"df":1}},"r":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.4142135623730951}},"df":2,"a":{"docs":{},"df":0,"g":{"docs":{"https://phlip9.com/notes/lang/lua/":{"tf":1.4142135623730951}},"df":1}},"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,",":{"docs":{},"df":0,"b":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{},"df":0,"c":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,",":{"docs":{},"df":0,"m":{"docs":{},"df":0,"u":{"docs":{},"df":0,"l":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,",":{"docs":{},"df":0,"u":{"docs":{},"df":0,"p":{"docs":{},"df":0,"&":{"docs":{},"df":0,"g":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.7320508075688772}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"v":{"docs":{"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.0}},"df":1}},"s":{"docs":{},"df":0,"c":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0}},"df":1}}},"e":{"docs":{"https://phlip9.com/notes/AI ML/Expectimax Search/":{"tf":2.23606797749979},"https://phlip9.com/notes/AI ML/Markov Decision Process (MDP)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/android/ADB over TCP inside WSL2/":{"tf":1.0},"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.4142135623730951},"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/money services business (MSB)/":{"tf":1.0},"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/breez lightning service providers/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":3.605551275463989},"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":1.0},"https://phlip9.com/notes/devops/docker compose/":{"tf":1.4142135623730951},"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":1.0},"https://phlip9.com/notes/fuzzing/fuzzcheck-rs/":{"tf":1.7320508075688772},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":4.47213595499958},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":2.449489742783178},"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":1.4142135623730951},"https://phlip9.com/notes/misc/kintsugi/":{"tf":1.0},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/nix/nix debug spurrious rebuilds/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":2.0},"https://phlip9.com/notes/router/lightning router/lightning router overview/":{"tf":1.4142135623730951},"https://phlip9.com/notes/statistics probability/p-value/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/standard error/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/testing whether a coin is fair/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/winsorize/":{"tf":1.0}},"df":28,"/":{"docs":{},"df":0,"c":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"+":{"docs":{},"df":0,"/":{"docs":{},"df":0,"c":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0}},"df":1}}}}}}}}}}},"h":{"docs":{"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/foreign bank account report (FBAR)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/monetary instruments/":{"tf":1.0},"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/money services business (MSB)/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.0}},"df":4,"e":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/money services business (MSB)/":{"tf":1.4142135623730951}},"df":1}}},"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"o":{"docs":{"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/financial instituion/":{"tf":1.0}},"df":1}}},"o":{"docs":{},"df":0,"c":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0}},"df":1}}}},"t":{"docs":{"https://phlip9.com/notes/statistics probability/winsorize/":{"tf":2.0}},"df":1}},"t":{"docs":{"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.0},"https://phlip9.com/notes/misc/envsubst/":{"tf":1.0},"https://phlip9.com/notes/misc/prepping RPI for embedded dev/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/nix/nix debug spurrious rebuilds/":{"tf":1.4142135623730951}},"df":4,"c":{"docs":{},"df":0,"h":{"docs":{"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.7320508075688772},"https://phlip9.com/notes/lang/lua/":{"tf":1.0}},"df":2}},"e":{"docs":{},"df":0,"g":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/fuzzing/fuzzing/":{"tf":1.0},"https://phlip9.com/notes/networking/CIDR/":{"tf":1.0}},"df":2,"i":{"docs":{"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.0},"https://phlip9.com/notes/lang/flutter/flutter setup/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.4142135623730951}},"df":4}}}}}},"u":{"docs":{},"df":0,"s":{"docs":{"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.4142135623730951},"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/nix/nix debug spurrious rebuilds/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.7320508075688772},"https://phlip9.com/notes/router/lightning router/captive portal/arubanetworks captive portal/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":2.449489742783178}},"df":8},"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/fuzzing/fuzzing/":{"tf":1.0}},"df":1}}}}}}}},"v":{"docs":{},"df":0,"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/android/root phone with magisk/":{"tf":1.0},"https://phlip9.com/notes/crypto/(talk) authenticated data structures for stateless validation/":{"tf":1.0}},"df":2}}}}},"b":{"docs":{"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0}},"df":1,"f":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/bip158 - compact block filters/":{"tf":1.4142135623730951}},"df":1},"o":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":1.4142135623730951}},"df":3,":":{"docs":{},"df":0,":":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.4142135623730951}},"df":1}}}}},"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.4142135623730951}},"df":1}}}}}}}}}},"c":{"docs":{"https://phlip9.com/notes/confidential computing/marblerun/":{"tf":1.0}},"df":1,"c":{"docs":{"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":2.23606797749979}},"df":1,"c":{"docs":{"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.7320508075688772}},"df":1}}},"d":{"docs":{"https://phlip9.com/notes/WSL/WSL2 custom kernel/":{"tf":1.4142135623730951},"https://phlip9.com/notes/android/android cli setup/":{"tf":1.4142135623730951},"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":2.0},"https://phlip9.com/notes/confidential computing/gramine/":{"tf":2.0},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.4142135623730951},"https://phlip9.com/notes/devops/algo wireguard VPN server/":{"tf":1.0},"https://phlip9.com/notes/lang/ATS/Install ATS2/":{"tf":1.7320508075688772},"https://phlip9.com/notes/lang/flutter/flutter setup/":{"tf":1.0},"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":1.0},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/nix/nix debug broken package build/":{"tf":1.0}},"df":11,"a":{"docs":{},"df":0,"b":{"docs":{"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.0}},"df":1}},"d":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.0}},"df":1}},"f":{"docs":{"https://phlip9.com/notes/statistics probability/CDF confidence bands - DKW inequality/":{"tf":3.0},"https://phlip9.com/notes/statistics probability/multinomial distribution/":{"tf":1.4142135623730951},"https://phlip9.com/notes/statistics probability/testing whether a coin is fair/":{"tf":1.7320508075688772}},"df":3},"o":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/AI ML/Expectimax Search/":{"tf":3.3166247903554},"https://phlip9.com/notes/AI ML/Markov Decision Process (MDP)/":{"tf":4.47213595499958},"https://phlip9.com/notes/statistics probability/G-test - multinomial goodness-of-fit/":{"tf":2.8284271247461903},"https://phlip9.com/notes/statistics probability/cheat sheet/":{"tf":1.7320508075688772},"https://phlip9.com/notes/statistics probability/multinomial distribution/":{"tf":1.7320508075688772},"https://phlip9.com/notes/statistics probability/p-value/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/standard error/":{"tf":2.23606797749979},"https://phlip9.com/notes/statistics probability/testing whether a coin is fair/":{"tf":3.4641016151377544}},"df":8}}},"e":{"docs":{"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.4142135623730951}},"df":1,"i":{"docs":{},"df":0,"l":{"docs":{},"df":0,"(":{"docs":{},"df":0,"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{},"df":0,"_":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":1.0}},"df":1}}}}}}}}}},"k":{"docs":{"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.4142135623730951}},"df":1},"l":{"docs":{},"df":0,"l":{"docs":{},"df":0,"u":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/devops/algo wireguard VPN server/":{"tf":1.0}},"df":1}}}}}},"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.0},"https://phlip9.com/notes/devops/consul/":{"tf":1.0},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.4142135623730951}},"df":5}},"o":{"docs":{},"df":0,"s":{"docs":{},"df":0,":":{"docs":{},"df":0,"8":{"docs":{"https://phlip9.com/notes/confidential computing/gramine/":{"tf":1.0}},"df":1}}}},"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/btc-ln/breez lightning service providers/":{"tf":1.0},"https://phlip9.com/notes/devops/consul/":{"tf":1.7320508075688772},"https://phlip9.com/notes/devops/service mesh/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/standard error/":{"tf":1.0}},"df":4}}}}},"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{"https://phlip9.com/notes/misc/kintsugi/":{"tf":1.7320508075688772}},"df":1}},"t":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":3.7416573867739413},"https://phlip9.com/notes/confidential computing/gramine/":{"tf":2.23606797749979},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":3.1622776601683795},"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":2.23606797749979},"https://phlip9.com/notes/confidential computing/intel SGX/secure time/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/marblerun/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":4.242640687119285},"https://phlip9.com/notes/crypto/(talk) authenticated data structures for stateless validation/":{"tf":3.0},"https://phlip9.com/notes/crypto/TLS self-signed pubkey-only certs/":{"tf":2.23606797749979},"https://phlip9.com/notes/crypto/acme protocol/":{"tf":4.123105625617661},"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":1.0},"https://phlip9.com/notes/devops/consul/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.4142135623730951}},"df":13,".":{"docs":{},"df":0,"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"z":{"docs":{},"df":0,"e":{"docs":{},"df":0,"_":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/crypto/TLS self-signed pubkey-only certs/":{"tf":1.0}},"df":1}}}}}}}}}}}},"_":{"docs":{},"df":0,"b":{"docs":{},"df":0,"y":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/crypto/TLS self-signed pubkey-only certs/":{"tf":1.0}},"df":1}}},"c":{"docs":{},"df":0,"h":{"docs":{},"df":0,"a":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0}},"df":1}}}}},"d":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"_":{"docs":{},"df":0,"s":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.4142135623730951}},"df":1}}}}}},"k":{"docs":{},"df":0,"e":{"docs":{},"df":0,"y":{"docs":{},"df":0,"_":{"docs":{},"df":0,"t":{"docs":{},"df":0,"y":{"docs":{},"df":0,"p":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0}},"df":1}}}}}}},"p":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{"https://phlip9.com/notes/crypto/TLS self-signed pubkey-only certs/":{"tf":1.0}},"df":1,"s":{"docs":{},"df":0,".":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"g":{"docs":{"https://phlip9.com/notes/crypto/TLS self-signed pubkey-only certs/":{"tf":1.0}},"df":1}}},"d":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"g":{"docs":{},"df":0,"u":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"h":{"docs":{},"df":0,"e":{"docs":{},"df":0,"d":{"docs":{},"df":0,"_":{"docs":{},"df":0,"n":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{"https://phlip9.com/notes/crypto/TLS self-signed pubkey-only certs/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}},"k":{"docs":{},"df":0,"e":{"docs":{},"df":0,"y":{"docs":{},"df":0,"_":{"docs":{},"df":0,"p":{"docs":{},"df":0,"a":{"docs":{},"df":0,"i":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/crypto/TLS self-signed pubkey-only certs/":{"tf":1.0}},"df":1}}}}}}}}}}}}}},"s":{"docs":{},"df":0,"v":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0}},"df":1}}}}},"a":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/AI ML/Markov Decision Process (MDP)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/android/root phone with magisk/":{"tf":1.0},"https://phlip9.com/notes/combinatorics/k-combinations of a multiset/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/rust/rr with rust/":{"tf":1.4142135623730951},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.4142135623730951}},"df":7,"l":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/btc utreexo - utxo accumulator/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.0}},"df":2}}}}},"i":{"docs":{},"df":0,"f":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/fastpay/":{"tf":3.4641016151377544},"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":2.0},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":4.242640687119285},"https://phlip9.com/notes/confidential computing/gramine/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":2.6457513110645907},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":3.1622776601683795},"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":1.7320508075688772},"https://phlip9.com/notes/crypto/(talk) authenticated data structures for stateless validation/":{"tf":1.0},"https://phlip9.com/notes/crypto/acme protocol/":{"tf":2.0},"https://phlip9.com/notes/crypto/smallstep - private online CA & ACME server/":{"tf":1.4142135623730951},"https://phlip9.com/notes/devops/consul/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.4142135623730951}},"df":14,"i":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.4142135623730951}},"df":1,"c":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"/":{"docs":{},"df":0,"o":{"docs":{},"df":0,"c":{"docs":{},"df":0,"s":{"docs":{},"df":0,"p":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/secure time/":{"tf":1.0}},"df":1}}}}},"_":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{},"df":0,"a":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0}},"df":1}}}}}},"p":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{"https://phlip9.com/notes/crypto/TLS self-signed pubkey-only certs/":{"tf":1.0}},"df":1,"s":{"docs":{},"df":0,":":{"docs":{},"df":0,":":{"docs":{},"df":0,"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"w":{"docs":{},"df":0,"(":{"docs":{},"df":0,"s":{"docs":{},"df":0,"u":{"docs":{},"df":0,"b":{"docs":{},"df":0,"j":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{},"df":0,"_":{"docs":{},"df":0,"n":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{"https://phlip9.com/notes/crypto/TLS self-signed pubkey-only certs/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}},"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"_":{"docs":{},"df":0,"k":{"docs":{},"df":0,"e":{"docs":{},"df":0,"y":{"docs":{},"df":0,"_":{"docs":{},"df":0,"t":{"docs":{},"df":0,"y":{"docs":{},"df":0,"p":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}},"y":{"docs":{},"df":0,"_":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"c":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"v":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0}},"df":1}}}}}}}}}},"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"a":{"docs":{},"df":0,"g":{"docs":{"https://phlip9.com/notes/crypto/acme protocol/":{"tf":1.0}},"df":1}}}}}}},"t":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0}},"df":1}},"f":{"docs":{},"df":0,"g":{"docs":{"https://phlip9.com/notes/reproducible builds/nix/links/":{"tf":1.0}},"df":1,"(":{"docs":{},"df":0,"f":{"docs":{},"df":0,"u":{"docs":{},"df":0,"z":{"docs":{},"df":0,"z":{"docs":{"https://phlip9.com/notes/fuzzing/fuzzcheck-rs/":{"tf":1.0}},"df":1}}}}}},"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"g":{"docs":{},"df":0,"s":{"docs":{},"df":0,"_":{"docs":{},"df":0,"w":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{},"df":0,"m":{"docs":{},"df":0,"3":{"docs":{},"df":0,"2":{"docs":{"https://phlip9.com/notes/reproducible builds/nix/nix debug spurrious rebuilds/":{"tf":1.0}},"df":1}}}}}}}}}}},"n":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/secure time/":{"tf":1.0}},"df":1}},"p":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"f":{"docs":{},"df":0,"s":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.0}},"df":1}}}}}},"r":{"docs":{"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/financial instituion/":{"tf":1.0},"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/foreign bank account report (FBAR)/":{"tf":1.0},"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/money services business (MSB)/":{"tf":1.0}},"df":3},"t":{"docs":{},"df":0,"c":{"docs":{"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/money services business (MSB)/":{"tf":1.0}},"df":1}},"u":{"docs":{},"df":0,"n":{"docs":{},"df":0,"(":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0}},"df":1}}}}}}},"h":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/lang/flutter/flutter setup/":{"tf":1.0}},"df":1},"i":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/AI ML/Markov Decision Process (MDP)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/b l o c k c h a i n/aptos/":{"tf":1.0},"https://phlip9.com/notes/b l o c k c h a i n/fastpay/":{"tf":1.4142135623730951},"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.4142135623730951},"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":2.6457513110645907},"https://phlip9.com/notes/btc-ln/BOLT 7 - p2p node and channel discovery/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/breez lightning service providers/":{"tf":1.4142135623730951},"https://phlip9.com/notes/btc-ln/hosted channels/":{"tf":1.4142135623730951},"https://phlip9.com/notes/btc-ln/lightning network notes/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":2.23606797749979},"https://phlip9.com/notes/btc-ln/submarine swaps/":{"tf":4.58257569495584},"https://phlip9.com/notes/btc-ln/zero-conf channels/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":2.23606797749979},"https://phlip9.com/notes/confidential computing/gramine/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.0},"https://phlip9.com/notes/crypto/(talk) authenticated data structures for stateless validation/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/rebuilderd/":{"tf":1.4142135623730951},"https://phlip9.com/notes/statistics probability/standard error/":{"tf":1.0}},"df":18,":":{"docs":{},"df":0,":":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"c":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"s":{"docs":{"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.0}},"df":1}}}}}},"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"f":{"docs":{},"df":0,"i":{"docs":{},"df":0,"r":{"docs":{},"df":0,"m":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.4142135623730951}},"df":1}}}}}}},"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.4142135623730951}},"df":1}}}}}}}},"_":{"docs":{},"df":0,"h":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{},"df":0,"h":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/BOLT 7 - p2p node and channel discovery/":{"tf":1.4142135623730951}},"df":2}}}}},"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"f":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"e":{"docs":{},"df":0,":":{"docs":{},"df":0,":":{"docs":{},"df":0,"b":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{},"df":0,"c":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"f":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"e":{"docs":{},"df":0,":":{"docs":{},"df":0,":":{"docs":{},"df":0,"b":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{},"df":0,"c":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"_":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"s":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"m":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":2.23606797749979}},"df":1,":":{"docs":{},"df":0,":":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{},"df":0,"a":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"m":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"&":{"docs":{},"df":0,"l":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}},"l":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"g":{"docs":{"https://phlip9.com/notes/android/ADB over TCP inside WSL2/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel SGX/secure time/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/marblerun/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":1.0},"https://phlip9.com/notes/crypto/acme protocol/":{"tf":3.4641016151377544},"https://phlip9.com/notes/fuzzing/fuzzcheck-rs/":{"tf":1.0},"https://phlip9.com/notes/misc/optimization solvers/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.4142135623730951}},"df":11,"e":{"docs":{},"df":0,"/":{"docs":{},"df":0,"&":{"docs":{},"df":0,"l":{"docs":{},"df":0,"t":{"docs":{},"df":0,";":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"k":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"&":{"docs":{},"df":0,"g":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/crypto/acme protocol/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}},"n":{"docs":{"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":2.8284271247461903}},"df":1,"_":{"docs":{},"df":0,"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{},"df":0,"_":{"docs":{},"df":0,"v":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"u":{"docs":{"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.0}},"df":1}}}}}}}}},"c":{"docs":{"https://phlip9.com/notes/AI ML/Expectimax Search/":{"tf":2.449489742783178}},"df":1},"g":{"docs":{"https://phlip9.com/notes/WSL/WSL2 custom kernel/":{"tf":1.0},"https://phlip9.com/notes/android/ADB over TCP inside WSL2/":{"tf":1.0},"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0},"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/foreign bank account report (FBAR)/":{"tf":1.0},"https://phlip9.com/notes/b l o c k c h a i n/fastpay/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.7320508075688772},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel SGX/secure time/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/marblerun/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":2.449489742783178},"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":1.0},"https://phlip9.com/notes/design/form design/":{"tf":1.4142135623730951},"https://phlip9.com/notes/devops/deployment strategies/":{"tf":1.7320508075688772},"https://phlip9.com/notes/devops/linkerd/":{"tf":1.0},"https://phlip9.com/notes/devops/secrets/ejson (Shopify)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.7320508075688772},"https://phlip9.com/notes/lang/flutter/flutter setup/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/rust/rr with rust/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/understanding sycamore reactivity/":{"tf":2.6457513110645907},"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":2.6457513110645907},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.7320508075688772},"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.0},"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/nix/nix debug spurrious rebuilds/":{"tf":1.4142135623730951},"https://phlip9.com/notes/reproducible builds/reproducible-builds.org/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/arubanetworks captive portal/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/CDF confidence bands - DKW inequality/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/winsorize/":{"tf":1.4142135623730951}},"df":31},"i":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.4142135623730951}},"df":1}},"m":{"docs":{},"df":0,"g":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":2.23606797749979}},"df":2,".":{"docs":{},"df":0,"c":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"i":{"docs":{},"df":0,"m":{"docs":{},"df":0,"_":{"docs":{},"df":0,"f":{"docs":{},"df":0,"u":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{},"df":0,"s":{"docs":{},"df":0,"(":{"docs":{},"df":0,"p":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"i":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"g":{"docs":{},"df":0,"e":{"docs":{},"df":0,".":{"docs":{},"df":0,"u":{"docs":{},"df":0,"n":{"docs":{},"df":0,"w":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"p":{"docs":{"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}},"f":{"docs":{},"df":0,"u":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"g":{"docs":{},"df":0,"_":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"s":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"_":{"docs":{},"df":0,"g":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"d":{"docs":{},"df":0,"(":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"m":{"docs":{},"df":0,"p":{"docs":{},"df":0,"_":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"_":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},":":{"docs":{},"df":0,":":{"docs":{},"df":0,"a":{"docs":{},"df":0,"b":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"_":{"docs":{},"df":0,"p":{"docs":{},"df":0,"a":{"docs":{},"df":0,"y":{"docs":{"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.0}},"df":1}}}}}}}}}}},"c":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"i":{"docs":{},"df":0,"m":{"docs":{},"df":0,"_":{"docs":{},"df":0,"f":{"docs":{},"df":0,"u":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.0}},"df":1}}}}}}}}}},"f":{"docs":{},"df":0,"a":{"docs":{},"df":0,"i":{"docs":{},"df":0,"l":{"docs":{},"df":0,"_":{"docs":{},"df":0,"h":{"docs":{},"df":0,"t":{"docs":{},"df":0,"l":{"docs":{},"df":0,"c":{"docs":{},"df":0,"_":{"docs":{},"df":0,"b":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"k":{"docs":{},"df":0,"w":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}},"u":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"g":{"docs":{},"df":0,"_":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"s":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"_":{"docs":{},"df":0,"g":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}},"p":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"c":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"s":{"docs":{},"df":0,"_":{"docs":{},"df":0,"p":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"g":{"docs":{},"df":0,"_":{"docs":{},"df":0,"h":{"docs":{},"df":0,"t":{"docs":{},"df":0,"l":{"docs":{},"df":0,"c":{"docs":{},"df":0,"_":{"docs":{},"df":0,"f":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"w":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.4142135623730951}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 11 - invoices/":{"tf":2.0},"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":8.660254037844387},"https://phlip9.com/notes/btc-ln/BOLT 4 - onion routing protocol/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/BOLT 7 - p2p node and channel discovery/":{"tf":3.1622776601683795},"https://phlip9.com/notes/btc-ln/atomic multipath payments (AMP)/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/breez lightning service providers/":{"tf":3.872983346207417},"https://phlip9.com/notes/btc-ln/hosted channels/":{"tf":2.23606797749979},"https://phlip9.com/notes/btc-ln/lightning libs/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/lightning network notes/":{"tf":1.4142135623730951},"https://phlip9.com/notes/btc-ln/lightning rod/":{"tf":1.4142135623730951},"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":2.23606797749979},"https://phlip9.com/notes/btc-ln/submarine swaps/":{"tf":2.449489742783178},"https://phlip9.com/notes/btc-ln/zero-conf channels/":{"tf":2.0},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.7320508075688772},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.7320508075688772},"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.7320508075688772},"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel SGX/secure time/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/marblerun/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":2.23606797749979},"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":2.449489742783178},"https://phlip9.com/notes/lang/flutter/flutter setup/":{"tf":1.4142135623730951}},"df":23,":":{"docs":{},"df":0,":":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"c":{"docs":{},"df":0,"e":{"docs":{},"df":0,"p":{"docs":{},"df":0,"t":{"docs":{},"df":0,"_":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.0}},"df":1}}}}}}},"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"b":{"docs":{},"df":0,"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{},"df":0,"_":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}},"c":{"docs":{},"df":0,"h":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"k":{"docs":{},"df":0,"_":{"docs":{},"df":0,"g":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{},"df":0,"_":{"docs":{},"df":0,"f":{"docs":{},"df":0,"u":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"g":{"docs":{},"df":0,"_":{"docs":{},"df":0,"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"c":{"docs":{},"df":0,"k":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}},"f":{"docs":{},"df":0,"u":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"g":{"docs":{},"df":0,"_":{"docs":{},"df":0,"c":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.4142135623730951}},"df":1,"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"d":{"docs":{},"df":0,"_":{"docs":{},"df":0,"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"g":{"docs":{},"df":0,"n":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"u":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}},"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"c":{"docs":{},"df":0,"k":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.0}},"df":1}}}},"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"g":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.0}},"df":1}}}}}}}}}}}},"g":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"_":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"c":{"docs":{},"df":0,"e":{"docs":{},"df":0,"p":{"docs":{},"df":0,"t":{"docs":{},"df":0,"_":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{},"df":0,"_":{"docs":{},"df":0,"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"s":{"docs":{},"df":0,"a":{"docs":{},"df":0,"g":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}},"t":{"docs":{},"df":0,"_":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"n":{"docs":{},"df":0,"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"n":{"docs":{},"df":0,"c":{"docs":{},"df":0,"e":{"docs":{},"df":0,"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"_":{"docs":{},"df":0,"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"g":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}},"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{},"df":0,"b":{"docs":{},"df":0,"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{},"df":0,"_":{"docs":{},"df":0,"f":{"docs":{},"df":0,"u":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"g":{"docs":{},"df":0,"_":{"docs":{},"df":0,"c":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}},"s":{"docs":{},"df":0,"h":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{},"df":0,"d":{"docs":{},"df":0,"o":{"docs":{},"df":0,"w":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.0}},"df":1}}}}}}}}}}}},"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"_":{"docs":{},"df":0,"u":{"docs":{},"df":0,"s":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.0}},"df":1}}}}},"s":{"docs":{},"df":0,"h":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{},"df":0,"d":{"docs":{},"df":0,"o":{"docs":{},"df":0,"w":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.0}},"df":1}}}}}}}},"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"s":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"s":{"docs":{},"df":0,"_":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"f":{"docs":{},"df":0,"i":{"docs":{},"df":0,"r":{"docs":{},"df":0,"m":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}},"_":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"n":{"docs":{},"df":0,"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"n":{"docs":{},"df":0,"c":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 7 - p2p node and channel discovery/":{"tf":1.7320508075688772}},"df":1}}}}}}},"f":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"g":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/BOLT 7 - p2p node and channel discovery/":{"tf":1.0}},"df":2}}}},"i":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":3.1622776601683795}},"df":1}},"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"a":{"docs":{},"df":0,"g":{"docs":{"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.0}},"df":1}}}}},"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"v":{"docs":{},"df":0,"e":{"docs":{},"df":0,"_":{"docs":{},"df":0,"s":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"s":{"docs":{},"df":0,"h":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.4142135623730951}},"df":1}}}}}}}}}}}}}}},"t":{"docs":{},"df":0,"y":{"docs":{},"df":0,"p":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.4142135623730951}},"df":1}}},"u":{"docs":{},"df":0,"p":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 7 - p2p node and channel discovery/":{"tf":1.7320508075688772}},"df":1}}}},"c":{"docs":{},"df":0,"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"s":{"docs":{"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.0}},"df":1}}}},"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"a":{"docs":{},"df":0,"g":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.4142135623730951},"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.0}},"df":2,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,":":{"docs":{},"df":0,":":{"docs":{},"df":0,"c":{"docs":{},"df":0,"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"_":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.0}},"df":1,"_":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}},"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"_":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.0}},"df":1}}}}}}}}}}}}}},"d":{"docs":{},"df":0,"o":{"docs":{},"df":0,"_":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{},"df":0,"a":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"_":{"docs":{},"df":0,"e":{"docs":{},"df":0,"v":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.0}},"df":1}}}}}}}}}}},"f":{"docs":{},"df":0,"a":{"docs":{},"df":0,"i":{"docs":{},"df":0,"l":{"docs":{},"df":0,"_":{"docs":{},"df":0,"h":{"docs":{},"df":0,"t":{"docs":{},"df":0,"l":{"docs":{},"df":0,"c":{"docs":{},"df":0,"_":{"docs":{},"df":0,"b":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"k":{"docs":{},"df":0,"w":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}},"u":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"g":{"docs":{},"df":0,"_":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"s":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"_":{"docs":{},"df":0,"g":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.0}},"df":1,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"d":{"docs":{},"df":0,"_":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"n":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"_":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"c":{"docs":{},"df":0,"e":{"docs":{},"df":0,"p":{"docs":{},"df":0,"t":{"docs":{},"df":0,"_":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.0}},"df":1}}}}}}}}}}}}}},"f":{"docs":{},"df":0,"u":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"g":{"docs":{},"df":0,"_":{"docs":{},"df":0,"c":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.0}},"df":1}},"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"c":{"docs":{},"df":0,"k":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.0}},"df":1}}}},"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"g":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.0}},"df":1}}}}}}}}}}}},"o":{"docs":{},"df":0,"p":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"_":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.0}},"df":1}}}}}}}}}}}},"s":{"docs":{},"df":0,"h":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{},"df":0,"d":{"docs":{},"df":0,"o":{"docs":{},"df":0,"w":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}},"s":{"docs":{},"df":0,"/":{"docs":{},"df":0,"?":{"docs":{},"df":0,"h":{"docs":{},"df":0,"l":{"docs":{},"df":0,"=":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/btc-ln/breez lightning service providers/":{"tf":1.0}},"df":1}}}}}}}}}}}},"o":{"docs":{"https://phlip9.com/notes/lang/rust/rr with rust/":{"tf":1.0}},"df":1},"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 11 - invoices/":{"tf":1.0},"https://phlip9.com/notes/nvim/universal-ctags Notes/":{"tf":1.4142135623730951}},"df":2}}},"g":{"docs":{"https://phlip9.com/notes/btc-ln/breez lightning service providers/":{"tf":1.4142135623730951},"https://phlip9.com/notes/keyboards/moergo glove80/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/lightning router overview/":{"tf":1.7320508075688772}},"df":3},"l":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0}},"df":1}},"t":{"docs":{"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.0}},"df":1}}},"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"p":{"docs":{"https://phlip9.com/notes/misc/kintsugi/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/winsorize/":{"tf":1.0}},"df":2,"e":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/devops/deployment strategies/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/lightning router overview/":{"tf":1.0}},"df":2}},"l":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.4142135623730951}},"df":1}}},"t":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/rr with rust/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/cheat sheet/":{"tf":1.4142135623730951}},"df":3}},"c":{"docs":{},"df":0,"k":{"docs":{"https://phlip9.com/notes/android/android cli setup/":{"tf":2.0},"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.4142135623730951},"https://phlip9.com/notes/android/root phone with magisk/":{"tf":1.4142135623730951},"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/foreign bank account report (FBAR)/":{"tf":1.0},"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/monetary instruments/":{"tf":2.449489742783178},"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/money services business (MSB)/":{"tf":2.449489742783178},"https://phlip9.com/notes/b l o c k c h a i n/bip158 - compact block filters/":{"tf":1.0},"https://phlip9.com/notes/b l o c k c h a i n/fastpay/":{"tf":2.0},"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":3.0},"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/lightning rod/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.0},"https://phlip9.com/notes/combinatorics/k-combinations of a multiset/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":2.0},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":2.0},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":2.0},"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.7320508075688772},"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":1.0},"https://phlip9.com/notes/crypto/(talk) authenticated data structures for stateless validation/":{"tf":1.0},"https://phlip9.com/notes/crypto/TLS self-signed pubkey-only certs/":{"tf":1.0},"https://phlip9.com/notes/devops/consul/":{"tf":1.7320508075688772},"https://phlip9.com/notes/devops/deployment strategies/":{"tf":1.0},"https://phlip9.com/notes/ios/ios setup/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0},"https://phlip9.com/notes/lang/operator fixity and precedence/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/rust verification tools/":{"tf":1.4142135623730951},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":2.0},"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.4142135623730951},"https://phlip9.com/notes/statistics probability/G-test - multinomial goodness-of-fit/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/multinomial distribution/":{"tf":1.0}},"df":34,"e":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0},"https://phlip9.com/notes/lang/flutter/flutter setup/":{"tf":1.0}},"df":2}},"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"g":{"docs":{},"df":0,"/":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/fuzzing/fuzzcheck-rs/":{"tf":1.0}},"df":1}}}}}}}},"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/devops/algo wireguard VPN server/":{"tf":1.0}},"df":1}}},"p":{"docs":{},"df":0,"o":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/fastpay/":{"tf":1.0}},"df":1}}}}}}}},"g":{"docs":{},"df":0,"r":{"docs":{},"df":0,"p":{"docs":{"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0}},"df":1}}},"i":{"docs":{"https://phlip9.com/notes/statistics probability/multinomial distribution/":{"tf":1.0}},"df":1,"^":{"docs":{},"df":0,"2":{"docs":{"https://phlip9.com/notes/statistics probability/G-test - multinomial goodness-of-fit/":{"tf":2.0}},"df":1}},"l":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/crypto/acme protocol/":{"tf":1.0},"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":2.0},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/rr with rust/":{"tf":1.0}},"df":4}},"p":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0},"https://phlip9.com/notes/misc/kintsugi/":{"tf":1.0}},"df":2,"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0}},"df":2}}}},"s":{"docs":{},"df":0,"q":{"docs":{},"df":0,"_":{"docs":{},"df":0,"c":{"docs":{},"df":0,"d":{"docs":{},"df":0,"f":{"docs":{},"df":0,"(":{"docs":{},"df":0,"d":{"docs":{},"df":0,"o":{"docs":{},"df":0,"f":{"docs":{"https://phlip9.com/notes/statistics probability/multinomial distribution/":{"tf":1.0}},"df":1}}}}}}}}}}},"m":{"docs":{},"df":0,"o":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/android/android cli setup/":{"tf":1.0},"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0},"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.0}},"df":4}}},"o":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/multinomial distribution/":{"tf":1.0}},"df":3,"e":{"docs":{},"df":0,"&":{"docs":{},"df":0,"l":{"docs":{},"df":0,"t":{"docs":{},"df":0,";":{"docs":{},"df":0,"&":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{},"df":0,"p":{"docs":{},"df":0,";":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.0}},"df":1}}}}}}}}}}}},".":{"docs":{},"df":0,"[":{"docs":{},"df":0,"4":{"docs":{},"df":0,"]":{"docs":{},"df":0,"[":{"docs":{},"df":0,"5":{"docs":{"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.0}},"df":1}}}}}}}}},"o":{"docs":{},"df":0,"s":{"docs":{"https://phlip9.com/notes/AI ML/Markov Decision Process (MDP)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/android/OTA updates for rooted android phone/":{"tf":1.4142135623730951},"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.4142135623730951},"https://phlip9.com/notes/android/root phone with magisk/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.7320508075688772},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.4142135623730951},"https://phlip9.com/notes/devops/service mesh/":{"tf":1.0},"https://phlip9.com/notes/fuzzing/fuzzing/":{"tf":1.0},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0},"https://phlip9.com/notes/misc/kintsugi/":{"tf":1.0},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.4142135623730951},"https://phlip9.com/notes/statistics probability/multinomial distribution/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/testing whether a coin is fair/":{"tf":1.4142135623730951}},"df":14}},"p":{"docs":{},"df":0,"p":{"docs":{},"df":0,"y":{"docs":{},"df":0,"k":{"docs":{},"df":0,"j":{"docs":{},"df":0,"k":{"docs":{},"df":0,"j":{"docs":{"https://phlip9.com/notes/misc/pop_OS! tweaks/":{"tf":1.0}},"df":1}}}}}},"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"k":{"docs":{"https://phlip9.com/notes/misc/kintsugi/":{"tf":1.4142135623730951}},"df":1}}}}}},"s":{"docs":{},"df":0,"e":{"docs":{"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0}},"df":1,"n":{"docs":{"https://phlip9.com/notes/android/ADB over TCP inside WSL2/":{"tf":1.0}},"df":1}}}},"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1}}}}},"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"e":{"docs":{"https://phlip9.com/notes/lang/flutter/flutter setup/":{"tf":2.23606797749979}},"df":1,"_":{"docs":{},"df":0,"e":{"docs":{},"df":0,"x":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/lang/flutter/flutter setup/":{"tf":1.0}},"df":1}}}}}}}}},"n":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/secure time/":{"tf":1.0}},"df":1},"o":{"docs":{},"df":0,"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"g":{"docs":{"https://phlip9.com/notes/crypto/(talk) authenticated data structures for stateless validation/":{"tf":1.0},"https://phlip9.com/notes/performance/profiling/":{"tf":1.4142135623730951}},"df":2}}}}},"o":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/misc/setting up a headless raspbian boot image/":{"tf":1.4142135623730951}},"df":1}}}},"u":{"docs":{},"df":0,"n":{"docs":{},"df":0,"k":{"docs":{"https://phlip9.com/notes/confidential computing/gramine/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.0},"https://phlip9.com/notes/performance/simdjson talk/":{"tf":1.4142135623730951}},"df":3,".":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"(":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"d":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"g":{"docs":{},"df":0,")":{"docs":{},"df":0,".":{"docs":{},"df":0,"s":{"docs":{},"df":0,"p":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/confidential computing/gramine/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"i":{"docs":{"https://phlip9.com/notes/confidential computing/gramine/":{"tf":1.0},"https://phlip9.com/notes/devops/docker compose/":{"tf":1.0},"https://phlip9.com/notes/devops/kind (kubernetes in docker)/":{"tf":1.0},"https://phlip9.com/notes/fuzzing/fuzzcheck-rs/":{"tf":1.0},"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":2.0}},"df":6,"/":{"docs":{},"df":0,"c":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/devops/docker compose/":{"tf":1.0}},"df":1}}},"a":{"docs":{"https://phlip9.com/notes/devops/kubernetes/":{"tf":1.0}},"df":1},"d":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/networking/CIDR/":{"tf":4.123105625617661},"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.4142135623730951}},"df":2}},"p":{"docs":{},"df":0,"h":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0}},"df":1,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"x":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":2.8284271247461903},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.0}},"df":3,".":{"docs":{},"df":0,"e":{"docs":{},"df":0,"x":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{},"df":0,"_":{"docs":{},"df":0,"f":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"_":{"docs":{},"df":0,"s":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"e":{"docs":{},"df":0,"(":{"docs":{},"df":0,"&":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{},"df":0,"p":{"docs":{},"df":0,";":{"docs":{},"df":0,"n":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"c":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}},"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0}},"df":1}}},"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"_":{"docs":{},"df":0,"v":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}},"r":{"docs":{},"df":0,"c":{"docs":{},"df":0,"a":{"docs":{"https://phlip9.com/notes/btc-ln/lightning network notes/":{"tf":1.0}},"df":1},"l":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.7320508075688772}},"df":1,"e":{"docs":{},"df":0,"_":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1}}},"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1}}}},"c":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/devops/nomad/":{"tf":1.7320508075688772}},"df":1}},"s":{"docs":{},"df":0,"c":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1,"(":{"docs":{},"df":0,"s":{"docs":{},"df":0,"c":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}},"u":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"p":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":2.0}},"df":1},"y":{"docs":{},"df":0,"/":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"b":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.4142135623730951}},"df":1}}}},"t":{"docs":{},"df":0,"h":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":3.605551275463989}},"df":1}}}}}}}},"m":{"docs":{},"df":0,"v":{"docs":{"https://phlip9.com/notes/android/root phone with magisk/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.0}},"df":2}}}}},"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/devops/nomad/":{"tf":1.4142135623730951}},"df":1}}}},"i":{"docs":{},"df":0,"z":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/foreign bank account report (FBAR)/":{"tf":1.0}},"df":1}}}}}},"l":{"docs":{"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.4142135623730951}},"df":1,"a":{"docs":{},"df":0,"i":{"docs":{},"df":0,"m":{"docs":{"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.4142135623730951},"https://phlip9.com/notes/btc-ln/submarine swaps/":{"tf":1.7320508075688772},"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":1.0},"https://phlip9.com/notes/management/relieve often - why generals were more successful in WWII/":{"tf":1.4142135623730951},"https://phlip9.com/notes/misc/optimization solvers/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/multinomial distribution/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/testing whether a coin is fair/":{"tf":1.0}},"df":9,":":{"docs":{},"df":0,":":{"docs":{},"df":0,"{":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"b":{"docs":{},"df":0,"u":{"docs":{},"df":0,"g":{"docs":{},"df":0,"_":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{},"df":0,"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{},"df":0,"_":{"docs":{},"df":0,"g":{"docs":{"https://phlip9.com/notes/statistics probability/G-test - multinomial goodness-of-fit/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/multinomial distribution/":{"tf":1.0}},"df":2}}}}}}}}}}}}}}}}},"_":{"docs":{},"df":0,"f":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"_":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{},"df":0,"a":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"_":{"docs":{},"df":0,"t":{"docs":{},"df":0,"x":{"docs":{"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}},"m":{"docs":{},"df":0,"p":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/winsorize/":{"tf":2.8284271247461903}},"df":2,"(":{"docs":{},"df":0,"0":{"docs":{},"df":0,".":{"docs":{},"df":0,"0":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":2.0}},"df":1}}},"x":{"docs":{},"df":0,"_":{"docs":{},"df":0,"m":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1}}}}}}}},"n":{"docs":{},"df":0,"g":{"docs":{"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.4142135623730951},"https://phlip9.com/notes/reproducible builds/nix/nix debug spurrious rebuilds/":{"tf":1.0}},"df":2}},"s":{"docs":{},"df":0,"s":{"docs":{"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":4.47213595499958},"https://phlip9.com/notes/lang/koka-lang/":{"tf":1.0},"https://phlip9.com/notes/lang/lua/":{"tf":1.4142135623730951},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":3.0},"https://phlip9.com/notes/networking/CIDR/":{"tf":2.0},"https://phlip9.com/notes/nvim/universal-ctags Notes/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.4142135623730951}},"df":8,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"&":{"docs":{},"df":0,"g":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0}},"df":1}}},".":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{},"df":0,"d":{"docs":{},"df":0,"(":{"docs":{},"df":0,"\"":{"docs":{},"df":0,"i":{"docs":{},"df":0,"m":{"docs":{},"df":0,"p":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0}},"df":1}}}}}}}}}}}}}},"i":{"docs":{},"df":0,"c":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0}},"df":2},"f":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0}},"df":1}}},"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"s":{"docs":{"https://phlip9.com/notes/networking/CIDR/":{"tf":1.0}},"df":1}}}}}},"u":{"docs":{},"df":0,"s":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0}},"df":1}}},"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.4142135623730951},"https://phlip9.com/notes/reproducible builds/nix/nix debug broken package build/":{"tf":1.0}},"df":2,"u":{"docs":{},"df":0,"p":{"docs":{"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0}},"df":1}}},"r":{"docs":{"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0},"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/money services business (MSB)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/b l o c k c h a i n/fastpay/":{"tf":1.4142135623730951},"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/breez lightning service providers/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/lightning network notes/":{"tf":1.7320508075688772},"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.0},"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":1.0},"https://phlip9.com/notes/design/form design/":{"tf":2.0},"https://phlip9.com/notes/fuzzing/fuzzcheck-rs/":{"tf":1.0},"https://phlip9.com/notes/lang/gdb ref/":{"tf":1.0},"https://phlip9.com/notes/misc/kintsugi/":{"tf":1.0}},"df":13,"_":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{},"df":0,"u":{"docs":{},"df":0,"r":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.4142135623730951}},"df":1}}}}}}},"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"c":{"docs":{"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/money services business (MSB)/":{"tf":1.4142135623730951}},"df":1}}},"e":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/networking/CIDR/":{"tf":1.0}},"df":1},"s":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":1.0}},"df":1}}},"l":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/android/OTA updates for rooted android phone/":{"tf":1.0}},"df":1}},"n":{"docs":{"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/money services business (MSB)/":{"tf":1.0}},"df":1}}}},"i":{"docs":{"https://phlip9.com/notes/android/android cli setup/":{"tf":1.4142135623730951},"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.7320508075688772},"https://phlip9.com/notes/android/root phone with magisk/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/mystikos/":{"tf":1.0},"https://phlip9.com/notes/devops/azure CLI/":{"tf":2.8284271247461903},"https://phlip9.com/notes/devops/kubernetes/":{"tf":1.0},"https://phlip9.com/notes/lang/flutter/flutter setup/":{"tf":1.4142135623730951},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.0}},"df":8,".":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/devops/azure CLI/":{"tf":1.0}},"df":1}}}}},"c":{"docs":{},"df":0,"k":{"docs":{"https://phlip9.com/notes/android/root phone with magisk/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/gramine/":{"tf":1.0},"https://phlip9.com/notes/design/form design/":{"tf":1.0},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0},"https://phlip9.com/notes/performance/profiling/":{"tf":1.0}},"df":5}},"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/bip158 - compact block filters/":{"tf":1.0},"https://phlip9.com/notes/b l o c k c h a i n/fastpay/":{"tf":1.4142135623730951},"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.4142135623730951},"https://phlip9.com/notes/btc-ln/breez lightning service providers/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/hosted channels/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/lightning libs/":{"tf":1.4142135623730951},"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.4142135623730951},"https://phlip9.com/notes/btc-ln/submarine swaps/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":2.6457513110645907},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":2.0},"https://phlip9.com/notes/confidential computing/gramine/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":3.0},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":2.0},"https://phlip9.com/notes/confidential computing/marblerun/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":4.123105625617661},"https://phlip9.com/notes/crypto/(talk) authenticated data structures for stateless validation/":{"tf":1.7320508075688772},"https://phlip9.com/notes/crypto/TLS self-signed pubkey-only certs/":{"tf":1.0},"https://phlip9.com/notes/crypto/acme protocol/":{"tf":3.7416573867739413},"https://phlip9.com/notes/crypto/dex - open-source OIDC & OAuth 2.0 provider/":{"tf":1.0},"https://phlip9.com/notes/crypto/tls exported keying material/":{"tf":1.0},"https://phlip9.com/notes/devops/algo wireguard VPN server/":{"tf":1.0},"https://phlip9.com/notes/devops/consul/":{"tf":1.0},"https://phlip9.com/notes/devops/secrets/fortanix DSM/":{"tf":1.0},"https://phlip9.com/notes/devops/service mesh/":{"tf":1.0},"https://phlip9.com/notes/distributed systems/papers/(2020) Semi-Fast Byzantine-tolerant Shared Register without Reliable Broadcast/":{"tf":3.1622776601683795},"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":2.6457513110645907},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":3.605551275463989},"https://phlip9.com/notes/router/lightning router/captive portal/arubanetworks captive portal/":{"tf":2.449489742783178},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":3.3166247903554},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":5.830951894845301},"https://phlip9.com/notes/router/lightning router/lightning router overview/":{"tf":2.6457513110645907}},"df":32,"'":{"docs":{"https://phlip9.com/notes/confidential computing/gramine/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.4142135623730951},"https://phlip9.com/notes/crypto/acme protocol/":{"tf":2.23606797749979},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.0}},"df":4},"\\":{"docs":{},"df":0,"s":{"docs":{},"df":0,"r":{"docs":{},"df":0,"c":{"docs":{},"df":0,"\\":{"docs":{},"df":0,"i":{"docs":{},"df":0,"m":{"docs":{},"df":0,"p":{"docs":{},"df":0,"\\":{"docs":{},"df":0,"w":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{},"df":0,"o":{"docs":{},"df":0,"w":{"docs":{},"df":0,"s":{"docs":{},"df":0,".":{"docs":{},"df":0,"r":{"docs":{},"df":0,"s":{"docs":{},"df":0,":":{"docs":{},"df":0,"6":{"docs":{},"df":0,"7":{"docs":{},"df":0,":":{"docs":{},"df":0,"1":{"docs":{},"df":0,"8":{"docs":{"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}},"i":{"docs":{},"df":0,"p":{"docs":{},"df":0,"t":{"docs":{},"df":0,"h":{"docs":{"https://phlip9.com/notes/router/lightning router/lightning router overview/":{"tf":1.0}},"df":1}}}},"s":{"docs":{},"df":0,")":{"docs":{},"df":0,".":{"docs":{},"df":0,"[":{"docs":{},"df":0,"c":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.0}},"df":1}}}}}}},"’":{"docs":{"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.0}},"df":1}}}},"p":{"docs":{"https://phlip9.com/notes/misc/water distillation setup/":{"tf":1.0}},"df":1}},"o":{"docs":{},"df":0,"b":{"docs":{},"df":0,"b":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/android/root phone with magisk/":{"tf":1.0}},"df":1}}}},"c":{"docs":{},"df":0,"k":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":2.0},"https://phlip9.com/notes/confidential computing/intel SGX/secure time/":{"tf":2.8284271247461903}},"df":4,"_":{"docs":{},"df":0,"p":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"=":{"docs":{},"df":0,"b":{"docs":{},"df":0,"o":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"d":{"docs":{},"df":0,".":{"docs":{},"df":0,"m":{"docs":{},"df":0,"t":{"docs":{},"df":0,"x":{"docs":{},"df":0,"_":{"docs":{},"df":0,"c":{"docs":{},"df":0,"l":{"docs":{},"df":0,"k":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}},"n":{"docs":{},"df":0,"e":{"docs":{"https://phlip9.com/notes/WSL/WSL2 custom kernel/":{"tf":1.4142135623730951},"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0},"https://phlip9.com/notes/android/linux ADB udev setup/":{"tf":1.0},"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.7320508075688772},"https://phlip9.com/notes/combinatorics/k-combinations of a multiset/":{"tf":1.7320508075688772},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/gramine/":{"tf":1.4142135623730951},"https://phlip9.com/notes/devops/algo wireguard VPN server/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/ATS/Install ATS2/":{"tf":1.7320508075688772},"https://phlip9.com/notes/lang/flutter/flutter setup/":{"tf":1.0},"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":2.6457513110645907},"https://phlip9.com/notes/misc/setting up a headless raspbian boot image/":{"tf":1.4142135623730951}},"df":12}},"s":{"docs":{},"df":0,"e":{"docs":{"https://phlip9.com/notes/android/ADB over TCP inside WSL2/":{"tf":1.0},"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.4142135623730951},"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":3.7416573867739413},"https://phlip9.com/notes/btc-ln/breez lightning service providers/":{"tf":2.0},"https://phlip9.com/notes/btc-ln/lightning network notes/":{"tf":1.4142135623730951},"https://phlip9.com/notes/btc-ln/lightning rod/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.7320508075688772},"https://phlip9.com/notes/design/form design/":{"tf":1.0},"https://phlip9.com/notes/devops/secrets/1password - secrets automation/":{"tf":1.0},"https://phlip9.com/notes/devops/secrets/doppler/":{"tf":1.0},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0},"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/reproducible-builds.org/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/arubanetworks captive portal/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/CDF confidence bands - DKW inequality/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/G-test - multinomial goodness-of-fit/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/winsorize/":{"tf":1.7320508075688772}},"df":17,"_":{"docs":{},"df":0,"n":{"docs":{},"df":0,"o":{"docs":{},"df":0,"c":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"c":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.0}},"df":1}}}}}}}}},"r":{"docs":{"https://phlip9.com/notes/AI ML/Markov Decision Process (MDP)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.4142135623730951},"https://phlip9.com/notes/performance/simdjson talk/":{"tf":1.0}},"df":3}},"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"g":{"docs":{},"df":0,"_":{"docs":{},"df":0,"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"g":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":2.449489742783178}},"df":1}}}}},"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"g":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.4142135623730951}},"df":1,"e":{"docs":{},"df":0,"d":{"docs":{},"df":0,"f":{"docs":{},"df":0,"e":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"g":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}},"u":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.0},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":2.449489742783178},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0},"https://phlip9.com/notes/lang/lua/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/understanding sycamore reactivity/":{"tf":3.0}},"df":5,"e":{"docs":{},"df":0,"_":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"v":{"docs":{},"df":0,"#":{"docs":{},"df":0,"0":{"docs":{},"df":0,"}":{"docs":{},"df":0,"&":{"docs":{},"df":0,"l":{"docs":{},"df":0,"t":{"docs":{},"df":0,";":{"docs":{},"df":0,"&":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{},"df":0,"p":{"docs":{},"df":0,";":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.7320508075688772}},"df":1}}}}}}}}}}}}}}}}}}}}}}},"u":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":3.0},"https://phlip9.com/notes/confidential computing/marblerun/":{"tf":1.7320508075688772},"https://phlip9.com/notes/devops/algo wireguard VPN server/":{"tf":1.0},"https://phlip9.com/notes/devops/nomad/":{"tf":1.0},"https://phlip9.com/notes/devops/service mesh/":{"tf":1.0},"https://phlip9.com/notes/misc/optimization solvers/":{"tf":1.0},"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.4142135623730951},"https://phlip9.com/notes/postgres/postgres performance tuning/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/nix/links/":{"tf":1.0}},"df":11,".":{"docs":{},"df":0,"g":{"docs":{},"df":0,"o":{"docs":{},"df":0,"o":{"docs":{},"df":0,"g":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,".":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":1.0}},"df":1}}}}}}}}}}},"/":{"docs":{},"df":0,"k":{"docs":{},"df":0,"u":{"docs":{},"df":0,"b":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":1.0}},"df":1}}}}}}}}},"e":{"docs":{},"df":0,"c":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.4142135623730951}},"df":1}},"f":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/secure time/":{"tf":1.4142135623730951}},"df":1,"e":{"docs":{},"df":0,"'":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/secure time/":{"tf":1.0}},"df":1},"/":{"docs":{},"df":0,"c":{"docs":{},"df":0,"f":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/secure time/":{"tf":1.0}},"df":1}}}}}}}}}},"h":{"docs":{},"df":0,"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{},"df":0,"/":{"docs":{},"df":0,"n":{"docs":{},"df":0,"a":{"docs":{},"df":0,"k":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{},"df":0,"o":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{"https://phlip9.com/notes/btc-ln/lightning libs/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}},"w":{"docs":{"https://phlip9.com/notes/fuzzing/fuzzing/":{"tf":1.0}},"df":1}},"t":{"docs":{},"df":0,"v":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 11 - invoices/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/BOLT 4 - onion routing protocol/":{"tf":1.0}},"df":2,"_":{"docs":{},"df":0,"e":{"docs":{},"df":0,"x":{"docs":{},"df":0,"p":{"docs":{},"df":0,"i":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.0}},"df":1},"y":{"docs":{},"df":0,"_":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 11 - invoices/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/BOLT 7 - p2p node and channel discovery/":{"tf":1.0}},"df":2}}}}}}}}}}}}}}},"u":{"docs":{},"df":0,"b":{"docs":{"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/financial instituion/":{"tf":1.4142135623730951}},"df":1},"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/confidential computing/marblerun/":{"tf":2.23606797749979},"https://phlip9.com/notes/devops/consul/":{"tf":2.0},"https://phlip9.com/notes/devops/kind (kubernetes in docker)/":{"tf":1.0},"https://phlip9.com/notes/devops/service mesh/":{"tf":1.4142135623730951},"https://phlip9.com/notes/keyboards/moergo glove80/":{"tf":1.4142135623730951},"https://phlip9.com/notes/statistics probability/standard error/":{"tf":1.0}},"df":6}}}}}},"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"k":{"docs":{},"df":0,"e":{"docs":{},"df":0,";":{"docs":{},"df":0,"3":{"docs":{},"df":0,".":{"docs":{},"df":0,"2":{"docs":{},"df":0,"2":{"docs":{},"df":0,".":{"docs":{},"df":0,"1":{"docs":{"https://phlip9.com/notes/android/android cli setup/":{"tf":1.0}},"df":1}}}}}}}}}},"d":{"docs":{"https://phlip9.com/notes/android/root phone with magisk/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.0}},"df":2,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"e":{"docs":{"https://phlip9.com/notes/android/android cli setup/":{"tf":2.23606797749979},"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.4142135623730951}},"df":2}}}}},"p":{"docs":{},"df":0,"(":{"docs":{},"df":0,"b":{"docs":{},"df":0,"i":{"docs":{},"df":0,"g":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0}},"df":1}}}}}},"o":{"docs":{},"df":0,"t":{"docs":{},"df":0,"h":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0}},"df":1}}}}},"t":{"docs":{"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0}},"df":1}}}},"n":{"docs":{},"df":0,"=":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"l":{"docs":{},"df":0,"s":{"docs":{},"df":0,",":{"docs":{},"df":0,"o":{"docs":{},"df":0,"=":{"docs":{},"df":0,"g":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"v":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"p":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"s":{"docs":{},"df":0,",":{"docs":{},"df":0,"c":{"docs":{},"df":0,"=":{"docs":{},"df":0,"u":{"docs":{"https://phlip9.com/notes/confidential computing/gramine/":{"tf":1.4142135623730951}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"t":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/reproducible builds/nix/nix debug broken package build/":{"tf":2.8284271247461903}},"df":1}}},"o":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 4 - onion routing protocol/":{"tf":1.0},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":2,"a":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.7320508075688772}},"df":1,"r":{"docs":{},"df":0,"s":{"docs":{"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.0}},"df":1}},"s":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/management/relieve often - why generals were more successful in WWII/":{"tf":1.0}},"df":1}}},"c":{"docs":{"https://phlip9.com/notes/lang/flutter/flutter setup/":{"tf":1.4142135623730951}},"df":1,".":{"docs":{},"df":0,"n":{"docs":{},"df":0,"v":{"docs":{},"df":0,"i":{"docs":{},"df":0,"m":{"docs":{"https://phlip9.com/notes/lang/flutter/flutter setup/":{"tf":1.0}},"df":1}}}}},"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/lang/flutter/flutter setup/":{"tf":2.449489742783178}},"df":1}}}}}}},"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/lang/flutter/flutter setup/":{"tf":1.0}},"df":1}}}}}},"o":{"docs":{},"df":0,"a":{"docs":{},"df":0,"p":{"docs":{},"df":0,"o":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/ios/ios setup/":{"tf":1.7320508075688772}},"df":1}}}}}},"d":{"docs":{},"df":0,"e":{"docs":{"https://phlip9.com/notes/android/ADB over TCP inside WSL2/":{"tf":1.4142135623730951},"https://phlip9.com/notes/android/android cli setup/":{"tf":1.7320508075688772},"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0},"https://phlip9.com/notes/b l o c k c h a i n/bip158 - compact block filters/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/breez lightning service providers/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/lightning rod/":{"tf":1.0},"https://phlip9.com/notes/combinatorics/k-combinations of a multiset/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":2.6457513110645907},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":2.23606797749979},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":3.1622776601683795},"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":2.6457513110645907},"https://phlip9.com/notes/confidential computing/intel TDX/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/marblerun/":{"tf":2.449489742783178},"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":1.4142135623730951},"https://phlip9.com/notes/crypto/TLS self-signed pubkey-only certs/":{"tf":1.0},"https://phlip9.com/notes/devops/algo wireguard VPN server/":{"tf":1.0},"https://phlip9.com/notes/devops/azure CLI/":{"tf":1.0},"https://phlip9.com/notes/devops/deployment strategies/":{"tf":1.0},"https://phlip9.com/notes/devops/linkerd/":{"tf":1.0},"https://phlip9.com/notes/devops/nomad/":{"tf":1.0},"https://phlip9.com/notes/devops/service mesh/":{"tf":1.0},"https://phlip9.com/notes/keyboards/moergo glove80/":{"tf":1.0},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":2.0},"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/rr with rust/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/rust/rust verification tools/":{"tf":1.0},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":3.1622776601683795},"https://phlip9.com/notes/misc/scanning QR codes on desktop/":{"tf":1.7320508075688772},"https://phlip9.com/notes/networking/CIDR/":{"tf":1.0},"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.0},"https://phlip9.com/notes/performance/simdjson talk/":{"tf":1.4142135623730951},"https://phlip9.com/notes/reproducible builds/nix/nix debug broken package build/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/rebuilderd/":{"tf":1.4142135623730951},"https://phlip9.com/notes/reproducible builds/reproducible-builds.org/":{"tf":1.4142135623730951},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":5.5677643628300215},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":2.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":7.874007874011811}},"df":40,".":{"docs":{},"df":0,"p":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":2.6457513110645907}},"df":1}}},"b":{"docs":{},"df":0,"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"c":{"docs":{},"df":0,"k":{"docs":{"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0}},"df":1}}}}},"g":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.0}},"df":2}}},"n":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0}},"df":1}}}}},"e":{"docs":{},"df":0,"f":{"docs":{},"df":0,"f":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.0}},"df":1}}}}}},"f":{"docs":{},"df":0,"f":{"docs":{},"df":0,"e":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0}},"df":1}}},"i":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/statistics probability/testing whether a coin is fair/":{"tf":1.7320508075688772}},"df":1}},"l":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0}},"df":1},"e":{"docs":{},"df":0,"m":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"k":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/reproducible builds/nix/links/":{"tf":1.0}},"df":1}}}}}}},"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"b":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.4142135623730951},"https://phlip9.com/notes/reproducible builds/reproducible-builds.org/":{"tf":1.0}},"df":2}}}},"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"g":{"docs":{},"df":0,"u":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/fastpay/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/BOLT 4 - onion routing protocol/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/reproducible-builds.org/":{"tf":1.0}},"df":3,"e":{"docs":{},"df":0,"'":{"docs":{"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.0}},"df":1}}}}},"c":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.4142135623730951},"https://phlip9.com/notes/devops/secrets/ejson-kms (AWS)/":{"tf":1.0},"https://phlip9.com/notes/devops/service mesh/":{"tf":1.0},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0},"https://phlip9.com/notes/lang/operator fixity and precedence/":{"tf":1.0},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0},"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.0},"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.0},"https://phlip9.com/notes/performance/profiling/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.0}},"df":11,":":{"docs":{},"df":0,":":{"docs":{},"df":0,"&":{"docs":{},"df":0,"l":{"docs":{},"df":0,"t":{"docs":{},"df":0,";":{"docs":{},"df":0,"v":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"&":{"docs":{},"df":0,"l":{"docs":{},"df":0,"t":{"docs":{},"df":0,";":{"docs":{},"df":0,"_":{"docs":{},"df":0,"&":{"docs":{},"df":0,"g":{"docs":{},"df":0,"t":{"docs":{},"df":0,";":{"docs":{},"df":0,"&":{"docs":{},"df":0,"g":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}},"o":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/lang/lua/":{"tf":1.0}},"df":1},"r":{"docs":{"https://phlip9.com/notes/design/form design/":{"tf":1.7320508075688772},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.4142135623730951},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":3.1622776601683795}},"df":3,"=":{"docs":{},"df":0,"0":{"docs":{},"df":0,"x":{"docs":{},"df":0,"1":{"docs":{},"df":0,"1":{"docs":{},"df":0,"3":{"docs":{},"df":0,"3":{"docs":{},"df":0,"1":{"docs":{},"df":0,"1":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1}}}}}}}}},"_":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{},"df":0,"x":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.4142135623730951}},"df":1}},"n":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"x":{"docs":{},"df":0,"=":{"docs":{},"df":0,"0":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1},"1":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1}}}}}}}},"s":{"docs":{},"df":0,".":{"docs":{},"df":0,"b":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"k":{"docs":{"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0}},"df":1}}}}}}},"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"s":{"docs":{},"df":0,"c":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1,"(":{"docs":{},"df":0,"s":{"docs":{},"df":0,"c":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}},"u":{"docs":{},"df":0,"m":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0},"https://phlip9.com/notes/postgres/snippets/":{"tf":1.0},"https://phlip9.com/notes/postgres/types of scans/":{"tf":1.0}},"df":3}}}},"m":{"docs":{"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/gramine/":{"tf":1.0},"https://phlip9.com/notes/devops/azure CLI/":{"tf":1.0}},"df":3,"b":{"docs":{"https://phlip9.com/notes/combinatorics/k-combinations of a multiset/":{"tf":2.0}},"df":1,"i":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/combinatorics/k-combinations of a multiset/":{"tf":4.795831523312719},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/secure time/":{"tf":1.0},"https://phlip9.com/notes/fuzzing/fuzzcheck-rs/":{"tf":1.0},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0},"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.0},"https://phlip9.com/notes/performance/bit hacks/":{"tf":2.0},"https://phlip9.com/notes/statistics probability/testing whether a coin is fair/":{"tf":1.0}},"df":8,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/combinatorics/":{"tf":1.0},"https://phlip9.com/notes/combinatorics/k-combinations of a multiset/":{"tf":1.0}},"df":2,"i":{"docs":{"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.0},"https://phlip9.com/notes/misc/optimization solvers/":{"tf":1.0}},"df":2}}}}}}}},"e":{"docs":{"https://phlip9.com/notes/btc-ln/atomic multipath payments (AMP)/":{"tf":1.0},"https://phlip9.com/notes/combinatorics/k-combinations of a multiset/":{"tf":1.7320508075688772},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0},"https://phlip9.com/notes/design/form design/":{"tf":1.0},"https://phlip9.com/notes/keyboards/moergo glove80/":{"tf":1.0},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/operator fixity and precedence/":{"tf":2.0},"https://phlip9.com/notes/misc/kintsugi/":{"tf":1.4142135623730951},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0},"https://phlip9.com/notes/networking/network interface card (NIC)/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/nix/nix debug spurrious rebuilds/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/reproducible-builds.org/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":2.0}},"df":14},"f":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/management/relieve often - why generals were more successful in WWII/":{"tf":1.0}},"df":1}}}},"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/fastpay/":{"tf":1.7320508075688772}},"df":1}}}},"m":{"docs":{"https://phlip9.com/notes/lang/rust/sycamore x futures/":{"tf":1.4142135623730951}},"df":1,"a":{"docs":{"https://phlip9.com/notes/WSL/WSL2 custom kernel/":{"tf":1.0}},"df":1,"n":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/android/android cli setup/":{"tf":1.0},"https://phlip9.com/notes/android/root phone with magisk/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/gramine/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":1.0},"https://phlip9.com/notes/design/form design/":{"tf":1.0},"https://phlip9.com/notes/devops/docker compose/":{"tf":1.0},"https://phlip9.com/notes/devops/minikube/":{"tf":1.0},"https://phlip9.com/notes/fuzzing/fuzzcheck-rs/":{"tf":1.0},"https://phlip9.com/notes/lang/gdb ref/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/rr with rust/":{"tf":1.7320508075688772},"https://phlip9.com/notes/management/relieve often - why generals were more successful in WWII/":{"tf":2.0},"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":1.7320508075688772},"https://phlip9.com/notes/misc/setting up a headless raspbian boot image/":{"tf":1.0},"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":2.449489742783178},"https://phlip9.com/notes/reproducible builds/nix/nix auto-allocate-uids -> nixbld users/":{"tf":1.4142135623730951},"https://phlip9.com/notes/reproducible builds/nix/nix debug broken package build/":{"tf":2.0}},"df":19,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"o":{"docs":{},"df":0,"l":{"docs":{},"df":0,"s":{"docs":{},"df":0,".":{"docs":{},"df":0,"z":{"docs":{},"df":0,"i":{"docs":{},"df":0,"p":{"docs":{"https://phlip9.com/notes/android/android cli setup/":{"tf":2.6457513110645907}},"df":1}}}}}}}}}}}}},"s":{"docs":{},"df":0,".":{"docs":{},"df":0,"h":{"docs":{},"df":0,"t":{"docs":{},"df":0,"m":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/lang/gdb ref/":{"tf":1.0}},"df":1}}}}}}}}},"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/btc-ln/lightning network notes/":{"tf":1.0},"https://phlip9.com/notes/lang/lua/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.0},"https://phlip9.com/notes/misc/kintsugi/":{"tf":1.0},"https://phlip9.com/notes/nvim/universal-ctags Notes/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/nix/nix auto-allocate-uids -> nixbld users/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.4142135623730951}},"df":8}},"r":{"docs":{"https://phlip9.com/notes/misc/optimization solvers/":{"tf":1.0}},"df":1,"c":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/money services business (MSB)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.7320508075688772}},"df":2}}}},"i":{"docs":{},"df":0,"s":{"docs":{"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/financial instituion/":{"tf":1.0}},"df":1},"t":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/bip158 - compact block filters/":{"tf":1.0},"https://phlip9.com/notes/b l o c k c h a i n/btc utreexo - utxo accumulator/":{"tf":2.23606797749979},"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":2.8284271247461903},"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.4142135623730951},"https://phlip9.com/notes/crypto/(talk) authenticated data structures for stateless validation/":{"tf":1.0},"https://phlip9.com/notes/devops/nomad/":{"tf":1.4142135623730951},"https://phlip9.com/notes/devops/secrets/ejson (Shopify)/":{"tf":1.0},"https://phlip9.com/notes/distributed systems/papers/(2021) Leaderless Consensus/":{"tf":1.4142135623730951},"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":6.0},"https://phlip9.com/notes/postgres/snippets/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.0}},"df":11,"&":{"docs":{},"df":0,"g":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":1.0}},"df":1}}},"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"_":{"docs":{},"df":0,"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"g":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.7320508075688772}},"df":1}}}}}}}}},"t":{"docs":{},"df":0,"e":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/fastpay/":{"tf":4.242640687119285}},"df":1}}}},"o":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/financial instituion/":{"tf":1.0},"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/foreign bank account report (FBAR)/":{"tf":1.0}},"df":2},"n":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0},"https://phlip9.com/notes/combinatorics/k-combinations of a multiset/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/gramine/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":1.0},"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":1.0},"https://phlip9.com/notes/devops/service mesh/":{"tf":1.4142135623730951},"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":1.0},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0},"https://phlip9.com/notes/lang/operator fixity and precedence/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/rust verification tools/":{"tf":1.0},"https://phlip9.com/notes/postgres/types of scans/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.7320508075688772},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":2.449489742783178},"https://phlip9.com/notes/statistics probability/standard error/":{"tf":1.0}},"df":18,".":{"docs":{},"df":0,"n":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"p":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0}},"df":1}}}}}}}}},"/":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"c":{"docs":{},"df":0,"/":{"docs":{},"df":0,"s":{"docs":{},"df":0,"g":{"docs":{},"df":0,"x":{"docs":{},"df":0,"_":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"b":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,".":{"docs":{},"df":0,"h":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}},"l":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":2.0}},"df":3}},"p":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{"https://phlip9.com/notes/management/relieve often - why generals were more successful in WWII/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.0}},"df":2}}}}}},"u":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/foreign bank account report (FBAR)/":{"tf":1.0},"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/money services business (MSB)/":{"tf":1.0},"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.7320508075688772},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.7320508075688772},"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel SGX/secure time/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/marblerun/":{"tf":2.0},"https://phlip9.com/notes/crypto/(talk) authenticated data structures for stateless validation/":{"tf":1.0},"https://phlip9.com/notes/devops/consul/":{"tf":1.4142135623730951},"https://phlip9.com/notes/devops/linkerd/":{"tf":1.0},"https://phlip9.com/notes/devops/secrets/envkey/":{"tf":1.0},"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":2.0},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/sycamore x futures/":{"tf":1.0},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0},"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/reproducible-builds.org/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/router/lightning router/captive portal/arubanetworks captive portal/":{"tf":1.7320508075688772},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":2.0}},"df":23}}},"p":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.4142135623730951}},"df":1,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/bip158 - compact block filters/":{"tf":2.0},"https://phlip9.com/notes/btc-ln/BOLT 4 - onion routing protocol/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/BOLT 7 - p2p node and channel discovery/":{"tf":1.0},"https://phlip9.com/notes/combinatorics/k-combinations of a multiset/":{"tf":1.0},"https://phlip9.com/notes/networking/CIDR/":{"tf":1.0},"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.4142135623730951}},"df":6,"l":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0}},"df":1}}}},"n":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/financial instituion/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.0}},"df":2},"y":{"docs":{},"df":0,"’":{"docs":{"https://phlip9.com/notes/devops/secrets/1password - secrets automation/":{"tf":1.0}},"df":1}}},"r":{"docs":{"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.4142135623730951},"https://phlip9.com/notes/devops/k3s/":{"tf":1.0},"https://phlip9.com/notes/lang/operator fixity and precedence/":{"tf":1.0},"https://phlip9.com/notes/misc/kintsugi/":{"tf":1.0},"https://phlip9.com/notes/networking/ipv6 address space/":{"tf":1.0},"https://phlip9.com/notes/postgres/postgres performance tuning/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/rebuilderd/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/G-test - multinomial goodness-of-fit/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/multinomial distribution/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/testing whether a coin is fair/":{"tf":1.0}},"df":14,"a":{"docs":{},"df":0,"b":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"&":{"docs":{},"df":0,"l":{"docs":{},"df":0,"t":{"docs":{},"df":0,";":{"docs":{},"df":0,"t":{"docs":{},"df":0,"&":{"docs":{},"df":0,"g":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0}},"df":1}}}},"x":{"docs":{},"df":0,"&":{"docs":{},"df":0,"g":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0}},"df":1}}}}}}}}}}}},"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.0},"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.0}},"df":2}}}}},"t":{"docs":{"https://phlip9.com/notes/confidential computing/marblerun/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/mystikos/":{"tf":1.0},"https://phlip9.com/notes/devops/deployment strategies/":{"tf":1.7320508075688772},"https://phlip9.com/notes/lang/rust/sycamore x futures/":{"tf":1.0},"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.0}},"df":5}},"e":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/btc-ln/atomic multipath payments (AMP)/":{"tf":1.0}},"df":1,"i":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/AI ML/Expectimax Search/":{"tf":1.0},"https://phlip9.com/notes/misc/optimization solvers/":{"tf":1.0}},"df":2}}}},"i":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/WSL/WSL2 custom kernel/":{"tf":1.0},"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.7320508075688772},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":2.6457513110645907},"https://phlip9.com/notes/confidential computing/gramine/":{"tf":1.0},"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":1.0},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":2.6457513110645907},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.7320508075688772},"https://phlip9.com/notes/lang/lua/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.7320508075688772},"https://phlip9.com/notes/misc/prepping RPI for embedded dev/":{"tf":1.0},"https://phlip9.com/notes/performance/simdjson talk/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/nix/links/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/rebuilderd/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/reproducible-builds.org/":{"tf":1.4142135623730951}},"df":15,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"'":{"docs":{"https://phlip9.com/notes/lang/rust/rust verification tools/":{"tf":1.0}},"df":1}}}}},"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{"https://phlip9.com/notes/management/relieve often - why generals were more successful in WWII/":{"tf":1.0}},"df":1},"i":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.4142135623730951}},"df":1}}},"e":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/AI ML/Markov Decision Process (MDP)/":{"tf":1.7320508075688772},"https://phlip9.com/notes/android/OTA updates for rooted android phone/":{"tf":1.4142135623730951},"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0},"https://phlip9.com/notes/android/root phone with magisk/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/atomic multipath payments (AMP)/":{"tf":1.7320508075688772},"https://phlip9.com/notes/combinatorics/k-combinations of a multiset/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.7320508075688772},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel SGX/secure time/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":1.4142135623730951},"https://phlip9.com/notes/crypto/(talk) authenticated data structures for stateless validation/":{"tf":1.7320508075688772},"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":1.4142135623730951},"https://phlip9.com/notes/fuzzing/fuzzcheck-rs/":{"tf":1.0},"https://phlip9.com/notes/management/relieve often - why generals were more successful in WWII/":{"tf":1.0},"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":1.0},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0},"https://phlip9.com/notes/networking/network interface card (NIC)/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.4142135623730951}},"df":19},"x":{"docs":{"https://phlip9.com/notes/btc-ln/breez lightning service providers/":{"tf":2.0},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.0},"https://phlip9.com/notes/devops/deployment strategies/":{"tf":1.0},"https://phlip9.com/notes/devops/docker compose/":{"tf":1.0},"https://phlip9.com/notes/devops/service mesh/":{"tf":1.4142135623730951},"https://phlip9.com/notes/fuzzing/fuzzcheck-rs/":{"tf":1.0},"https://phlip9.com/notes/lang/lua/":{"tf":3.0}},"df":8,".":{"docs":{},"df":0,"_":{"docs":{},"df":0,"_":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"x":{"docs":{"https://phlip9.com/notes/lang/lua/":{"tf":1.0}},"df":1}}}}}}},"a":{"docs":{},"df":0,"d":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/lang/lua/":{"tf":1.0}},"df":1,"(":{"docs":{},"df":0,"c":{"docs":{},"df":0,"1":{"docs":{"https://phlip9.com/notes/lang/lua/":{"tf":1.4142135623730951}},"df":1}}}}}},"e":{"docs":{},"df":0,"q":{"docs":{"https://phlip9.com/notes/lang/lua/":{"tf":1.0}},"df":1,"(":{"docs":{},"df":0,"c":{"docs":{},"df":0,"1":{"docs":{"https://phlip9.com/notes/lang/lua/":{"tf":1.0}},"df":1}}}}},"i":{"docs":{"https://phlip9.com/notes/lang/lua/":{"tf":1.4142135623730951}},"df":1,"s":{"docs":{},"df":0,"_":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"p":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"x":{"docs":{},"df":0,"(":{"docs":{},"df":0,"c":{"docs":{"https://phlip9.com/notes/lang/lua/":{"tf":1.0}},"df":1}}}}}}}}}}}},"l":{"docs":{},"df":0,"u":{"docs":{},"df":0,"a":{"docs":{"https://phlip9.com/notes/lang/lua/":{"tf":1.4142135623730951}},"df":1}}},"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"w":{"docs":{},"df":0,"(":{"docs":{},"df":0,"0":{"docs":{"https://phlip9.com/notes/lang/lua/":{"tf":1.4142135623730951}},"df":1},"c":{"docs":{},"df":0,"1":{"docs":{},"df":0,".":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/lang/lua/":{"tf":1.4142135623730951}},"df":1}}}},"r":{"docs":{"https://phlip9.com/notes/lang/lua/":{"tf":1.4142135623730951}},"df":1}}}},"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"m":{"docs":{"https://phlip9.com/notes/lang/lua/":{"tf":1.0}},"df":1,"(":{"docs":{},"df":0,"c":{"docs":{"https://phlip9.com/notes/lang/lua/":{"tf":1.0}},"df":1}}}}}},"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/lang/lua/":{"tf":1.0}},"df":1,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"g":{"docs":{},"df":0,"(":{"docs":{},"df":0,"c":{"docs":{"https://phlip9.com/notes/lang/lua/":{"tf":1.4142135623730951}},"df":1}}}}}}}}}}},":":{"docs":{},"df":0,"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"w":{"docs":{},"df":0,"(":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/lang/lua/":{"tf":1.0}},"df":1}}}},"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"m":{"docs":{"https://phlip9.com/notes/lang/lua/":{"tf":1.0}},"df":1}}}}}}},"i":{"docs":{},"df":0,"c":{"docs":{"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":1.0}},"df":3}}},"o":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":3.3166247903554},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":2.23606797749979},"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.4142135623730951},"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.7320508075688772},"https://phlip9.com/notes/lang/rust/sycamore x futures/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/rust/understanding sycamore reactivity/":{"tf":1.7320508075688772},"https://phlip9.com/notes/misc/kintsugi/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.4142135623730951}},"df":13,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"/":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"c":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"v":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0}},"df":1}}}}}}}}}}},"s":{"docs":{"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.0},"https://phlip9.com/notes/devops/docker compose/":{"tf":2.23606797749979},"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":1.0},"https://phlip9.com/notes/fuzzing/fuzzcheck-rs/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/koka-lang/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.0}},"df":7,"i":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":1.0}},"df":1}}}},"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"h":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"s":{"docs":{"https://phlip9.com/notes/crypto/zkdocs/":{"tf":1.0},"https://phlip9.com/notes/misc/optimization solvers/":{"tf":1.0}},"df":2}}}},"s":{"docs":{},"df":0,"s":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/btc utreexo - utxo accumulator/":{"tf":1.0}},"df":1}}},"i":{"docs":{},"df":0,"s":{"docs":{"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.0},"https://phlip9.com/notes/devops/service mesh/":{"tf":1.0}},"df":2}},"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{"https://phlip9.com/notes/btc-ln/breez lightning service providers/":{"tf":1.4142135623730951},"https://phlip9.com/notes/crypto/(talk) authenticated data structures for stateless validation/":{"tf":1.0},"https://phlip9.com/notes/crypto/acme protocol/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/rebuilderd/":{"tf":1.4142135623730951},"https://phlip9.com/notes/reproducible builds/reproducible-builds.org/":{"tf":1.7320508075688772}},"df":5}}}}},"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"m":{"docs":{"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0}},"df":1}}},"u":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/BOLT 4 - onion routing protocol/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/lightning libs/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.7320508075688772},"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/marblerun/":{"tf":1.0},"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":2.6457513110645907},"https://phlip9.com/notes/devops/nomad/":{"tf":1.0},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0},"https://phlip9.com/notes/lang/operator fixity and precedence/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/rust x SGX/":{"tf":1.0},"https://phlip9.com/notes/networking/ipv6 address space/":{"tf":1.0},"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.0},"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.0},"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/reproducible-builds.org/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/G-test - multinomial goodness-of-fit/":{"tf":1.4142135623730951},"https://phlip9.com/notes/statistics probability/multinomial distribution/":{"tf":1.4142135623730951},"https://phlip9.com/notes/statistics probability/standard error/":{"tf":1.4142135623730951},"https://phlip9.com/notes/statistics probability/testing whether a coin is fair/":{"tf":1.4142135623730951}},"df":26,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/combinatorics/k-combinations of a multiset/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/multinomial distribution/":{"tf":1.4142135623730951}},"df":2}}}}},"e":{"docs":{},"df":0,"e":{"docs":{},"df":0,"x":{"docs":{},"df":0,"p":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"s":{"docs":{"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0}},"df":1}}}}}}},"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"g":{"docs":{},"df":0,"/":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/":{"tf":1.0}},"df":1}}}}}}}}}}}}},"n":{"docs":{"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0},"https://phlip9.com/notes/devops/deployment strategies/":{"tf":2.23606797749979},"https://phlip9.com/notes/devops/service mesh/":{"tf":1.0},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/CDF confidence bands - DKW inequality/":{"tf":1.0}},"df":6,"c":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/lang/lua/":{"tf":1.4142135623730951}},"df":1,"i":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/lang/operator fixity and precedence/":{"tf":1.0}},"df":1}}}},"e":{"docs":{},"df":0,"p":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/marblerun/":{"tf":1.0}},"df":2}},"r":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/reproducible builds/reproducible-builds.org/":{"tf":1.0}},"df":1}}},"i":{"docs":{},"df":0,"s":{"docs":{"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.0}},"df":1}},"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.4142135623730951}},"df":1}}},"u":{"docs":{},"df":0,"r":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0},"https://phlip9.com/notes/devops/deployment strategies/":{"tf":1.4142135623730951},"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/rust/rr with rust/":{"tf":1.4142135623730951}},"df":4}}}},"d":{"docs":{"https://phlip9.com/notes/postgres/types of scans/":{"tf":1.0}},"df":1,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"s":{"docs":{"https://phlip9.com/notes/misc/water distillation setup/":{"tf":1.4142135623730951},"https://phlip9.com/notes/performance/simdjson talk/":{"tf":1.0}},"df":2}}},"i":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/devops/deployment strategies/":{"tf":1.0},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":2.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":2.8284271247461903},"https://phlip9.com/notes/statistics probability/p-value/":{"tf":1.4142135623730951}},"df":7}}},"f":{"docs":{"https://phlip9.com/notes/btc-ln/submarine swaps/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/zero-conf channels/":{"tf":3.0}},"df":2,"i":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/crypto/(talk) authenticated data structures for stateless validation/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/rebuilderd/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/CDF confidence bands - DKW inequality/":{"tf":2.23606797749979},"https://phlip9.com/notes/statistics probability/multinomial distribution/":{"tf":1.7320508075688772},"https://phlip9.com/notes/statistics probability/testing whether a coin is fair/":{"tf":2.8284271247461903}},"df":5,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/confidential computing/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":2.23606797749979},"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/marblerun/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":1.0}},"df":8}}}}},"g":{"docs":{"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0},"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":2.0},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/gramine/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":1.4142135623730951},"https://phlip9.com/notes/devops/secrets/envkey/":{"tf":1.7320508075688772},"https://phlip9.com/notes/lang/flutter/flutter setup/":{"tf":1.0},"https://phlip9.com/notes/misc/pop_OS! tweaks/":{"tf":1.0},"https://phlip9.com/notes/misc/prepping RPI for embedded dev/":{"tf":1.4142135623730951},"https://phlip9.com/notes/misc/setting up a headless raspbian boot image/":{"tf":1.0},"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/nix/links/":{"tf":1.7320508075688772}},"df":12,"'":{"docs":{"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":1.0}},"df":1},".":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"_":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"b":{"docs":{},"df":0,"u":{"docs":{},"df":0,"g":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0}},"df":1}}}}}}}}},"/":{"docs":{},"df":0,"g":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/confidential computing/gramine/":{"tf":1.4142135623730951}},"df":1,"e":{"docs":{},"df":0,"/":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"c":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"v":{"docs":{"https://phlip9.com/notes/confidential computing/gramine/":{"tf":1.7320508075688772}},"df":1}}}}}}}}}}}}}},"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{},"df":0,"u":{"docs":{},"df":0,"p":{"docs":{"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0}},"df":1}}}},"w":{"docs":{"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0}},"df":1}}},"s":{"docs":{},"df":0,"/":{"docs":{},"df":0,"1":{"docs":{},"df":0,"7":{"docs":{},"df":0,"8":{"docs":{},"df":0,".":{"docs":{},"df":0,"1":{"docs":{},"df":0,"2":{"docs":{},"df":0,"8":{"docs":{},"df":0,".":{"docs":{},"df":0,"1":{"docs":{},"df":0,".":{"docs":{},"df":0,"1":{"docs":{},"df":0,"9":{"docs":{},"df":0,"0":{"docs":{},"df":0,"/":{"docs":{},"df":0,"s":{"docs":{},"df":0,"s":{"docs":{},"df":0,"h":{"docs":{},"df":0,"_":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"f":{"docs":{},"df":0,"i":{"docs":{},"df":0,"g":{"docs":{"https://phlip9.com/notes/devops/algo wireguard VPN server/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}},"u":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0},"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.7320508075688772},"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.4142135623730951},"https://phlip9.com/notes/btc-ln/breez lightning service providers/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":2.8284271247461903},"https://phlip9.com/notes/confidential computing/gramine/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.7320508075688772},"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":2.0},"https://phlip9.com/notes/devops/azure CLI/":{"tf":2.0},"https://phlip9.com/notes/devops/consul/":{"tf":1.4142135623730951},"https://phlip9.com/notes/devops/secrets/ejson (Shopify)/":{"tf":1.0},"https://phlip9.com/notes/devops/service mesh/":{"tf":1.4142135623730951},"https://phlip9.com/notes/keyboards/moergo glove80/":{"tf":1.0},"https://phlip9.com/notes/lang/ATS/Install ATS2/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/rust verification tools/":{"tf":1.0},"https://phlip9.com/notes/misc/pop_OS! tweaks/":{"tf":1.0},"https://phlip9.com/notes/misc/prepping RPI for embedded dev/":{"tf":1.0},"https://phlip9.com/notes/misc/setting up a headless raspbian boot image/":{"tf":1.4142135623730951},"https://phlip9.com/notes/networking/ipv6 address space/":{"tf":1.0},"https://phlip9.com/notes/networking/network interface card (NIC)/":{"tf":1.0},"https://phlip9.com/notes/networking/network interfaces/":{"tf":4.0},"https://phlip9.com/notes/postgres/postgres performance tuning/":{"tf":1.4142135623730951},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/arubanetworks captive portal/":{"tf":1.7320508075688772},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.7320508075688772}},"df":29}}},"r":{"docs":{},"df":0,"m":{"docs":{"https://phlip9.com/notes/WSL/WSL2 custom kernel/":{"tf":1.4142135623730951},"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":3.4641016151377544},"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0},"https://phlip9.com/notes/devops/azure CLI/":{"tf":1.0},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/reproducible-builds.org/":{"tf":1.0}},"df":9}}},"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/postgres/snippets/":{"tf":2.23606797749979},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":2.0}},"df":3}}}},"u":{"docs":{},"df":0,"s":{"docs":{"https://phlip9.com/notes/networking/CIDR/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":2.0}},"df":3}}},"j":{"docs":{},"df":0,"u":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/foreign bank account report (FBAR)/":{"tf":1.0}},"df":1}}}},"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/android/ADB over TCP inside WSL2/":{"tf":2.449489742783178},"https://phlip9.com/notes/android/android cli setup/":{"tf":2.449489742783178},"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.7320508075688772},"https://phlip9.com/notes/android/linux ADB udev setup/":{"tf":1.0},"https://phlip9.com/notes/b l o c k c h a i n/fastpay/":{"tf":1.0},"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":2.449489742783178},"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":2.0},"https://phlip9.com/notes/btc-ln/BOLT 7 - p2p node and channel discovery/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/BOLT 8 - secure noise transport/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/breez lightning service providers/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/lightning rod/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/gramine/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/secure time/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/marblerun/":{"tf":1.7320508075688772},"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":2.449489742783178},"https://phlip9.com/notes/crypto/dex - open-source OIDC & OAuth 2.0 provider/":{"tf":1.0},"https://phlip9.com/notes/crypto/tls exported keying material/":{"tf":1.7320508075688772},"https://phlip9.com/notes/devops/consul/":{"tf":1.4142135623730951},"https://phlip9.com/notes/devops/docker compose/":{"tf":1.0},"https://phlip9.com/notes/devops/secrets/1password - secrets automation/":{"tf":1.0},"https://phlip9.com/notes/devops/service mesh/":{"tf":1.4142135623730951},"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":1.4142135623730951},"https://phlip9.com/notes/ios/ios setup/":{"tf":1.0},"https://phlip9.com/notes/lang/flutter/flutter setup/":{"tf":1.4142135623730951},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":2.0},"https://phlip9.com/notes/misc/setting up a headless raspbian boot image/":{"tf":1.0},"https://phlip9.com/notes/networking/ipv6 address space/":{"tf":1.0},"https://phlip9.com/notes/networking/network interface card (NIC)/":{"tf":1.7320508075688772},"https://phlip9.com/notes/networking/network interfaces/":{"tf":2.449489742783178},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":2.0},"https://phlip9.com/notes/router/lightning router/captive portal/arubanetworks captive portal/":{"tf":2.449489742783178},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":3.3166247903554},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":3.1622776601683795},"https://phlip9.com/notes/router/lightning router/lightning router overview/":{"tf":1.0}},"df":36,":":{"docs":{},"df":0,"1":{"docs":{},"df":0,"9":{"docs":{},"df":0,"2":{"docs":{},"df":0,".":{"docs":{},"df":0,"1":{"docs":{},"df":0,"6":{"docs":{},"df":0,"8":{"docs":{},"df":0,".":{"docs":{},"df":0,"2":{"docs":{},"df":0,".":{"docs":{},"df":0,"2":{"docs":{},"df":0,"4":{"docs":{},"df":0,"2":{"docs":{},"df":0,":":{"docs":{},"df":0,"3":{"docs":{},"df":0,"8":{"docs":{},"df":0,"6":{"docs":{},"df":0,"5":{"docs":{},"df":0,"4":{"docs":{},"df":0,",":{"docs":{},"df":0,"n":{"docs":{},"df":0,"o":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"y":{"docs":{"https://phlip9.com/notes/android/ADB over TCP inside WSL2/":{"tf":1.0}},"df":1}}}}}}}}}}}}},"4":{"docs":{},"df":0,"3":{"docs":{},"df":0,"1":{"docs":{},"df":0,"4":{"docs":{},"df":0,"8":{"docs":{},"df":0,",":{"docs":{},"df":0,"n":{"docs":{},"df":0,"o":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"y":{"docs":{"https://phlip9.com/notes/android/ADB over TCP inside WSL2/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}},"o":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/crypto/dex - open-source OIDC & OAuth 2.0 provider/":{"tf":1.4142135623730951}},"df":1,"/":{"docs":{},"df":0,"d":{"docs":{},"df":0,"p":{"docs":{},"df":0,"/":{"docs":{},"df":0,"b":{"docs":{},"df":0,"0":{"docs":{},"df":0,"8":{"docs":{},"df":0,"k":{"docs":{},"df":0,"2":{"docs":{},"df":0,"s":{"docs":{},"df":0,"9":{"docs":{},"df":0,"1":{"docs":{},"df":0,"x":{"docs":{},"df":0,"9":{"docs":{"https://phlip9.com/notes/misc/water distillation setup/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}},"s":{"docs":{},"df":0,"_":{"docs":{},"df":0,"v":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0}},"df":1,"(":{"docs":{},"df":0,"_":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0}},"df":1},"x":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":2.23606797749979}},"df":1}}}}},"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"s":{"docs":{},"df":0,"u":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/btc utreexo - utxo accumulator/":{"tf":1.0},"https://phlip9.com/notes/b l o c k c h a i n/fastpay/":{"tf":1.4142135623730951},"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/BOLT 8 - secure noise transport/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/breez lightning service providers/":{"tf":1.0},"https://phlip9.com/notes/distributed systems/papers/(2021) Leaderless Consensus/":{"tf":1.4142135623730951},"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":1.4142135623730951},"https://phlip9.com/notes/reproducible builds/reproducible-builds.org/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.4142135623730951}},"df":10}}},"q":{"docs":{},"df":0,"u":{"docs":{"https://phlip9.com/notes/lang/operator fixity and precedence/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/testing whether a coin is fair/":{"tf":1.0}},"df":3}}},"i":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/AI ML/Expectimax Search/":{"tf":1.0},"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/financial instituion/":{"tf":1.0},"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/money services business (MSB)/":{"tf":1.7320508075688772},"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/marblerun/":{"tf":1.4142135623730951},"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":1.0},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.7320508075688772},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0},"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/testing whether a coin is fair/":{"tf":1.0}},"df":12,"e":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":2.0}},"df":2}}},"s":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/fastpay/":{"tf":1.7320508075688772},"https://phlip9.com/notes/btc-ln/BOLT 4 - onion routing protocol/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/breez lightning service providers/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel TDX/":{"tf":1.0},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0}},"df":6}}},"t":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.7320508075688772},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":4.69041575982343},"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":4.123105625617661},"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":4.358898943540674},"https://phlip9.com/notes/performance/bit hacks/":{"tf":2.0},"https://phlip9.com/notes/statistics probability/G-test - multinomial goodness-of-fit/":{"tf":1.0}},"df":7,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0},"https://phlip9.com/notes/combinatorics/k-combinations of a multiset/":{"tf":1.0},"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":1.7320508075688772},"https://phlip9.com/notes/lang/operator fixity and precedence/":{"tf":1.0},"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/CDF confidence bands - DKW inequality/":{"tf":1.0}},"df":6}}},"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/devops/k3s/":{"tf":1.0}},"df":1}}},"u":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 4 - onion routing protocol/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/atomic multipath payments (AMP)/":{"tf":2.0},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0},"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.4142135623730951},"https://phlip9.com/notes/statistics probability/multinomial distribution/":{"tf":1.0}},"df":8,"o":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.7320508075688772}},"df":2}}}}}}},"u":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/confidential computing/marblerun/":{"tf":1.0},"https://phlip9.com/notes/devops/consul/":{"tf":3.0}},"df":2,"t":{"docs":{},"df":0,".":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"/":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"/":{"docs":{},"df":0,"b":{"docs":{},"df":0,"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"g":{"docs":{},"df":0,"/":{"docs":{},"df":0,"2":{"docs":{},"df":0,"0":{"docs":{},"df":0,"1":{"docs":{},"df":0,"7":{"docs":{},"df":0,"/":{"docs":{},"df":0,"1":{"docs":{},"df":0,"1":{"docs":{},"df":0,"/":{"docs":{},"df":0,"t":{"docs":{},"df":0,"h":{"docs":{"https://phlip9.com/notes/fuzzing/fuzzing/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}},"m":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/bip158 - compact block filters/":{"tf":1.0},"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0},"https://phlip9.com/notes/crypto/acme protocol/":{"tf":1.0},"https://phlip9.com/notes/devops/nomad/":{"tf":1.0},"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":1.0},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0},"https://phlip9.com/notes/networking/network interface card (NIC)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/postgres/postgres performance tuning/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.4142135623730951}},"df":14,"p":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.0}},"df":1}}}}},"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/crypto/acme protocol/":{"tf":1.4142135623730951},"https://phlip9.com/notes/misc/kintsugi/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.4142135623730951}},"df":3}},"i":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/AI ML/Markov Decision Process (MDP)/":{"tf":1.0},"https://phlip9.com/notes/android/android cli setup/":{"tf":1.4142135623730951},"https://phlip9.com/notes/b l o c k c h a i n/btc utreexo - utxo accumulator/":{"tf":1.0},"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.4142135623730951},"https://phlip9.com/notes/btc-ln/lightning network notes/":{"tf":1.0},"https://phlip9.com/notes/combinatorics/k-combinations of a multiset/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":2.449489742783178},"https://phlip9.com/notes/confidential computing/gramine/":{"tf":3.1622776601683795},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":2.449489742783178},"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.7320508075688772},"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel TDX/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/marblerun/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":1.0},"https://phlip9.com/notes/crypto/acme protocol/":{"tf":2.0},"https://phlip9.com/notes/crypto/biscuit authz/":{"tf":1.4142135623730951},"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":1.0},"https://phlip9.com/notes/devops/azure CLI/":{"tf":1.0},"https://phlip9.com/notes/devops/docker compose/":{"tf":1.4142135623730951},"https://phlip9.com/notes/devops/kind (kubernetes in docker)/":{"tf":1.0},"https://phlip9.com/notes/devops/nomad/":{"tf":2.23606797749979},"https://phlip9.com/notes/devops/service mesh/":{"tf":1.0},"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":1.0},"https://phlip9.com/notes/ios/ios setup/":{"tf":1.0},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":2.0},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/flutter/flutter setup/":{"tf":1.0},"https://phlip9.com/notes/lang/operator fixity and precedence/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/sycamore x futures/":{"tf":1.4142135623730951},"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":1.4142135623730951},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0},"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.0},"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.0},"https://phlip9.com/notes/performance/simdjson talk/":{"tf":1.0},"https://phlip9.com/notes/postgres/types of scans/":{"tf":1.7320508075688772},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":2.0},"https://phlip9.com/notes/reproducible builds/nix/links/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/nix/nix debug broken package build/":{"tf":1.4142135623730951},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":2.0},"https://phlip9.com/notes/statistics probability/CDF confidence bands - DKW inequality/":{"tf":1.4142135623730951}},"df":41,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/reproducible builds/nix/links/":{"tf":1.0}},"df":1,".":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.0}},"df":1}},"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"v":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.0}},"df":1}}}}}}}},"s":{"docs":{},"df":0,"/":{"docs":{},"df":0,"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{"https://phlip9.com/notes/devops/nomad/":{"tf":1.0}},"df":1}}}}}}},"s":{"docs":{},"df":0,"_":{"docs":{},"df":0,"8":{"docs":{},"df":0,"_":{"docs":{},"df":0,"d":{"docs":{},"df":0,"i":{"docs":{},"df":0,"g":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"s":{"docs":{},"df":0,"(":{"docs":{},"df":0,"b":{"docs":{},"df":0,"u":{"docs":{},"df":0,"f":{"docs":{"https://phlip9.com/notes/performance/simdjson talk/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}},"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.4142135623730951},"https://phlip9.com/notes/crypto/acme protocol/":{"tf":1.4142135623730951},"https://phlip9.com/notes/crypto/biscuit authz/":{"tf":1.0},"https://phlip9.com/notes/distributed systems/papers/(2021) Leaderless Consensus/":{"tf":1.0},"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":1.0},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":2.23606797749979},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":2.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":3.3166247903554}},"df":13,"=":{"docs":{},"df":0,"\"":{"docs":{},"df":0,"0":{"docs":{"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.0}},"df":2}}}}},"x":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0},"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":3.3166247903554},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":2.449489742783178},"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":3.0},"https://phlip9.com/notes/crypto/tls exported keying material/":{"tf":1.4142135623730951},"https://phlip9.com/notes/devops/secrets/ejson-kms (AWS)/":{"tf":2.0},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":2.0},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0},"https://phlip9.com/notes/misc/setting up a headless raspbian boot image/":{"tf":1.0}},"df":9}}},"i":{"docs":{},"df":0,"g":{"docs":{},"df":0,"u":{"docs":{"https://phlip9.com/notes/networking/CIDR/":{"tf":1.4142135623730951}},"df":1}},"n":{"docs":{"https://phlip9.com/notes/fuzzing/fuzzcheck-rs/":{"tf":1.0}},"df":1,"u":{"docs":{"https://phlip9.com/notes/AI ML/Expectimax Search/":{"tf":1.0},"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.4142135623730951},"https://phlip9.com/notes/btc-ln/BOLT 4 - onion routing protocol/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":1.0},"https://phlip9.com/notes/fuzzing/fuzzcheck-rs/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/rust/rr with rust/":{"tf":2.0},"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":1.4142135623730951},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/G-test - multinomial goodness-of-fit/":{"tf":1.0}},"df":9,"e":{"docs":{},"df":0,"=":{"docs":{},"df":0,"1":{"docs":{"https://phlip9.com/notes/misc/setting up a headless raspbian boot image/":{"tf":1.0}},"df":1}}},"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"s":{"docs":{},"df":0,"c":{"docs":{},"df":0,"d":{"docs":{},"df":0,"f":{"docs":{"https://phlip9.com/notes/statistics probability/G-test - multinomial goodness-of-fit/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/multinomial distribution/":{"tf":1.0}},"df":2}}}}}}}}},"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/aptos/":{"tf":1.0},"https://phlip9.com/notes/b l o c k c h a i n/fastpay/":{"tf":3.0},"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/submarine swaps/":{"tf":1.7320508075688772},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/lightning router overview/":{"tf":1.4142135623730951}},"df":6}},"s":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 8 - secure noise transport/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":1.4142135623730951},"https://phlip9.com/notes/fuzzing/fuzzcheck-rs/":{"tf":1.0}},"df":4}},"v":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.7320508075688772}},"df":1}}}}},"i":{"docs":{},"df":0,"b":{"docs":{"https://phlip9.com/notes/lang/ATS/Install ATS2/":{"tf":1.4142135623730951}},"df":1,".":{"docs":{},"df":0,"g":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/lang/ATS/Install ATS2/":{"tf":1.0}},"df":1}}}}}},"o":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/AI ML/Markov Decision Process (MDP)/":{"tf":1.0},"https://phlip9.com/notes/android/linux ADB udev setup/":{"tf":1.0},"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/foreign bank account report (FBAR)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.7320508075688772},"https://phlip9.com/notes/btc-ln/breez lightning service providers/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":3.1622776601683795},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/marblerun/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":1.0},"https://phlip9.com/notes/crypto/acme protocol/":{"tf":1.0},"https://phlip9.com/notes/devops/secrets/ejson-kms (AWS)/":{"tf":1.0},"https://phlip9.com/notes/devops/service mesh/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/koka-lang/":{"tf":1.7320508075688772},"https://phlip9.com/notes/lang/rust/rr with rust/":{"tf":1.0},"https://phlip9.com/notes/misc/prepping RPI for embedded dev/":{"tf":1.0},"https://phlip9.com/notes/misc/setting up a headless raspbian boot image/":{"tf":1.0},"https://phlip9.com/notes/networking/ipv6 address space/":{"tf":1.4142135623730951},"https://phlip9.com/notes/networking/network interface card (NIC)/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.4142135623730951},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/router/lightning router/captive portal/arubanetworks captive portal/":{"tf":2.8284271247461903},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":2.0}},"df":24}}}},"v":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/combinatorics/k-combinations of a multiset/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0},"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":2.0},"https://phlip9.com/notes/devops/AKS - azure kubernetes service/":{"tf":1.0},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0},"https://phlip9.com/notes/misc/setting up a headless raspbian boot image/":{"tf":1.0},"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/multinomial distribution/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/testing whether a coin is fair/":{"tf":1.0}},"df":10},"t":{"docs":{"https://phlip9.com/notes/statistics probability/p-value/":{"tf":1.0}},"df":1}},"r":{"docs":{},"df":0,"g":{"docs":{"https://phlip9.com/notes/AI ML/Markov Decision Process (MDP)/":{"tf":2.23606797749979},"https://phlip9.com/notes/statistics probability/standard error/":{"tf":1.4142135623730951}},"df":2},"s":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0},"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":1.7320508075688772},"https://phlip9.com/notes/misc/uptime to downtime conversion/":{"tf":1.4142135623730951}},"df":3},"t":{"docs":{"https://phlip9.com/notes/WSL/WSL2 custom kernel/":{"tf":1.0},"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/foreign bank account report (FBAR)/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/sycamore x futures/":{"tf":1.0},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0},"https://phlip9.com/notes/performance/profiling/":{"tf":1.0}},"df":6}},"x":{"docs":{"https://phlip9.com/notes/misc/optimization solvers/":{"tf":1.0}},"df":1},"y":{"docs":{"https://phlip9.com/notes/design/form design/":{"tf":1.0}},"df":1}}},"w":{"docs":{},"df":0,"a":{"docs":{},"df":0,"y":{"docs":{},"df":0,"'":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1}}}}},"o":{"docs":{},"df":0,"k":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.7320508075688772},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":2.449489742783178}},"df":2}},"l":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":2.0},"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.0}},"df":3},"p":{"docs":{"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.0}},"df":1,"e":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.0}},"df":1}}},"r":{"docs":{},"df":0,"d":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/marblerun/":{"tf":1.7320508075688772},"https://phlip9.com/notes/devops/consul/":{"tf":1.0}},"df":3}}}}},"p":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/WSL/WSL2 custom kernel/":{"tf":1.0},"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.0},"https://phlip9.com/notes/fuzzing/fuzzcheck-rs/":{"tf":1.0},"https://phlip9.com/notes/keyboards/moergo glove80/":{"tf":1.7320508075688772},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0},"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":1.0},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.4142135623730951},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.4142135623730951},"https://phlip9.com/notes/reproducible builds/nix/nix debug broken package build/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.4142135623730951}},"df":14},"y":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"[":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.0}},"df":1}}}},"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"(":{"docs":{},"df":0,"(":{"docs":{},"df":0,"u":{"docs":{},"df":0,"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"_":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{},"df":0,"d":{"docs":{},"df":0,"r":{"docs":{},"df":0,"_":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.0}},"df":1}}}}}}}}}}}},"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"g":{"docs":{},"df":0,"0":{"docs":{"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.4142135623730951}},"df":1},"1":{"docs":{"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.4142135623730951}},"df":1}}}}}}}}}},"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"g":{"docs":{},"df":0,"h":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":2.0}},"df":2}}}}}}},"r":{"docs":{"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.7320508075688772},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":2.449489742783178}},"df":2,"e":{"docs":{"https://phlip9.com/notes/AI ML/Markov Decision Process (MDP)/":{"tf":1.0},"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0},"https://phlip9.com/notes/b l o c k c h a i n/aptos/":{"tf":1.0},"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":2.6457513110645907},"https://phlip9.com/notes/btc-ln/lightning libs/":{"tf":1.0},"https://phlip9.com/notes/combinatorics/k-combinations of a multiset/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":1.0},"https://phlip9.com/notes/devops/linkerd/":{"tf":1.0},"https://phlip9.com/notes/devops/nomad/":{"tf":1.0},"https://phlip9.com/notes/distributed systems/papers/(2020) Semi-Fast Byzantine-tolerant Shared Register without Reliable Broadcast/":{"tf":1.0},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":16,"/":{"docs":{},"df":0,"b":{"docs":{},"df":0,"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"b":{"docs":{},"df":0,"/":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"/":{"docs":{},"df":0,"r":{"docs":{},"df":0,"u":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"/":{"docs":{},"df":0,"s":{"docs":{},"df":0,"r":{"docs":{},"df":0,"c":{"docs":{},"df":0,"/":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"m":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"/":{"docs":{},"df":0,"s":{"docs":{},"df":0,"g":{"docs":{},"df":0,"x":{"docs":{},"df":0,"/":{"docs":{},"df":0,"a":{"docs":{},"df":0,"v":{"docs":{},"df":0,"r":{"docs":{},"df":0,".":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0}},"df":1}}}}},"e":{"docs":{},"df":0,"g":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{},"df":0,"k":{"docs":{},"df":0,"e":{"docs":{},"df":0,"y":{"docs":{},"df":0,".":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0}},"df":1}}}}}}}}},"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,".":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"g":{"docs":{},"df":0,"o":{"docs":{},"df":0,"/":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"m":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"/":{"docs":{},"df":0,"s":{"docs":{},"df":0,"g":{"docs":{},"df":0,"x":{"docs":{},"df":0,"/":{"docs":{},"df":0,"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"g":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"u":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{},"df":0,".":{"docs":{},"df":0,"v":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"f":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}},"r":{"docs":{},"df":0,"u":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"/":{"docs":{},"df":0,"h":{"docs":{},"df":0,"o":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0}},"df":1,"/":{"docs":{},"df":0,"s":{"docs":{},"df":0,"g":{"docs":{},"df":0,"x":{"docs":{},"df":0,"/":{"docs":{},"df":0,"s":{"docs":{},"df":0,"g":{"docs":{},"df":0,"x":{"docs":{},"df":0,".":{"docs":{},"df":0,"g":{"docs":{},"df":0,"o":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}},"r":{"docs":{},"df":0,"u":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"m":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0}},"df":1}}}}}},"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"e":{"docs":{},"df":0,"/":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"/":{"docs":{},"df":0,"r":{"docs":{},"df":0,"u":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"m":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}},":":{"docs":{},"df":0,":":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,":":{"docs":{},"df":0,":":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.0}},"df":1}}}}}}}}}}}},"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"k":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,":":{"docs":{},"df":0,":":{"docs":{},"df":0,"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.0}},"df":1}}},"y":{"docs":{},"df":0,"n":{"docs":{},"df":0,"c":{"docs":{"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.0}},"df":1}}}}}}}}}}}}}},"i":{"docs":{},"df":0,"5":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":2.6457513110645907}},"df":1},"7":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.7320508075688772}},"df":1}}},"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/keyboards/moergo glove80/":{"tf":1.4142135623730951}},"df":1}}},"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/lang/lua/":{"tf":1.4142135623730951}},"df":1}}}}},"p":{"docs":{"https://phlip9.com/notes/management/relieve often - why generals were more successful in WWII/":{"tf":1.4142135623730951}},"df":1,"o":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/foreign bank account report (FBAR)/":{"tf":1.0}},"df":1}},"u":{"docs":{"https://phlip9.com/notes/fuzzing/fuzzcheck-rs/":{"tf":1.0}},"df":1}},"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.4142135623730951},"https://phlip9.com/notes/reproducible builds/reproducible-builds.org/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/arubanetworks captive portal/":{"tf":1.4142135623730951},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.4142135623730951},"https://phlip9.com/notes/statistics probability/p-value/":{"tf":1.0}},"df":7,"l":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0},"https://phlip9.com/notes/devops/azure CLI/":{"tf":1.0},"https://phlip9.com/notes/devops/nomad/":{"tf":1.0},"https://phlip9.com/notes/misc/setting up a headless raspbian boot image/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/winsorize/":{"tf":1.0}},"df":6}}}},"l":{"docs":{"https://phlip9.com/notes/statistics probability/standard error/":{"tf":1.0}},"df":1},"s":{"docs":{},"df":0,"p":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/android/root phone with magisk/":{"tf":1.0},"https://phlip9.com/notes/b l o c k c h a i n/fastpay/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/submarine swaps/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.7320508075688772},"https://phlip9.com/notes/devops/secrets/ejson-kms (AWS)/":{"tf":1.0},"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.4142135623730951},"https://phlip9.com/notes/postgres/types of scans/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/reproducible-builds.org/":{"tf":1.0}},"df":9}}}}}},"u":{"docs":{},"df":0,"p":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.4142135623730951},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.4142135623730951}},"df":4}}}}},"s":{"docs":{},"df":0,"(":{"docs":{},"df":0,"0":{"docs":{},"df":0,".":{"docs":{},"df":0,"1":{"docs":{},"df":0,"0":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1}},"2":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1}}},"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"g":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1}}}},"p":{"docs":{},"df":0,"h":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0}},"df":1}}},"t":{"docs":{},"df":0,"h":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.7320508075688772}},"df":1}}}}}},"t":{"docs":{"https://phlip9.com/notes/btc-ln/breez lightning service providers/":{"tf":1.4142135623730951},"https://phlip9.com/notes/btc-ln/lightning network notes/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0},"https://phlip9.com/notes/devops/deployment strategies/":{"tf":1.0},"https://phlip9.com/notes/devops/nomad/":{"tf":1.0},"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":1.0},"https://phlip9.com/notes/lang/operator fixity and precedence/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/lightning router overview/":{"tf":1.0}},"df":9,"=":{"docs":{},"df":0,"0":{"docs":{},"df":0,".":{"docs":{},"df":0,"4":{"docs":{},"df":0,"2":{"docs":{},"df":0,".":{"docs":{},"df":0,".":{"docs":{},"df":0,"8":{"docs":{},"df":0,".":{"docs":{},"df":0,"4":{"docs":{},"df":0,"4":{"docs":{"https://phlip9.com/notes/postgres/types of scans/":{"tf":1.0}},"df":1}}}}}}}}}}}}},"u":{"docs":{},"df":0,"g":{"docs":{},"df":0,"h":{"docs":{"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.0}},"df":1}},"l":{"docs":{},"df":0,"d":{"docs":{},"df":0,"n":{"docs":{},"df":0,"'":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0}},"df":1}}}}},"n":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/combinatorics/k-combinations of a multiset/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/rr with rust/":{"tf":1.0},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0},"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":3.3166247903554},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":2.0},"https://phlip9.com/notes/statistics probability/G-test - multinomial goodness-of-fit/":{"tf":1.4142135623730951},"https://phlip9.com/notes/statistics probability/multinomial distribution/":{"tf":1.0}},"df":8,"e":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/WSL/WSL2 custom kernel/":{"tf":2.0},"https://phlip9.com/notes/b l o c k c h a i n/fastpay/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel SGX/secure time/":{"tf":1.4142135623730951},"https://phlip9.com/notes/distributed systems/papers/(2020) Semi-Fast Byzantine-tolerant Shared Register without Reliable Broadcast/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/rr with rust/":{"tf":1.0}},"df":6,"p":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":3.3166247903554},"https://phlip9.com/notes/btc-ln/breez lightning service providers/":{"tf":1.0}},"df":2},"y":{"docs":{},"df":0,"'":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.4142135623730951}},"df":1}}}}}}}},"i":{"docs":{},"df":0,"o":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.4142135623730951}},"df":1,".":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1}}}}}}}},"r":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":2.0}},"df":1}}}},"p":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.0}},"df":1}},"r":{"docs":{},"df":0,"s":{"docs":{"https://phlip9.com/notes/btc-ln/breez lightning service providers/":{"tf":1.0},"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":1.0},"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":1.0},"https://phlip9.com/notes/postgres/postgres performance tuning/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/nix/nix debug spurrious rebuilds/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.4142135623730951},"https://phlip9.com/notes/statistics probability/testing whether a coin is fair/":{"tf":1.0}},"df":8}}},"v":{"docs":{},"df":0,"(":{"docs":{},"df":0,"x":{"docs":{},"df":0,"_":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/statistics probability/multinomial distribution/":{"tf":1.0}},"df":1}}}},"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":2.0}},"df":1}}},"e":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":1.0},"https://phlip9.com/notes/misc/kintsugi/":{"tf":1.0},"https://phlip9.com/notes/postgres/types of scans/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/testing whether a coin is fair/":{"tf":1.0}},"df":4,"a":{"docs":{},"df":0,"g":{"docs":{"https://phlip9.com/notes/fuzzing/fuzzcheck-rs/":{"tf":1.7320508075688772},"https://phlip9.com/notes/fuzzing/fuzzing/":{"tf":1.0}},"df":2}}}}}},"p":{"docs":{"https://phlip9.com/notes/WSL/WSL2 custom kernel/":{"tf":1.4142135623730951},"https://phlip9.com/notes/android/linux ADB udev setup/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/gramine/":{"tf":1.0},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":4,"u":{"docs":{"https://phlip9.com/notes/WSL/WSL2 custom kernel/":{"tf":1.0},"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.4142135623730951},"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":2.23606797749979},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":3.605551275463989},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":2.0},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":2.8284271247461903},"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":2.449489742783178},"https://phlip9.com/notes/confidential computing/intel SGX/secure time/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel TDX/":{"tf":1.0},"https://phlip9.com/notes/devops/consul/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/rr with rust/":{"tf":1.0},"https://phlip9.com/notes/networking/network interface card (NIC)/":{"tf":1.0},"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.0},"https://phlip9.com/notes/performance/simdjson talk/":{"tf":1.0}},"df":16,"'":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0}},"df":1},"=":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/WSL/WSL2 custom kernel/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.7320508075688772}},"df":2}},"_":{"docs":{},"df":0,"s":{"docs":{},"df":0,"v":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.0}},"df":1}}}},"i":{"docs":{},"df":0,"d":{"docs":{},"df":0,"w":{"docs":{},"df":0,"i":{"docs":{},"df":0,"p":{"docs":{"https://phlip9.com/notes/confidential computing/intel TDX/":{"tf":1.0}},"df":1}}}}},"s":{"docs":{},"df":0,"v":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.7320508075688772}},"df":1,"l":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0}},"df":1}}}}}},"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"k":{"docs":{"https://phlip9.com/notes/misc/kintsugi/":{"tf":1.0}},"df":1}},"f":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.0},"https://phlip9.com/notes/misc/kintsugi/":{"tf":1.4142135623730951}},"df":3}},"m":{"docs":{},"df":0,"p":{"docs":{"https://phlip9.com/notes/design/form design/":{"tf":1.4142135623730951}},"df":1}},"s":{"docs":{},"df":0,"h":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.0},"https://phlip9.com/notes/devops/nomad/":{"tf":1.0},"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":1.0}},"df":3}},"t":{"docs":{},"df":0,"e":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 11 - invoices/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0},"https://phlip9.com/notes/crypto/TLS self-signed pubkey-only certs/":{"tf":1.0},"https://phlip9.com/notes/devops/o11y/jaeger oss e2e tracing/":{"tf":1.0},"https://phlip9.com/notes/fuzzing/bolero - fuzzing + property testing/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.7320508075688772},"https://phlip9.com/notes/lang/rust/sycamore x futures/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/nix/nix debug spurrious rebuilds/":{"tf":1.0}},"df":10,":":{"docs":{},"df":0,":":{"docs":{},"df":0,"b":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{},"df":0,"_":{"docs":{},"df":0,"c":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,":":{"docs":{},"df":0,":":{"docs":{},"df":0,"b":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{},"df":0,"c":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}},"d":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"k":{"docs":{},"df":0,":":{"docs":{},"df":0,":":{"docs":{},"df":0,"f":{"docs":{},"df":0,"i":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"y":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"m":{"docs":{},"df":0,"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"g":{"docs":{},"df":0,"g":{"docs":{"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}},"s":{"docs":{},"df":0,".":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/rust/rust verification tools/":{"tf":1.0}},"df":2}}}}}},"z":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.0}},"df":1}}},"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/android/ADB over TCP inside WSL2/":{"tf":1.0},"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/foreign bank account report (FBAR)/":{"tf":1.0},"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.4142135623730951},"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":2.0},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/gramine/":{"tf":1.7320508075688772},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.7320508075688772},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":2.0},"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.4142135623730951},"https://phlip9.com/notes/crypto/acme protocol/":{"tf":1.4142135623730951},"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":1.0},"https://phlip9.com/notes/devops/algo wireguard VPN server/":{"tf":2.23606797749979},"https://phlip9.com/notes/devops/azure CLI/":{"tf":3.0},"https://phlip9.com/notes/distributed systems/papers/(2020) Semi-Fast Byzantine-tolerant Shared Register without Reliable Broadcast/":{"tf":1.0},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0},"https://phlip9.com/notes/lang/flutter/flutter setup/":{"tf":1.0},"https://phlip9.com/notes/lang/lua/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/rr with rust/":{"tf":1.0},"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":2.0},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":2.0},"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.0},"https://phlip9.com/notes/postgres/postgres performance tuning/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/nix/nix auto-allocate-uids -> nixbld users/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/reproducible-builds.org/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.0}},"df":29,"e":{"docs":{},"df":0,"_":{"docs":{},"df":0,"e":{"docs":{},"df":0,"f":{"docs":{},"df":0,"f":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/lang/rust/understanding sycamore reactivity/":{"tf":1.0}},"df":1}}}}}},"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"m":{"docs":{},"df":0,"o":{"docs":{"https://phlip9.com/notes/lang/rust/understanding sycamore reactivity/":{"tf":1.0}},"df":1}}}}},"d":{"docs":{},"df":0,"_":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/postgres/snippets/":{"tf":1.4142135623730951}},"df":1}}}}},"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0}},"df":1}},"v":{"docs":{"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":1.0}},"df":1}}}},"d":{"docs":{"https://phlip9.com/notes/devops/secrets/mozilla SOPS/":{"tf":1.0}},"df":1,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.4142135623730951},"https://phlip9.com/notes/devops/secrets/mozilla SOPS/":{"tf":2.23606797749979},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.7320508075688772},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":2.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":2.449489742783178}},"df":5}}}},"i":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/financial instituion/":{"tf":1.0},"https://phlip9.com/notes/devops/secrets/1password - secrets automation/":{"tf":1.7320508075688772},"https://phlip9.com/notes/management/relieve often - why generals were more successful in WWII/":{"tf":1.0}},"df":3,"o":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/money services business (MSB)/":{"tf":1.0}},"df":1}},"s":{"docs":{},"df":0,"p":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{"https://phlip9.com/notes/devops/secrets/1password - secrets automation/":{"tf":1.0}},"df":1}}}}}}}}},"i":{"docs":{},"df":0,"m":{"docs":{},"df":0,"e":{"docs":{"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/foreign bank account report (FBAR)/":{"tf":1.0}},"df":1},"i":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/foreign bank account report (FBAR)/":{"tf":1.0}},"df":1}}},"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"a":{"docs":{"https://phlip9.com/notes/management/relieve often - why generals were more successful in WWII/":{"tf":1.0}},"df":1},"o":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/statistics probability/kelly criterion + ELO/":{"tf":1.4142135623730951},"https://phlip9.com/notes/statistics probability/multinomial distribution/":{"tf":1.4142135623730951},"https://phlip9.com/notes/statistics probability/p-value/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/testing whether a coin is fair/":{"tf":1.4142135623730951}},"df":4}}}}},"i":{"docs":{},"df":0,"c":{"docs":{"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.4142135623730951},"https://phlip9.com/notes/router/lightning router/captive portal/arubanetworks captive portal/":{"tf":1.0}},"df":3}}}},"l":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0}},"df":1}}}}}}},"o":{"docs":{},"df":0,"p":{"docs":{"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":1.0}},"df":1},"s":{"docs":{},"df":0,"s":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/fastpay/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.0},"https://phlip9.com/notes/misc/prepping RPI for embedded dev/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/nix/links/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":2.0}},"df":7,"(":{"docs":{},"df":0,"b":{"docs":{},"df":0,"x":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1}},"u":{"docs":{},"df":0,"u":{"docs":{},"df":0,"_":{"docs":{},"df":0,"x":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1}}}},"w":{"docs":{},"df":0,"w":{"docs":{},"df":0,"_":{"docs":{},"df":0,"x":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1}}}}}}}},"u":{"docs":{},"df":0,"c":{"docs":{},"df":0,"i":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/btc-ln/submarine swaps/":{"tf":1.0}},"df":1}}}}},"w":{"docs":{"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.4142135623730951}},"df":2},"y":{"docs":{},"df":0,"p":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0}},"df":1}},"o":{"docs":{"https://phlip9.com/notes/crypto/":{"tf":1.0}},"df":1,"_":{"docs":{},"df":0,"s":{"docs":{},"df":0,"u":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.4142135623730951}},"df":1}}}}},"c":{"docs":{},"df":0,"u":{"docs":{},"df":0,"r":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/btc-ln/submarine swaps/":{"tf":1.0}},"df":1}}}},"g":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"p":{"docs":{},"df":0,"h":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.0},"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":1.0},"https://phlip9.com/notes/networking/ipv6 address space/":{"tf":1.0}},"df":5,"i":{"docs":{"https://phlip9.com/notes/":{"tf":1.0},"https://phlip9.com/notes/devops/secrets/ejson-kms (AWS)/":{"tf":1.0}},"df":2}}}}}},"k":{"docs":{},"df":0,"e":{"docs":{},"df":0,"y":{"docs":{"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.0}},"df":1}}}}}}}},"s":{"docs":{"https://phlip9.com/notes/devops/azure CLI/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.0}},"df":2,"1":{"docs":{},"df":0,"7":{"docs":{},"df":0,"0":{"docs":{"https://phlip9.com/notes/misc/optimization solvers/":{"tf":1.0}},"df":1}}},"r":{"docs":{"https://phlip9.com/notes/crypto/acme protocol/":{"tf":1.4142135623730951}},"df":1,"u":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.0}},"df":1}}}}}},"t":{"docs":{"https://phlip9.com/notes/crypto/(talk) authenticated data structures for stateless validation/":{"tf":1.0}},"df":1,"_":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":2.23606797749979}},"df":1}}}},"a":{"docs":{},"df":0,"g":{"docs":{"https://phlip9.com/notes/lang/ATS/Install ATS2/":{"tf":1.4142135623730951},"https://phlip9.com/notes/nvim/universal-ctags Notes/":{"tf":1.4142135623730951}},"df":2}},"r":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.7320508075688772},"https://phlip9.com/notes/misc/setting up a headless raspbian boot image/":{"tf":1.0},"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/nix/nix debug broken package build/":{"tf":1.0}},"df":4}},"s":{"docs":{},"df":0,"p":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"f":{"docs":{},"df":0,"i":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/android/root phone with magisk/":{"tf":1.0}},"df":1}}}}}}},"x":{"docs":{"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":1.7320508075688772},"https://phlip9.com/notes/lang/rust/understanding sycamore reactivity/":{"tf":1.4142135623730951}},"df":2,".":{"docs":{},"df":0,"c":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"_":{"docs":{},"df":0,"e":{"docs":{},"df":0,"f":{"docs":{},"df":0,"f":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{},"df":0,"(":{"docs":{},"df":0,"m":{"docs":{},"df":0,"o":{"docs":{},"df":0,"v":{"docs":{"https://phlip9.com/notes/lang/rust/understanding sycamore reactivity/":{"tf":1.0}},"df":1}}}},"f":{"docs":{},"df":0,"n":{"docs":{},"df":0,"m":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{},"df":0,"(":{"docs":{},"df":0,")":{"docs":{},"df":0,"(":{"docs":{},"df":0,")":{"docs":{},"df":0,"c":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/lang/rust/understanding sycamore reactivity/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}},"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"m":{"docs":{},"df":0,"o":{"docs":{},"df":0,"f":{"docs":{},"df":0,"n":{"docs":{},"df":0,"m":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/lang/rust/understanding sycamore reactivity/":{"tf":1.0}},"df":1}}}}}}}}},"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"d":{"docs":{},"df":0,"u":{"docs":{},"df":0,"c":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"u":{"docs":{"https://phlip9.com/notes/lang/rust/understanding sycamore reactivity/":{"tf":1.0}},"df":1}}}}}},"s":{"docs":{},"df":0,"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"r":{"docs":{},"df":0,"c":{"docs":{"https://phlip9.com/notes/lang/rust/sycamore x futures/":{"tf":1.0}},"df":1,"e":{"docs":{},"df":0,"(":{"docs":{},"df":0,"f":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{},"df":0,"u":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/lang/rust/sycamore x futures/":{"tf":1.0}},"df":1}}}}}}}}}}}}}},"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"f":{"docs":{},"df":0,"n":{"docs":{},"df":0,"m":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/lang/rust/understanding sycamore reactivity/":{"tf":1.0}},"df":1}}}}}}}}}}}},"i":{"docs":{},"df":0,"g":{"docs":{},"df":0,"n":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"(":{"docs":{},"df":0,"0":{"docs":{"https://phlip9.com/notes/lang/rust/understanding sycamore reactivity/":{"tf":1.4142135623730951}},"df":1}}}}}}}}}}}}}}},"f":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"h":{"docs":{"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":1.0}},"df":1,"(":{"docs":{},"df":0,")":{"docs":{},"df":0,".":{"docs":{},"df":0,"0":{"docs":{"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":1.0}},"df":1}}}}}}}}}},"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"g":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":1.0}},"df":1}}},"p":{"docs":{},"df":0,"a":{"docs":{},"df":0,"w":{"docs":{},"df":0,"n":{"docs":{},"df":0,"_":{"docs":{},"df":0,"f":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{},"df":0,"u":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/lang/rust/sycamore x futures/":{"tf":1.0}},"df":1,"e":{"docs":{},"df":0,"(":{"docs":{},"df":0,"f":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{},"df":0,"u":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/lang/rust/sycamore x futures/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}},"u":{"docs":{},"df":0,"p":{"docs":{},"df":0,"d":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"(":{"docs":{},"df":0,"&":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{},"df":0,"p":{"docs":{},"df":0,";":{"docs":{},"df":0,"[":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":1.0}},"df":1}},"t":{"docs":{},"df":0,"_":{"docs":{},"df":0,"i":{"docs":{},"df":0,"m":{"docs":{},"df":0,"1":{"docs":{"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":1.0}},"df":1}}}}}}}}}},"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"f":{"docs":{},"df":0,"o":{"docs":{"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":1.0}},"df":1}},"p":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":1.4142135623730951}},"df":1}}}}}}}}}}}}}}},"u":{"docs":{"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0}},"df":1,"d":{"docs":{},"df":0,"a":{"docs":{"https://phlip9.com/notes/misc/optimization solvers/":{"tf":1.0}},"df":1}},"l":{"docs":{},"df":0,"p":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.0}},"df":1}}}},"t":{"docs":{},"df":0,"u":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/management/relieve often - why generals were more successful in WWII/":{"tf":1.0}},"df":1}}}},"m":{"docs":{},"df":0,"b":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"s":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0}},"df":1}}}}}}},"o":{"docs":{},"df":0,"s":{"docs":{},"df":0,"q":{"docs":{},"df":0,"p":{"docs":{"https://phlip9.com/notes/misc/optimization solvers/":{"tf":1.0}},"df":1}}}},"p":{"docs":{"https://phlip9.com/notes/statistics probability/testing whether a coin is fair/":{"tf":1.0}},"df":1},"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"u":{"docs":{"https://phlip9.com/notes/lang/koka-lang/":{"tf":1.0}},"df":1,"s":{"docs":{"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0}},"df":1}}}},"l":{"docs":{"https://phlip9.com/notes/android/android cli setup/":{"tf":1.0},"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.7320508075688772},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.7320508075688772},"https://phlip9.com/notes/devops/algo wireguard VPN server/":{"tf":1.0},"https://phlip9.com/notes/devops/azure CLI/":{"tf":1.4142135623730951},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.4142135623730951}},"df":8},"r":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":3.3166247903554}},"df":1,"[":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{},"df":0,"x":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1}}},"x":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1,"m":{"docs":{},"df":0,"1":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.7320508075688772}},"df":1}},"p":{"docs":{},"df":0,"1":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.7320508075688772}},"df":1}}}},"_":{"docs":{},"df":0,"g":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"p":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":2.8284271247461903}},"df":1}}}}}},"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"c":{"docs":{"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/foreign bank account report (FBAR)/":{"tf":2.6457513110645907},"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/monetary instruments/":{"tf":1.0},"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/money services business (MSB)/":{"tf":3.1622776601683795}},"df":3},"t":{"docs":{"https://phlip9.com/notes/":{"tf":1.0},"https://phlip9.com/notes/AI ML/Expectimax Search/":{"tf":2.0},"https://phlip9.com/notes/AI ML/Markov Decision Process (MDP)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/WSL/WSL2 custom kernel/":{"tf":1.0},"https://phlip9.com/notes/android/root phone with magisk/":{"tf":1.4142135623730951},"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/foreign bank account report (FBAR)/":{"tf":1.0},"https://phlip9.com/notes/b l o c k c h a i n/btc utreexo - utxo accumulator/":{"tf":1.4142135623730951},"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.7320508075688772},"https://phlip9.com/notes/btc-ln/BOLT 7 - p2p node and channel discovery/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/breez lightning service providers/":{"tf":1.0},"https://phlip9.com/notes/combinatorics/k-combinations of a multiset/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.7320508075688772},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":2.23606797749979},"https://phlip9.com/notes/confidential computing/gramine/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.7320508075688772},"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel SGX/secure time/":{"tf":2.0},"https://phlip9.com/notes/confidential computing/mystikos/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":1.0},"https://phlip9.com/notes/design/form design/":{"tf":1.0},"https://phlip9.com/notes/devops/nomad/":{"tf":1.0},"https://phlip9.com/notes/devops/service mesh/":{"tf":1.0},"https://phlip9.com/notes/distributed systems/papers/(2020) Semi-Fast Byzantine-tolerant Shared Register without Reliable Broadcast/":{"tf":2.0},"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0},"https://phlip9.com/notes/lang/operator fixity and precedence/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/sycamore x futures/":{"tf":1.0},"https://phlip9.com/notes/misc/envsubst/":{"tf":1.0},"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":2.0},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":2.0},"https://phlip9.com/notes/networking/ipv6 address space/":{"tf":1.0},"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.7320508075688772},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/reproducible-builds.org/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.4142135623730951},"https://phlip9.com/notes/statistics probability/p-value/":{"tf":1.0}},"df":39,".":{"docs":{},"df":0,"u":{"docs":{},"df":0,"f":{"docs":{},"df":0,"2":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1}}}}}}}},"s":{"docs":{"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.0}},"df":1}},"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"d":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/money services business (MSB)/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/breez lightning service providers/":{"tf":1.4142135623730951}},"df":2}},"m":{"docs":{"https://phlip9.com/notes/WSL/WSL2 custom kernel/":{"tf":1.7320508075688772},"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/gramine/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.7320508075688772},"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":2.23606797749979},"https://phlip9.com/notes/devops/azure CLI/":{"tf":1.0},"https://phlip9.com/notes/devops/nomad/":{"tf":2.23606797749979},"https://phlip9.com/notes/fuzzing/fuzzcheck-rs/":{"tf":1.0},"https://phlip9.com/notes/lang/operator fixity and precedence/":{"tf":1.0},"https://phlip9.com/notes/misc/setting up a headless raspbian boot image/":{"tf":1.4142135623730951},"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.4142135623730951},"https://phlip9.com/notes/performance/profiling/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/lightning router overview/":{"tf":1.4142135623730951}},"df":16,"a":{"docs":{"https://phlip9.com/notes/router/lightning router/lightning router overview/":{"tf":1.0}},"df":1}}}}},"t":{"docs":{"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":3.0},"https://phlip9.com/notes/misc/kintsugi/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.0}},"df":3}},"w":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":2.0}},"df":1}},"x":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1},"y":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1,"c":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":2.23606797749979},"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":1.7320508075688772},"https://phlip9.com/notes/performance/simdjson talk/":{"tf":1.0}},"df":3}}},"z":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1}},"d":{"docs":{"https://phlip9.com/notes/android/android cli setup/":{"tf":1.0},"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0},"https://phlip9.com/notes/ios/ios setup/":{"tf":1.0},"https://phlip9.com/notes/lang/flutter/flutter setup/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/operator fixity and precedence/":{"tf":2.8284271247461903},"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":2.8284271247461903},"https://phlip9.com/notes/misc/pop_OS! tweaks/":{"tf":1.0},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.4142135623730951},"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.7320508075688772},"https://phlip9.com/notes/performance/simdjson talk/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":2.0},"https://phlip9.com/notes/statistics probability/kelly criterion + ELO/":{"tf":1.4142135623730951}},"df":14,"\"":{"docs":{},"df":0,",":{"docs":{},"df":0,"e":{"docs":{},"df":0,"x":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"n":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,",":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"g":{"docs":{},"df":0,"s":{"docs":{},"df":0,"[":{"docs":{},"df":0,"2":{"docs":{},"df":0,"]":{"docs":{},"df":0,",":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"g":{"docs":{},"df":0,"s":{"docs":{},"df":0,"[":{"docs":{},"df":0,"1":{"docs":{"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}},"/":{"docs":{},"df":0,"c":{"docs":{},"df":0,"'":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.0}},"df":1}}}},"0":{"docs":{},"df":0,"1":{"docs":{},"df":0,"9":{"docs":{},"df":0,"2":{"docs":{},"df":0,"8":{"docs":{},"df":0,"0":{"docs":{},"df":0,"7":{"docs":{},"df":0,"f":{"docs":{},"df":0,"7":{"docs":{},"df":0,"e":{"docs":{},"df":0,"1":{"docs":{},"df":0,"c":{"docs":{},"df":0,"d":{"docs":{},"df":0,"4":{"docs":{},"df":0,"a":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"1":{"docs":{},"df":0,"d":{"docs":{},"df":0,"1":{"docs":{},"df":0,"3":{"docs":{},"df":0,"b":{"docs":{},"df":0,"b":{"docs":{},"df":0,"1":{"docs":{},"df":0,"e":{"docs":{},"df":0,"5":{"docs":{},"df":0,"9":{"docs":{},"df":0,"0":{"docs":{},"df":0,"4":{"docs":{},"df":0,"f":{"docs":{},"df":0,"c":{"docs":{},"df":0,"2":{"docs":{},"df":0,"8":{"docs":{},"df":0,"7":{"docs":{},"df":0,"b":{"docs":{},"df":0,"6":{"docs":{},"df":0,"9":{"docs":{},"df":0,"1":{"docs":{},"df":0,"2":{"docs":{},"df":0,"1":{"docs":{},"df":0,"1":{"docs":{},"df":0,"6":{"docs":{},"df":0,"4":{"docs":{},"df":0,"8":{"docs":{},"df":0,"8":{"docs":{},"df":0,"7":{"docs":{},"df":0,"7":{"docs":{},"df":0,"2":{"docs":{},"df":0,"5":{"docs":{},"df":0,"8":{"docs":{},"df":0,"a":{"docs":{},"df":0,"a":{"docs":{},"df":0,"4":{"docs":{},"df":0,"4":{"docs":{},"df":0,"d":{"docs":{},"df":0,"1":{"docs":{},"df":0,"f":{"docs":{},"df":0,"a":{"docs":{},"df":0,"8":{"docs":{},"df":0,"8":{"docs":{},"df":0,"2":{"docs":{},"df":0,"7":{"docs":{},"df":0,"5":{"docs":{"https://phlip9.com/notes/android/android cli setup/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"2":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":2.23606797749979}},"df":1,".":{"docs":{},"df":0,"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"(":{"docs":{},"df":0,"&":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{},"df":0,"p":{"docs":{},"df":0,";":{"docs":{},"df":0,"n":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"c":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}},"8":{"docs":{},"df":0,"s":{"docs":{},"df":0,"4":{"docs":{},"df":0,"d":{"docs":{},"df":0,"2":{"docs":{},"df":0,"m":{"docs":{},"df":0,"l":{"docs":{},"df":0,"s":{"docs":{},"df":0,"8":{"docs":{},"df":0,"v":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/crypto/acme protocol/":{"tf":1.0}},"df":1}}}}}}}}}}},"\\":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.0}},"df":1}},"_":{"docs":{},"df":0,"{":{"docs":{},"df":0,"\\":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"x":{"docs":{},"df":0,"t":{"docs":{},"df":0,"{":{"docs":{},"df":0,"k":{"docs":{},"df":0,"l":{"docs":{},"df":0,"}":{"docs":{},"df":0,"}":{"docs":{},"df":0,"(":{"docs":{},"df":0,"\\":{"docs":{},"df":0,"h":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"{":{"docs":{},"df":0,"p":{"docs":{"https://phlip9.com/notes/statistics probability/G-test - multinomial goodness-of-fit/":{"tf":1.4142135623730951}},"df":1}}}}}}}}}}}}}}}}},"k":{"docs":{},"df":0,"l":{"docs":{},"df":0,"}":{"docs":{},"df":0,"(":{"docs":{},"df":0,"p":{"docs":{"https://phlip9.com/notes/statistics probability/G-test - multinomial goodness-of-fit/":{"tf":1.0}},"df":1}}}}}}},"a":{"docs":{},"df":0,"b":{"docs":{},"df":0,"o":{"docs":{},"df":0,"o":{"docs":{"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.4142135623730951}},"df":2}}},"e":{"docs":{},"df":0,"m":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/android/ADB over TCP inside WSL2/":{"tf":1.0},"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/nix/nix auto-allocate-uids -> nixbld users/":{"tf":1.0}},"df":5,".":{"docs":{},"df":0,"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"v":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{"https://phlip9.com/notes/reproducible builds/nix/nix auto-allocate-uids -> nixbld users/":{"tf":1.0}},"df":1}}}}}}}}}}},"g":{"docs":{"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":1.4142135623730951}},"df":1},"i":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/devops/secrets/1password - secrets automation/":{"tf":1.4142135623730951}},"df":1}}},"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"g":{"docs":{"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.4142135623730951}},"df":2}}},"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"z":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 4 - onion routing protocol/":{"tf":1.0}},"df":1}}},"g":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/btc-ln/zero-conf channels/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":1.0},"https://phlip9.com/notes/crypto/acme protocol/":{"tf":1.0}},"df":3}},"l":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0}},"df":1}},"i":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/performance/simdjson talk/":{"tf":1.0}},"df":1}}}},"r":{"docs":{},"df":0,"k":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1},"t":{"docs":{"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":3.872983346207417},"https://phlip9.com/notes/lang/flutter/flutter setup/":{"tf":1.4142135623730951}},"df":2,"'":{"docs":{"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0}},"df":1},".":{"docs":{},"df":0,"s":{"docs":{},"df":0,"h":{"docs":{},"df":0,"o":{"docs":{},"df":0,"w":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"d":{"docs":{},"df":0,"o":{"docs":{"https://phlip9.com/notes/lang/flutter/flutter setup/":{"tf":1.0}},"df":1}}}}}}}}},":":{"docs":{},"df":0,":":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"l":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0}},"df":1}}}}}}}},"a":{"docs":{},"df":0,"s":{"docs":{},"df":0,"y":{"docs":{},"df":0,"n":{"docs":{},"df":0,"c":{"docs":{"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.4142135623730951}},"df":1}}}}},"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"l":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.7320508075688772}},"df":1}}}}}}},"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"h":{"docs":{"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0}},"df":1}}}}},"’":{"docs":{"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0}},"df":1}},"w":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/ios/ios setup/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/flutter/flutter setup/":{"tf":1.4142135623730951},"https://phlip9.com/notes/reproducible builds/nix/links/":{"tf":1.0}},"df":3}}}},"s":{"docs":{},"df":0,"h":{"docs":{},"df":0,"b":{"docs":{},"df":0,"o":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.0}},"df":1}}}}}}},"t":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0}},"df":1,"a":{"docs":{"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/foreign bank account report (FBAR)/":{"tf":1.0},"https://phlip9.com/notes/b l o c k c h a i n/btc utreexo - utxo accumulator/":{"tf":1.0},"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":2.0},"https://phlip9.com/notes/btc-ln/BOLT 4 - onion routing protocol/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":2.6457513110645907},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":2.6457513110645907},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":3.605551275463989},"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":2.0},"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":3.605551275463989},"https://phlip9.com/notes/confidential computing/intel SGX/secure time/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/marblerun/":{"tf":2.23606797749979},"https://phlip9.com/notes/crypto/(talk) authenticated data structures for stateless validation/":{"tf":1.4142135623730951},"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":1.4142135623730951},"https://phlip9.com/notes/devops/consul/":{"tf":1.0},"https://phlip9.com/notes/devops/secrets/ejson-kms (AWS)/":{"tf":2.6457513110645907},"https://phlip9.com/notes/devops/service mesh/":{"tf":1.0},"https://phlip9.com/notes/distributed systems/papers/(2020) Semi-Fast Byzantine-tolerant Shared Register without Reliable Broadcast/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.0},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0},"https://phlip9.com/notes/networking/network interface card (NIC)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.0},"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.0},"https://phlip9.com/notes/performance/simdjson talk/":{"tf":1.7320508075688772},"https://phlip9.com/notes/postgres/postgres performance tuning/":{"tf":2.6457513110645907},"https://phlip9.com/notes/postgres/types of scans/":{"tf":3.1622776601683795},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.7320508075688772},"https://phlip9.com/notes/router/lightning router/lightning router overview/":{"tf":2.8284271247461903},"https://phlip9.com/notes/statistics probability/MAD - median absolute deviation/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/p-value/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/winsorize/":{"tf":1.0}},"df":31,"(":{"docs":{"https://phlip9.com/notes/distributed systems/papers/(2020) Semi-Fast Byzantine-tolerant Shared Register without Reliable Broadcast/":{"tf":1.4142135623730951}},"df":1,"r":{"docs":{"https://phlip9.com/notes/distributed systems/papers/(2020) Semi-Fast Byzantine-tolerant Shared Register without Reliable Broadcast/":{"tf":1.4142135623730951}},"df":1},"w":{"docs":{"https://phlip9.com/notes/distributed systems/papers/(2020) Semi-Fast Byzantine-tolerant Shared Register without Reliable Broadcast/":{"tf":1.4142135623730951}},"df":1}},".":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/statistics probability/winsorize/":{"tf":1.0}},"df":1,"1":{"docs":{"https://phlip9.com/notes/statistics probability/winsorize/":{"tf":1.0}},"df":1}}}}},"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{},"df":0,".":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.0}},"df":1}}}}}},"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/statistics probability/winsorize/":{"tf":1.0}},"df":1}}},"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"_":{"docs":{},"df":0,"v":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0}},"df":1}}}}}},"v":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{"https://phlip9.com/notes/statistics probability/winsorize/":{"tf":1.0}},"df":1}}}},"b":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{"https://phlip9.com/notes/postgres/postgres performance tuning/":{"tf":1.0}},"df":1}}},"c":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0},"https://phlip9.com/notes/devops/consul/":{"tf":1.0},"https://phlip9.com/notes/performance/simdjson talk/":{"tf":1.0}},"df":3}}}},"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"g":{"docs":{"https://phlip9.com/notes/crypto/biscuit authz/":{"tf":1.4142135623730951}},"df":1}}},"p":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"p":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":2.449489742783178}},"df":1}}}},"s":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.7320508075688772}},"df":1}}},"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"u":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{},"df":0,"u":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0},"https://phlip9.com/notes/postgres/types of scans/":{"tf":1.0}},"df":2}}}}}}}},"t":{"docs":{},"df":0,"y":{"docs":{},"df":0,"p":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":2.0}},"df":1}}},"v":{"docs":{},"df":0,"i":{"docs":{},"df":0,"e":{"docs":{},"df":0,"w":{"docs":{},"df":0,"t":{"docs":{},"df":0,"y":{"docs":{},"df":0,"p":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":2.0}},"df":1}}}}}}}},"e":{"docs":{"https://phlip9.com/notes/android/OTA updates for rooted android phone/":{"tf":1.0},"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0},"https://phlip9.com/notes/b l o c k c h a i n/fastpay/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":1.0},"https://phlip9.com/notes/misc/water distillation setup/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/reproducible-builds.org/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.4142135623730951}},"df":12}},"v":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/aptos/":{"tf":1.0}},"df":1,"w":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"g":{"docs":{},"df":0,"/":{"docs":{},"df":0,"n":{"docs":{},"df":0,"i":{"docs":{},"df":0,"x":{"docs":{"https://phlip9.com/notes/reproducible builds/nix/links/":{"tf":1.0}},"df":1}}}}}}}}}},"z":{"docs":{},"df":0,"w":{"docs":{},"df":0,"h":{"docs":{},"df":0,"5":{"docs":{},"df":0,"a":{"docs":{},"df":0,"i":{"docs":{},"df":0,"e":{"docs":{},"df":0,"x":{"docs":{},"df":0,"+":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{},"df":0,"k":{"docs":{},"df":0,"s":{"docs":{},"df":0,"g":{"docs":{},"df":0,"m":{"docs":{},"df":0,"n":{"docs":{},"df":0,"x":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}},"y":{"docs":{"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/money services business (MSB)/":{"tf":1.0},"https://phlip9.com/notes/devops/secrets/1password - secrets automation/":{"tf":1.0},"https://phlip9.com/notes/management/relieve often - why generals were more successful in WWII/":{"tf":1.4142135623730951},"https://phlip9.com/notes/misc/uptime to downtime conversion/":{"tf":1.4142135623730951},"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.0}},"df":5}},"b":{"docs":{"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":1.0},"https://phlip9.com/notes/performance/profiling/":{"tf":1.0},"https://phlip9.com/notes/postgres/postgres performance tuning/":{"tf":1.0},"https://phlip9.com/notes/postgres/snippets/":{"tf":1.0},"https://phlip9.com/notes/postgres/types of scans/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.4142135623730951}},"df":6,":":{"docs":{},"df":0,"m":{"docs":{},"df":0,"i":{"docs":{},"df":0,"g":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.0}},"df":1}}}}}}},"c":{"docs":{},"df":0,"d":{"docs":{},"df":0,"k":{"docs":{},"df":0,"/":{"docs":{},"df":0,"m":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"p":{"docs":{},"df":0,"h":{"docs":{"https://phlip9.com/notes/reproducible builds/nix/links/":{"tf":1.0}},"df":1}}}}}}}}},"g":{"docs":{},"df":0,"_":{"docs":{},"df":0,"u":{"docs":{},"df":0,"3":{"docs":{},"df":0,"2":{"docs":{},"df":0,"(":{"docs":{},"df":0,"l":{"docs":{},"df":0,"b":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.0}},"df":1}}}},"_":{"docs":{},"df":0,"b":{"docs":{},"df":0,"y":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"(":{"docs":{},"df":0,"l":{"docs":{},"df":0,"b":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.0}},"df":1}}}}}}}},"n":{"docs":{},"df":0,"i":{"docs":{},"df":0,"b":{"docs":{},"df":0,"(":{"docs":{},"df":0,"l":{"docs":{},"df":0,"b":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.0}},"df":1}}}}}}}}}},"6":{"docs":{},"df":0,"4":{"docs":{},"df":0,"_":{"docs":{},"df":0,"b":{"docs":{},"df":0,"y":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"(":{"docs":{},"df":0,"l":{"docs":{},"df":0,"b":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.0}},"df":1}}}}}}}}}}},"8":{"docs":{},"df":0,"(":{"docs":{},"df":0,"l":{"docs":{},"df":0,"b":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.0}},"df":1}}}}}}},"s":{"docs":{},"df":0,"y":{"docs":{},"df":0,"m":{"docs":{},"df":0,"/":{"docs":{},"df":0,"u":{"docs":{},"df":0,"n":{"docs":{},"df":0,"k":{"docs":{},"df":0,"n":{"docs":{},"df":0,"o":{"docs":{},"df":0,"w":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/gramine/":{"tf":1.0}},"df":2}}}}}}}}}}}}},"c":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0},"https://phlip9.com/notes/devops/nomad/":{"tf":1.0}},"df":2,"1":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.4142135623730951}},"df":1,"d":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0}},"df":1}},"2":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.4142135623730951}},"df":1,"d":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0}},"df":1}},"4":{"docs":{},"df":0,"8":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0}},"df":1,"d":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0}},"df":1}}},"8":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0}},"df":1},"a":{"docs":{},"df":0,"p":{"docs":{"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":3.1622776601683795},"https://phlip9.com/notes/confidential computing/gramine/":{"tf":2.6457513110645907},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":2.449489742783178},"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.4142135623730951}},"df":4,"/":{"docs":{},"df":0,"1":{"docs":{},"df":0,".":{"docs":{},"df":0,"1":{"docs":{},"df":0,"2":{"docs":{},"df":0,".":{"docs":{},"df":0,"1":{"docs":{},"df":0,"/":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"u":{"docs":{},"df":0,"x":{"docs":{},"df":0,"/":{"docs":{},"df":0,"d":{"docs":{},"df":0,"o":{"docs":{},"df":0,"c":{"docs":{},"df":0,"s":{"docs":{},"df":0,"/":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{},"df":0,"_":{"docs":{},"df":0,"s":{"docs":{},"df":0,"g":{"docs":{},"df":0,"x":{"docs":{},"df":0,"_":{"docs":{},"df":0,"s":{"docs":{},"df":0,"w":{"docs":{},"df":0,"_":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"_":{"docs":{},"df":0,"g":{"docs":{},"df":0,"u":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"_":{"docs":{},"df":0,"f":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"_":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"u":{"docs":{},"df":0,"x":{"docs":{},"df":0,".":{"docs":{},"df":0,"p":{"docs":{},"df":0,"d":{"docs":{},"df":0,"f":{"docs":{"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"8":{"docs":{},"df":0,"/":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"u":{"docs":{},"df":0,"x":{"docs":{},"df":0,"/":{"docs":{},"df":0,"p":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"b":{"docs":{},"df":0,"u":{"docs":{},"df":0,"i":{"docs":{},"df":0,"l":{"docs":{},"df":0,"t":{"docs":{},"df":0,"_":{"docs":{},"df":0,"d":{"docs":{},"df":0,"c":{"docs":{},"df":0,"a":{"docs":{},"df":0,"p":{"docs":{},"df":0,"_":{"docs":{},"df":0,"1":{"docs":{},"df":0,".":{"docs":{},"df":0,"1":{"docs":{},"df":0,"8":{"docs":{},"df":0,".":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,".":{"docs":{},"df":0,"g":{"docs":{},"df":0,"z":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"_":{"docs":{},"df":0,"1":{"docs":{},"df":0,".":{"docs":{},"df":0,"1":{"docs":{},"df":0,"1":{"docs":{"https://phlip9.com/notes/confidential computing/gramine/":{"tf":1.0}},"df":1}}}}}}},"d":{"docs":{},"df":0,"c":{"docs":{"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.0}},"df":1},"s":{"docs":{},"df":0,"v":{"docs":{},"df":0,"3":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":2.0}},"df":1}}}},"i":{"docs":{},"df":0,"/":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"e":{"docs":{},"df":0,"x":{"docs":{},"df":0,"o":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/btc utreexo - utxo accumulator/":{"tf":1.0}},"df":1}}}}}}}}},"s":{"docs":{},"df":0,"v":{"docs":{},"df":0,"2":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.7320508075688772}},"df":1},"3":{"docs":{"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/gramine/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.7320508075688772}},"df":3}}}},"d":{"docs":{},"df":0,"+":{"docs":{},"df":0,"g":{"docs":{},"df":0,"t":{"docs":{},"df":0,"9":{"docs":{},"df":0,"s":{"docs":{},"df":0,"s":{"docs":{},"df":0,"p":{"docs":{},"df":0,"s":{"docs":{},"df":0,"s":{"docs":{},"df":0,"q":{"docs":{},"df":0,"0":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{},"df":0,"c":{"docs":{},"df":0,"m":{"docs":{},"df":0,"v":{"docs":{},"df":0,"h":{"docs":{},"df":0,"4":{"docs":{},"df":0,"9":{"docs":{},"df":0,"m":{"docs":{},"df":0,"o":{"docs":{},"df":0,"g":{"docs":{},"df":0,"j":{"docs":{},"df":0,"t":{"docs":{},"df":0,"1":{"docs":{},"df":0,"y":{"docs":{},"df":0,"o":{"docs":{},"df":0,"y":{"docs":{},"df":0,"s":{"docs":{},"df":0,"l":{"docs":{},"df":0,"t":{"docs":{},"df":0,"d":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{},"df":0,"j":{"docs":{},"df":0,"w":{"docs":{},"df":0,"/":{"docs":{},"df":0,"9":{"docs":{},"df":0,"f":{"docs":{},"df":0,"z":{"docs":{},"df":0,"p":{"docs":{},"df":0,"o":{"docs":{},"df":0,"o":{"docs":{},"df":0,"y":{"docs":{},"df":0,"p":{"docs":{},"df":0,"a":{"docs":{},"df":0,"h":{"docs":{},"df":0,"x":{"docs":{},"df":0,"0":{"docs":{},"df":0,"r":{"docs":{},"df":0,"+":{"docs":{},"df":0,"m":{"docs":{},"df":0,"j":{"docs":{},"df":0,"t":{"docs":{},"df":0,"l":{"docs":{},"df":0,"w":{"docs":{},"df":0,"p":{"docs":{},"df":0,"x":{"docs":{},"df":0,"v":{"docs":{},"df":0,"m":{"docs":{},"df":0,"r":{"docs":{},"df":0,"v":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"c":{"docs":{},"df":0,"a":{"docs":{},"df":0,"p":{"docs":{},"df":0,"=":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/confidential computing/gramine/":{"tf":1.0}},"df":1}}}}}},"d":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.7320508075688772}},"df":1}},"i":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{},"df":0,"=":{"docs":{},"df":0,"d":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{"https://phlip9.com/notes/confidential computing/gramine/":{"tf":1.0}},"df":1}}}}}}}}},"o":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 8 - secure noise transport/":{"tf":1.0}},"df":1,"s":{"docs":{},"df":0,"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/devops/azure CLI/":{"tf":1.0}},"df":1}}}}}},"e":{"docs":{"https://phlip9.com/notes/crypto/acme protocol/":{"tf":1.0}},"df":1,"a":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0}},"df":1,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/foreign bank account report (FBAR)/":{"tf":1.0},"https://phlip9.com/notes/lang/operator fixity and precedence/":{"tf":1.0}},"df":2}},"o":{"docs":{},"df":0,"c":{"docs":{},"df":0,"k":{"docs":{"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":2.6457513110645907}},"df":1}}}}},"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/financial instituion/":{"tf":1.0},"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/money services business (MSB)/":{"tf":1.4142135623730951}},"df":2}}},"r":{"docs":{},"df":0,"m":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/devops/azure CLI/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.4142135623730951}},"df":2}}}}},"b":{"docs":{"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":2.23606797749979},"https://phlip9.com/notes/confidential computing/gramine/":{"tf":1.4142135623730951},"https://phlip9.com/notes/devops/azure CLI/":{"tf":1.0},"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.4142135623730951}},"df":5,".":{"docs":{},"df":0,"k":{"docs":{},"df":0,"e":{"docs":{},"df":0,"y":{"docs":{"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/gramine/":{"tf":1.0}},"df":2}}}},"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,".":{"docs":{},"df":0,"[":{"docs":{},"df":0,"1":{"docs":{},"df":0,"]":{"docs":{},"df":0,"[":{"docs":{},"df":0,"2":{"docs":{"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.0}},"df":1}}}}}}}}},"i":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/reproducible builds/nix/nix auto-allocate-uids -> nixbld users/":{"tf":1.0}},"df":1,"/":{"docs":{},"df":0,"u":{"docs":{},"df":0,"b":{"docs":{},"df":0,"u":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"u":{"docs":{},"df":0,"/":{"docs":{},"df":0,"w":{"docs":{},"df":0,"s":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/devops/azure CLI/":{"tf":1.0}},"df":1}}}}}}}}}}}}}},"u":{"docs":{},"df":0,"g":{"docs":{"https://phlip9.com/notes/android/ADB over TCP inside WSL2/":{"tf":1.7320508075688772},"https://phlip9.com/notes/android/android cli setup/":{"tf":2.0},"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.7320508075688772},"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.7320508075688772},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":3.1622776601683795},"https://phlip9.com/notes/confidential computing/gramine/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/marblerun/":{"tf":1.0},"https://phlip9.com/notes/lang/flutter/flutter setup/":{"tf":1.0},"https://phlip9.com/notes/lang/gdb ref/":{"tf":1.0},"https://phlip9.com/notes/lang/lua/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.7320508075688772},"https://phlip9.com/notes/lang/rust/rr with rust/":{"tf":3.0},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0},"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/nix/nix debug broken package build/":{"tf":1.4142135623730951},"https://phlip9.com/notes/reproducible builds/nix/nix debug spurrious rebuilds/":{"tf":1.7320508075688772},"https://phlip9.com/notes/reproducible builds/rebuilderd/":{"tf":1.0}},"df":20,".":{"docs":{},"df":0,"k":{"docs":{},"df":0,"e":{"docs":{},"df":0,"y":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0}},"df":1}}}}}}},"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"e":{"docs":{},"df":0,"b":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"k":{"docs":{"https://phlip9.com/notes/lang/lua/":{"tf":1.0}},"df":1}}}}}}}}}},"/":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"v":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"p":{"docs":{"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0}},"df":1}}}}}}}},"_":{"docs":{},"df":0,"a":{"docs":{},"df":0,"b":{"docs":{},"df":0,"b":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"v":{"docs":{"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.0}},"df":1}}}}},"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"g":{"docs":{"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.0}},"df":1}}}},"s":{"docs":{},"df":0,"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{},"df":0,"!":{"docs":{},"df":0,"(":{"docs":{},"df":0,"(":{"docs":{},"df":0,"x":{"docs":{"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.0}},"df":1}},"f":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"s":{"docs":{"https://phlip9.com/notes/statistics probability/G-test - multinomial goodness-of-fit/":{"tf":1.0}},"df":1}}}},"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"_":{"docs":{},"df":0,"p":{"docs":{},"df":0,"m":{"docs":{},"df":0,"f":{"docs":{},"df":0,"_":{"docs":{},"df":0,"s":{"docs":{},"df":0,"u":{"docs":{},"df":0,"b":{"docs":{},"df":0,"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{},"df":0,"(":{"docs":{},"df":0,"p":{"docs":{"https://phlip9.com/notes/statistics probability/G-test - multinomial goodness-of-fit/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}},"_":{"docs":{},"df":0,"g":{"docs":{},"df":0,"e":{"docs":{},"df":0,"!":{"docs":{},"df":0,"(":{"docs":{},"df":0,"d":{"docs":{},"df":0,"o":{"docs":{},"df":0,"f":{"docs":{"https://phlip9.com/notes/statistics probability/multinomial distribution/":{"tf":1.0}},"df":1}}}}}}},"l":{"docs":{"https://phlip9.com/notes/statistics probability/G-test - multinomial goodness-of-fit/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/multinomial distribution/":{"tf":1.0}},"df":2,"e":{"docs":{},"df":0,"!":{"docs":{},"df":0,"(":{"docs":{},"df":0,"n":{"docs":{},"df":0,"n":{"docs":{},"df":0,"z":{"docs":{"https://phlip9.com/notes/statistics probability/multinomial distribution/":{"tf":1.0}},"df":1}}}}}}}}}}}}}},"g":{"docs":{},"df":0,"d":{"docs":{},"df":0,"b":{"docs":{},"df":0,"_":{"docs":{},"df":0,"s":{"docs":{},"df":0,"c":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"p":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.0}},"df":1}}}}}}}}}},"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"f":{"docs":{},"df":0,"o":{"docs":{"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.0}},"df":1}}}},"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.0}},"df":1}},"o":{"docs":{},"df":0,"c":{"docs":{"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.0}},"df":1}}},"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.0}},"df":1}}}}},"p":{"docs":{},"df":0,"u":{"docs":{},"df":0,"b":{"docs":{},"df":0,"n":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.0}},"df":1}}},"t":{"docs":{},"df":0,"y":{"docs":{},"df":0,"p":{"docs":{"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":2.0}},"df":1}}}}}},"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"g":{"docs":{"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.0}},"df":1}}}},"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.4142135623730951}},"df":1}}}},"g":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/rust/rr with rust/":{"tf":1.0},"https://phlip9.com/notes/nvim/universal-ctags Notes/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.4142135623730951}},"df":4,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"/":{"docs":{},"df":0,"r":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/lang/rust/rr with rust/":{"tf":1.0}},"df":1,"/":{"docs":{},"df":0,"w":{"docs":{},"df":0,"i":{"docs":{},"df":0,"k":{"docs":{},"df":0,"i":{"docs":{},"df":0,"/":{"docs":{},"df":0,"z":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/lang/rust/rr with rust/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}},"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"f":{"docs":{},"df":0,"o":{"docs":{"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.0}},"df":1}}}}}}},"c":{"docs":{"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0},"https://phlip9.com/notes/android/root phone with magisk/":{"tf":1.0}},"df":2,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.0}},"df":2,"r":{"docs":{"https://phlip9.com/notes/crypto/biscuit authz/":{"tf":1.0}},"df":1}}}},"i":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/AI ML/Expectimax Search/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/BOLT 4 - onion routing protocol/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/secure time/":{"tf":1.0},"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":1.0},"https://phlip9.com/notes/nvim/universal-ctags Notes/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/lightning router overview/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/testing whether a coin is fair/":{"tf":1.4142135623730951}},"df":9},"m":{"docs":{"https://phlip9.com/notes/performance/simdjson talk/":{"tf":1.0}},"df":1},"s":{"docs":{"https://phlip9.com/notes/AI ML/Markov Decision Process (MDP)/":{"tf":1.7320508075688772}},"df":1}},"l":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.4142135623730951}},"df":1,"a":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.4142135623730951},"https://phlip9.com/notes/devops/docker compose/":{"tf":1.0},"https://phlip9.com/notes/devops/nomad/":{"tf":1.0},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":2.449489742783178},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0},"https://phlip9.com/notes/lang/lua/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/operator fixity and precedence/":{"tf":1.4142135623730951}},"df":7}}},"o":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":2.0},"https://phlip9.com/notes/performance/simdjson talk/":{"tf":1.7320508075688772},"https://phlip9.com/notes/postgres/snippets/":{"tf":1.4142135623730951}},"df":3,"e":{"docs":{},"df":0,"(":{"docs":{},"df":0,"'":{"docs":{},"df":0,"0":{"docs":{},"df":0,"1":{"docs":{},"df":0,"a":{"docs":{},"df":0,"b":{"docs":{},"df":0,"e":{"docs":{},"df":0,"f":{"docs":{"https://phlip9.com/notes/postgres/snippets/":{"tf":1.0}},"df":1}}}}}}}}}},"m":{"docs":{},"df":0,"p":{"docs":{},"df":0,"o":{"docs":{},"df":0,"s":{"docs":{"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.0}},"df":1}}}},"u":{"docs":{},"df":0,"p":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.0}},"df":1}}}},"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{"https://phlip9.com/notes/AI ML/Markov Decision Process (MDP)/":{"tf":1.0},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/standard error/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/testing whether a coin is fair/":{"tf":1.0}},"df":4}}},"y":{"docs":{},"df":0,"p":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/marblerun/":{"tf":1.0},"https://phlip9.com/notes/devops/secrets/ejson (Shopify)/":{"tf":1.0},"https://phlip9.com/notes/devops/secrets/ejson-kms (AWS)/":{"tf":2.0},"https://phlip9.com/notes/devops/secrets/mozilla SOPS/":{"tf":1.4142135623730951},"https://phlip9.com/notes/router/lightning router/lightning router overview/":{"tf":1.4142135623730951}},"df":7}}}}},"d":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.4142135623730951}},"df":3}}},"e":{"docs":{},"df":0,"p":{"docs":{"https://phlip9.com/notes/WSL/WSL2 custom kernel/":{"tf":1.0}},"df":1,"l":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":1.0}},"df":1}},"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/fuzzing/fuzzing/":{"tf":1.7320508075688772}},"df":1}}}}}},"f":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":3.0},"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/zero-conf channels/":{"tf":1.0},"https://phlip9.com/notes/combinatorics/k-combinations of a multiset/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/gramine/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.7320508075688772},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":6.782329983125268}},"df":8,"\\":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{},"df":0,"i":{"docs":{},"df":0,"{":{"docs":{},"df":0,"\\":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"h":{"docs":{},"df":0,"c":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"{":{"docs":{},"df":0,"x":{"docs":{"https://phlip9.com/notes/statistics probability/G-test - multinomial goodness-of-fit/":{"tf":1.0}},"df":1}}}}}}}}}}}}}},"e":{"docs":{},"df":0,"p":{"docs":{},"df":0,"s":{"docs":{},"df":0,"{":{"docs":{},"df":0,"\\":{"docs":{},"df":0,"v":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"p":{"docs":{},"df":0,"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/statistics probability/CDF confidence bands - DKW inequality/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/multinomial distribution/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/p-value/":{"tf":1.0}},"df":3}}}}}}}}}}}}}},"{":{"docs":{},"df":0,"\\":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"h":{"docs":{},"df":0,"b":{"docs":{},"df":0,"b":{"docs":{},"df":0,"{":{"docs":{"https://phlip9.com/notes/statistics probability/multinomial distribution/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/p-value/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/standard error/":{"tf":1.0}},"df":3}}}}}}}}}},"p":{"docs":{},"df":0,"v":{"docs":{},"df":0,"{":{"docs":{},"df":0,"p":{"docs":{},"df":0,"\\":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"x":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/statistics probability/p-value/":{"tf":1.0}},"df":1}}}}}}}}}},"a":{"docs":{},"df":0,"u":{"docs":{},"df":0,"l":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.7320508075688772},"https://phlip9.com/notes/android/root phone with magisk/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/breez lightning service providers/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/gramine/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.7320508075688772},"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":2.0},"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":1.0},"https://phlip9.com/notes/devops/azure CLI/":{"tf":2.0},"https://phlip9.com/notes/devops/k3s/":{"tf":1.0},"https://phlip9.com/notes/fuzzing/fuzzcheck-rs/":{"tf":1.0},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/lua/":{"tf":2.449489742783178},"https://phlip9.com/notes/lang/rust/rust verification tools/":{"tf":1.0},"https://phlip9.com/notes/misc/pop_OS! tweaks/":{"tf":1.4142135623730951},"https://phlip9.com/notes/misc/prepping RPI for embedded dev/":{"tf":1.0},"https://phlip9.com/notes/networking/network interfaces/":{"tf":2.23606797749979},"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.0},"https://phlip9.com/notes/postgres/types of scans/":{"tf":1.4142135623730951},"https://phlip9.com/notes/router/lightning router/captive portal/arubanetworks captive portal/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/lightning router overview/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/winsorize/":{"tf":1.4142135623730951}},"df":23,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"&":{"docs":{},"df":0,"l":{"docs":{},"df":0,"t":{"docs":{},"df":0,";":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"c":{"docs":{},"df":0,"&":{"docs":{},"df":0,"l":{"docs":{},"df":0,"t":{"docs":{},"df":0,";":{"docs":{},"df":0,"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{},"df":0,"w":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"k":{"docs":{},"df":0,"g":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"p":{"docs":{},"df":0,"h":{"docs":{},"df":0,"&":{"docs":{},"df":0,"g":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"e":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/crypto/dex - open-source OIDC & OAuth 2.0 provider/":{"tf":1.0}},"df":1}},"g":{"docs":{"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.0}},"df":1},"i":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/BOLT 8 - secure noise transport/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/breez lightning service providers/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/submarine swaps/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":3.7416573867739413},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":3.605551275463989},"https://phlip9.com/notes/devops/docker compose/":{"tf":1.0},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":2.449489742783178},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/gdb ref/":{"tf":1.0},"https://phlip9.com/notes/lang/koka-lang/":{"tf":1.0},"https://phlip9.com/notes/lang/lua/":{"tf":1.7320508075688772},"https://phlip9.com/notes/lang/operator fixity and precedence/":{"tf":1.0},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.4142135623730951},"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.4142135623730951},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/reproducible-builds.org/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.4142135623730951},"https://phlip9.com/notes/statistics probability/CDF confidence bands - DKW inequality/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/multinomial distribution/":{"tf":1.0}},"df":24,"i":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/money services business (MSB)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/btc-ln/breez lightning service providers/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":1.0},"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":1.0},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.7320508075688772},"https://phlip9.com/notes/misc/kintsugi/":{"tf":1.0},"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.0}},"df":9}}}},"u":{"docs":{},"df":0,"n":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.4142135623730951}},"df":1}}}}},"g":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":1.0}},"df":1}},"e":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0},"https://phlip9.com/notes/misc/water distillation setup/":{"tf":1.0}},"df":2}}},"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"y":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/btc utreexo - utxo accumulator/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/BOLT 4 - onion routing protocol/":{"tf":1.0}},"df":2,"e":{"docs":{},"df":0,"d":{"docs":{},"df":0,"_":{"docs":{},"df":0,"p":{"docs":{},"df":0,"a":{"docs":{},"df":0,"y":{"docs":{},"df":0,"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"_":{"docs":{},"df":0,"b":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"p":{"docs":{},"df":0,"o":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.4142135623730951}},"df":1}}}}}}}}}}}}}}}}}}}}}},"e":{"docs":{},"df":0,"g":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.0}},"df":4},"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"o":{"docs":{},"df":0,"p":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/devops/azure CLI/":{"tf":1.0}},"df":1}}}}}},"i":{"docs":{},"df":0,"b":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.0}},"df":1}}},"c":{"docs":{"https://phlip9.com/notes/misc/kintsugi/":{"tf":1.0}},"df":1,"i":{"docs":{"https://phlip9.com/notes/lang/operator fixity and precedence/":{"tf":1.0}},"df":1}},"g":{"docs":{},"df":0,"h":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.0}},"df":1}}},"v":{"docs":{"https://phlip9.com/notes/btc-ln/zero-conf channels/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.0},"https://phlip9.com/notes/management/relieve often - why generals were more successful in WWII/":{"tf":1.0}},"df":3,"e":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/combinatorics/k-combinations of a multiset/":{"tf":1.0}},"df":1,"i":{"docs":{"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/monetary instruments/":{"tf":1.0},"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/money services business (MSB)/":{"tf":1.0}},"df":2}}}}}},"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.4142135623730951},"https://phlip9.com/notes/devops/algo wireguard VPN server/":{"tf":1.4142135623730951},"https://phlip9.com/notes/devops/nomad/":{"tf":1.0}},"df":4},"g":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/WSL/WSL2 custom kernel/":{"tf":1.4142135623730951}},"df":1}}}},"o":{"docs":{"https://phlip9.com/notes/fuzzing/fuzzing/":{"tf":1.0},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":2.6457513110645907}},"df":2,"t":{"docs":{"https://phlip9.com/notes/management/relieve often - why generals were more successful in WWII/":{"tf":1.0}},"df":1}}},"n":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":1.0}},"df":1}}}},"s":{"docs":{"https://phlip9.com/notes/statistics probability/G-test - multinomial goodness-of-fit/":{"tf":1.4142135623730951},"https://phlip9.com/notes/statistics probability/multinomial distribution/":{"tf":1.0}},"df":2,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/performance/simdjson talk/":{"tf":1.0}},"df":1}}}}},"o":{"docs":{},"df":0,"x":{"docs":{},"df":0,"y":{"docs":{},"df":0,"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.7320508075688772}},"df":1,":":{"docs":{},"df":0,":":{"docs":{},"df":0,"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"w":{"docs":{},"df":0,"(":{"docs":{},"df":0,"&":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{},"df":0,"p":{"docs":{},"df":0,";":{"docs":{},"df":0,"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"_":{"docs":{},"df":0,"k":{"docs":{},"df":0,"e":{"docs":{},"df":0,"y":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}},"p":{"docs":{"https://phlip9.com/notes/WSL/WSL2 custom kernel/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/gramine/":{"tf":1.0},"https://phlip9.com/notes/devops/algo wireguard VPN server/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/nix/links/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/nix/nix debug spurrious rebuilds/":{"tf":1.7320508075688772}},"df":8,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/AI ML/Markov Decision Process (MDP)/":{"tf":1.0},"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.4142135623730951},"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/zero-conf channels/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":2.0},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":2.0},"https://phlip9.com/notes/confidential computing/gramine/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":2.0},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/secure time/":{"tf":1.0},"https://phlip9.com/notes/devops/consul/":{"tf":1.0},"https://phlip9.com/notes/devops/k3s/":{"tf":1.0},"https://phlip9.com/notes/devops/nomad/":{"tf":1.0},"https://phlip9.com/notes/devops/secrets/sy - share secrets safely/":{"tf":1.0},"https://phlip9.com/notes/fuzzing/fuzzing/":{"tf":1.7320508075688772},"https://phlip9.com/notes/keyboards/moergo glove80/":{"tf":1.0},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.4142135623730951},"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":1.0},"https://phlip9.com/notes/postgres/types of scans/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":2.0},"https://phlip9.com/notes/reproducible builds/nix/nix debug spurrious rebuilds/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.4142135623730951},"https://phlip9.com/notes/router/lightning router/lightning router overview/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/testing whether a coin is fair/":{"tf":1.0}},"df":27}}},"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.0}},"df":1}}},"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"y":{"docs":{"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.7320508075688772},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel TDX/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/marblerun/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":1.0},"https://phlip9.com/notes/devops/algo wireguard VPN server/":{"tf":1.0},"https://phlip9.com/notes/devops/deployment strategies/":{"tf":3.7416573867739413},"https://phlip9.com/notes/devops/docker compose/":{"tf":1.4142135623730951},"https://phlip9.com/notes/devops/linkerd/":{"tf":1.4142135623730951},"https://phlip9.com/notes/devops/service mesh/":{"tf":1.0},"https://phlip9.com/notes/management/relieve often - why generals were more successful in WWII/":{"tf":1.0},"https://phlip9.com/notes/misc/optimization solvers/":{"tf":1.0},"https://phlip9.com/notes/misc/setting up a headless raspbian boot image/":{"tf":1.4142135623730951},"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/nix/links/":{"tf":2.449489742783178},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":2.0}},"df":19,"/":{"docs":{},"df":0,"*":{"docs":{},"df":0,".":{"docs":{},"df":0,"z":{"docs":{},"df":0,"i":{"docs":{},"df":0,"p":{"docs":{"https://phlip9.com/notes/misc/setting up a headless raspbian boot image/":{"tf":1.0}},"df":1}}}}},"p":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"v":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{"https://phlip9.com/notes/devops/deployment strategies/":{"tf":1.0}},"df":1}}}}}}}}}},"o":{"docs":{},"df":0,"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/foreign bank account report (FBAR)/":{"tf":1.0},"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.0},"https://phlip9.com/notes/performance/simdjson talk/":{"tf":1.0}},"df":3,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/money services business (MSB)/":{"tf":1.0}},"df":1}}}}}},"t":{"docs":{"https://phlip9.com/notes/reproducible builds/nix/links/":{"tf":1.0}},"df":1}},"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{"https://phlip9.com/notes/lang/rust/self-referencing structs/":{"tf":1.0},"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.0}},"df":2}}},"t":{"docs":{},"df":0,"h":{"docs":{"https://phlip9.com/notes/AI ML/Expectimax Search/":{"tf":1.4142135623730951},"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.0},"https://phlip9.com/notes/crypto/(talk) authenticated data structures for stateless validation/":{"tf":1.0}},"df":3,"=":{"docs":{},"df":0,"1":{"docs":{"https://phlip9.com/notes/android/linux ADB udev setup/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/gramine/":{"tf":1.0},"https://phlip9.com/notes/lang/ATS/Install ATS2/":{"tf":1.0},"https://phlip9.com/notes/misc/setting up a headless raspbian boot image/":{"tf":1.0}},"df":5}}}}},"q":{"docs":{},"df":0,"u":{"docs":{},"df":0,"e":{"docs":{},"df":0,"u":{"docs":{},"df":0,"e":{"docs":{},"df":0,"'":{"docs":{"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":1.0}},"df":1}}}}}},"r":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.4142135623730951}},"df":1,"e":{"docs":{},"df":0,"f":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0}},"df":1}},"i":{"docs":{},"df":0,"v":{"docs":{"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/money services business (MSB)/":{"tf":1.0},"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":3.0},"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.7320508075688772},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":2.0},"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":3.3166247903554},"https://phlip9.com/notes/confidential computing/intel SGX/secure time/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":1.7320508075688772},"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":3.7416573867739413},"https://phlip9.com/notes/crypto/tls exported keying material/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/understanding sycamore reactivity/":{"tf":1.7320508075688772},"https://phlip9.com/notes/networking/CIDR/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/nix/nix debug spurrious rebuilds/":{"tf":2.0},"https://phlip9.com/notes/statistics probability/multinomial distribution/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/standard error/":{"tf":1.0}},"df":18,"e":{"docs":{},"df":0,"(":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"b":{"docs":{},"df":0,"u":{"docs":{},"df":0,"g":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.7320508075688772}},"df":1}}},"f":{"docs":{},"df":0,"a":{"docs":{},"df":0,"u":{"docs":{},"df":0,"l":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0}},"df":1}}}}}}}}}}}},"s":{"docs":{},"df":0,"c":{"docs":{"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.4142135623730951}},"df":1,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.0}},"df":1}}},"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"b":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/marblerun/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":1.0},"https://phlip9.com/notes/crypto/acme protocol/":{"tf":1.0},"https://phlip9.com/notes/devops/docker compose/":{"tf":1.4142135623730951},"https://phlip9.com/notes/devops/nomad/":{"tf":1.0},"https://phlip9.com/notes/lang/operator fixity and precedence/":{"tf":1.0},"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":1.0},"https://phlip9.com/notes/networking/CIDR/":{"tf":1.0},"https://phlip9.com/notes/postgres/types of scans/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":2.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":2.8284271247461903}},"df":14},"p":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0},"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.0},"https://phlip9.com/notes/postgres/snippets/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":2.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":2.8284271247461903}},"df":7,"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"(":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"c":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"p":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 11 - invoices/":{"tf":1.0}},"df":1}}}}}}}}},"h":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{},"df":0,"h":{"docs":{},"df":0,"(":{"docs":{},"df":0,"s":{"docs":{},"df":0,"h":{"docs":{},"df":0,"a":{"docs":{},"df":0,"2":{"docs":{},"df":0,"5":{"docs":{},"df":0,"6":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 11 - invoices/":{"tf":1.0}},"df":1}}}}}}}}}}}}}},"o":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 11 - invoices/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/BOLT 7 - p2p node and channel discovery/":{"tf":1.0}},"df":2}}}}}}},"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.4142135623730951}},"df":1}}},"i":{"docs":{},"df":0,"g":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/fastpay/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.7320508075688772},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.7320508075688772},"https://phlip9.com/notes/confidential computing/intel TDX/":{"tf":2.23606797749979},"https://phlip9.com/notes/design/":{"tf":1.0},"https://phlip9.com/notes/design/form design/":{"tf":2.0},"https://phlip9.com/notes/devops/k3s/":{"tf":1.0},"https://phlip9.com/notes/devops/kind (kubernetes in docker)/":{"tf":1.0},"https://phlip9.com/notes/devops/linkerd/":{"tf":1.0},"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":1.4142135623730951},"https://phlip9.com/notes/misc/kintsugi/":{"tf":1.0},"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.4142135623730951}},"df":14}},"r":{"docs":{"https://phlip9.com/notes/btc-ln/atomic multipath payments (AMP)/":{"tf":1.0},"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":1.0},"https://phlip9.com/notes/devops/nomad/":{"tf":1.4142135623730951},"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":1.0},"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/G-test - multinomial goodness-of-fit/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/standard error/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/testing whether a coin is fair/":{"tf":2.0}},"df":8}},"j":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"d":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/distributed systems/papers/(2021) Leaderless Consensus/":{"tf":1.0}},"df":1}}}}}},"k":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"p":{"docs":{"https://phlip9.com/notes/btc-ln/lightning libs/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0},"https://phlip9.com/notes/devops/minikube/":{"tf":1.0},"https://phlip9.com/notes/ios/ios setup/":{"tf":1.0},"https://phlip9.com/notes/lang/flutter/flutter setup/":{"tf":2.23606797749979},"https://phlip9.com/notes/misc/scanning QR codes on desktop/":{"tf":1.4142135623730951},"https://phlip9.com/notes/misc/setting up a headless raspbian boot image/":{"tf":1.4142135623730951},"https://phlip9.com/notes/networking/network interfaces/":{"tf":2.23606797749979},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.0}},"df":9}}}},"p":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{"https://phlip9.com/notes/performance/simdjson talk/":{"tf":1.0}},"df":1,"e":{"docs":{},"df":0,"_":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{},"df":0,"k":{"docs":{},"df":0,"1":{"docs":{},"df":0,"6":{"docs":{},"df":0,"[":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{},"df":0,"k":{"docs":{},"df":0,"1":{"docs":{},"df":0,"6":{"docs":{"https://phlip9.com/notes/performance/simdjson talk/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}},"e":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0}},"df":1}},"i":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/money services business (MSB)/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.0},"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.0}},"df":3}}},"r":{"docs":{},"df":0,"u":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"u":{"docs":{},"df":0,"x":{"docs":{"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.4142135623730951}},"df":2}}}}}}}}},"t":{"docs":{},"df":0,"_":{"docs":{},"df":0,"n":{"docs":{},"df":0,"o":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"_":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.0}},"df":1}}}}}}}},"i":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/atomic multipath payments (AMP)/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":1.4142135623730951},"https://phlip9.com/notes/devops/service mesh/":{"tf":1.4142135623730951},"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/arubanetworks captive portal/":{"tf":1.0}},"df":7}}}},"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"i":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/WSL/WSL2 custom kernel/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/gramine/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.0},"https://phlip9.com/notes/crypto/acme protocol/":{"tf":1.4142135623730951},"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":1.4142135623730951},"https://phlip9.com/notes/crypto/zkdocs/":{"tf":1.0},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0},"https://phlip9.com/notes/lang/flutter/flutter setup/":{"tf":1.0},"https://phlip9.com/notes/misc/kintsugi/":{"tf":1.0},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.7320508075688772},"https://phlip9.com/notes/networking/CIDR/":{"tf":1.0},"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.0},"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.0},"https://phlip9.com/notes/postgres/snippets/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.4142135623730951}},"df":19}}},"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/android/OTA updates for rooted android phone/":{"tf":1.0},"https://phlip9.com/notes/android/root phone with magisk/":{"tf":1.7320508075688772},"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/foreign bank account report (FBAR)/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":4.0},"https://phlip9.com/notes/confidential computing/intel SGX/secure time/":{"tf":1.0},"https://phlip9.com/notes/crypto/(talk) authenticated data structures for stateless validation/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/rust/rust verification tools/":{"tf":1.0},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/reproducible-builds.org/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/statistics probability/herbie - float error fixer/":{"tf":1.0}},"df":11,".":{"docs":{},"df":0,"e":{"docs":{},"df":0,"x":{"docs":{"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.4142135623730951}},"df":1}}}}},"r":{"docs":{},"df":0,"m":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/foreign bank account report (FBAR)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.7320508075688772},"https://phlip9.com/notes/devops/service mesh/":{"tf":1.0},"https://phlip9.com/notes/distributed systems/papers/(2020) Semi-Fast Byzantine-tolerant Shared Register without Reliable Broadcast/":{"tf":1.0},"https://phlip9.com/notes/keyboards/moergo glove80/":{"tf":1.0},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0},"https://phlip9.com/notes/lang/operator fixity and precedence/":{"tf":1.0},"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":1.0},"https://phlip9.com/notes/postgres/types of scans/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/testing whether a coin is fair/":{"tf":1.0}},"df":12,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"y":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"m":{"docs":{},"df":0,"s":{"docs":{},"df":0,"/":{"docs":{},"df":0,"n":{"docs":{},"df":0,"i":{"docs":{},"df":0,"x":{"docs":{"https://phlip9.com/notes/reproducible builds/nix/nix auto-allocate-uids -> nixbld users/":{"tf":1.0}},"df":1}}},"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"f":{"docs":{},"df":0,"f":{"docs":{"https://phlip9.com/notes/reproducible builds/nix/links/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}},"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/AI ML/Expectimax Search/":{"tf":1.4142135623730951},"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":1.0},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/rr with rust/":{"tf":1.7320508075688772},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/reproducible-builds.org/":{"tf":1.0}},"df":6}}},"s":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/lang/rust/rr with rust/":{"tf":1.0}},"df":1}}}}}}}},"v":{"docs":{"https://phlip9.com/notes/WSL/WSL2 custom kernel/":{"tf":2.0},"https://phlip9.com/notes/btc-ln/zero-conf channels/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":3.0},"https://phlip9.com/notes/confidential computing/gramine/":{"tf":2.0},"https://phlip9.com/notes/devops/docker compose/":{"tf":1.0},"https://phlip9.com/notes/devops/nomad/":{"tf":1.0},"https://phlip9.com/notes/lang/ATS/Install ATS2/":{"tf":1.7320508075688772},"https://phlip9.com/notes/lang/flutter/flutter setup/":{"tf":1.7320508075688772},"https://phlip9.com/notes/lang/rust/rust verification tools/":{"tf":1.0},"https://phlip9.com/notes/misc/prepping RPI for embedded dev/":{"tf":1.4142135623730951},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":2.23606797749979},"https://phlip9.com/notes/reproducible builds/nix/links/":{"tf":1.0}},"df":12,"/":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"s":{"docs":{},"df":0,"2":{"docs":{"https://phlip9.com/notes/lang/ATS/Install ATS2/":{"tf":1.0}},"df":1}}}},"f":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"i":{"docs":{},"df":0,"x":{"docs":{"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0}},"df":1}}}}}}}},"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"g":{"docs":{},"df":0,"x":{"docs":{"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0}},"df":1}}}},"k":{"docs":{},"df":0,"v":{"docs":{},"df":0,"m":{"docs":{"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":2.23606797749979}},"df":1}}},"n":{"docs":{},"df":0,"u":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/devops/azure CLI/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.4142135623730951}},"df":2}}},"p":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/misc/setting up a headless raspbian boot image/":{"tf":1.0}},"df":1}},"s":{"docs":{},"df":0,"g":{"docs":{},"df":0,"x":{"docs":{"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0}},"df":1,"/":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"c":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"v":{"docs":{"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0}},"df":1}}}}}}},"_":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"c":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"v":{"docs":{"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0}},"df":1}}}}}}}}},"i":{"docs":{},"df":0,"g":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0}},"df":1}}}}},"b":{"docs":{},"df":0,"o":{"docs":{},"df":0,"x":{"docs":{"https://phlip9.com/notes/reproducible builds/nix/links/":{"tf":1.0}},"df":1}}},"e":{"docs":{},"df":0,"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"p":{"docs":{"https://phlip9.com/notes/android/ADB over TCP inside WSL2/":{"tf":1.0},"https://phlip9.com/notes/android/OTA updates for rooted android phone/":{"tf":1.0},"https://phlip9.com/notes/android/android cli setup/":{"tf":1.7320508075688772},"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.4142135623730951},"https://phlip9.com/notes/android/root phone with magisk/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.7320508075688772},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.7320508075688772},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.4142135623730951},"https://phlip9.com/notes/devops/kind (kubernetes in docker)/":{"tf":1.0},"https://phlip9.com/notes/devops/nomad/":{"tf":1.0},"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":1.0},"https://phlip9.com/notes/lang/flutter/flutter setup/":{"tf":2.23606797749979},"https://phlip9.com/notes/networking/network interface card (NIC)/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":2.449489742783178},"https://phlip9.com/notes/reproducible builds/reproducible-builds.org/":{"tf":2.0}},"df":17}}}},"i":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 4 - onion routing protocol/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/reproducible-builds.org/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/MAD - median absolute deviation/":{"tf":1.4142135623730951},"https://phlip9.com/notes/statistics probability/standard error/":{"tf":1.7320508075688772},"https://phlip9.com/notes/statistics probability/testing whether a coin is fair/":{"tf":2.0}},"df":5}},"c":{"docs":{"https://phlip9.com/notes/android/ADB over TCP inside WSL2/":{"tf":3.605551275463989},"https://phlip9.com/notes/android/OTA updates for rooted android phone/":{"tf":1.0},"https://phlip9.com/notes/android/android cli setup/":{"tf":3.872983346207417},"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":3.0},"https://phlip9.com/notes/android/linux ADB udev setup/":{"tf":1.0},"https://phlip9.com/notes/android/root phone with magisk/":{"tf":4.242640687119285},"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.7320508075688772},"https://phlip9.com/notes/btc-ln/breez lightning service providers/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":2.6457513110645907},"https://phlip9.com/notes/devops/azure CLI/":{"tf":1.0},"https://phlip9.com/notes/devops/nomad/":{"tf":1.0},"https://phlip9.com/notes/ios/ios setup/":{"tf":2.23606797749979},"https://phlip9.com/notes/keyboards/moergo glove80/":{"tf":1.0},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.7320508075688772},"https://phlip9.com/notes/lang/flutter/flutter setup/":{"tf":2.8284271247461903},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":2.0},"https://phlip9.com/notes/networking/network interface card (NIC)/":{"tf":1.0},"https://phlip9.com/notes/networking/network interfaces/":{"tf":2.6457513110645907},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/arubanetworks captive portal/":{"tf":1.7320508075688772},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":2.8284271247461903},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.4142135623730951}},"df":22,"e":{"docs":{},"df":0,"'":{"docs":{"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.0}},"df":2},"/":{"docs":{},"df":0,"e":{"docs":{},"df":0,"m":{"docs":{},"df":0,"u":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0}},"df":1}}}}},"o":{"docs":{},"df":0,"k":{"docs":{"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0}},"df":1}}}}},"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"g":{"docs":{"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0}},"df":1}}},"o":{"docs":{},"df":0,"p":{"docs":{"https://phlip9.com/notes/confidential computing/marblerun/":{"tf":1.4142135623730951},"https://phlip9.com/notes/devops/":{"tf":1.0},"https://phlip9.com/notes/devops/secrets/mozilla SOPS/":{"tf":1.0}},"df":3,"s":{"docs":{},"df":0,"/":{"docs":{},"df":0,"o":{"docs":{},"df":0,"1":{"docs":{},"df":0,"1":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/devops/o11y/":{"tf":1.0}},"df":1}}}},"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/devops/secrets/":{"tf":1.0}},"df":1}}}}}}}}}},"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"p":{"docs":{"https://phlip9.com/notes/reproducible builds/nix/links/":{"tf":1.0}},"df":1}}}}}},"x":{"docs":{"https://phlip9.com/notes/crypto/dex - open-source OIDC & OAuth 2.0 provider/":{"tf":2.449489742783178}},"df":1}},"h":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 8 - secure noise transport/":{"tf":1.0}},"df":1,"c":{"docs":{},"df":0,"p":{"docs":{"https://phlip9.com/notes/networking/ipv6 address space/":{"tf":1.0},"https://phlip9.com/notes/networking/network interfaces/":{"tf":2.23606797749979},"https://phlip9.com/notes/router/lightning router/captive portal/arubanetworks captive portal/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.0}},"df":4}}},"i":{"docs":{},"df":0,"_":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":2.23606797749979}},"df":1},"x":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":2.0}},"df":1},"z":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":2.23606797749979}},"df":1}},"a":{"docs":{},"df":0,"f":{"docs":{},"df":0,"y":{"docs":{},"df":0,"g":{"docs":{},"df":0,"i":{"docs":{},"df":0,"/":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"m":{"docs":{"https://phlip9.com/notes/crypto/acme protocol/":{"tf":1.0}},"df":1}}}}}}}},"g":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.7320508075688772},"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.4142135623730951},"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":1.0}},"df":5}}}},"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 8 - secure noise transport/":{"tf":1.0}},"df":1}},"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.4142135623730951}},"df":1}}}}},"c":{"docs":{},"df":0,"e":{"docs":{"https://phlip9.com/notes/combinatorics/k-combinations of a multiset/":{"tf":2.23606797749979}},"df":1,"v":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{"https://phlip9.com/notes/combinatorics/k-combinations of a multiset/":{"tf":1.0}},"df":1,"m":{"docs":{},"df":0,"u":{"docs":{},"df":0,"l":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{},"df":0,"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/combinatorics/k-combinations of a multiset/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}},"d":{"docs":{},"df":0,"n":{"docs":{},"df":0,"'":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/android/OTA updates for rooted android phone/":{"tf":1.0},"https://phlip9.com/notes/android/root phone with magisk/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/lightning rod/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.7320508075688772},"https://phlip9.com/notes/crypto/(talk) authenticated data structures for stateless validation/":{"tf":1.0},"https://phlip9.com/notes/crypto/acme protocol/":{"tf":1.0},"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":1.0},"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":1.0},"https://phlip9.com/notes/misc/kintsugi/":{"tf":1.0},"https://phlip9.com/notes/misc/setting up a headless raspbian boot image/":{"tf":1.0},"https://phlip9.com/notes/postgres/snippets/":{"tf":1.0}},"df":11}}}},"e":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/secure time/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/multinomial distribution/":{"tf":1.4142135623730951}},"df":2,"m":{"docs":{"https://phlip9.com/notes/":{"tf":1.0},"https://phlip9.com/notes/b l o c k c h a i n/aptos/":{"tf":1.4142135623730951},"https://phlip9.com/notes/b l o c k c h a i n/btc utreexo - utxo accumulator/":{"tf":1.0},"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":1.7320508075688772},"https://phlip9.com/notes/fuzzing/bolero - fuzzing + property testing/":{"tf":1.0}},"df":5,"'":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 8 - secure noise transport/":{"tf":1.0}},"df":1},"_":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":1.4142135623730951}},"df":1}}}}}}}},"a":{"docs":{},"df":0,"s":{"docs":{},"df":0,"s":{"docs":{},"df":0,"o":{"docs":{},"df":0,"c":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/aptos/":{"tf":1.0}},"df":1}}}}}}}},"f":{"docs":{},"df":0,"f":{"docs":{"https://phlip9.com/notes/confidential computing/gramine/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/nix/nix auto-allocate-uids -> nixbld users/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/nix/nix debug spurrious rebuilds/":{"tf":2.23606797749979}},"df":3,"e":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/AI ML/Markov Decision Process (MDP)/":{"tf":1.7320508075688772},"https://phlip9.com/notes/android/android cli setup/":{"tf":1.0},"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.7320508075688772},"https://phlip9.com/notes/android/linux ADB udev setup/":{"tf":1.0},"https://phlip9.com/notes/android/root phone with magisk/":{"tf":1.0},"https://phlip9.com/notes/b l o c k c h a i n/btc utreexo - utxo accumulator/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/BOLT 11 - invoices/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/lightning libs/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.0},"https://phlip9.com/notes/combinatorics/k-combinations of a multiset/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.7320508075688772},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":2.23606797749979},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.7320508075688772},"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.7320508075688772},"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":2.0},"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":1.7320508075688772},"https://phlip9.com/notes/crypto/acme protocol/":{"tf":1.0},"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":2.6457513110645907},"https://phlip9.com/notes/design/form design/":{"tf":1.0},"https://phlip9.com/notes/devops/nomad/":{"tf":1.0},"https://phlip9.com/notes/keyboards/moergo glove80/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/operator fixity and precedence/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/rust/understanding sycamore reactivity/":{"tf":1.0},"https://phlip9.com/notes/management/relieve often - why generals were more successful in WWII/":{"tf":1.0},"https://phlip9.com/notes/misc/kintsugi/":{"tf":1.0},"https://phlip9.com/notes/misc/optimization solvers/":{"tf":1.7320508075688772},"https://phlip9.com/notes/misc/prepping RPI for embedded dev/":{"tf":1.0},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.4142135623730951},"https://phlip9.com/notes/networking/network interface card (NIC)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/postgres/postgres performance tuning/":{"tf":1.0},"https://phlip9.com/notes/postgres/types of scans/":{"tf":1.7320508075688772},"https://phlip9.com/notes/reproducible builds/nix/nix debug spurrious rebuilds/":{"tf":2.23606797749979},"https://phlip9.com/notes/reproducible builds/rebuilderd/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/p-value/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/testing whether a coin is fair/":{"tf":1.0}},"df":37,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/networking/CIDR/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.4142135623730951}},"df":3}}}}}},"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"u":{"docs":{},"df":0,"l":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/secure time/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/marblerun/":{"tf":1.0},"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":1.4142135623730951}},"df":4}}}}},"o":{"docs":{},"df":0,"s":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"p":{"docs":{"https://phlip9.com/notes/reproducible builds/rebuilderd/":{"tf":1.0}},"df":1}}}}}}},"g":{"docs":{"https://phlip9.com/notes/devops/algo wireguard VPN server/":{"tf":1.7320508075688772},"https://phlip9.com/notes/devops/azure CLI/":{"tf":1.0}},"df":2,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.7320508075688772},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0},"https://phlip9.com/notes/crypto/(talk) authenticated data structures for stateless validation/":{"tf":1.0},"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":2.23606797749979}},"df":4,"(":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"p":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":1.0}},"df":1}}}}},"k":{"docs":{},"df":0,"e":{"docs":{},"df":0,"y":{"docs":{"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":1.0}},"df":1}}}}}}},"i":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/confidential computing/intel TDX/":{"tf":1.0},"https://phlip9.com/notes/distributed systems/papers/(2020) Semi-Fast Byzantine-tolerant Shared Register without Reliable Broadcast/":{"tf":1.0}},"df":2,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.7320508075688772}},"df":1,".":{"docs":{},"df":0,"d":{"docs":{},"df":0,"i":{"docs":{},"df":0,"g":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{},"df":0,"(":{"docs":{},"df":0,"b":{"docs":{},"df":0,"o":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"d":{"docs":{},"df":0,".":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}},"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,".":{"docs":{},"df":0,"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{},"df":0,"p":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}},"o":{"docs":{},"df":0,"c":{"docs":{},"df":0,"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/devops/algo wireguard VPN server/":{"tf":2.6457513110645907}},"df":1}}}}}}}}}},"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"s":{"docs":{"https://phlip9.com/notes/statistics probability/CDF confidence bands - DKW inequality/":{"tf":1.0}},"df":1}}}},"n":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.0}},"df":1}},"r":{"docs":{"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":4.242640687119285},"https://phlip9.com/notes/reproducible builds/nix/nix auto-allocate-uids -> nixbld users/":{"tf":1.0}},"df":2,"/":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"a":{"docs":{},"df":0,"g":{"docs":{"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.0}},"df":1}}}}}},"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/android/OTA updates for rooted android phone/":{"tf":1.0},"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/foreign bank account report (FBAR)/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/zero-conf channels/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0},"https://phlip9.com/notes/devops/algo wireguard VPN server/":{"tf":1.4142135623730951},"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":1.4142135623730951},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.4142135623730951},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.4142135623730951}},"df":10,"l":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/android/ADB over TCP inside WSL2/":{"tf":1.4142135623730951},"https://phlip9.com/notes/btc-ln/breez lightning service providers/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/submarine swaps/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":2.0},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.0},"https://phlip9.com/notes/ios/ios setup/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.0},"https://phlip9.com/notes/misc/setting up a headless raspbian boot image/":{"tf":1.0},"https://phlip9.com/notes/networking/network interface card (NIC)/":{"tf":1.0},"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.0},"https://phlip9.com/notes/postgres/postgres performance tuning/":{"tf":1.0}},"df":12}},"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.7320508075688772},"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0},"https://phlip9.com/notes/crypto/dex - open-source OIDC & OAuth 2.0 provider/":{"tf":1.0},"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":1.7320508075688772},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.4142135623730951},"https://phlip9.com/notes/postgres/postgres performance tuning/":{"tf":1.4142135623730951},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/nix/nix debug spurrious rebuilds/":{"tf":1.0}},"df":9}}}}}},"t":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":1.0}},"df":1}}},"s":{"docs":{},"df":0,"a":{"docs":{},"df":0,"b":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.4142135623730951},"https://phlip9.com/notes/devops/algo wireguard VPN server/":{"tf":1.0},"https://phlip9.com/notes/fuzzing/fuzzcheck-rs/":{"tf":1.0},"https://phlip9.com/notes/keyboards/moergo glove80/":{"tf":1.0},"https://phlip9.com/notes/lang/flutter/flutter setup/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/rust/rust verification tools/":{"tf":1.0},"https://phlip9.com/notes/misc/pop_OS! tweaks/":{"tf":1.4142135623730951},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0},"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.0},"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.0}},"df":11,"e":{"docs":{},"df":0,"_":{"docs":{},"df":0,"f":{"docs":{},"df":0,"i":{"docs":{},"df":0,"r":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"_":{"docs":{},"df":0,"b":{"docs":{},"df":0,"o":{"docs":{},"df":0,"o":{"docs":{},"df":0,"t":{"docs":{},"df":0,"_":{"docs":{},"df":0,"u":{"docs":{},"df":0,"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"_":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"=":{"docs":{},"df":0,"1":{"docs":{"https://phlip9.com/notes/misc/setting up a headless raspbian boot image/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}},"d":{"docs":{},"df":0,"v":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"g":{"docs":{"https://phlip9.com/notes/lang/lua/":{"tf":1.0}},"df":1}}}}}}},"g":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/distributed systems/papers/(2021) Leaderless Consensus/":{"tf":1.0}},"df":1}},"l":{"docs":{},"df":0,"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"w":{"docs":{"https://phlip9.com/notes/android/root phone with magisk/":{"tf":1.0}},"df":1}}}},"p":{"docs":{},"df":0,"p":{"docs":{},"df":0,"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/design/form design/":{"tf":1.0},"https://phlip9.com/notes/devops/algo wireguard VPN server/":{"tf":1.0}},"df":2}}}}},"s":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/postgres/types of scans/":{"tf":1.0}},"df":1}}},"c":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"d":{"docs":{},"df":0,"_":{"docs":{},"df":0,"f":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{},"df":0,"u":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0}},"df":1}}}}}}}},"f":{"docs":{},"df":0,"u":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.0}},"df":1}}}}}}},"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"s":{"docs":{},"df":0,"u":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/foreign bank account report (FBAR)/":{"tf":1.0}},"df":1}}}}},"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/AI ML/Markov Decision Process (MDP)/":{"tf":1.7320508075688772},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.0}},"df":2}}},"v":{"docs":{"https://phlip9.com/notes/devops/consul/":{"tf":1.0},"https://phlip9.com/notes/misc/setting up a headless raspbian boot image/":{"tf":1.0}},"df":2,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 7 - p2p node and channel discovery/":{"tf":2.23606797749979},"https://phlip9.com/notes/devops/consul/":{"tf":1.4142135623730951}},"df":2}}}}},"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/AI ML/Markov Decision Process (MDP)/":{"tf":1.0}},"df":1}},"i":{"docs":{},"df":0,"m":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.4142135623730951}},"df":1}}}}},"u":{"docs":{},"df":0,"s":{"docs":{},"df":0,"s":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel TDX/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":1.0}},"df":3}}}},"g":{"docs":{},"df":0,"u":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{"https://phlip9.com/notes/misc/kintsugi/":{"tf":1.0}},"df":1}},"s":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/performance/simdjson talk/":{"tf":1.0}},"df":1}}}},"j":{"docs":{},"df":0,"o":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/crypto/(talk) authenticated data structures for stateless validation/":{"tf":1.0},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0}},"df":2}}}}},"k":{"docs":{"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.4142135623730951},"https://phlip9.com/notes/fuzzing/fuzzcheck-rs/":{"tf":1.0},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.4142135623730951},"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.4142135623730951},"https://phlip9.com/notes/performance/simdjson talk/":{"tf":2.23606797749979},"https://phlip9.com/notes/postgres/postgres performance tuning/":{"tf":2.8284271247461903},"https://phlip9.com/notes/postgres/types of scans/":{"tf":1.0}},"df":7,"/":{"docs":{},"df":0,"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{},"df":0,"w":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"k":{"docs":{"https://phlip9.com/notes/performance/simdjson talk/":{"tf":1.0}},"df":1}}}}}}}}},"p":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/sycamore x futures/":{"tf":1.0}},"df":2}}}},"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"s":{"docs":{"https://phlip9.com/notes/statistics probability/MAD - median absolute deviation/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/standard error/":{"tf":1.7320508075688772}},"df":2}}},"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"y":{"docs":{"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0},"https://phlip9.com/notes/keyboards/moergo glove80/":{"tf":1.0},"https://phlip9.com/notes/misc/kintsugi/":{"tf":1.0},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":5.291502622129181},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":2.0}},"df":5,"'":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1},".":{"docs":{},"df":0,"b":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"g":{"docs":{},"df":0,"h":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1}}}}}},"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"f":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"h":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":2.0}},"df":1}}}}}}},"s":{"docs":{},"df":0,"h":{"docs":{},"df":0,"o":{"docs":{},"df":0,"w":{"docs":{},"df":0,"(":{"docs":{},"df":0,"g":{"docs":{},"df":0,"1":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":2.0}},"df":1},"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"p":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.7320508075688772}},"df":1}}}}},"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{},"df":0,"f":{"docs":{},"df":0,".":{"docs":{},"df":0,"c":{"docs":{},"df":0,"u":{"docs":{},"df":0,"r":{"docs":{},"df":0,"r":{"docs":{},"df":0,"_":{"docs":{},"df":0,"g":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"p":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":2.0}},"df":1}}}}}}}}}}}}}}},"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"x":{"docs":{},"df":0,"t":{"docs":{},"df":0,"_":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"a":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}},"i":{"docs":{},"df":0,"o":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.4142135623730951}},"df":1,".":{"docs":{},"df":0,"b":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"p":{"docs":{},"df":0,"(":{"docs":{},"df":0,"w":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{},"df":0,"t":{"docs":{},"df":0,"h":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":3.0}},"df":1}}}}}}}}}}}},"g":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"p":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":3.4641016151377544}},"df":1}}}}},"p":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"(":{"docs":{},"df":0,"2":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1},"n":{"docs":{},"df":0,"u":{"docs":{},"df":0,"m":{"docs":{},"df":0,"_":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":2.23606797749979}},"df":1}}}}}}}}}}}}}}}}},"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"_":{"docs":{},"df":0,"d":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"p":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"y":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}},"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"g":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{},"df":0,"(":{"docs":{},"df":0,"b":{"docs":{},"df":0,"m":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1,"1":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":2.0}},"df":1},"2":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":2.0}},"df":1}}}}}}}}}}}}}}}}}}},"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"m":{"docs":{},"df":0,"n":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 7 - p2p node and channel discovery/":{"tf":1.0}},"df":1}}}}},"i":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/reproducible builds/reproducible-builds.org/":{"tf":1.0}},"df":1}}},"t":{"docs":{},"df":0,"[":{"docs":{},"df":0,"e":{"docs":{},"df":0,"x":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"n":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.4142135623730951}},"df":1}}}}}}}},"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"c":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1}}},"i":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/misc/water distillation setup/":{"tf":1.7320508075688772}},"df":1},"n":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/btc-ln/atomic multipath payments (AMP)/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/breez lightning service providers/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/submarine swaps/":{"tf":1.0},"https://phlip9.com/notes/networking/CIDR/":{"tf":1.0}},"df":4}},"g":{"docs":{},"df":0,"u":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"h":{"docs":{"https://phlip9.com/notes/router/lightning router/lightning router overview/":{"tf":1.0}},"df":1}}}}}}},"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"b":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/":{"tf":1.0},"https://phlip9.com/notes/b l o c k c h a i n/fastpay/":{"tf":1.0},"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/secure time/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/marblerun/":{"tf":1.4142135623730951},"https://phlip9.com/notes/crypto/TLS self-signed pubkey-only certs/":{"tf":1.0},"https://phlip9.com/notes/devops/consul/":{"tf":1.4142135623730951},"https://phlip9.com/notes/devops/minikube/":{"tf":1.0},"https://phlip9.com/notes/distributed systems/":{"tf":1.0},"https://phlip9.com/notes/distributed systems/papers/":{"tf":1.0},"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":1.0},"https://phlip9.com/notes/lang/flutter/flutter setup/":{"tf":1.0},"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.7320508075688772},"https://phlip9.com/notes/reproducible builds/rebuilderd/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/reproducible-builds.org/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":2.0},"https://phlip9.com/notes/statistics probability/CDF confidence bands - DKW inequality/":{"tf":1.4142135623730951},"https://phlip9.com/notes/statistics probability/G-test - multinomial goodness-of-fit/":{"tf":2.0},"https://phlip9.com/notes/statistics probability/MAD - median absolute deviation/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/multinomial distribution/":{"tf":3.0},"https://phlip9.com/notes/statistics probability/p-value/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/standard error/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/testing whether a coin is fair/":{"tf":3.0}},"df":26,"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"s":{"docs":{},"df":0,"h":{"docs":{},"df":0,"a":{"docs":{},"df":0,"2":{"docs":{},"df":0,"5":{"docs":{},"df":0,"6":{"docs":{},"df":0,"s":{"docs":{},"df":0,"u":{"docs":{},"df":0,"m":{"docs":{"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0}},"df":1}}}}}}}}}}}},"o":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0}},"df":1}}}}}},"o":{"docs":{"https://phlip9.com/notes/WSL/WSL2 custom kernel/":{"tf":1.0},"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/gramine/":{"tf":1.7320508075688772}},"df":4,"/":{"docs":{},"df":0,"p":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/misc/setting up a headless raspbian boot image/":{"tf":1.0}},"df":1}}}}}}},"v":{"docs":{"https://phlip9.com/notes/lang/koka-lang/":{"tf":1.0},"https://phlip9.com/notes/lang/operator fixity and precedence/":{"tf":1.0}},"df":2,"e":{"docs":{"https://phlip9.com/notes/AI ML/Markov Decision Process (MDP)/":{"tf":1.0},"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.0},"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.0}},"df":3,"r":{"docs":{},"df":0,"g":{"docs":{"https://phlip9.com/notes/lang/koka-lang/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/G-test - multinomial goodness-of-fit/":{"tf":1.4142135623730951}},"df":2,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"c":{"docs":{},"df":0,"e":{"docs":{},"df":0,"]":{"docs":{},"df":0,"(":{"docs":{},"df":0,"h":{"docs":{},"df":0,"t":{"docs":{},"df":0,"t":{"docs":{},"df":0,"p":{"docs":{},"df":0,"s":{"docs":{},"df":0,":":{"docs":{},"df":0,"/":{"docs":{},"df":0,"/":{"docs":{},"df":0,"w":{"docs":{},"df":0,"w":{"docs":{},"df":0,"w":{"docs":{},"df":0,".":{"docs":{},"df":0,"w":{"docs":{},"df":0,"i":{"docs":{},"df":0,"k":{"docs":{},"df":0,"i":{"docs":{},"df":0,"w":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{},"df":0,".":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"/":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"/":{"docs":{},"df":0,"k":{"docs":{},"df":0,"u":{"docs":{},"df":0,"l":{"docs":{},"df":0,"l":{"docs":{},"df":0,"b":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"k":{"docs":{},"df":0,"%":{"docs":{},"df":0,"e":{"docs":{},"df":0,"2":{"docs":{},"df":0,"%":{"docs":{},"df":0,"8":{"docs":{},"df":0,"0":{"docs":{},"df":0,"%":{"docs":{},"df":0,"9":{"docs":{},"df":0,"3":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"i":{"docs":{},"df":0,"b":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"_":{"docs":{},"df":0,"d":{"docs":{},"df":0,"i":{"docs":{},"df":0,"v":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"g":{"docs":{"https://phlip9.com/notes/statistics probability/G-test - multinomial goodness-of-fit/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"f":{"docs":{"https://phlip9.com/notes/crypto/tls exported keying material/":{"tf":1.0}},"df":1}}}}},"i":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0},"https://phlip9.com/notes/postgres/types of scans/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/testing whether a coin is fair/":{"tf":1.0}},"df":3},"s":{"docs":{"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0}},"df":1}}}},"k":{"docs":{},"df":0,"m":{"docs":{"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.4142135623730951},"https://phlip9.com/notes/misc/pop_OS! tweaks/":{"tf":1.0}},"df":2},"w":{"docs":{"https://phlip9.com/notes/statistics probability/CDF confidence bands - DKW inequality/":{"tf":2.6457513110645907}},"df":1}},"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"g":{"docs":{"https://phlip9.com/notes/WSL/WSL2 custom kernel/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0}},"df":2}}}},"n":{"docs":{"https://phlip9.com/notes/crypto/acme protocol/":{"tf":1.7320508075688772},"https://phlip9.com/notes/devops/algo wireguard VPN server/":{"tf":1.4142135623730951},"https://phlip9.com/notes/devops/azure CLI/":{"tf":2.6457513110645907},"https://phlip9.com/notes/networking/network interfaces/":{"tf":2.449489742783178},"https://phlip9.com/notes/router/lightning router/captive portal/arubanetworks captive portal/":{"tf":3.605551275463989},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":4.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":3.0}},"df":7,"s":{"docs":{},"df":0,"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/secure time/":{"tf":1.0}},"df":1},"t":{"docs":{"https://phlip9.com/notes/devops/azure CLI/":{"tf":1.0}},"df":1}}}}},"o":{"docs":{"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0},"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel SGX/secure time/":{"tf":2.0},"https://phlip9.com/notes/confidential computing/marblerun/":{"tf":1.0},"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":1.0},"https://phlip9.com/notes/devops/azure CLI/":{"tf":1.0},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0},"https://phlip9.com/notes/networking/network interface card (NIC)/":{"tf":1.0},"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.0},"https://phlip9.com/notes/postgres/postgres performance tuning/":{"tf":1.0}},"df":14,"c":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/marblerun/":{"tf":1.0},"https://phlip9.com/notes/devops/azure CLI/":{"tf":1.0},"https://phlip9.com/notes/devops/docker compose/":{"tf":1.0},"https://phlip9.com/notes/devops/k3s/":{"tf":1.0},"https://phlip9.com/notes/devops/linkerd/":{"tf":1.0},"https://phlip9.com/notes/devops/minikube/":{"tf":1.0},"https://phlip9.com/notes/devops/nomad/":{"tf":1.0},"https://phlip9.com/notes/devops/secrets/1password - secrets automation/":{"tf":1.0},"https://phlip9.com/notes/lang/operator fixity and precedence/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/understanding sycamore reactivity/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/MAD - median absolute deviation/":{"tf":1.0}},"df":14,"k":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/confidential computing/gramine/":{"tf":2.0},"https://phlip9.com/notes/devops/azure CLI/":{"tf":1.0},"https://phlip9.com/notes/devops/docker compose/":{"tf":2.449489742783178},"https://phlip9.com/notes/devops/kind (kubernetes in docker)/":{"tf":1.7320508075688772},"https://phlip9.com/notes/devops/nomad/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/rr with rust/":{"tf":1.0},"https://phlip9.com/notes/misc/setting up a headless raspbian boot image/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":5.291502622129181}},"df":8,".":{"docs":{},"df":0,"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"v":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.0}},"df":1}}}}},"h":{"docs":{"https://phlip9.com/notes/misc/setting up a headless raspbian boot image/":{"tf":1.4142135623730951}},"df":1}}},"/":{"docs":{},"df":0,"d":{"docs":{},"df":0,"o":{"docs":{},"df":0,"c":{"docs":{},"df":0,"k":{"docs":{"https://phlip9.com/notes/devops/minikube/":{"tf":1.0}},"df":1}}}}},"f":{"docs":{},"df":0,"i":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/confidential computing/gramine/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.7320508075688772}},"df":2}}}}}},"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/lang/flutter/flutter setup/":{"tf":2.0}},"df":1}}},"u":{"docs":{},"df":0,"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/crypto/zkdocs/":{"tf":1.0},"https://phlip9.com/notes/lang/operator fixity and precedence/":{"tf":1.0},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.4142135623730951},"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.4142135623730951},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":3.605551275463989},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":5.0990195135927845}},"df":6}}}}}},"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"n":{"docs":{},"df":0,"'":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/WSL/WSL2 custom kernel/":{"tf":1.0},"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0},"https://phlip9.com/notes/android/linux ADB udev setup/":{"tf":1.0},"https://phlip9.com/notes/android/root phone with magisk/":{"tf":1.7320508075688772},"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/foreign bank account report (FBAR)/":{"tf":1.0},"https://phlip9.com/notes/b l o c k c h a i n/fastpay/":{"tf":1.0},"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.7320508075688772},"https://phlip9.com/notes/btc-ln/atomic multipath payments (AMP)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/btc-ln/breez lightning service providers/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/lightning network notes/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/lightning rod/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.0},"https://phlip9.com/notes/combinatorics/k-combinations of a multiset/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/gramine/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/secure time/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/marblerun/":{"tf":1.0},"https://phlip9.com/notes/distributed systems/papers/(2020) Semi-Fast Byzantine-tolerant Shared Register without Reliable Broadcast/":{"tf":1.0},"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/lua/":{"tf":1.0},"https://phlip9.com/notes/lang/operator fixity and precedence/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/rr with rust/":{"tf":1.0},"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":1.4142135623730951},"https://phlip9.com/notes/misc/kintsugi/":{"tf":1.4142135623730951},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.4142135623730951},"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.0},"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/nix/nix auto-allocate-uids -> nixbld users/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/p-value/":{"tf":1.0}},"df":33}}}}},"f":{"docs":{"https://phlip9.com/notes/statistics probability/multinomial distribution/":{"tf":2.0}},"df":1},"l":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.0}},"df":1}}}},"m":{"docs":{"https://phlip9.com/notes/lang/rust/sycamore x futures/":{"tf":1.0}},"df":1,"a":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":2.23606797749979},"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel TDX/":{"tf":1.4142135623730951},"https://phlip9.com/notes/crypto/(talk) authenticated data structures for stateless validation/":{"tf":1.0},"https://phlip9.com/notes/crypto/acme protocol/":{"tf":2.0},"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":2.6457513110645907},"https://phlip9.com/notes/devops/algo wireguard VPN server/":{"tf":2.0},"https://phlip9.com/notes/networking/CIDR/":{"tf":1.0}},"df":8,"'":{"docs":{"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.4142135623730951}},"df":2},"n":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"b":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/devops/azure CLI/":{"tf":1.0}},"df":1}}}}}}}}},"s":{"docs":{},"df":0,"/":{"docs":{},"df":0,"d":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/devops/algo wireguard VPN server/":{"tf":1.0}},"df":1}}}}}}}},"n":{"docs":{},"df":0,"'":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/AI ML/Expectimax Search/":{"tf":1.0},"https://phlip9.com/notes/android/OTA updates for rooted android phone/":{"tf":1.0},"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0},"https://phlip9.com/notes/android/root phone with magisk/":{"tf":1.0},"https://phlip9.com/notes/b l o c k c h a i n/fastpay/":{"tf":1.0},"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.7320508075688772},"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/breez lightning service providers/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":2.0},"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/marblerun/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":1.0},"https://phlip9.com/notes/devops/azure CLI/":{"tf":1.4142135623730951},"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":1.0},"https://phlip9.com/notes/keyboards/moergo glove80/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.7320508075688772},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.4142135623730951},"https://phlip9.com/notes/management/relieve often - why generals were more successful in WWII/":{"tf":1.4142135623730951},"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":2.0},"https://phlip9.com/notes/misc/kintsugi/":{"tf":3.0},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0},"https://phlip9.com/notes/networking/ipv6 address space/":{"tf":1.0},"https://phlip9.com/notes/networking/network interface card (NIC)/":{"tf":1.0},"https://phlip9.com/notes/nvim/universal-ctags Notes/":{"tf":1.0},"https://phlip9.com/notes/postgres/snippets/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":2.0},"https://phlip9.com/notes/statistics probability/standard error/":{"tf":1.4142135623730951}},"df":28}},"e":{"docs":{"https://phlip9.com/notes/combinatorics/k-combinations of a multiset/":{"tf":2.0},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.7320508075688772},"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":1.0},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0},"https://phlip9.com/notes/performance/simdjson talk/":{"tf":1.0},"https://phlip9.com/notes/postgres/postgres performance tuning/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/nix/links/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/nix/nix auto-allocate-uids -> nixbld users/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/nix/nix debug broken package build/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.4142135623730951}},"df":13},"’":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.0},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0}},"df":2}}},"p":{"docs":{},"df":0,"p":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/devops/secrets/doppler/":{"tf":1.4142135623730951}},"df":1}}}}},"t":{"docs":{"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/koka-lang/":{"tf":1.0},"https://phlip9.com/notes/lang/lua/":{"tf":1.0},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":4,"(":{"docs":{},"df":0,"a":{"docs":{},"df":0,"_":{"docs":{},"df":0,"x":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1}}},"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"g":{"docs":{},"df":0,"_":{"docs":{},"df":0,"x":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1}}}}},"n":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"_":{"docs":{},"df":0,"x":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1}}}}},"o":{"docs":{},"df":0,"c":{"docs":{},"df":0,"_":{"docs":{},"df":0,"x":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.4142135623730951}},"df":1}}}}}},"u":{"docs":{},"df":0,"b":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/fastpay/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/zero-conf channels/":{"tf":1.0},"https://phlip9.com/notes/devops/deployment strategies/":{"tf":1.0},"https://phlip9.com/notes/keyboards/moergo glove80/":{"tf":1.0},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":2.0},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":4.358898943540674},"https://phlip9.com/notes/lang/lua/":{"tf":1.0},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0},"https://phlip9.com/notes/postgres/snippets/":{"tf":1.0}},"df":9,"e":{"docs":{},"df":0,"(":{"docs":{},"df":0,"m":{"docs":{},"df":0,"y":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/lang/koka-lang/":{"tf":1.0}},"df":1}}}}}},"]":{"docs":{},"df":0,"(":{"docs":{},"df":0,"1":{"docs":{},"df":0,".":{"docs":{},"df":0,"0":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0}},"df":1}}}},"[":{"docs":{},"df":0,"1":{"docs":{},"df":0,"0":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0}},"df":1,"]":{"docs":{},"df":0,"(":{"docs":{},"df":0,"4":{"docs":{},"df":0,"2":{"docs":{},"df":0,".":{"docs":{},"df":0,"0":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0}},"df":1}}}}}}}}}}}},"t":{"docs":{"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/foreign bank account report (FBAR)/":{"tf":1.0}},"df":1}}},"w":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/AI ML/Expectimax Search/":{"tf":1.0},"https://phlip9.com/notes/android/root phone with magisk/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":1.4142135623730951},"https://phlip9.com/notes/devops/deployment strategies/":{"tf":1.0},"https://phlip9.com/notes/devops/docker compose/":{"tf":1.0},"https://phlip9.com/notes/devops/secrets/ejson (Shopify)/":{"tf":1.0},"https://phlip9.com/notes/lang/koka-lang/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/sycamore x futures/":{"tf":1.0},"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":1.0},"https://phlip9.com/notes/misc/pop_OS! tweaks/":{"tf":1.0},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.4142135623730951},"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.0},"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.4142135623730951},"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.0},"https://phlip9.com/notes/performance/profiling/":{"tf":1.0},"https://phlip9.com/notes/postgres/postgres performance tuning/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.0}},"df":21,"_":{"docs":{},"df":0,"b":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1}}}}}}},"g":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.7320508075688772}},"df":1}}}},"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/android/OTA updates for rooted android phone/":{"tf":1.0},"https://phlip9.com/notes/android/android cli setup/":{"tf":2.0},"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.7320508075688772},"https://phlip9.com/notes/android/root phone with magisk/":{"tf":1.7320508075688772},"https://phlip9.com/notes/b l o c k c h a i n/btc utreexo - utxo accumulator/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0},"https://phlip9.com/notes/crypto/(talk) authenticated data structures for stateless validation/":{"tf":1.0},"https://phlip9.com/notes/ios/ios setup/":{"tf":1.0},"https://phlip9.com/notes/keyboards/moergo glove80/":{"tf":1.0},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.4142135623730951},"https://phlip9.com/notes/misc/setting up a headless raspbian boot image/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/lightning router overview/":{"tf":1.4142135623730951}},"df":12,"/":{"docs":{},"df":0,"w":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{},"df":0,"o":{"docs":{},"df":0,"w":{"docs":{},"df":0,"s":{"docs":{},"df":0,"1":{"docs":{},"df":0,"1":{"docs":{"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0}},"df":1}}}}}}}}}},"q":{"docs":{},"df":0,"u":{"docs":{},"df":0,"o":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"w":{"docs":{"https://phlip9.com/notes/router/lightning router/lightning router overview/":{"tf":1.0}},"df":1}}}}}}}}}},"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"x":{"docs":{},"df":0,"i":{"docs":{},"df":0,"m":{"docs":{},"df":0,"u":{"docs":{},"df":0,"m":{"docs":{"https://phlip9.com/notes/router/lightning router/lightning router overview/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}},"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/btc-ln/breez lightning service providers/":{"tf":1.0}},"df":1}},"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{"https://phlip9.com/notes/reproducible builds/reproducible-builds.org/":{"tf":1.0}},"df":1}}}}}},"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"m":{"docs":{"https://phlip9.com/notes/devops/deployment strategies/":{"tf":2.0},"https://phlip9.com/notes/misc/uptime to downtime conversion/":{"tf":2.0}},"df":2}}}}}},"p":{"docs":{},"df":0,"d":{"docs":{},"df":0,"k":{"docs":{"https://phlip9.com/notes/networking/network interface card (NIC)/":{"tf":1.0}},"df":1}}},"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"f":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":2.0}},"df":2}},"k":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"s":{"docs":{},"df":0,"s":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/reproducible builds/nix/links/":{"tf":1.0}},"df":1}}}}}}}}},"m":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.4142135623730951}},"df":1},"n":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/secure time/":{"tf":1.0}},"df":1}},"w":{"docs":{"https://phlip9.com/notes/statistics probability/multinomial distribution/":{"tf":1.0}},"df":1,"n":{"docs":{"https://phlip9.com/notes/combinatorics/k-combinations of a multiset/":{"tf":1.4142135623730951},"https://phlip9.com/notes/statistics probability/CDF confidence bands - DKW inequality/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/testing whether a coin is fair/":{"tf":1.4142135623730951}},"df":3}}},"i":{"docs":{"https://phlip9.com/notes/misc/kintsugi/":{"tf":2.23606797749979},"https://phlip9.com/notes/postgres/snippets/":{"tf":1.0}},"df":2,"f":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/fuzzing/fuzzcheck-rs/":{"tf":1.0}},"df":1}},"v":{"docs":{},"df":0,"e":{"docs":{"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.0},"https://phlip9.com/notes/keyboards/moergo glove80/":{"tf":2.0},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":2.0},"https://phlip9.com/notes/postgres/types of scans/":{"tf":1.0}},"df":4,"r":{"docs":{"https://phlip9.com/notes/WSL/WSL2 custom kernel/":{"tf":1.4142135623730951},"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0},"https://phlip9.com/notes/android/root phone with magisk/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":3.0},"https://phlip9.com/notes/confidential computing/gramine/":{"tf":2.23606797749979},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0},"https://phlip9.com/notes/devops/nomad/":{"tf":1.4142135623730951},"https://phlip9.com/notes/misc/pop_OS! tweaks/":{"tf":2.23606797749979},"https://phlip9.com/notes/networking/network interface card (NIC)/":{"tf":1.0}},"df":9,".":{"docs":{},"df":0,"g":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/confidential computing/gramine/":{"tf":1.0}},"df":1}}}},"/":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"u":{"docs":{},"df":0,"x":{"docs":{"https://phlip9.com/notes/confidential computing/gramine/":{"tf":1.0}},"df":1}}}}}},"k":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.0}},"df":1}}}}}}},"o":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/android/root phone with magisk/":{"tf":1.0}},"df":1}},"p":{"docs":{"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.0},"https://phlip9.com/notes/combinatorics/k-combinations of a multiset/":{"tf":1.0},"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":2.0},"https://phlip9.com/notes/reproducible builds/nix/nix debug broken package build/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":2.0}},"df":6,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/devops/algo wireguard VPN server/":{"tf":1.7320508075688772}},"df":1}}}}},"w":{"docs":{},"df":0,"x":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0},"https://phlip9.com/notes/misc/setting up a headless raspbian boot image/":{"tf":1.0}},"df":2}}}},"s":{"docs":{"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.4142135623730951}},"df":1,"g":{"docs":{},"df":0,"x":{"docs":{},"df":0,"=":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"a":{"docs":{},"df":0,"b":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/confidential computing/gramine/":{"tf":1.0}},"df":1}}}}}}}},"l":{"docs":{"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.4142135623730951},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.7320508075688772}},"df":2},"m":{"docs":{"https://phlip9.com/notes/devops/secrets/fortanix DSM/":{"tf":1.4142135623730951}},"df":1}},"t":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.4142135623730951},"https://phlip9.com/notes/postgres/snippets/":{"tf":1.4142135623730951}},"df":2,"o":{"docs":{},"df":0,"v":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"y":{"docs":{},"df":0,"=":{"docs":{},"df":0,"p":{"docs":{},"df":0,"w":{"docs":{},"df":0,"m":{"docs":{"https://phlip9.com/notes/misc/prepping RPI for embedded dev/":{"tf":1.0}},"df":1}}}}}}}}}}},"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"e":{"docs":{"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":5.5677643628300215}},"df":1,":":{"docs":{},"df":0,":":{"docs":{},"df":0,":":{"docs":{},"df":0,"b":{"docs":{},"df":0,"e":{"docs":{},"df":0,"g":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.0}},"df":1}}}}}}}}}}},"u":{"docs":{},"df":0,"s":{"docs":{},"df":0,"s":{"docs":{"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.0}},"df":1}}}}},"u":{"docs":{},"df":0,"e":{"docs":{"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/foreign bank account report (FBAR)/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0},"https://phlip9.com/notes/management/relieve often - why generals were more successful in WWII/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/nix/nix auto-allocate-uids -> nixbld users/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/rebuilderd/":{"tf":1.4142135623730951}},"df":6},"m":{"docs":{},"df":0,"b":{"docs":{"https://phlip9.com/notes/devops/deployment strategies/":{"tf":1.0},"https://phlip9.com/notes/fuzzing/fuzzing/":{"tf":1.0},"https://phlip9.com/notes/lang/lua/":{"tf":1.0}},"df":3,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/devops/deployment strategies/":{"tf":1.0}},"df":1}}}},"m":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/confidential computing/gramine/":{"tf":1.0}},"df":1},"y":{"docs":{},"df":0,"0":{"docs":{"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.0}},"df":1}}},"p":{"docs":{"https://phlip9.com/notes/design/form design/":{"tf":1.0},"https://phlip9.com/notes/devops/azure CLI/":{"tf":1.0},"https://phlip9.com/notes/lang/gdb ref/":{"tf":1.0},"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.0}},"df":4,".":{"docs":{},"df":0,"b":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/lang/gdb ref/":{"tf":1.4142135623730951}},"df":1}}}}}},"n":{"docs":{},"df":0,"n":{"docs":{},"df":0,"o":{"docs":{"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.4142135623730951}},"df":1}}},"p":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{"https://phlip9.com/notes/combinatorics/k-combinations of a multiset/":{"tf":1.0},"https://phlip9.com/notes/lang/lua/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.0}},"df":3}}}},"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/fuzzing/fuzzcheck-rs/":{"tf":1.4142135623730951},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.0}},"df":2}},"e":{"docs":{"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.4142135623730951},"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/foreign bank account report (FBAR)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.0},"https://phlip9.com/notes/devops/nomad/":{"tf":1.0},"https://phlip9.com/notes/devops/secrets/1password - secrets automation/":{"tf":1.0},"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":1.0},"https://phlip9.com/notes/fuzzing/fuzzcheck-rs/":{"tf":1.0},"https://phlip9.com/notes/lang/operator fixity and precedence/":{"tf":1.0},"https://phlip9.com/notes/management/relieve often - why generals were more successful in WWII/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/reproducible-builds.org/":{"tf":1.0}},"df":13}},"s":{"docs":{},"df":0,"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"u":{"docs":{},"df":0,"l":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":2.0}},"df":2}}}}}},"t":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.0},"https://phlip9.com/notes/misc/kintsugi/":{"tf":2.0}},"df":2,"_":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"m":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"_":{"docs":{},"df":0,"s":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"s":{"docs":{},"df":0,"h":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.4142135623730951}},"df":1}}}}}}}}}}}}}},"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"l":{"docs":{},"df":0,"y":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"s":{"docs":{},"df":0,"/":{"docs":{},"df":0,"n":{"docs":{},"df":0,"i":{"docs":{},"df":0,"x":{"docs":{},"df":0,"o":{"docs":{"https://phlip9.com/notes/reproducible builds/nix/links/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}},"v":{"docs":{"https://phlip9.com/notes/crypto/acme protocol/":{"tf":1.0}},"df":1},"w":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"f":{"docs":{"https://phlip9.com/notes/WSL/WSL2 custom kernel/":{"tf":1.0}},"df":1,"d":{"docs":{},"df":0,"u":{"docs":{},"df":0,"m":{"docs":{},"df":0,"p":{"docs":{"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":2.23606797749979}},"df":1}}}}},"v":{"docs":{"https://phlip9.com/notes/WSL/WSL2 custom kernel/":{"tf":1.0}},"df":1}}}},"x":{"docs":{"https://phlip9.com/notes/lang/lua/":{"tf":1.0}},"df":1},"y":{"docs":{"https://phlip9.com/notes/lang/lua/":{"tf":1.4142135623730951}},"df":1,"n":{"docs":{"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.0}},"df":1,"a":{"docs":{},"df":0,"m":{"docs":{"https://phlip9.com/notes/AI ML/Markov Decision Process (MDP)/":{"tf":1.7320508075688772},"https://phlip9.com/notes/b l o c k c h a i n/btc utreexo - utxo accumulator/":{"tf":1.4142135623730951},"https://phlip9.com/notes/devops/azure CLI/":{"tf":2.0},"https://phlip9.com/notes/devops/consul/":{"tf":1.4142135623730951},"https://phlip9.com/notes/devops/service mesh/":{"tf":1.0},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.0},"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.4142135623730951},"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.0}},"df":10,"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"&":{"docs":{},"df":0,"g":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0}},"df":1}}}}}}},"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.4142135623730951}},"df":1}}}},"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.0}},"df":1}},"y":{"docs":{},"df":0,"m":{"docs":{"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.0}},"df":1}}}}}},"e":{"docs":{"https://phlip9.com/notes/android/root phone with magisk/":{"tf":1.0},"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/":{"tf":1.4142135623730951},"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.7320508075688772},"https://phlip9.com/notes/lang/koka-lang/":{"tf":1.7320508075688772},"https://phlip9.com/notes/lang/operator fixity and precedence/":{"tf":1.4142135623730951},"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.4142135623730951},"https://phlip9.com/notes/statistics probability/CDF confidence bands - DKW inequality/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/kelly criterion + ELO/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/testing whether a coin is fair/":{"tf":4.47213595499958}},"df":17,"$":{"docs":{},"df":0,"$":{"docs":{},"df":0,"z":{"docs":{},"df":0,"$":{"docs":{},"df":0,"$":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/statistics probability/testing whether a coin is fair/":{"tf":1.0}},"df":1}}}}}},"&":{"docs":{},"df":0,"g":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":2.23606797749979},"https://phlip9.com/notes/lang/gdb ref/":{"tf":1.0}},"df":2,";":{"docs":{},"df":0,"(":{"docs":{},"df":0,"t":{"docs":{},"df":0,"h":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,".":{"docs":{},"df":0,"o":{"docs":{},"df":0,"k":{"docs":{"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.4142135623730951}},"df":1}}}}}}}}}}}},"(":{"docs":{},"df":0,"e":{"docs":{},"df":0,"_":{"docs":{},"df":0,"g":{"docs":{"https://phlip9.com/notes/statistics probability/kelly criterion + ELO/":{"tf":1.0}},"df":1}}}},".":{"docs":{},"df":0,"g":{"docs":{"https://phlip9.com/notes/AI ML/Markov Decision Process (MDP)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":2.0},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.7320508075688772},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":2.0},"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel SGX/secure time/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":1.4142135623730951},"https://phlip9.com/notes/crypto/(talk) authenticated data structures for stateless validation/":{"tf":2.0},"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":1.0},"https://phlip9.com/notes/design/form design/":{"tf":1.0},"https://phlip9.com/notes/devops/secrets/mozilla SOPS/":{"tf":1.0},"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":1.0},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.7320508075688772},"https://phlip9.com/notes/lang/flutter/flutter setup/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/koka-lang/":{"tf":1.0},"https://phlip9.com/notes/lang/lua/":{"tf":2.0},"https://phlip9.com/notes/lang/operator fixity and precedence/":{"tf":2.23606797749979},"https://phlip9.com/notes/performance/profiling/":{"tf":1.0},"https://phlip9.com/notes/performance/simdjson talk/":{"tf":1.0},"https://phlip9.com/notes/postgres/types of scans/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":2.23606797749979},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":3.3166247903554},"https://phlip9.com/notes/router/lightning router/lightning router overview/":{"tf":1.4142135623730951}},"df":26}},"2":{"docs":{"https://phlip9.com/notes/confidential computing/marblerun/":{"tf":1.0},"https://phlip9.com/notes/devops/o11y/jaeger oss e2e tracing/":{"tf":1.4142135623730951},"https://phlip9.com/notes/devops/secrets/envkey/":{"tf":1.0}},"df":3},"8":{"docs":{},"df":0,"9":{"docs":{},"df":0,"c":{"docs":{},"df":0,"a":{"docs":{},"df":0,"6":{"docs":{},"df":0,"f":{"docs":{"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":1.4142135623730951}},"df":1}}}}}},"[":{"docs":{},"df":0,"x":{"docs":{"https://phlip9.com/notes/statistics probability/standard error/":{"tf":1.4142135623730951}},"df":1}},"^":{"docs":{},"df":0,"2":{"docs":{"https://phlip9.com/notes/statistics probability/testing whether a coin is fair/":{"tf":1.0}},"df":1},"{":{"docs":{},"df":0,"(":{"docs":{},"df":0,"\\":{"docs":{},"df":0,"c":{"docs":{},"df":0,"d":{"docs":{},"df":0,"o":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/statistics probability/CDF confidence bands - DKW inequality/":{"tf":1.4142135623730951}},"df":1}}}}}}}},"_":{"docs":{},"df":0,"g":{"docs":{"https://phlip9.com/notes/statistics probability/kelly criterion + ELO/":{"tf":1.0}},"df":1},"i":{"docs":{"https://phlip9.com/notes/statistics probability/G-test - multinomial goodness-of-fit/":{"tf":1.0}},"df":1},"k":{"docs":{},"df":0,"[":{"docs":{},"df":0,"d":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.4142135623730951}},"df":1}}}}}},"o":{"docs":{"https://phlip9.com/notes/statistics probability/kelly criterion + ELO/":{"tf":1.7320508075688772}},"df":1}},"a":{"docs":{},"df":0,"b":{"docs":{},"df":0,"i":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"m":{"docs":{},"df":0,"v":{"docs":{},"df":0,"6":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"t":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"o":{"docs":{},"df":0,"f":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"m":{"docs":{},"df":0,"b":{"docs":{},"df":0,"e":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/misc/arm target triples/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}},"h":{"docs":{},"df":0,"f":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"m":{"docs":{},"df":0,"v":{"docs":{},"df":0,"6":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"t":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"h":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"m":{"docs":{},"df":0,"b":{"docs":{},"df":0,"e":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/misc/arm target triples/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}},"c":{"docs":{},"df":0,"h":{"docs":{"https://phlip9.com/notes/AI ML/Expectimax Search/":{"tf":1.4142135623730951},"https://phlip9.com/notes/AI ML/Markov Decision Process (MDP)/":{"tf":1.7320508075688772},"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/foreign bank account report (FBAR)/":{"tf":1.0},"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/money services business (MSB)/":{"tf":1.0},"https://phlip9.com/notes/b l o c k c h a i n/bip158 - compact block filters/":{"tf":1.0},"https://phlip9.com/notes/b l o c k c h a i n/fastpay/":{"tf":1.7320508075688772},"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.7320508075688772},"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.7320508075688772},"https://phlip9.com/notes/btc-ln/BOLT 4 - onion routing protocol/":{"tf":1.7320508075688772},"https://phlip9.com/notes/btc-ln/BOLT 7 - p2p node and channel discovery/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/atomic multipath payments (AMP)/":{"tf":2.449489742783178},"https://phlip9.com/notes/btc-ln/breez lightning service providers/":{"tf":1.4142135623730951},"https://phlip9.com/notes/btc-ln/lightning network notes/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.7320508075688772},"https://phlip9.com/notes/combinatorics/k-combinations of a multiset/":{"tf":2.0},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":2.8284271247461903},"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel SGX/secure time/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/marblerun/":{"tf":2.0},"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":1.0},"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":1.0},"https://phlip9.com/notes/design/form design/":{"tf":1.4142135623730951},"https://phlip9.com/notes/devops/azure CLI/":{"tf":1.0},"https://phlip9.com/notes/devops/consul/":{"tf":2.0},"https://phlip9.com/notes/devops/deployment strategies/":{"tf":1.0},"https://phlip9.com/notes/devops/secrets/1password - secrets automation/":{"tf":1.4142135623730951},"https://phlip9.com/notes/devops/secrets/ejson-kms (AWS)/":{"tf":1.7320508075688772},"https://phlip9.com/notes/devops/service mesh/":{"tf":1.7320508075688772},"https://phlip9.com/notes/distributed systems/papers/(2021) Leaderless Consensus/":{"tf":1.0},"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":2.0},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":2.23606797749979},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0},"https://phlip9.com/notes/lang/lua/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/operator fixity and precedence/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.0},"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":1.0},"https://phlip9.com/notes/misc/kintsugi/":{"tf":1.7320508075688772},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0},"https://phlip9.com/notes/networking/ipv6 address space/":{"tf":1.4142135623730951},"https://phlip9.com/notes/networking/network interfaces/":{"tf":2.0},"https://phlip9.com/notes/performance/bit hacks/":{"tf":4.47213595499958},"https://phlip9.com/notes/postgres/types of scans/":{"tf":2.23606797749979},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.4142135623730951},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.4142135623730951},"https://phlip9.com/notes/statistics probability/CDF confidence bands - DKW inequality/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/multinomial distribution/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/testing whether a coin is fair/":{"tf":1.0}},"df":50}},"r":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0},"https://phlip9.com/notes/management/relieve often - why generals were more successful in WWII/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/rebuilderd/":{"tf":1.0}},"df":4,"e":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/crypto/acme protocol/":{"tf":1.0}},"df":1}}}},"n":{"docs":{"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.0}},"df":1},"t":{"docs":{},"df":0,"h":{"docs":{},"df":0,"f":{"docs":{},"df":0,"i":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":2.23606797749979}},"df":1}}},"l":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":4.0}},"df":1},"y":{"docs":{},"df":0,"'":{"docs":{"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.4142135623730951}},"df":1},"/":{"docs":{},"df":0,"b":{"docs":{},"df":0,"u":{"docs":{},"df":0,"i":{"docs":{},"df":0,"l":{"docs":{},"df":0,"d":{"docs":{},"df":0,"k":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.0}},"df":1,"d":{"docs":{},"df":0,":":{"docs":{},"df":0,"v":{"docs":{},"df":0,"0":{"docs":{},"df":0,".":{"docs":{},"df":0,"6":{"docs":{},"df":0,".":{"docs":{},"df":0,"1":{"docs":{},"df":0,"5":{"docs":{"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}},"d":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{},"df":0,":":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"p":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.7320508075688772}},"df":1}}}}}}}}}}},"_":{"docs":{},"df":0,"b":{"docs":{},"df":0,"u":{"docs":{},"df":0,"i":{"docs":{},"df":0,"l":{"docs":{},"df":0,"d":{"docs":{},"df":0,"k":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"_":{"docs":{},"df":0,"h":{"docs":{},"df":0,"o":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"=":{"docs":{},"df":0,"t":{"docs":{},"df":0,"c":{"docs":{},"df":0,"p":{"docs":{},"df":0,":":{"docs":{},"df":0,"/":{"docs":{},"df":0,"/":{"docs":{},"df":0,"m":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}},"s":{"docs":{"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":1.0},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":2,"e":{"docs":{},"df":0,"_":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"_":{"docs":{},"df":0,"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{},"df":0,"_":{"docs":{},"df":0,"e":{"docs":{},"df":0,"x":{"docs":{},"df":0,"p":{"docs":{},"df":0,"(":{"docs":{},"df":0,"0":{"docs":{},"df":0,".":{"docs":{},"df":0,"5":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1}}},"x":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1}}}}}}}}}}}}}},"i":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.0},"https://phlip9.com/notes/devops/deployment strategies/":{"tf":1.0},"https://phlip9.com/notes/devops/secrets/sy - share secrets safely/":{"tf":1.0},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0},"https://phlip9.com/notes/postgres/postgres performance tuning/":{"tf":1.0}},"df":6,"e":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0},"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":1.0},"https://phlip9.com/notes/misc/kintsugi/":{"tf":1.0}},"df":3}},"l":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/combinatorics/k-combinations of a multiset/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0},"https://phlip9.com/notes/crypto/(talk) authenticated data structures for stateless validation/":{"tf":1.0},"https://phlip9.com/notes/crypto/TLS self-signed pubkey-only certs/":{"tf":1.0},"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":1.4142135623730951},"https://phlip9.com/notes/devops/docker compose/":{"tf":1.0},"https://phlip9.com/notes/devops/secrets/ejson (Shopify)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/devops/secrets/ejson-kms (AWS)/":{"tf":1.0},"https://phlip9.com/notes/fuzzing/fuzzcheck-rs/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/rr with rust/":{"tf":1.0},"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":1.0},"https://phlip9.com/notes/misc/kintsugi/":{"tf":1.0},"https://phlip9.com/notes/misc/optimization solvers/":{"tf":1.0},"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.7320508075688772},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.0}},"df":16}}},"t":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0}},"df":1},"y":{"docs":{},"df":0,"/":{"docs":{},"df":0,"a":{"docs":{},"df":0,"v":{"docs":{},"df":0,"a":{"docs":{},"df":0,"i":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":1.0}},"df":1}}}}}}}},"t":{"docs":{"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":1.7320508075688772},"https://phlip9.com/notes/misc/kintsugi/":{"tf":1.7320508075688772},"https://phlip9.com/notes/performance/simdjson talk/":{"tf":1.0}},"df":3}},"b":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"2":{"docs":{},"df":0,"0":{"docs":{},"df":0,"e":{"docs":{},"df":0,"d":{"docs":{},"df":0,"3":{"docs":{"https://phlip9.com/notes/devops/algo wireguard VPN server/":{"tf":1.0}},"df":1}}}}}}}},"c":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0}},"df":1,"a":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.4142135623730951}},"df":1}},"d":{"docs":{},"df":0,"f":{"docs":{"https://phlip9.com/notes/statistics probability/CDF confidence bands - DKW inequality/":{"tf":1.4142135623730951}},"df":1},"s":{"docs":{},"df":0,"a":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":2.23606797749979},"https://phlip9.com/notes/devops/azure CLI/":{"tf":1.0}},"df":2,"_":{"docs":{},"df":0,"q":{"docs":{},"df":0,"u":{"docs":{},"df":0,"o":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,".":{"docs":{},"df":0,"h":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0}},"df":1}}}}}}}}}}},"h":{"docs":{},"df":0,"o":{"docs":{"https://phlip9.com/notes/WSL/WSL2 custom kernel/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":2.23606797749979},"https://phlip9.com/notes/confidential computing/gramine/":{"tf":1.4142135623730951},"https://phlip9.com/notes/devops/azure CLI/":{"tf":1.0},"https://phlip9.com/notes/lang/ATS/Install ATS2/":{"tf":1.7320508075688772},"https://phlip9.com/notes/lang/rust/rr with rust/":{"tf":1.0},"https://phlip9.com/notes/misc/envsubst/":{"tf":1.0},"https://phlip9.com/notes/misc/prepping RPI for embedded dev/":{"tf":1.0},"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.7320508075688772},"https://phlip9.com/notes/reproducible builds/nix/nix debug spurrious rebuilds/":{"tf":1.0}},"df":11}},"k":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/confidential computing/marblerun/":{"tf":1.0}},"df":1}}}},"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"i":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/btc-ln/lightning libs/":{"tf":1.0}},"df":1}}}}},"d":{"docs":{"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":2.23606797749979},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":3.1622776601683795}},"df":2,"2":{"docs":{},"df":0,"5":{"docs":{},"df":0,"5":{"docs":{},"df":0,"1":{"docs":{},"df":0,"9":{"docs":{"https://phlip9.com/notes/crypto/biscuit authz/":{"tf":1.0},"https://phlip9.com/notes/devops/azure CLI/":{"tf":1.4142135623730951},"https://phlip9.com/notes/misc/prepping RPI for embedded dev/":{"tf":1.0},"https://phlip9.com/notes/misc/setting up a headless raspbian boot image/":{"tf":1.0}},"df":4}}}}},"g":{"docs":{"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":1.7320508075688772},"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":1.7320508075688772},"https://phlip9.com/notes/misc/kintsugi/":{"tf":2.449489742783178}},"df":3,"e":{"docs":{},"df":0,"=":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,".":{"docs":{},"df":0,"e":{"docs":{},"df":0,"d":{"docs":{},"df":0,"g":{"docs":{},"df":0,"e":{"docs":{},"df":0,".":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}},"i":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/gramine/":{"tf":1.0},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.4142135623730951},"https://phlip9.com/notes/misc/setting up a headless raspbian boot image/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/nix/nix debug broken package build/":{"tf":1.0}},"df":6,"(":{"docs":{},"df":0,"2":{"docs":{},"df":0,"0":{"docs":{},"df":0,"2":{"docs":{},"df":0,"2":{"docs":{"https://phlip9.com/notes/android/OTA updates for rooted android phone/":{"tf":1.0}},"df":1}}}}},"o":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/lang/flutter/flutter setup/":{"tf":1.0},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":2.0}},"df":2,".":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"g":{"docs":{},"df":0,"/":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"f":{"docs":{},"df":0,"o":{"docs":{},"df":0,"/":{"docs":{},"df":0,"r":{"docs":{},"df":0,"f":{"docs":{},"df":0,"c":{"docs":{},"df":0,"6":{"docs":{},"df":0,"5":{"docs":{},"df":0,"8":{"docs":{},"df":0,"5":{"docs":{"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.0}},"df":2}}}}}}}}}}}}}}}}}}}}},"l":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0}},"df":1},"p":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":2.6457513110645907}},"df":1,".":{"docs":{},"df":0,"f":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"i":{"docs":{},"df":0,"x":{"docs":{},"df":0,".":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{"https://phlip9.com/notes/lang/rust/rust x SGX/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}},"e":{"docs":{},"df":0,"e":{"docs":{},"df":0,"e":{"docs":{"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.7320508075688772}},"df":1}}},"f":{"docs":{},"df":0,"f":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0}},"df":1,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/AI ML/Expectimax Search/":{"tf":1.0},"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/BOLT 4 - onion routing protocol/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/submarine swaps/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/secure time/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":1.0},"https://phlip9.com/notes/design/form design/":{"tf":1.4142135623730951},"https://phlip9.com/notes/devops/minikube/":{"tf":1.0},"https://phlip9.com/notes/fuzzing/fuzzing/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/koka-lang/":{"tf":2.449489742783178},"https://phlip9.com/notes/management/relieve often - why generals were more successful in WWII/":{"tf":1.0},"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":1.0},"https://phlip9.com/notes/misc/kintsugi/":{"tf":1.0},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.4142135623730951},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.4142135623730951},"https://phlip9.com/notes/statistics probability/p-value/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/winsorize/":{"tf":1.0}},"df":21}}},"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/AI ML/Markov Decision Process (MDP)/":{"tf":1.0},"https://phlip9.com/notes/b l o c k c h a i n/btc utreexo - utxo accumulator/":{"tf":1.4142135623730951},"https://phlip9.com/notes/btc-ln/breez lightning service providers/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/hosted channels/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":1.0},"https://phlip9.com/notes/crypto/(talk) authenticated data structures for stateless validation/":{"tf":1.0},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/nix/nix auto-allocate-uids -> nixbld users/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/lightning router overview/":{"tf":1.0}},"df":11}}},"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":1.0}},"df":2}}}}},"g":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0}},"df":1,"e":{"docs":{},"df":0,"t":{"docs":{},"df":0,"k":{"docs":{},"df":0,"e":{"docs":{},"df":0,"y":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":2.0},"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":2.449489742783178},"https://phlip9.com/notes/confidential computing/intel SGX/secure time/":{"tf":1.0}},"df":3,"(":{"docs":{},"df":0,"k":{"docs":{},"df":0,"e":{"docs":{},"df":0,"y":{"docs":{},"df":0,"_":{"docs":{},"df":0,"p":{"docs":{},"df":0,"o":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.4142135623730951}},"df":1}}}}}}}}}}},"_":{"docs":{},"df":0,"i":{"docs":{},"df":0,"m":{"docs":{},"df":0,"p":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0}},"df":1,"(":{"docs":{},"df":0,"k":{"docs":{},"df":0,"e":{"docs":{},"df":0,"y":{"docs":{},"df":0,"_":{"docs":{},"df":0,"p":{"docs":{},"df":0,"o":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}},"o":{"docs":{"https://phlip9.com/notes/confidential computing/marblerun/":{"tf":2.0}},"df":1},"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"g":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.0}},"df":1}}}}},"h":{"docs":{},"df":0,"_":{"docs":{},"df":0,"f":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.0}},"df":1,"e":{"docs":{},"df":0,"_":{"docs":{},"df":0,"h":{"docs":{},"df":0,"d":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.0}},"df":1}}}}}}}}}}},"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0}},"df":1,"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"k":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":2.6457513110645907},"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.0}},"df":4,"_":{"docs":{},"df":0,"p":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"v":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"(":{"docs":{},"df":0,"a":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"m":{"docs":{},"df":0,"c":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,":":{"docs":{},"df":0,":":{"docs":{},"df":0,"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"w":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}},"k":{"docs":{},"df":0,"e":{"docs":{},"df":0,"y":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0}},"df":1}}},"p":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"v":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}},"j":{"docs":{},"df":0,"s":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/devops/secrets/ejson (Shopify)/":{"tf":2.23606797749979},"https://phlip9.com/notes/devops/secrets/ejson-kms (AWS)/":{"tf":1.7320508075688772},"https://phlip9.com/notes/devops/secrets/mozilla SOPS/":{"tf":1.4142135623730951},"https://phlip9.com/notes/devops/secrets/sy - share secrets safely/":{"tf":1.4142135623730951}},"df":4}}}},"k":{"docs":{},"df":0,"e":{"docs":{},"df":0,"p":{"docs":{"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":1.4142135623730951}},"df":1}},"m":{"docs":{"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":1.0}},"df":1}},"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"p":{"docs":{},"df":0,"s":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/secure time/":{"tf":1.0}},"df":2}}},"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/devops/consul/":{"tf":1.0}},"df":1,"r":{"docs":{"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/money services business (MSB)/":{"tf":1.0}},"df":1,"o":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/money services business (MSB)/":{"tf":1.0}},"df":1}}}}},"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/AI ML/Expectimax Search/":{"tf":1.4142135623730951},"https://phlip9.com/notes/combinatorics/k-combinations of a multiset/":{"tf":2.8284271247461903},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel TDX/":{"tf":1.0},"https://phlip9.com/notes/design/form design/":{"tf":1.0},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/understanding sycamore reactivity/":{"tf":1.4142135623730951},"https://phlip9.com/notes/performance/bit hacks/":{"tf":2.0},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.7320508075688772},"https://phlip9.com/notes/statistics probability/winsorize/":{"tf":1.4142135623730951}},"df":11,".":{"docs":{},"df":0,"a":{"docs":{},"df":0,"p":{"docs":{},"df":0,"p":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{},"df":0,"(":{"docs":{},"df":0,"&":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{},"df":0,"p":{"docs":{},"df":0,";":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"x":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/lang/rust/understanding sycamore reactivity/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}},"f":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0}},"df":2,"2":{"docs":{},"df":0,"s":{"docs":{},"df":0,"g":{"docs":{},"df":0,"x":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0}},"df":1}}}}},"i":{"docs":{},"df":0,"f":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.7320508075688772}},"df":1}},"o":{"docs":{"https://phlip9.com/notes/statistics probability/kelly criterion + ELO/":{"tf":1.4142135623730951}},"df":1},"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"'":{"docs":{"https://phlip9.com/notes/distributed systems/papers/(2021) Leaderless Consensus/":{"tf":1.0}},"df":1},"i":{"docs":{},"df":0,"f":{"docs":{"https://phlip9.com/notes/lang/lua/":{"tf":1.0}},"df":1}},"w":{"docs":{},"df":0,"h":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/design/form design/":{"tf":1.0}},"df":1}}}}}},"t":{"docs":{"https://phlip9.com/notes/lang/lua/":{"tf":1.0}},"df":1}},"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{"https://phlip9.com/notes/lang/gdb ref/":{"tf":1.7320508075688772}},"df":1},"i":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/router/lightning router/captive portal/arubanetworks captive portal/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":2.0},"https://phlip9.com/notes/router/lightning router/lightning router overview/":{"tf":1.0}},"df":5}}},"b":{"docs":{"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":1.7320508075688772}},"df":1,"e":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/confidential computing/gramine/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":1.0},"https://phlip9.com/notes/misc/prepping RPI for embedded dev/":{"tf":1.4142135623730951}},"df":3,"d":{"docs":{"https://phlip9.com/notes/misc/optimization solvers/":{"tf":1.0}},"df":1}}}},"i":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/secure time/":{"tf":1.0}},"df":1}},"p":{"docs":{},"df":0,"i":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/fuzzing/fuzzing/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/CDF confidence bands - DKW inequality/":{"tf":1.4142135623730951},"https://phlip9.com/notes/statistics probability/winsorize/":{"tf":1.0}},"df":3,"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"q":{"docs":{},"df":0,"u":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/statistics probability/winsorize/":{"tf":2.0}},"df":1}}}}}}}}}}}}},"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"y":{"docs":{},"df":0,"e":{"docs":{"https://phlip9.com/notes/management/relieve often - why generals were more successful in WWII/":{"tf":1.4142135623730951}},"df":1}}}},"t":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/gramine/":{"tf":1.0},"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":1.0}},"df":4}}},"u":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/android/android cli setup/":{"tf":1.0},"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":3.605551275463989},"https://phlip9.com/notes/ios/ios setup/":{"tf":1.0},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.4142135623730951}},"df":4,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"6":{"docs":{},"df":0,"4":{"docs":{},"df":0,"_":{"docs":{},"df":0,"x":{"docs":{},"df":0,"8":{"docs":{},"df":0,"6":{"docs":{},"df":0,"_":{"docs":{},"df":0,"6":{"docs":{},"df":0,"4":{"docs":{},"df":0,"_":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"m":{"docs":{},"df":0,"6":{"docs":{},"df":0,"4":{"docs":{"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}},"n":{"docs":{"https://phlip9.com/notes/statistics probability/CDF confidence bands - DKW inequality/":{"tf":1.0}},"df":1,"_":{"docs":{},"df":0,"u":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.4142135623730951}},"df":1,"s":{"docs":{},"df":0,".":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{},"df":0,"f":{"docs":{"https://phlip9.com/notes/lang/flutter/flutter setup/":{"tf":1.0}},"df":1}}}}}}},"a":{"docs":{},"df":0,"b":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/WSL/WSL2 custom kernel/":{"tf":1.4142135623730951},"https://phlip9.com/notes/android/ADB over TCP inside WSL2/":{"tf":1.0},"https://phlip9.com/notes/android/android cli setup/":{"tf":1.0},"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.7320508075688772},"https://phlip9.com/notes/android/root phone with magisk/":{"tf":1.7320508075688772},"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/lightning libs/":{"tf":1.0},"https://phlip9.com/notes/combinatorics/k-combinations of a multiset/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":2.0},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.7320508075688772},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.4142135623730951},"https://phlip9.com/notes/devops/algo wireguard VPN server/":{"tf":1.0},"https://phlip9.com/notes/keyboards/moergo glove80/":{"tf":1.0},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":2.23606797749979},"https://phlip9.com/notes/lang/gdb ref/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/rust/rr with rust/":{"tf":1.0},"https://phlip9.com/notes/misc/prepping RPI for embedded dev/":{"tf":2.23606797749979},"https://phlip9.com/notes/misc/setting up a headless raspbian boot image/":{"tf":1.4142135623730951},"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.7320508075688772},"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.7320508075688772},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/router/lightning router/lightning router overview/":{"tf":1.4142135623730951}},"df":24,"e":{"docs":{},"df":0,"_":{"docs":{},"df":0,"s":{"docs":{},"df":0,"s":{"docs":{},"df":0,"h":{"docs":{},"df":0,"=":{"docs":{},"df":0,"1":{"docs":{"https://phlip9.com/notes/misc/setting up a headless raspbian boot image/":{"tf":1.0}},"df":1}}}}}},"f":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"g":{"docs":{},"df":0,"s":{"docs":{},"df":0,"(":{"docs":{},"df":0,"b":{"docs":{},"df":0,"o":{"docs":{},"df":0,"l":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0}},"df":1}}}},"h":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0}},"df":1}}}}}},"{":{"docs":{},"df":0,"b":{"docs":{},"df":0,"o":{"docs":{},"df":0,"o":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.4142135623730951}},"df":1}}}}}}}}}}}}}},"r":{"docs":{},"df":0,"x":{"docs":{"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":6.48074069840786}},"df":1}}},"c":{"docs":{},"df":0,"a":{"docs":{},"df":0,"p":{"docs":{},"df":0,"s":{"docs":{},"df":0,"u":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0}},"df":1}}}}},"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"v":{"docs":{"https://phlip9.com/notes/android/root phone with magisk/":{"tf":1.0},"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":7.211102550927978},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":4.0},"https://phlip9.com/notes/confidential computing/gramine/":{"tf":3.3166247903554},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":11.090536506409418},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":8.06225774829855},"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":6.48074069840786},"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":6.855654600401044},"https://phlip9.com/notes/confidential computing/intel SGX/secure time/":{"tf":3.4641016151377544},"https://phlip9.com/notes/confidential computing/marblerun/":{"tf":3.7416573867739413},"https://phlip9.com/notes/confidential computing/mystikos/":{"tf":1.7320508075688772},"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":4.0}},"df":12,"e":{"docs":{},"df":0,"'":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/gramine/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":2.23606797749979},"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.7320508075688772},"https://phlip9.com/notes/confidential computing/marblerun/":{"tf":1.4142135623730951}},"df":5},".":{"docs":{},"df":0,"c":{"docs":{},"df":0,"p":{"docs":{},"df":0,"u":{"docs":{},"df":0,"s":{"docs":{},"df":0,"v":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.0}},"df":1}}}}}},"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"v":{"docs":{},"df":0,"s":{"docs":{},"df":0,"v":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.0}},"df":1}}}}}},"r":{"docs":{},"df":0,"u":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0}},"df":1}}}},"_":{"docs":{},"df":0,"b":{"docs":{},"df":0,"u":{"docs":{},"df":0,"i":{"docs":{},"df":0,"l":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0}},"df":1,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,".":{"docs":{},"df":0,"b":{"docs":{},"df":0,"u":{"docs":{},"df":0,"i":{"docs":{},"df":0,"l":{"docs":{},"df":0,"d":{"docs":{},"df":0,"(":{"docs":{},"df":0,"&":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{},"df":0,"p":{"docs":{},"df":0,";":{"docs":{},"df":0,"m":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0}},"df":1}}}}}}}}}}}}}},"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"g":{"docs":{},"df":0,"n":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"u":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"(":{"docs":{},"df":0,"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"g":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0}},"df":1}}}}}}}}}}}}},"u":{"docs":{},"df":0,"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"c":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"l":{"docs":{},"df":0,"_":{"docs":{},"df":0,"e":{"docs":{},"df":0,"x":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"(":{"docs":{},"df":0,"h":{"docs":{},"df":0,"o":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"v":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"e":{"docs":{},"df":0,":":{"docs":{},"df":0,":":{"docs":{},"df":0,"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"w":{"docs":{},"df":0,"(":{"docs":{},"df":0,"h":{"docs":{},"df":0,"o":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"_":{"docs":{},"df":0,"s":{"docs":{},"df":0,"o":{"docs":{},"df":0,"c":{"docs":{},"df":0,"k":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"i":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0}},"df":1}}}}}},"b":{"docs":{},"df":0,"u":{"docs":{},"df":0,"i":{"docs":{},"df":0,"l":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,":":{"docs":{},"df":0,":":{"docs":{},"df":0,"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"w":{"docs":{},"df":0,"(":{"docs":{},"df":0,"f":{"docs":{},"df":0,"i":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,".":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{},"df":0,"_":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"f":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}},"h":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{},"df":0,"h":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0}},"df":1}}}},"i":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.4142135623730951}},"df":2}}}},"n":{"docs":{},"df":0,"f":{"docs":{},"df":0,"o":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0}},"df":1}}}},"’":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0}},"df":1}}}},"v":{"docs":{"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.4142135623730951}},"df":1}},"o":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.4142135623730951},"https://phlip9.com/notes/btc-ln/BOLT 11 - invoices/":{"tf":1.7320508075688772},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/gramine/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.4142135623730951},"https://phlip9.com/notes/crypto/acme protocol/":{"tf":1.0},"https://phlip9.com/notes/performance/simdjson talk/":{"tf":1.7320508075688772},"https://phlip9.com/notes/postgres/snippets/":{"tf":1.4142135623730951}},"df":8,"e":{"docs":{},"df":0,"(":{"docs":{},"df":0,"d":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{"https://phlip9.com/notes/postgres/snippets/":{"tf":1.0}},"df":1}}}}},":":{"docs":{},"df":0,":":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"z":{"docs":{},"df":0,"e":{"docs":{},"df":0,"(":{"docs":{},"df":0,"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"g":{"docs":{},"df":0,"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"d":{"docs":{},"df":0,"_":{"docs":{},"df":0,"t":{"docs":{},"df":0,"x":{"docs":{},"df":0,".":{"docs":{},"df":0,"h":{"docs":{},"df":0,"e":{"docs":{},"df":0,"x":{"docs":{"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"u":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"g":{"docs":{"https://phlip9.com/notes/reproducible builds/rebuilderd/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/reproducible-builds.org/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.4142135623730951}},"df":4}}}}},"p":{"docs":{},"df":0,"p":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{},"df":0,"+":{"docs":{},"df":0,"t":{"docs":{},"df":0,"c":{"docs":{},"df":0,"b":{"docs":{},"df":0,"+":{"docs":{},"df":0,"p":{"docs":{},"df":0,"c":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0}},"df":1}}}}}}}}}}},"r":{"docs":{},"df":0,"y":{"docs":{},"df":0,"p":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.0}},"df":1,"t":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 8 - secure noise transport/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":2.449489742783178},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":2.449489742783178},"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel TDX/":{"tf":1.7320508075688772},"https://phlip9.com/notes/confidential computing/marblerun/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":1.0},"https://phlip9.com/notes/crypto/acme protocol/":{"tf":1.0},"https://phlip9.com/notes/devops/secrets/ejson (Shopify)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/devops/secrets/ejson-kms (AWS)/":{"tf":3.872983346207417},"https://phlip9.com/notes/devops/secrets/envkey/":{"tf":1.0},"https://phlip9.com/notes/devops/secrets/mozilla SOPS/":{"tf":2.0},"https://phlip9.com/notes/devops/secrets/sy - share secrets safely/":{"tf":1.0},"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/nix/links/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/lightning router overview/":{"tf":1.0}},"df":16,"e":{"docs":{},"df":0,"d":{"docs":{},"df":0,"_":{"docs":{},"df":0,"p":{"docs":{},"df":0,"p":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0}},"df":1,"_":{"docs":{},"df":0,"b":{"docs":{},"df":0,"u":{"docs":{},"df":0,"f":{"docs":{},"df":0,"_":{"docs":{},"df":0,"s":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0}},"df":1}}}}},"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{},"df":0,"_":{"docs":{},"df":0,"s":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0}},"df":1}}}}},"s":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.4142135623730951}},"df":1}}}}}}}}}}},"t":{"docs":{"https://phlip9.com/notes/confidential computing/marblerun/":{"tf":1.0}},"df":1}}},"u":{"docs":{},"df":0,"m":{"docs":{},"df":0,"b":{"docs":{"https://phlip9.com/notes/btc-ln/atomic multipath payments (AMP)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0}},"df":2}}}},"d":{"docs":{"https://phlip9.com/notes/AI ML/Expectimax Search/":{"tf":1.0},"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0},"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/BOLT 11 - invoices/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/lightning rod/":{"tf":1.4142135623730951},"https://phlip9.com/notes/combinatorics/k-combinations of a multiset/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":1.7320508075688772},"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":2.449489742783178},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":3.605551275463989},"https://phlip9.com/notes/lang/gdb ref/":{"tf":1.0},"https://phlip9.com/notes/lang/koka-lang/":{"tf":1.0},"https://phlip9.com/notes/lang/lua/":{"tf":6.324555320336759},"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":2.8284271247461903},"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":1.4142135623730951},"https://phlip9.com/notes/misc/kintsugi/":{"tf":1.4142135623730951},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.7320508075688772},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.7320508075688772},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/standard error/":{"tf":1.0}},"df":22,"i":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.7320508075688772}},"df":1}}},"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"s":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1}}}}}},"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"s":{"docs":{"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/monetary instruments/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/gramine/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":2.0},"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":2.449489742783178},"https://phlip9.com/notes/crypto/acme protocol/":{"tf":1.0}},"df":5}}},"p":{"docs":{},"df":0,"o":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":1.4142135623730951},"https://phlip9.com/notes/networking/ipv6 address space/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.4142135623730951}},"df":4}}}}},"{":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"g":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/AI ML/Expectimax Search/":{"tf":1.4142135623730951},"https://phlip9.com/notes/AI ML/Markov Decision Process (MDP)/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/G-test - multinomial goodness-of-fit/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/cheat sheet/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/p-value/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/testing whether a coin is fair/":{"tf":1.0}},"df":6}}}}}}},"f":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"c":{"docs":{"https://phlip9.com/notes/btc-ln/hosted channels/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.4142135623730951},"https://phlip9.com/notes/crypto/biscuit authz/":{"tf":1.0}},"df":3}}}},"g":{"docs":{},"df":0,"a":{"docs":{},"df":0,"g":{"docs":{"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/money services business (MSB)/":{"tf":1.7320508075688772},"https://phlip9.com/notes/management/relieve often - why generals were more successful in WWII/":{"tf":1.0}},"df":2}},"i":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/AI ML/Markov Decision Process (MDP)/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel TDX/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":1.0},"https://phlip9.com/notes/fuzzing/bolero - fuzzing + property testing/":{"tf":1.0},"https://phlip9.com/notes/fuzzing/fuzzing/":{"tf":1.0},"https://phlip9.com/notes/management/relieve often - why generals were more successful in WWII/":{"tf":1.0},"https://phlip9.com/notes/performance/simdjson talk/":{"tf":1.0},"https://phlip9.com/notes/postgres/types of scans/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.7320508075688772},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":2.449489742783178}},"df":13,"e":{"docs":{},"df":0,"'":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/secure time/":{"tf":1.0}},"df":1}}}}},"h":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"c":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.0},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/rr with rust/":{"tf":1.0}},"df":4}}}},"j":{"docs":{},"df":0,"o":{"docs":{},"df":0,"y":{"docs":{"https://phlip9.com/notes/crypto/acme protocol/":{"tf":1.0},"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":1.0}},"df":2}}},"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"g":{"docs":{},"df":0,"h":{"docs":{"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0},"https://phlip9.com/notes/design/form design/":{"tf":1.0},"https://phlip9.com/notes/misc/kintsugi/":{"tf":1.0},"https://phlip9.com/notes/networking/network interface card (NIC)/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.4142135623730951},"https://phlip9.com/notes/reproducible builds/reproducible-builds.org/":{"tf":1.0}},"df":7}}}},"q":{"docs":{},"df":0,"u":{"docs":{},"df":0,"e":{"docs":{},"df":0,"u":{"docs":{"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":1.0}},"df":1}}}},"s":{"docs":{},"df":0,"u":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/android/android cli setup/":{"tf":1.4142135623730951},"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0},"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.7320508075688772},"https://phlip9.com/notes/btc-ln/breez lightning service providers/":{"tf":2.0},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.4142135623730951},"https://phlip9.com/notes/design/form design/":{"tf":1.4142135623730951},"https://phlip9.com/notes/devops/secrets/1password - secrets automation/":{"tf":1.0},"https://phlip9.com/notes/ios/ios setup/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0},"https://phlip9.com/notes/lang/flutter/flutter setup/":{"tf":1.0},"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.0}},"df":15}}},"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"i":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.0}},"df":1}}},"e":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.7320508075688772},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0},"https://phlip9.com/notes/devops/algo wireguard VPN server/":{"tf":1.4142135623730951},"https://phlip9.com/notes/keyboards/moergo glove80/":{"tf":1.4142135623730951},"https://phlip9.com/notes/misc/pop_OS! tweaks/":{"tf":1.7320508075688772},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":2.0},"https://phlip9.com/notes/reproducible builds/nix/nix debug broken package build/":{"tf":1.4142135623730951},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.0}},"df":9,"p":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.0}},"df":1}}}}}},"h":{"docs":{},"df":0,"u":{"docs":{},"df":0,"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,".":{"docs":{},"df":0,"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{},"df":0,"/":{"docs":{},"df":0,"2":{"docs":{},"df":0,"0":{"docs":{},"df":0,"1":{"docs":{},"df":0,"8":{"docs":{},"df":0,"/":{"docs":{},"df":0,"0":{"docs":{},"df":0,"8":{"docs":{},"df":0,"/":{"docs":{},"df":0,"2":{"docs":{},"df":0,"3":{"docs":{},"df":0,"/":{"docs":{},"df":0,"e":{"docs":{},"df":0,"v":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"u":{"docs":{"https://phlip9.com/notes/fuzzing/fuzzing/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}},"i":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/marblerun/":{"tf":1.0},"https://phlip9.com/notes/crypto/(talk) authenticated data structures for stateless validation/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/rr with rust/":{"tf":1.0},"https://phlip9.com/notes/performance/simdjson talk/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.4142135623730951},"https://phlip9.com/notes/reproducible builds/reproducible-builds.org/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/arubanetworks captive portal/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.4142135623730951},"https://phlip9.com/notes/statistics probability/CDF confidence bands - DKW inequality/":{"tf":1.0}},"df":11},"t":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/foreign bank account report (FBAR)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/money services business (MSB)/":{"tf":1.0},"https://phlip9.com/notes/b l o c k c h a i n/fastpay/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":2.0},"https://phlip9.com/notes/devops/secrets/1password - secrets automation/":{"tf":1.0}},"df":6}}},"r":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/lua/":{"tf":1.4142135623730951},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.4142135623730951},"https://phlip9.com/notes/statistics probability/winsorize/":{"tf":1.4142135623730951}},"df":7}}},"u":{"docs":{},"df":0,"m":{"docs":{"https://phlip9.com/notes/AI ML/Expectimax Search/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/BOLT 11 - invoices/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/BOLT 7 - p2p node and channel discovery/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":2.8284271247461903}},"df":5,"e":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0}},"df":1}}}},"v":{"docs":{"https://phlip9.com/notes/confidential computing/gramine/":{"tf":1.0},"https://phlip9.com/notes/devops/algo wireguard VPN server/":{"tf":1.0},"https://phlip9.com/notes/devops/secrets/doppler/":{"tf":1.0},"https://phlip9.com/notes/devops/secrets/envkey/":{"tf":1.0},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.7320508075688772},"https://phlip9.com/notes/lang/lua/":{"tf":1.4142135623730951},"https://phlip9.com/notes/misc/envsubst/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/nix/nix debug spurrious rebuilds/":{"tf":1.0}},"df":8,"/":{"docs":{},"df":0,"b":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"/":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"v":{"docs":{"https://phlip9.com/notes/devops/algo wireguard VPN server/":{"tf":1.0}},"df":1}}}}}}}}}},"i":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/AI ML/Expectimax Search/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.7320508075688772},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":1.0},"https://phlip9.com/notes/devops/deployment strategies/":{"tf":2.0},"https://phlip9.com/notes/devops/docker compose/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0},"https://phlip9.com/notes/lang/gdb ref/":{"tf":1.0},"https://phlip9.com/notes/misc/envsubst/":{"tf":2.23606797749979},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.4142135623730951},"https://phlip9.com/notes/reproducible builds/nix/nix debug broken package build/":{"tf":1.4142135623730951},"https://phlip9.com/notes/reproducible builds/nix/nix debug spurrious rebuilds/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/rebuilderd/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/reproducible-builds.org/":{"tf":1.4142135623730951}},"df":15}}}},"k":{"docs":{},"df":0,"e":{"docs":{},"df":0,"y":{"docs":{"https://phlip9.com/notes/devops/secrets/envkey/":{"tf":1.4142135623730951}},"df":1}}},"o":{"docs":{},"df":0,"y":{"docs":{"https://phlip9.com/notes/confidential computing/marblerun/":{"tf":1.0}},"df":1}},"s":{"docs":{},"df":0,"u":{"docs":{},"df":0,"b":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/misc/envsubst/":{"tf":2.449489742783178}},"df":1}}}}}}},"o":{"docs":{},"df":0,"f":{"docs":{"https://phlip9.com/notes/misc/prepping RPI for embedded dev/":{"tf":1.0}},"df":1}},"p":{"docs":{"https://phlip9.com/notes/fuzzing/fuzzing/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/CDF confidence bands - DKW inequality/":{"tf":2.23606797749979},"https://phlip9.com/notes/statistics probability/G-test - multinomial goodness-of-fit/":{"tf":2.0}},"df":3,"c":{"docs":{"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.7320508075688772},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.7320508075688772},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.4142135623730951}},"df":3},"f":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/distributed systems/papers/(2021) Leaderless Consensus/":{"tf":1.0}},"df":1}},"h":{"docs":{},"df":0,"e":{"docs":{},"df":0,"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/nix/nix debug broken package build/":{"tf":1.0}},"df":4}}}}},"i":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":2.23606797749979}},"df":3,"/":{"docs":{},"df":0,"u":{"docs":{},"df":0,"n":{"docs":{},"df":0,"k":{"docs":{},"df":0,"n":{"docs":{},"df":0,"o":{"docs":{},"df":0,"w":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/gramine/":{"tf":1.0}},"df":2}}}}}}}},"p":{"docs":{},"df":0,"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"u":{"docs":{},"df":0,"d":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"y":{"docs":{},"df":0,"m":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0}},"df":1}}}}}}}}}},"s":{"docs":{},"df":0,"o":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/AI ML/Markov Decision Process (MDP)/":{"tf":1.4142135623730951}},"df":1}}}},"o":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":3.0},"https://phlip9.com/notes/confidential computing/intel SGX/secure time/":{"tf":1.4142135623730951}},"df":2}},"x":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/misc/kintsugi/":{"tf":2.8284271247461903}},"df":1}}},"s":{"docs":{},"df":0,"^":{"docs":{},"df":0,"2":{"docs":{"https://phlip9.com/notes/statistics probability/CDF confidence bands - DKW inequality/":{"tf":1.0}},"df":1}}},"t":{"docs":{"https://phlip9.com/notes/confidential computing/intel TDX/":{"tf":1.0}},"df":1}},"q":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0}},"df":1,"u":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/combinatorics/k-combinations of a multiset/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":2.6457513110645907},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0},"https://phlip9.com/notes/lang/lua/":{"tf":1.0},"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.0},"https://phlip9.com/notes/performance/bit hacks/":{"tf":2.0}},"df":7},"t":{"docs":{"https://phlip9.com/notes/AI ML/Markov Decision Process (MDP)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.0}},"df":2}},"i":{"docs":{},"df":0,"p":{"docs":{"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.0}},"df":1},"v":{"docs":{},"df":0,"=":{"docs":{},"df":0,"\"":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"f":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"h":{"docs":{"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.0}},"df":2}}}}}}}}},"a":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/AI ML/Expectimax Search/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.0},"https://phlip9.com/notes/combinatorics/k-combinations of a multiset/":{"tf":1.0},"https://phlip9.com/notes/networking/CIDR/":{"tf":1.4142135623730951},"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/multinomial distribution/":{"tf":1.4142135623730951}},"df":6}}}}}},"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,".":{"docs":{},"df":0,"j":{"docs":{},"df":0,"s":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/confidential computing/marblerun/":{"tf":1.0}},"df":1}}}}}},"e":{"docs":{},"df":0,"p":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.0}},"df":3}}}}},"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"g":{"docs":{"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":1.4142135623730951}},"df":1}}}},"r":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":2.449489742783178},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":3.0},"https://phlip9.com/notes/lang/lua/":{"tf":1.7320508075688772},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.4142135623730951}},"df":4,"&":{"docs":{},"df":0,"l":{"docs":{},"df":0,"t":{"docs":{},"df":0,";":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0}},"df":1}}}}},"(":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0}},"df":2,":":{"docs":{},"df":0,"f":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0}},"df":1}}}},"f":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"_":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"r":{"docs":{},"df":0,"!":{"docs":{},"df":0,"(":{"docs":{},"df":0,"\"":{"docs":{},"df":0,"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"g":{"docs":{},"df":0,"n":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"u":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}},"t":{"docs":{},"df":0,"h":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,".":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0}},"df":1}}}}}}}}},"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.4142135623730951}},"df":2}}},"n":{"docs":{},"df":0,"o":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1}},"o":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":2.0},"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":2.8284271247461903},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0},"https://phlip9.com/notes/crypto/acme protocol/":{"tf":1.0},"https://phlip9.com/notes/design/form design/":{"tf":2.0},"https://phlip9.com/notes/devops/linkerd/":{"tf":1.0},"https://phlip9.com/notes/devops/service mesh/":{"tf":1.0},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":2.6457513110645907},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":2.0},"https://phlip9.com/notes/lang/lua/":{"tf":3.4641016151377544},"https://phlip9.com/notes/lang/rust/rr with rust/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/rust verification tools/":{"tf":1.0},"https://phlip9.com/notes/misc/setting up a headless raspbian boot image/":{"tf":1.4142135623730951},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.7320508075688772},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":2.449489742783178},"https://phlip9.com/notes/statistics probability/herbie - float error fixer/":{"tf":1.4142135623730951},"https://phlip9.com/notes/statistics probability/standard error/":{"tf":2.449489742783178},"https://phlip9.com/notes/statistics probability/testing whether a coin is fair/":{"tf":3.7416573867739413}},"df":20,"&":{"docs":{},"df":0,"g":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/crypto/tls exported keying material/":{"tf":1.0}},"df":1}}},"(":{"docs":{},"df":0,"\"":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/lang/lua/":{"tf":1.0}},"df":1}}}}}}},":":{"docs":{},"df":0,"\\":{"docs":{},"df":0,"n":{"docs":{},"df":0,"$":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"r":{"docs":{},"df":0,"\\":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"e":{"docs":{},"df":0,":":{"docs":{},"df":0,"\\":{"docs":{},"df":0,"n":{"docs":{},"df":0,"$":{"docs":{},"df":0,"b":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"k":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}},"[":{"docs":{},"df":0,"e":{"docs":{},"df":0,"0":{"docs":{},"df":0,"4":{"docs":{},"df":0,"3":{"docs":{},"df":0,"3":{"docs":{"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.7320508075688772}},"df":1}}},"5":{"docs":{},"df":0,"9":{"docs":{},"df":0,"9":{"docs":{"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":2.23606797749979}},"df":1}}}}}},"d":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"&":{"docs":{},"df":0,"l":{"docs":{},"df":0,"t":{"docs":{},"df":0,";":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"c":{"docs":{},"df":0,":":{"docs":{},"df":0,":":{"docs":{},"df":0,"b":{"docs":{},"df":0,"o":{"docs":{},"df":0,"x":{"docs":{},"df":0,"e":{"docs":{},"df":0,"d":{"docs":{},"df":0,":":{"docs":{},"df":0,":":{"docs":{},"df":0,"b":{"docs":{},"df":0,"o":{"docs":{},"df":0,"x":{"docs":{},"df":0,"&":{"docs":{},"df":0,"l":{"docs":{},"df":0,"t":{"docs":{},"df":0,";":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"d":{"docs":{},"df":0,":":{"docs":{},"df":0,":":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,":":{"docs":{},"df":0,":":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,":":{"docs":{},"df":0,":":{"docs":{},"df":0,"c":{"docs":{},"df":0,"u":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"k":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.0}},"df":1}}}}}}}},"s":{"docs":{},"df":0,"2":{"docs":{},"df":0,"5":{"docs":{},"df":0,"6":{"docs":{"https://phlip9.com/notes/crypto/acme protocol/":{"tf":1.0}},"df":1}}},"c":{"docs":{"https://phlip9.com/notes/keyboards/moergo glove80/":{"tf":1.4142135623730951}},"df":1,"a":{"docs":{},"df":0,"p":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0},"https://phlip9.com/notes/lang/lua/":{"tf":1.4142135623730951}},"df":2}},"h":{"docs":{},"df":0,"e":{"docs":{},"df":0,"w":{"docs":{"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":1.0}},"df":1}}}},"p":{"docs":{"https://phlip9.com/notes/postgres/types of scans/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.0}},"df":2,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0},"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":1.0},"https://phlip9.com/notes/postgres/types of scans/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.4142135623730951}},"df":6}}}},"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/WSL/WSL2 custom kernel/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/gramine/":{"tf":1.0},"https://phlip9.com/notes/lang/ATS/Install ATS2/":{"tf":1.0},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.4142135623730951},"https://phlip9.com/notes/reproducible builds/reproducible-builds.org/":{"tf":1.0}},"df":6,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"s":{"docs":{},"df":0,"/":{"docs":{},"df":0,"c":{"docs":{},"df":0,"i":{"docs":{},"df":0,"r":{"docs":{},"df":0,"c":{"docs":{},"df":0,"u":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"p":{"docs":{},"df":0,"y":{"docs":{},"df":0,"t":{"docs":{},"df":0,"h":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}},"t":{"docs":{},"df":0,"3":{"docs":{},"df":0,"1":{"docs":{},"df":0,"/":{"docs":{},"df":0,"r":{"docs":{},"df":0,"c":{"docs":{},"df":0,"g":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/crypto/TLS self-signed pubkey-only certs/":{"tf":1.0}},"df":1}}}}}}}},"a":{"docs":{},"df":0,"b":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"h":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":2.23606797749979},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":1.0},"https://phlip9.com/notes/crypto/dex - open-source OIDC & OAuth 2.0 provider/":{"tf":1.0},"https://phlip9.com/notes/devops/consul/":{"tf":1.0}},"df":7}}}}},"t":{"docs":{"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/foreign bank account report (FBAR)/":{"tf":1.0}},"df":1}},"i":{"docs":{},"df":0,"m":{"docs":{"https://phlip9.com/notes/AI ML/Expectimax Search/":{"tf":2.0},"https://phlip9.com/notes/AI ML/Markov Decision Process (MDP)/":{"tf":2.23606797749979},"https://phlip9.com/notes/statistics probability/G-test - multinomial goodness-of-fit/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/standard error/":{"tf":1.7320508075688772},"https://phlip9.com/notes/statistics probability/testing whether a coin is fair/":{"tf":2.23606797749979}},"df":5}}}},"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"g":{"docs":{"https://phlip9.com/notes/devops/azure CLI/":{"tf":1.0}},"df":1}},"c":{"docs":{"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0},"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/financial instituion/":{"tf":1.0},"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/foreign bank account report (FBAR)/":{"tf":1.0},"https://phlip9.com/notes/b l o c k c h a i n/fastpay/":{"tf":2.0},"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/BOLT 7 - p2p node and channel discovery/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/breez lightning service providers/":{"tf":1.7320508075688772},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":1.7320508075688772},"https://phlip9.com/notes/crypto/biscuit authz/":{"tf":1.0},"https://phlip9.com/notes/design/form design/":{"tf":1.0},"https://phlip9.com/notes/devops/AKS - azure kubernetes service/":{"tf":1.0},"https://phlip9.com/notes/devops/consul/":{"tf":1.0},"https://phlip9.com/notes/devops/linkerd/":{"tf":1.4142135623730951},"https://phlip9.com/notes/devops/nomad/":{"tf":1.4142135623730951},"https://phlip9.com/notes/devops/service mesh/":{"tf":1.4142135623730951},"https://phlip9.com/notes/keyboards/moergo glove80/":{"tf":1.0},"https://phlip9.com/notes/lang/lua/":{"tf":1.7320508075688772},"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.0},"https://phlip9.com/notes/postgres/types of scans/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":2.449489742783178},"https://phlip9.com/notes/reproducible builds/nix/nix debug broken package build/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.0}},"df":24,"/":{"docs":{},"df":0,"a":{"docs":{},"df":0,"p":{"docs":{},"df":0,"t":{"docs":{},"df":0,"/":{"docs":{},"df":0,"k":{"docs":{},"df":0,"e":{"docs":{},"df":0,"y":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.0}},"df":1,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"g":{"docs":{},"df":0,"s":{"docs":{},"df":0,"/":{"docs":{},"df":0,"d":{"docs":{},"df":0,"o":{"docs":{},"df":0,"c":{"docs":{},"df":0,"k":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,".":{"docs":{},"df":0,"g":{"docs":{},"df":0,"p":{"docs":{},"df":0,"g":{"docs":{"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}},"s":{"docs":{},"df":0,"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"r":{"docs":{},"df":0,"c":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,".":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,".":{"docs":{},"df":0,"d":{"docs":{},"df":0,"/":{"docs":{},"df":0,"a":{"docs":{},"df":0,"z":{"docs":{},"df":0,"u":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/devops/azure CLI/":{"tf":1.0}},"df":1}}}},"d":{"docs":{},"df":0,"o":{"docs":{},"df":0,"c":{"docs":{},"df":0,"k":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,".":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.0}},"df":1}}}}}}}}}}},"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{},"df":0,"h":{"docs":{},"df":0,"l":{"docs":{},"df":0,"y":{"docs":{},"df":0,".":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.0}},"df":1}}}}}}}}}}}},"f":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"i":{"docs":{},"df":0,"x":{"docs":{},"df":0,".":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0}},"df":1}}}}}}}}}}}}},"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/gramine/":{"tf":1.0}},"df":2}}}}},"l":{"docs":{},"df":0,"l":{"docs":{},"df":0,"v":{"docs":{},"df":0,"m":{"docs":{"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0}},"df":1}}}},"m":{"docs":{},"df":0,"s":{"docs":{},"df":0,"p":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"d":{"docs":{},"df":0,".":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/gramine/":{"tf":1.0}},"df":2}}}}}}}}}}}}}}}}}}}}}}}}}},"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"u":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"d":{"docs":{},"df":0,".":{"docs":{},"df":0,"g":{"docs":{},"df":0,"p":{"docs":{},"df":0,"g":{"docs":{},"df":0,".":{"docs":{},"df":0,"d":{"docs":{},"df":0,"/":{"docs":{},"df":0,"m":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"s":{"docs":{},"df":0,"o":{"docs":{},"df":0,"f":{"docs":{},"df":0,"t":{"docs":{},"df":0,".":{"docs":{},"df":0,"g":{"docs":{},"df":0,"p":{"docs":{},"df":0,"g":{"docs":{"https://phlip9.com/notes/devops/azure CLI/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"n":{"docs":{},"df":0,"i":{"docs":{},"df":0,"x":{"docs":{},"df":0,"/":{"docs":{},"df":0,"n":{"docs":{},"df":0,"i":{"docs":{},"df":0,"x":{"docs":{},"df":0,".":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"f":{"docs":{"https://phlip9.com/notes/reproducible builds/nix/nix auto-allocate-uids -> nixbld users/":{"tf":1.7320508075688772}},"df":1,".":{"docs":{},"df":0,"o":{"docs":{},"df":0,"l":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/reproducible builds/nix/nix auto-allocate-uids -> nixbld users/":{"tf":1.4142135623730951}},"df":1}}}}}}}}}}}}}}}},"s":{"docs":{},"df":0,"y":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"m":{"docs":{},"df":0,"d":{"docs":{},"df":0,"/":{"docs":{},"df":0,"j":{"docs":{},"df":0,"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"r":{"docs":{},"df":0,"n":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"d":{"docs":{},"df":0,".":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"f":{"docs":{},"df":0,".":{"docs":{},"df":0,"d":{"docs":{},"df":0,"/":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{"https://phlip9.com/notes/misc/prepping RPI for embedded dev/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}},"u":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"v":{"docs":{},"df":0,"/":{"docs":{},"df":0,"r":{"docs":{},"df":0,"u":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,".":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/android/linux ADB udev setup/":{"tf":1.0}},"df":1}}}}}}}}}}}}}},"h":{"docs":{"https://phlip9.com/notes/btc-ln/submarine swaps/":{"tf":1.0},"https://phlip9.com/notes/crypto/(talk) authenticated data structures for stateless validation/":{"tf":1.4142135623730951},"https://phlip9.com/notes/networking/network interfaces/":{"tf":2.0}},"df":3,"0":{"docs":{"https://phlip9.com/notes/android/ADB over TCP inside WSL2/":{"tf":1.0},"https://phlip9.com/notes/networking/network interfaces/":{"tf":2.449489742783178}},"df":2,".":{"docs":{},"df":0,"1":{"docs":{"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.0}},"df":1}},":":{"docs":{},"df":0,"1":{"docs":{"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.0}},"df":1}}},"4":{"docs":{"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.0}},"df":1,".":{"docs":{},"df":0,"0":{"docs":{"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.0}},"df":1},"1":{"docs":{"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.0}},"df":1},"2":{"docs":{"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.0}},"df":1}},":":{"docs":{},"df":0,"5":{"docs":{"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.0}},"df":1},"6":{"docs":{"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.0}},"df":1}}},"5":{"docs":{"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.0}},"df":1},"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/networking/network interface card (NIC)/":{"tf":1.0},"https://phlip9.com/notes/networking/network interfaces/":{"tf":3.605551275463989}},"df":2}}}}}}},"u":{"docs":{"https://phlip9.com/notes/fuzzing/fuzzing/":{"tf":1.0}},"df":1,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"p":{"docs":{"https://phlip9.com/notes/fuzzing/fuzzing/":{"tf":1.0}},"df":1}}}},"v":{"docs":{"https://phlip9.com/notes/management/relieve often - why generals were more successful in WWII/":{"tf":1.0}},"df":1,"a":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0}},"df":1,"(":{"docs":{},"df":0,"e":{"docs":{},"df":0,"x":{"docs":{},"df":0,"p":{"docs":{},"df":0,"r":{"docs":{},"df":0,"0":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0}},"df":1}}}}}},"u":{"docs":{"https://phlip9.com/notes/AI ML/Expectimax Search/":{"tf":1.7320508075688772},"https://phlip9.com/notes/AI ML/Markov Decision Process (MDP)/":{"tf":1.0},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.4142135623730951},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":4}},"n":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/sui/":{"tf":1.0}},"df":1}},"e":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/android/root phone with magisk/":{"tf":1.4142135623730951},"https://phlip9.com/notes/btc-ln/BOLT 11 - invoices/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/breez lightning service providers/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":1.0},"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":1.4142135623730951},"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":1.0},"https://phlip9.com/notes/fuzzing/fuzzcheck-rs/":{"tf":1.0},"https://phlip9.com/notes/ios/ios setup/":{"tf":1.0},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/rr with rust/":{"tf":1.4142135623730951},"https://phlip9.com/notes/misc/kintsugi/":{"tf":1.7320508075688772},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0},"https://phlip9.com/notes/misc/setting up a headless raspbian boot image/":{"tf":1.0},"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.4142135623730951},"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.0},"https://phlip9.com/notes/postgres/postgres performance tuning/":{"tf":1.4142135623730951},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/reproducible-builds.org/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.4142135623730951}},"df":22,"l":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1}},"t":{"docs":{"https://phlip9.com/notes/WSL/WSL2 custom kernel/":{"tf":2.23606797749979},"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":3.1622776601683795},"https://phlip9.com/notes/devops/nomad/":{"tf":1.4142135623730951},"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":1.4142135623730951},"https://phlip9.com/notes/statistics probability/multinomial distribution/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/standard error/":{"tf":1.0}},"df":6,":":{"docs":{},"df":0,":":{"docs":{},"df":0,"f":{"docs":{},"df":0,"u":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"g":{"docs":{},"df":0,"g":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}},"o":{"docs":{},"df":0,"p":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"q":{"docs":{},"df":0,"u":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}},"u":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/atomic multipath payments (AMP)/":{"tf":1.0},"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0},"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":1.0},"https://phlip9.com/notes/networking/CIDR/":{"tf":1.0}},"df":7}}},"r":{"docs":{},"df":0,"y":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/btc-ln/breez lightning service providers/":{"tf":1.0},"https://phlip9.com/notes/crypto/acme protocol/":{"tf":1.0},"https://phlip9.com/notes/distributed systems/papers/(2021) Leaderless Consensus/":{"tf":1.4142135623730951}},"df":3}},"t":{"docs":{},"df":0,"h":{"docs":{"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/marblerun/":{"tf":1.7320508075688772},"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":1.0},"https://phlip9.com/notes/misc/kintsugi/":{"tf":1.0},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.4142135623730951},"https://phlip9.com/notes/postgres/snippets/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/nix/nix debug broken package build/":{"tf":1.0}},"df":7}},"w":{"docs":{},"df":0,"h":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":1.4142135623730951},"https://phlip9.com/notes/crypto/TLS self-signed pubkey-only certs/":{"tf":1.0},"https://phlip9.com/notes/crypto/smallstep - private online CA & ACME server/":{"tf":1.0},"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":1.4142135623730951},"https://phlip9.com/notes/fuzzing/fuzzcheck-rs/":{"tf":1.0},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0}},"df":6}}}}}}},"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":1.0}},"df":1}},"d":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel TDX/":{"tf":1.0}},"df":3}}},"x":{"docs":{"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/gramine/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/marblerun/":{"tf":1.0},"https://phlip9.com/notes/devops/algo wireguard VPN server/":{"tf":1.0},"https://phlip9.com/notes/keyboards/moergo glove80/":{"tf":1.0},"https://phlip9.com/notes/lang/gdb ref/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/understanding sycamore reactivity/":{"tf":1.0},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0},"https://phlip9.com/notes/misc/uptime to downtime conversion/":{"tf":1.0},"https://phlip9.com/notes/networking/ipv6 address space/":{"tf":1.7320508075688772},"https://phlip9.com/notes/networking/network interfaces/":{"tf":2.8284271247461903},"https://phlip9.com/notes/performance/bit hacks/":{"tf":2.449489742783178}},"df":12,"a":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0},"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":1.7320508075688772}},"df":2,"c":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/AI ML/Expectimax Search/":{"tf":2.23606797749979},"https://phlip9.com/notes/WSL/WSL2 custom kernel/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/atomic multipath payments (AMP)/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.0},"https://phlip9.com/notes/design/form design/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/rr with rust/":{"tf":1.0},"https://phlip9.com/notes/networking/CIDR/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/multinomial distribution/":{"tf":1.4142135623730951},"https://phlip9.com/notes/statistics probability/standard error/":{"tf":1.0}},"df":11,"l":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/combinatorics/k-combinations of a multiset/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.0},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0},"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":1.0},"https://phlip9.com/notes/misc/kintsugi/":{"tf":1.0},"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/nix/nix debug spurrious rebuilds/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/standard error/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/testing whether a coin is fair/":{"tf":1.0}},"df":11}}}},"m":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0}},"df":1}},"p":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/AI ML/Expectimax Search/":{"tf":1.0},"https://phlip9.com/notes/combinatorics/k-combinations of a multiset/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":2.23606797749979},"https://phlip9.com/notes/confidential computing/gramine/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/mystikos/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":1.0},"https://phlip9.com/notes/crypto/(talk) authenticated data structures for stateless validation/":{"tf":1.0},"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":1.4142135623730951},"https://phlip9.com/notes/design/form design/":{"tf":1.0},"https://phlip9.com/notes/devops/deployment strategies/":{"tf":1.0},"https://phlip9.com/notes/devops/nomad/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":2.23606797749979},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":2.0},"https://phlip9.com/notes/lang/lua/":{"tf":1.0},"https://phlip9.com/notes/lang/operator fixity and precedence/":{"tf":1.7320508075688772},"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/sycamore x futures/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/understanding sycamore reactivity/":{"tf":1.0},"https://phlip9.com/notes/misc/envsubst/":{"tf":1.0},"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":1.0},"https://phlip9.com/notes/misc/pop_OS! tweaks/":{"tf":1.0},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":2.0},"https://phlip9.com/notes/networking/CIDR/":{"tf":1.7320508075688772},"https://phlip9.com/notes/networking/network interfaces/":{"tf":2.0},"https://phlip9.com/notes/performance/bit hacks/":{"tf":2.23606797749979},"https://phlip9.com/notes/postgres/postgres performance tuning/":{"tf":1.0},"https://phlip9.com/notes/postgres/types of scans/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/nix/links/":{"tf":2.0},"https://phlip9.com/notes/reproducible builds/reproducible-builds.org/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":3.0},"https://phlip9.com/notes/router/lightning router/captive portal/arubanetworks captive portal/":{"tf":1.4142135623730951},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":4.795831523312719},"https://phlip9.com/notes/statistics probability/CDF confidence bands - DKW inequality/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/G-test - multinomial goodness-of-fit/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/multinomial distribution/":{"tf":2.0},"https://phlip9.com/notes/statistics probability/standard error/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/testing whether a coin is fair/":{"tf":1.7320508075688772},"https://phlip9.com/notes/statistics probability/winsorize/":{"tf":2.23606797749979}},"df":41,"e":{"docs":{},"df":0,",":{"docs":{},"df":0,"&":{"docs":{},"df":0,"n":{"docs":{},"df":0,"b":{"docs":{},"df":0,"s":{"docs":{},"df":0,"p":{"docs":{},"df":0,";":{"docs":{},"df":0,"w":{"docs":{},"df":0,"w":{"docs":{},"df":0,"w":{"docs":{},"df":0,".":{"docs":{},"df":0,"b":{"docs":{},"df":0,"b":{"docs":{},"df":0,"c":{"docs":{},"df":0,".":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{"https://phlip9.com/notes/router/lightning router/captive portal/arubanetworks captive portal/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}},".":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{"https://phlip9.com/notes/crypto/acme protocol/":{"tf":1.4142135623730951}},"df":1}}}},"s":{"docs":{},"df":0,"/":{"docs":{},"df":0,"h":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{},"df":0,"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"w":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"l":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/confidential computing/gramine/":{"tf":1.0}},"df":1}}}}}}}}}},"o":{"docs":{},"df":0,"p":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"v":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"o":{"docs":{},"df":0,"/":{"docs":{},"df":0,"u":{"docs":{},"df":0,"b":{"docs":{},"df":0,"u":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"u":{"docs":{},"df":0,"2":{"docs":{},"df":0,"0":{"docs":{},"df":0,".":{"docs":{},"df":0,"0":{"docs":{},"df":0,"4":{"docs":{"https://phlip9.com/notes/confidential computing/gramine/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}},"c":{"docs":{},"df":0,"e":{"docs":{"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":1.0},"https://phlip9.com/notes/management/relieve often - why generals were more successful in WWII/":{"tf":1.0}},"df":2,"e":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/AI ML/Expectimax Search/":{"tf":1.0},"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":1.0},"https://phlip9.com/notes/management/relieve often - why generals were more successful in WWII/":{"tf":1.0}},"df":3}},"p":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/AI ML/Markov Decision Process (MDP)/":{"tf":1.0},"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0},"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/financial instituion/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/BOLT 4 - onion routing protocol/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.0},"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":1.0},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":2.8284271247461903},"https://phlip9.com/notes/lang/lua/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/rust/rr with rust/":{"tf":1.0},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.4142135623730951},"https://phlip9.com/notes/networking/CIDR/":{"tf":1.0},"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.0},"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.4142135623730951}},"df":15}},"r":{"docs":{},"df":0,"p":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/postgres/postgres performance tuning/":{"tf":1.0}},"df":1}}}},"h":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"g":{"docs":{"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/money services business (MSB)/":{"tf":2.449489742783178},"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/BOLT 7 - p2p node and channel discovery/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":2.0},"https://phlip9.com/notes/distributed systems/papers/(2021) Leaderless Consensus/":{"tf":1.4142135623730951},"https://phlip9.com/notes/misc/optimization solvers/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.4142135623730951}},"df":8}}}},"i":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.0}},"df":1}},"l":{"docs":{},"df":0,"u":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0}},"df":1,"e":{"docs":{},"df":0,"=":{"docs":{},"df":0,"\"":{"docs":{},"df":0,"*":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"s":{"docs":{},"df":0,"c":{"docs":{},"df":0,"c":{"docs":{},"df":0,"2":{"docs":{"https://phlip9.com/notes/lang/ATS/Install ATS2/":{"tf":1.0}},"df":1}}}}}},"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"g":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/lang/ATS/Install ATS2/":{"tf":1.0}},"df":1}}}}}}},"d":{"docs":{},"df":0,"o":{"docs":{},"df":0,"c":{"docs":{},"df":0,"u":{"docs":{},"df":0,"g":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/lang/ATS/Install ATS2/":{"tf":1.0}},"df":1}}}}}}},"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/lang/ATS/Install ATS2/":{"tf":1.0}},"df":1}}}}},"d":{"docs":{},"df":0,"o":{"docs":{},"df":0,"c":{"docs":{"https://phlip9.com/notes/lang/ATS/Install ATS2/":{"tf":1.0}},"df":1}}},"n":{"docs":{},"df":0,"p":{"docs":{},"df":0,"m":{"docs":{"https://phlip9.com/notes/lang/ATS/Install ATS2/":{"tf":1.0}},"df":1}}}}},"d":{"docs":{},"df":0,".":{"docs":{},"df":0,"n":{"docs":{},"df":0,"o":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"_":{"docs":{},"df":0,"p":{"docs":{},"df":0,"k":{"docs":{"https://phlip9.com/notes/postgres/snippets/":{"tf":1.4142135623730951}},"df":1}}}}}}}}}}},"s":{"docs":{"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/money services business (MSB)/":{"tf":1.0},"https://phlip9.com/notes/combinatorics/k-combinations of a multiset/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.0},"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":1.4142135623730951},"https://phlip9.com/notes/nvim/universal-ctags Notes/":{"tf":1.0}},"df":5}}}},"e":{"docs":{},"df":0,"c":{"docs":{"https://phlip9.com/notes/fuzzing/fuzzcheck-rs/":{"tf":1.0},"https://phlip9.com/notes/misc/setting up a headless raspbian boot image/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/nix/nix debug broken package build/":{"tf":1.0}},"df":4,"n":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.4142135623730951}},"df":1}}},"u":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0},"https://phlip9.com/notes/b l o c k c h a i n/fastpay/":{"tf":1.0},"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":3.1622776601683795},"https://phlip9.com/notes/btc-ln/submarine swaps/":{"tf":1.7320508075688772},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.7320508075688772},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.7320508075688772},"https://phlip9.com/notes/confidential computing/intel TDX/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":1.0},"https://phlip9.com/notes/lang/flutter/flutter setup/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/rust/rr with rust/":{"tf":2.23606797749979},"https://phlip9.com/notes/misc/setting up a headless raspbian boot image/":{"tf":1.0},"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.0},"https://phlip9.com/notes/postgres/types of scans/":{"tf":1.4142135623730951}},"df":13}},"v":{"docs":{"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.0}},"df":1}},"r":{"docs":{},"df":0,"c":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{"https://phlip9.com/notes/combinatorics/k-combinations of a multiset/":{"tf":1.0}},"df":1}}},"t":{"docs":{"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":2.0}},"df":1}},"u":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0}},"df":1}}}},"f":{"docs":{},"df":0,"i":{"docs":{},"df":0,"l":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0}},"df":1}}}}},"h":{"docs":{},"df":0,"a":{"docs":{},"df":0,"u":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":3.0},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.4142135623730951},"https://phlip9.com/notes/statistics probability/multinomial distribution/":{"tf":1.0}},"df":5}}}}},"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"f":{"docs":{},"df":0,"o":{"docs":{"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0}},"df":2}}},"s":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.4142135623730951},"https://phlip9.com/notes/b l o c k c h a i n/fastpay/":{"tf":1.4142135623730951},"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/submarine swaps/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/marblerun/":{"tf":2.0},"https://phlip9.com/notes/confidential computing/mystikos/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":2.23606797749979},"https://phlip9.com/notes/crypto/(talk) authenticated data structures for stateless validation/":{"tf":1.0},"https://phlip9.com/notes/devops/deployment strategies/":{"tf":1.4142135623730951},"https://phlip9.com/notes/devops/nomad/":{"tf":1.0},"https://phlip9.com/notes/fuzzing/fuzzing/":{"tf":1.0},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/sycamore x futures/":{"tf":1.0},"https://phlip9.com/notes/management/relieve often - why generals were more successful in WWII/":{"tf":1.0},"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":2.23606797749979},"https://phlip9.com/notes/misc/optimization solvers/":{"tf":1.0},"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.4142135623730951},"https://phlip9.com/notes/reproducible builds/nix/links/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.4142135623730951}},"df":22,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0}},"df":1}}}}}},"t":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0},"https://phlip9.com/notes/misc/setting up a headless raspbian boot image/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/nix/nix debug broken package build/":{"tf":1.0}},"df":4}},"o":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/networking/network interface card (NIC)/":{"tf":1.0}},"df":1}},"p":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.0},"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":2.23606797749979},"https://phlip9.com/notes/lang/gdb ref/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/understanding sycamore reactivity/":{"tf":1.0},"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.0}},"df":6,"(":{"docs":{},"df":0,"&":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{},"df":0,"p":{"docs":{},"df":0,";":{"docs":{},"df":0,"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{},"df":0,"f":{"docs":{"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":1.0}},"df":1}}}}}}}}},"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"f":{"docs":{},"df":0,"o":{"docs":{"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":1.4142135623730951}},"df":1}}}}}},"s":{"docs":{"https://phlip9.com/notes/lang/rust/understanding sycamore reactivity/":{"tf":1.4142135623730951}},"df":1}},"t":{"docs":{"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/foreign bank account report (FBAR)/":{"tf":1.0}},"df":1}},"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/AI ML/Markov Decision Process (MDP)/":{"tf":1.7320508075688772},"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":2.23606797749979},"https://phlip9.com/notes/btc-ln/BOLT 7 - p2p node and channel discovery/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/zero-conf channels/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.7320508075688772},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.4142135623730951},"https://phlip9.com/notes/crypto/TLS self-signed pubkey-only certs/":{"tf":1.0},"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":1.0},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0},"https://phlip9.com/notes/management/relieve often - why generals were more successful in WWII/":{"tf":1.0},"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":1.0},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.4142135623730951},"https://phlip9.com/notes/statistics probability/G-test - multinomial goodness-of-fit/":{"tf":2.0}},"df":17,"(":{"docs":{},"df":0,"\"":{"docs":{},"df":0,"c":{"docs":{},"df":0,"i":{"docs":{},"df":0,"p":{"docs":{},"df":0,"h":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"x":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0}},"df":1}}}}}}}}}}}},"i":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"x":{"docs":{"https://phlip9.com/notes/AI ML/Expectimax Search/":{"tf":2.23606797749979}},"df":1}}}}}},"n":{"docs":{},"df":0,"s":{"docs":{"https://phlip9.com/notes/AI ML/Markov Decision Process (MDP)/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.7320508075688772},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0},"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":1.4142135623730951},"https://phlip9.com/notes/fuzzing/fuzzcheck-rs/":{"tf":1.0},"https://phlip9.com/notes/performance/simdjson talk/":{"tf":1.0}},"df":6,"i":{"docs":{},"df":0,"v":{"docs":{},"df":0,"e":{"docs":{},"df":0,"v":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"u":{"docs":{"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0}},"df":1}}}}}}}}},"r":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/gramine/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0},"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/rr with rust/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/nix/nix auto-allocate-uids -> nixbld users/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/testing whether a coin is fair/":{"tf":1.4142135623730951}},"df":9,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"c":{"docs":{"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.0}},"df":1}}},"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/marblerun/":{"tf":1.4142135623730951},"https://phlip9.com/notes/reproducible builds/nix/nix auto-allocate-uids -> nixbld users/":{"tf":1.4142135623730951},"https://phlip9.com/notes/statistics probability/multinomial distribution/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/testing whether a coin is fair/":{"tf":1.0}},"df":5}}}}}}},"i":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/secure time/":{"tf":1.0},"https://phlip9.com/notes/crypto/acme protocol/":{"tf":2.0}},"df":3,"i":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.0}},"df":1},"y":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"(":{"docs":{},"df":0,"e":{"docs":{},"df":0,"x":{"docs":{},"df":0,"p":{"docs":{},"df":0,"i":{"docs":{},"df":0,"r":{"docs":{},"df":0,"y":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"m":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 11 - invoices/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}},"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.0},"https://phlip9.com/notes/postgres/postgres performance tuning/":{"tf":2.0},"https://phlip9.com/notes/postgres/types of scans/":{"tf":1.4142135623730951},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/router/lightning router/captive portal/arubanetworks captive portal/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":2.0}},"df":6,"e":{"docs":{},"df":0,"d":{"docs":{},"df":0,"#":{"docs":{},"df":0,"k":{"docs":{},"df":0,"e":{"docs":{},"df":0,"y":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0}},"df":1}}}}}}}},"n":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0},"https://phlip9.com/notes/design/form design/":{"tf":1.0},"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.4142135623730951}},"df":4}},"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/AI ML/Markov Decision Process (MDP)/":{"tf":2.23606797749979},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.0}},"df":2,"l":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0},"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0},"https://phlip9.com/notes/lang/lua/":{"tf":1.0},"https://phlip9.com/notes/networking/CIDR/":{"tf":1.4142135623730951},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":2.449489742783178}},"df":5}}}}}},"o":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0},"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":1.0}},"df":2},"i":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/combinatorics/k-combinations of a multiset/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/reproducible-builds.org/":{"tf":1.4142135623730951}},"df":2}},"r":{"docs":{"https://phlip9.com/notes/AI ML/Expectimax Search/":{"tf":3.0},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0},"https://phlip9.com/notes/postgres/snippets/":{"tf":1.0}},"df":3}}},"o":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.4142135623730951}},"df":1,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1}}}}},"r":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/android/android cli setup/":{"tf":1.7320508075688772},"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.7320508075688772},"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":2.0},"https://phlip9.com/notes/crypto/tls exported keying material/":{"tf":1.7320508075688772},"https://phlip9.com/notes/ios/ios setup/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/ATS/Install ATS2/":{"tf":1.7320508075688772},"https://phlip9.com/notes/lang/flutter/flutter setup/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":2.0}},"df":8,"_":{"docs":{},"df":0,"k":{"docs":{},"df":0,"e":{"docs":{},"df":0,"y":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"g":{"docs":{},"df":0,"_":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/crypto/tls exported keying material/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}},"s":{"docs":{"https://phlip9.com/notes/android/ADB over TCP inside WSL2/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/breez lightning service providers/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/marblerun/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":1.0},"https://phlip9.com/notes/crypto/tls exported keying material/":{"tf":1.0},"https://phlip9.com/notes/devops/docker compose/":{"tf":1.0},"https://phlip9.com/notes/devops/nomad/":{"tf":1.0},"https://phlip9.com/notes/devops/service mesh/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/reproducible-builds.org/":{"tf":1.0}},"df":11}},"r":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/operator fixity and precedence/":{"tf":1.0}},"df":2,"0":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0}},"df":1},"1":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.4142135623730951}},"df":2},"2":{"docs":{"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.4142135623730951}},"df":1},"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"s":{"docs":{"https://phlip9.com/notes/AI ML/Markov Decision Process (MDP)/":{"tf":1.7320508075688772},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":4.123105625617661},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.7320508075688772},"https://phlip9.com/notes/lang/lua/":{"tf":1.0},"https://phlip9.com/notes/lang/operator fixity and precedence/":{"tf":2.6457513110645907},"https://phlip9.com/notes/statistics probability/herbie - float error fixer/":{"tf":1.4142135623730951}},"df":6}}}}},"t":{"docs":{"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.7320508075688772},"https://phlip9.com/notes/reproducible builds/nix/links/":{"tf":1.0}},"df":2,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 4 - onion routing protocol/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.7320508075688772},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/marblerun/":{"tf":1.0},"https://phlip9.com/notes/devops/deployment strategies/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":2.6457513110645907},"https://phlip9.com/notes/lang/lua/":{"tf":1.0},"https://phlip9.com/notes/misc/prepping RPI for embedded dev/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/CDF confidence bands - DKW inequality/":{"tf":1.0}},"df":11,"e":{"docs":{},"df":0,"d":{"docs":{},"df":0,"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"c":{"docs":{"https://phlip9.com/notes/devops/azure CLI/":{"tf":1.0}},"df":1}}}}}},"s":{"docs":{"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/foreign bank account report (FBAR)/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.7320508075688772},"https://phlip9.com/notes/confidential computing/gramine/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.7320508075688772},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel TDX/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":3.4641016151377544},"https://phlip9.com/notes/lang/koka-lang/":{"tf":1.0},"https://phlip9.com/notes/misc/pop_OS! tweaks/":{"tf":1.4142135623730951},"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.7320508075688772},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":2.449489742783178}},"df":14}},"r":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.0},"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/lua/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.0}},"df":9,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"b":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/crypto/acme protocol/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}},"r":{"docs":{},"df":0,"a":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.4142135623730951},"https://phlip9.com/notes/btc-ln/lightning network notes/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":2.0},"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":1.0},"https://phlip9.com/notes/crypto/(talk) authenticated data structures for stateless validation/":{"tf":1.0},"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":1.4142135623730951},"https://phlip9.com/notes/design/form design/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/rr with rust/":{"tf":1.4142135623730951},"https://phlip9.com/notes/management/relieve often - why generals were more successful in WWII/":{"tf":1.0},"https://phlip9.com/notes/misc/kintsugi/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/nix/nix auto-allocate-uids -> nixbld users/":{"tf":1.0}},"df":14,"c":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/AI ML/Markov Decision Process (MDP)/":{"tf":1.0},"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0},"https://phlip9.com/notes/android/root phone with magisk/":{"tf":1.4142135623730951},"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/secure time/":{"tf":1.0},"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":2.449489742783178},"https://phlip9.com/notes/devops/secrets/ejson-kms (AWS)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.4142135623730951}},"df":9,"(":{"docs":{},"df":0,"&":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{},"df":0,"p":{"docs":{},"df":0,";":{"docs":{},"df":0,"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{},"df":0,"f":{"docs":{"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":1.0}},"df":1}}}}}}}}},"i":{"docs":{},"df":0,"k":{"docs":{},"df":0,"m":{"docs":{},"df":0,"1":{"docs":{"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":1.0}},"df":1},"2":{"docs":{"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":1.0}},"df":1}}}}},"_":{"docs":{},"df":0,"b":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"y":{"docs":{},"df":0,"_":{"docs":{},"df":0,"c":{"docs":{},"df":0,"m":{"docs":{},"df":0,"d":{"docs":{},"df":0,"_":{"docs":{},"df":0,"f":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"_":{"docs":{},"df":0,"i":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"g":{"docs":{},"df":0,"e":{"docs":{},"df":0,"_":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"f":{"docs":{},"df":0,"i":{"docs":{},"df":0,"g":{"docs":{},"df":0,"(":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"f":{"docs":{},"df":0,"i":{"docs":{},"df":0,"g":{"docs":{"https://phlip9.com/notes/confidential computing/gramine/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"s":{"docs":{},"df":0,";":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{},"df":0,";":{"docs":{},"df":0,"m":{"docs":{},"df":0,"2":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"p":{"docs":{},"df":0,"o":{"docs":{},"df":0,"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/android/android cli setup/":{"tf":1.0},"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0}},"df":2}}}}}}}}}}}}}}}}}}}},"g":{"docs":{},"df":0,"o":{"docs":{},"df":0,"o":{"docs":{},"df":0,"g":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,";":{"docs":{},"df":0,"a":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{"https://phlip9.com/notes/android/android cli setup/":{"tf":1.0}},"df":1}}}},"g":{"docs":{},"df":0,"o":{"docs":{},"df":0,"o":{"docs":{},"df":0,"g":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"_":{"docs":{},"df":0,"p":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"y":{"docs":{},"df":0,"_":{"docs":{},"df":0,"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"v":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{"https://phlip9.com/notes/android/android cli setup/":{"tf":1.0},"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0}},"df":2}}}}}}}}}}}}}}}}}},"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"p":{"docs":{},"df":0,"p":{"docs":{"https://phlip9.com/notes/android/android cli setup/":{"tf":1.0}},"df":1}}}}}}}}}},"m":{"docs":{},"df":0,"2":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"p":{"docs":{},"df":0,"o":{"docs":{},"df":0,"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/android/android cli setup/":{"tf":1.0},"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0}},"df":2}}}}}}}}}}},"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"k":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{},"df":0,"_":{"docs":{},"df":0,"a":{"docs":{},"df":0,"p":{"docs":{},"df":0,"k":{"docs":{},"df":0,"_":{"docs":{},"df":0,"e":{"docs":{},"df":0,"x":{"docs":{},"df":0,"p":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"s":{"docs":{"https://phlip9.com/notes/android/android cli setup/":{"tf":1.0}},"df":1}}}}}}}}}},"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"s":{"docs":{"https://phlip9.com/notes/android/android cli setup/":{"tf":1.0}},"df":1}}}}}}}}}}}}},"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"m":{"docs":{},"df":0,"u":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/android/android cli setup/":{"tf":1.0}},"df":1}}}}},"w":{"docs":{},"df":0,"e":{"docs":{},"df":0,"b":{"docs":{},"df":0,"d":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"v":{"docs":{"https://phlip9.com/notes/android/android cli setup/":{"tf":1.0}},"df":1}}}}}}}}}}}}}},"m":{"docs":{},"df":0,"2":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"p":{"docs":{},"df":0,"o":{"docs":{},"df":0,"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"y":{"docs":{},"df":0,";":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,";":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{},"df":0,";":{"docs":{},"df":0,"s":{"docs":{},"df":0,"u":{"docs":{},"df":0,"p":{"docs":{},"df":0,"p":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{},"df":0,";":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,";":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/android/android cli setup/":{"tf":2.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"e":{"docs":{},"df":0,"m":{"docs":{"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/management/relieve often - why generals were more successful in WWII/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.4142135623730951},"https://phlip9.com/notes/statistics probability/p-value/":{"tf":1.4142135623730951}},"df":5}}}}},"y":{"docs":{"https://phlip9.com/notes/design/form design/":{"tf":1.0},"https://phlip9.com/notes/lang/operator fixity and precedence/":{"tf":1.0}},"df":2},"{":{"docs":{},"df":0,"\\":{"docs":{},"df":0,"s":{"docs":{},"df":0,"u":{"docs":{},"df":0,"m":{"docs":{},"df":0,"_":{"docs":{},"df":0,"{":{"docs":{},"df":0,"t":{"docs":{},"df":0,"=":{"docs":{},"df":0,"0":{"docs":{},"df":0,"}":{"docs":{},"df":0,"^":{"docs":{},"df":0,"\\":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"f":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/AI ML/Markov Decision Process (MDP)/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}},"}":{"docs":{},"df":0,"{":{"docs":{},"df":0,"\\":{"docs":{},"df":0,"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"g":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"_":{"docs":{},"df":0,"{":{"docs":{},"df":0,"\\":{"docs":{},"df":0,"m":{"docs":{},"df":0,"u":{"docs":{},"df":0,"_":{"docs":{},"df":0,"x":{"docs":{"https://phlip9.com/notes/statistics probability/testing whether a coin is fair/":{"tf":1.7320508075688772}},"df":1}}}}}}}}}}}}}}}},"f":{"docs":{"https://phlip9.com/notes/AI ML/Expectimax Search/":{"tf":1.7320508075688772},"https://phlip9.com/notes/WSL/WSL2 custom kernel/":{"tf":1.7320508075688772},"https://phlip9.com/notes/android/root phone with magisk/":{"tf":1.0},"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/gramine/":{"tf":1.0},"https://phlip9.com/notes/devops/algo wireguard VPN server/":{"tf":1.0},"https://phlip9.com/notes/distributed systems/papers/(2020) Semi-Fast Byzantine-tolerant Shared Register without Reliable Broadcast/":{"tf":2.6457513110645907},"https://phlip9.com/notes/keyboards/moergo glove80/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":2.449489742783178},"https://phlip9.com/notes/lang/ATS/Install ATS2/":{"tf":1.0},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.7320508075688772},"https://phlip9.com/notes/lang/lua/":{"tf":1.4142135623730951},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":2.449489742783178},"https://phlip9.com/notes/statistics probability/CDF confidence bands - DKW inequality/":{"tf":1.0}},"df":14,"&":{"docs":{},"df":0,"l":{"docs":{},"df":0,"t":{"docs":{},"df":0,";":{"docs":{},"df":0,"_":{"docs":{},"df":0,"&":{"docs":{},"df":0,"g":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0}},"df":1}}}},"t":{"docs":{},"df":0,"&":{"docs":{},"df":0,"g":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0}},"df":1}}}}}}}},"(":{"docs":{},"df":0,"0":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1},"3":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.4142135623730951}},"df":1},"\\":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"x":{"docs":{},"df":0,"t":{"docs":{},"df":0,"{":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"f":{"docs":{"https://phlip9.com/notes/AI ML/Expectimax Search/":{"tf":1.0}},"df":1}}}}}}}}}},"x":{"docs":{"https://phlip9.com/notes/AI ML/Expectimax Search/":{"tf":1.0},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.4142135623730951},"https://phlip9.com/notes/statistics probability/CDF confidence bands - DKW inequality/":{"tf":1.7320508075688772},"https://phlip9.com/notes/statistics probability/p-value/":{"tf":1.7320508075688772}},"df":4,")":{"docs":{},"df":0,"\\":{"docs":{},"df":0,"b":{"docs":{},"df":0,"i":{"docs":{},"df":0,"g":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/statistics probability/CDF confidence bands - DKW inequality/":{"tf":1.0}},"df":1}}}}},"|":{"docs":{},"df":0,"|":{"docs":{},"df":0,"_":{"docs":{},"df":0,"{":{"docs":{},"df":0,"\\":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"x":{"docs":{},"df":0,"t":{"docs":{},"df":0,"{":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"x":{"docs":{"https://phlip9.com/notes/statistics probability/CDF confidence bands - DKW inequality/":{"tf":1.0}},"df":1}}}}}}}}}}}}}},"_":{"docs":{},"df":0,"1":{"docs":{"https://phlip9.com/notes/AI ML/Expectimax Search/":{"tf":1.4142135623730951}},"df":1},"2":{"docs":{"https://phlip9.com/notes/AI ML/Expectimax Search/":{"tf":1.7320508075688772}},"df":1}}}},"+":{"docs":{},"df":0,"1":{"docs":{"https://phlip9.com/notes/distributed systems/papers/(2020) Semi-Fast Byzantine-tolerant Shared Register without Reliable Broadcast/":{"tf":1.4142135623730951}},"df":1}},".":{"docs":{},"df":0,"l":{"docs":{},"df":0,"u":{"docs":{},"df":0,"x":{"docs":{"https://phlip9.com/notes/android/root phone with magisk/":{"tf":1.0}},"df":1}}}},"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,":":{"docs":{},"df":0,":":{"docs":{},"df":0,"/":{"docs":{},"df":0,"5":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"v":{"docs":{"https://phlip9.com/notes/networking/ipv6 address space/":{"tf":1.0}},"df":1}}}}}}}}}}}}},"1":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":2.8284271247461903}},"df":2,"b":{"docs":{},"df":0,"1":{"docs":{},"df":0,"e":{"docs":{},"df":0,"e":{"docs":{},"df":0,"1":{"docs":{},"df":0,"2":{"docs":{},"df":0,"e":{"docs":{},"df":0,"1":{"docs":{},"df":0,"d":{"docs":{},"df":0,"6":{"docs":{},"df":0,"7":{"docs":{},"df":0,"9":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"8":{"docs":{},"df":0,"4":{"docs":{},"df":0,"c":{"docs":{},"df":0,"2":{"docs":{},"df":0,"8":{"docs":{},"df":0,"2":{"docs":{},"df":0,"0":{"docs":{},"df":0,"4":{"docs":{},"df":0,"9":{"docs":{},"df":0,"1":{"docs":{},"df":0,"0":{"docs":{},"df":0,"2":{"docs":{},"df":0,"e":{"docs":{},"df":0,"2":{"docs":{},"df":0,"6":{"docs":{},"df":0,"5":{"docs":{},"df":0,"4":{"docs":{},"df":0,"e":{"docs":{},"df":0,"f":{"docs":{},"df":0,"c":{"docs":{},"df":0,"4":{"docs":{},"df":0,"b":{"docs":{},"df":0,"6":{"docs":{},"df":0,"7":{"docs":{"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":1.4142135623730951}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"2":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.0},"https://phlip9.com/notes/misc/pop_OS! tweaks/":{"tf":1.0}},"df":2},"5":{"docs":{"https://phlip9.com/notes/misc/pop_OS! tweaks/":{"tf":1.0}},"df":1},"6":{"docs":{},"df":0,"4":{"docs":{"https://phlip9.com/notes/statistics probability/G-test - multinomial goodness-of-fit/":{"tf":2.6457513110645907},"https://phlip9.com/notes/statistics probability/multinomial distribution/":{"tf":1.4142135623730951},"https://phlip9.com/notes/statistics probability/winsorize/":{"tf":3.7416573867739413}},"df":3,":":{"docs":{},"df":0,":":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"f":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/statistics probability/G-test - multinomial goodness-of-fit/":{"tf":1.0}},"df":1}}}}}}}}},"8":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,":":{"docs":{},"df":0,":":{"docs":{},"df":0,"/":{"docs":{},"df":0,"6":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"v":{"docs":{"https://phlip9.com/notes/networking/ipv6 address space/":{"tf":1.0}},"df":1}}}}}}}}}}}}},"_":{"docs":{},"df":0,"\\":{"docs":{},"df":0,"m":{"docs":{},"df":0,"u":{"docs":{"https://phlip9.com/notes/statistics probability/testing whether a coin is fair/":{"tf":1.0}},"df":1,"(":{"docs":{},"df":0,"\\":{"docs":{},"df":0,"m":{"docs":{},"df":0,"u":{"docs":{"https://phlip9.com/notes/statistics probability/testing whether a coin is fair/":{"tf":1.0}},"df":1}}}}}}},"n":{"docs":{},"df":0,"(":{"docs":{},"df":0,"x":{"docs":{"https://phlip9.com/notes/statistics probability/CDF confidence bands - DKW inequality/":{"tf":1.7320508075688772}},"df":1}}}},"a":{"docs":{"https://phlip9.com/notes/router/lightning router/lightning router overview/":{"tf":1.7320508075688772}},"df":1,"7":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"1":{"docs":{},"df":0,"a":{"docs":{},"df":0,"0":{"docs":{},"df":0,"2":{"docs":{},"df":0,"0":{"docs":{},"df":0,"1":{"docs":{},"df":0,"6":{"docs":{"https://phlip9.com/notes/android/root phone with magisk/":{"tf":1.4142135623730951}},"df":1}}}}}}}}}},"c":{"docs":{},"df":0,"e":{"docs":{"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/foreign bank account report (FBAR)/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/multinomial distribution/":{"tf":1.4142135623730951}},"df":2,"b":{"docs":{},"df":0,"o":{"docs":{},"df":0,"o":{"docs":{},"df":0,"k":{"docs":{"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.0}},"df":1,"/":{"docs":{},"df":0,"f":{"docs":{},"df":0,"b":{"docs":{},"df":0,"s":{"docs":{},"df":0,"h":{"docs":{},"df":0,"i":{"docs":{},"df":0,"p":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":1.0}},"df":1}}}}}}}}}}}}}},"i":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.0}},"df":1,"i":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/management/relieve often - why generals were more successful in WWII/":{"tf":1.0}},"df":1}}}},"t":{"docs":{"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.0},"https://phlip9.com/notes/crypto/(talk) authenticated data structures for stateless validation/":{"tf":1.0},"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":1.0},"https://phlip9.com/notes/fuzzing/fuzzcheck-rs/":{"tf":1.0},"https://phlip9.com/notes/misc/prepping RPI for embedded dev/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/CDF confidence bands - DKW inequality/":{"tf":1.0}},"df":6,"o":{"docs":{"https://phlip9.com/notes/crypto/acme protocol/":{"tf":1.0}},"df":1,"r":{"docs":{"https://phlip9.com/notes/AI ML/Markov Decision Process (MDP)/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/zero-conf channels/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0},"https://phlip9.com/notes/devops/service mesh/":{"tf":1.0}},"df":4,"i":{"docs":{"https://phlip9.com/notes/android/root phone with magisk/":{"tf":1.0},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.4142135623730951}},"df":2}}}}},"i":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.7320508075688772},"https://phlip9.com/notes/android/root phone with magisk/":{"tf":1.4142135623730951},"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/foreign bank account report (FBAR)/":{"tf":1.0},"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":2.449489742783178},"https://phlip9.com/notes/btc-ln/atomic multipath payments (AMP)/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":2.0},"https://phlip9.com/notes/btc-ln/submarine swaps/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":2.6457513110645907},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.4142135623730951},"https://phlip9.com/notes/crypto/TLS self-signed pubkey-only certs/":{"tf":1.0},"https://phlip9.com/notes/devops/nomad/":{"tf":1.0},"https://phlip9.com/notes/fuzzing/fuzzcheck-rs/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/operator fixity and precedence/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/rust/rr with rust/":{"tf":1.0},"https://phlip9.com/notes/management/relieve often - why generals were more successful in WWII/":{"tf":1.0},"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":1.0},"https://phlip9.com/notes/misc/pop_OS! tweaks/":{"tf":1.4142135623730951},"https://phlip9.com/notes/misc/setting up a headless raspbian boot image/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":2.0},"https://phlip9.com/notes/reproducible builds/nix/nix debug broken package build/":{"tf":1.7320508075688772},"https://phlip9.com/notes/reproducible builds/rebuilderd/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/testing whether a coin is fair/":{"tf":1.0}},"df":26,"o":{"docs":{},"df":0,"v":{"docs":{"https://phlip9.com/notes/devops/service mesh/":{"tf":1.0}},"df":1}},"u":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.0},"https://phlip9.com/notes/misc/setting up a headless raspbian boot image/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/CDF confidence bands - DKW inequality/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/multinomial distribution/":{"tf":2.23606797749979},"https://phlip9.com/notes/statistics probability/testing whether a coin is fair/":{"tf":1.7320508075688772}},"df":5}}},"r":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.0},"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":1.4142135623730951},"https://phlip9.com/notes/statistics probability/testing whether a coin is fair/":{"tf":1.7320508075688772}},"df":3,"l":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/marblerun/":{"tf":1.0},"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.0}},"df":4}}}},"k":{"docs":{},"df":0,"e":{"docs":{"https://phlip9.com/notes/misc/kintsugi/":{"tf":1.0}},"df":1}},"l":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/devops/kubernetes/":{"tf":1.0},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":2,"b":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"k":{"docs":{},"df":0,"(":{"docs":{},"df":0,"f":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"l":{"docs":{},"df":0,"b":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"k":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 11 - invoices/":{"tf":1.0}},"df":1}}}}}}}}}}}}},"i":{"docs":{},"df":0,"b":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/lang/lua/":{"tf":1.0}},"df":1,"e":{"docs":{},"df":0,"&":{"docs":{},"df":0,"l":{"docs":{},"df":0,"t":{"docs":{},"df":0,";":{"docs":{},"df":0,"(":{"docs":{},"df":0,")":{"docs":{},"df":0,"&":{"docs":{},"df":0,"g":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0}},"df":1}}}}}}}}}}}}}},"s":{"docs":{"https://phlip9.com/notes/combinatorics/k-combinations of a multiset/":{"tf":1.4142135623730951},"https://phlip9.com/notes/crypto/acme protocol/":{"tf":1.0},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":2.23606797749979},"https://phlip9.com/notes/lang/flutter/flutter setup/":{"tf":1.0},"https://phlip9.com/notes/lang/lua/":{"tf":1.0},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0},"https://phlip9.com/notes/performance/simdjson talk/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/p-value/":{"tf":1.0}},"df":9}},"m":{"docs":{},"df":0,"i":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.0}},"df":3,"a":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0}},"df":1}}},"y":{"docs":{},"df":0,"/":{"docs":{},"df":0,"p":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"f":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"m":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.0}},"df":1}}}}}}}}}}}}},"n":{"docs":{"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":1.0}},"df":1,"c":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/networking/network interface card (NIC)/":{"tf":1.0}},"df":1}}},"q":{"docs":{"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/foreign bank account report (FBAR)/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.0}},"df":2},"r":{"docs":{"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":1.4142135623730951},"https://phlip9.com/notes/keyboards/moergo glove80/":{"tf":1.0},"https://phlip9.com/notes/misc/kintsugi/":{"tf":1.0},"https://phlip9.com/notes/misc/optimization solvers/":{"tf":1.0}},"df":4,"m":{"docs":{"https://phlip9.com/notes/lang/rust/sycamore x futures/":{"tf":1.0}},"df":1,"e":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/lang/operator fixity and precedence/":{"tf":1.0}},"df":1}}},"t":{"docs":{},"df":0,"h":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0}},"df":1}}}}},"s":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0},"https://phlip9.com/notes/devops/deployment strategies/":{"tf":1.4142135623730951},"https://phlip9.com/notes/distributed systems/papers/(2020) Semi-Fast Byzantine-tolerant Shared Register without Reliable Broadcast/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0},"https://phlip9.com/notes/networking/network interface card (NIC)/":{"tf":1.0},"https://phlip9.com/notes/performance/simdjson talk/":{"tf":2.23606797749979},"https://phlip9.com/notes/postgres/postgres performance tuning/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/nix/links/":{"tf":1.0}},"df":9,"b":{"docs":{},"df":0,"o":{"docs":{},"df":0,"o":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/android/root phone with magisk/":{"tf":2.23606797749979}},"df":1}}}},"e":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/WSL/WSL2 custom kernel/":{"tf":1.0},"https://phlip9.com/notes/b l o c k c h a i n/fastpay/":{"tf":1.0},"https://phlip9.com/notes/performance/simdjson talk/":{"tf":1.4142135623730951},"https://phlip9.com/notes/postgres/postgres performance tuning/":{"tf":1.0},"https://phlip9.com/notes/postgres/types of scans/":{"tf":1.4142135623730951},"https://phlip9.com/notes/router/lightning router/lightning router overview/":{"tf":1.0}},"df":6},"s":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/misc/optimization solvers/":{"tf":1.0},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":2}}},"p":{"docs":{},"df":0,"a":{"docs":{},"df":0,"y":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/fastpay/":{"tf":1.7320508075688772},"https://phlip9.com/notes/b l o c k c h a i n/sui/":{"tf":1.0}},"df":2}}}}},"t":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0}},"df":1,"a":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0}},"df":1}}},"u":{"docs":{},"df":0,"c":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/misc/water distillation setup/":{"tf":1.0}},"df":1}}},"l":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.0},"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.4142135623730951},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.4142135623730951}},"df":6}},"x":{"docs":{"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.4142135623730951}},"df":1}},"v":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":2.449489742783178},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":3.4641016151377544}},"df":2,".":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.4142135623730951}},"df":2}}}}}}}},"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/misc/kintsugi/":{"tf":1.0}},"df":1}}}}}},"b":{"docs":{"https://phlip9.com/notes/devops/service mesh/":{"tf":1.0}},"df":1,"a":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/foreign bank account report (FBAR)/":{"tf":3.605551275463989}},"df":1}},"f":{"docs":{},"df":0,"f":{"docs":{},"df":0,"f":{"docs":{},"df":0,"f":{"docs":{},"df":0,"f":{"docs":{},"df":0,"f":{"docs":{},"df":0,"f":{"docs":{},"df":0,"f":{"docs":{},"df":0,"f":{"docs":{},"df":0,"f":{"docs":{},"df":0,"f":{"docs":{},"df":0,"f":{"docs":{},"df":0,"f":{"docs":{},"df":0,"f":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"m":{"docs":{},"df":0,"4":{"docs":{},"df":0,"(":{"docs":{},"df":0,"8":{"docs":{},"df":0,".":{"docs":{},"df":0,"0":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1}}},"x":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1}}}}},"c":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,":":{"docs":{},"df":0,":":{"docs":{},"df":0,"/":{"docs":{},"df":0,"7":{"docs":{},"df":0,"u":{"docs":{},"df":0,"n":{"docs":{},"df":0,"i":{"docs":{},"df":0,"q":{"docs":{},"df":0,"u":{"docs":{"https://phlip9.com/notes/networking/ipv6 address space/":{"tf":1.0}},"df":1}}}}}},"8":{"docs":{"https://phlip9.com/notes/networking/ipv6 address space/":{"tf":1.0}},"df":1}}}}}},"h":{"docs":{},"df":0,"o":{"docs":{},"df":0,"w":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.0}},"df":1}}}},"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.0}},"df":1,"_":{"docs":{},"df":0,"n":{"docs":{},"df":0,"o":{"docs":{},"df":0,"c":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"c":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.0}},"df":1}}}}}}}}}}}}},"d":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,":":{"docs":{},"df":0,":":{"docs":{},"df":0,"/":{"docs":{},"df":0,"8":{"docs":{"https://phlip9.com/notes/networking/ipv6 address space/":{"tf":1.0}},"df":1}}}}}},"5":{"docs":{},"df":0,"b":{"docs":{},"df":0,":":{"docs":{},"df":0,"7":{"docs":{},"df":0,"e":{"docs":{},"df":0,"0":{"docs":{},"df":0,"9":{"docs":{},"df":0,":":{"docs":{},"df":0,"2":{"docs":{},"df":0,"2":{"docs":{},"df":0,"2":{"docs":{},"df":0,"3":{"docs":{},"df":0,":":{"docs":{},"df":0,"0":{"docs":{},"df":0,":":{"docs":{},"df":0,"7":{"docs":{},"df":0,"5":{"docs":{},"df":0,"7":{"docs":{},"df":0,"6":{"docs":{},"df":0,":":{"docs":{},"df":0,"9":{"docs":{},"df":0,"8":{"docs":{},"df":0,"b":{"docs":{},"df":0,"c":{"docs":{},"df":0,":":{"docs":{},"df":0,"5":{"docs":{},"df":0,"e":{"docs":{},"df":0,"6":{"docs":{},"df":0,"c":{"docs":{},"df":0,":":{"docs":{},"df":0,"7":{"docs":{},"df":0,"e":{"docs":{},"df":0,"b":{"docs":{},"df":0,"1":{"docs":{"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}},"d":{"docs":{},"df":0,"c":{"docs":{},"df":0,"b":{"docs":{},"df":0,"2":{"docs":{},"df":0,":":{"docs":{},"df":0,"5":{"docs":{},"df":0,"9":{"docs":{},"df":0,"5":{"docs":{},"df":0,"c":{"docs":{},"df":0,":":{"docs":{},"df":0,"1":{"docs":{},"df":0,"f":{"docs":{},"df":0,"8":{"docs":{},"df":0,"1":{"docs":{},"df":0,":":{"docs":{},"df":0,"c":{"docs":{},"df":0,"f":{"docs":{},"df":0,"c":{"docs":{},"df":0,"6":{"docs":{"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}},":":{"docs":{},"df":0,"1":{"docs":{},"df":0,"/":{"docs":{},"df":0,"6":{"docs":{},"df":0,"0":{"docs":{"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.0}},"df":1}}}},"8":{"docs":{},"df":0,"8":{"docs":{"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}},"g":{"docs":{},"df":0,"g":{"docs":{},"df":0,":":{"docs":{},"df":0,"g":{"docs":{},"df":0,"g":{"docs":{},"df":0,"g":{"docs":{},"df":0,"g":{"docs":{},"df":0,":":{"docs":{},"df":0,"g":{"docs":{},"df":0,"g":{"docs":{},"df":0,"g":{"docs":{},"df":0,"g":{"docs":{},"df":0,":":{"docs":{},"df":0,"s":{"docs":{},"df":0,"s":{"docs":{},"df":0,"s":{"docs":{},"df":0,"s":{"docs":{},"df":0,":":{"docs":{},"df":0,":":{"docs":{},"df":0,"/":{"docs":{},"df":0,"6":{"docs":{},"df":0,"4":{"docs":{"https://phlip9.com/notes/networking/ipv6 address space/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}},"e":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,":":{"docs":{},"df":0,":":{"docs":{},"df":0,"/":{"docs":{},"df":0,"9":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"v":{"docs":{"https://phlip9.com/notes/networking/ipv6 address space/":{"tf":1.0}},"df":1}}}}}}}}}}}},"8":{"docs":{},"df":0,"0":{"docs":{},"df":0,":":{"docs":{},"df":0,":":{"docs":{},"df":0,"/":{"docs":{},"df":0,"1":{"docs":{},"df":0,"0":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"k":{"docs":{"https://phlip9.com/notes/networking/ipv6 address space/":{"tf":1.0}},"df":1}}}}}},"6":{"docs":{},"df":0,"4":{"docs":{"https://phlip9.com/notes/networking/ipv6 address space/":{"tf":1.0}},"df":1}}},"2":{"docs":{},"df":0,"1":{"docs":{},"df":0,"5":{"docs":{},"df":0,":":{"docs":{},"df":0,"5":{"docs":{},"df":0,"d":{"docs":{},"df":0,"f":{"docs":{},"df":0,"f":{"docs":{},"df":0,":":{"docs":{},"df":0,"f":{"docs":{},"df":0,"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"9":{"docs":{},"df":0,":":{"docs":{},"df":0,"7":{"docs":{},"df":0,"1":{"docs":{},"df":0,"3":{"docs":{},"df":0,"/":{"docs":{},"df":0,"6":{"docs":{},"df":0,"4":{"docs":{"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}},"4":{"docs":{},"df":0,"9":{"docs":{},"df":0,"e":{"docs":{},"df":0,"f":{"docs":{},"df":0,":":{"docs":{},"df":0,"1":{"docs":{},"df":0,"7":{"docs":{},"df":0,"4":{"docs":{},"df":0,"b":{"docs":{},"df":0,":":{"docs":{},"df":0,"8":{"docs":{},"df":0,"9":{"docs":{},"df":0,"0":{"docs":{},"df":0,":":{"docs":{},"df":0,"e":{"docs":{},"df":0,"f":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"%":{"docs":{},"df":0,"2":{"docs":{},"df":0,"2":{"docs":{"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}},"5":{"docs":{},"df":0,"0":{"docs":{},"df":0,"4":{"docs":{},"df":0,"9":{"docs":{},"df":0,":":{"docs":{},"df":0,"e":{"docs":{},"df":0,"0":{"docs":{},"df":0,"f":{"docs":{},"df":0,"f":{"docs":{},"df":0,":":{"docs":{},"df":0,"f":{"docs":{},"df":0,"e":{"docs":{},"df":0,"b":{"docs":{},"df":0,"c":{"docs":{},"df":0,":":{"docs":{},"df":0,"3":{"docs":{},"df":0,"f":{"docs":{},"df":0,"6":{"docs":{},"df":0,"0":{"docs":{},"df":0,"/":{"docs":{},"df":0,"6":{"docs":{},"df":0,"4":{"docs":{"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}},"2":{"docs":{},"df":0,"4":{"docs":{},"df":0,"9":{"docs":{},"df":0,":":{"docs":{},"df":0,"e":{"docs":{},"df":0,"0":{"docs":{},"df":0,"f":{"docs":{},"df":0,"f":{"docs":{},"df":0,":":{"docs":{},"df":0,"f":{"docs":{},"df":0,"e":{"docs":{},"df":0,"b":{"docs":{},"df":0,"c":{"docs":{},"df":0,":":{"docs":{},"df":0,"3":{"docs":{},"df":0,"f":{"docs":{},"df":0,"6":{"docs":{},"df":0,"0":{"docs":{},"df":0,"%":{"docs":{},"df":0,"5":{"docs":{"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.0}},"df":1}},"/":{"docs":{},"df":0,"6":{"docs":{},"df":0,"4":{"docs":{"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.4142135623730951}},"df":1}}}},"1":{"docs":{},"df":0,"/":{"docs":{},"df":0,"6":{"docs":{},"df":0,"4":{"docs":{"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.0}},"df":1}}}},"2":{"docs":{},"df":0,"/":{"docs":{},"df":0,"6":{"docs":{},"df":0,"4":{"docs":{"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}},"6":{"docs":{},"df":0,"2":{"docs":{},"df":0,"3":{"docs":{},"df":0,"8":{"docs":{},"df":0,":":{"docs":{},"df":0,"e":{"docs":{},"df":0,"0":{"docs":{},"df":0,"f":{"docs":{},"df":0,"f":{"docs":{},"df":0,":":{"docs":{},"df":0,"f":{"docs":{},"df":0,"e":{"docs":{},"df":0,"b":{"docs":{},"df":0,"c":{"docs":{},"df":0,":":{"docs":{},"df":0,"3":{"docs":{},"df":0,"f":{"docs":{},"df":0,"6":{"docs":{},"df":0,"0":{"docs":{},"df":0,"/":{"docs":{},"df":0,"1":{"docs":{},"df":0,"2":{"docs":{},"df":0,"8":{"docs":{"https://phlip9.com/notes/networking/ipv6 address space/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}},"d":{"docs":{},"df":0,"c":{"docs":{},"df":0,"b":{"docs":{},"df":0,"2":{"docs":{},"df":0,":":{"docs":{},"df":0,"5":{"docs":{},"df":0,"9":{"docs":{},"df":0,"6":{"docs":{},"df":0,"c":{"docs":{},"df":0,":":{"docs":{},"df":0,"1":{"docs":{},"df":0,"f":{"docs":{},"df":0,"8":{"docs":{},"df":0,"1":{"docs":{},"df":0,":":{"docs":{},"df":0,"c":{"docs":{},"df":0,"f":{"docs":{},"df":0,"c":{"docs":{},"df":0,"6":{"docs":{},"df":0,"%":{"docs":{},"df":0,"5":{"docs":{"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}},"9":{"docs":{},"df":0,"f":{"docs":{},"df":0,"b":{"docs":{},"df":0,"1":{"docs":{},"df":0,"6":{"docs":{},"df":0,"6":{"docs":{},"df":0,"5":{"docs":{},"df":0,"d":{"docs":{},"df":0,"5":{"docs":{},"df":0,"f":{"docs":{"https://phlip9.com/notes/btc-ln/breez lightning service providers/":{"tf":1.0}},"df":1}}}}}}}}}},"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"u":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.4142135623730951},"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":2.449489742783178},"https://phlip9.com/notes/btc-ln/BOLT 7 - p2p node and channel discovery/":{"tf":1.7320508075688772},"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":3.0},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":1.0},"https://phlip9.com/notes/devops/consul/":{"tf":1.0},"https://phlip9.com/notes/devops/linkerd/":{"tf":1.4142135623730951},"https://phlip9.com/notes/devops/service mesh/":{"tf":1.7320508075688772},"https://phlip9.com/notes/fuzzing/fuzzing/":{"tf":1.0},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.4142135623730951},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/nix/nix auto-allocate-uids -> nixbld users/":{"tf":1.4142135623730951},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.0}},"df":17,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"(":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"v":{"docs":{},"df":0,"o":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"e":{"docs":{},"df":0,"f":{"docs":{},"df":0,"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"u":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 11 - invoices/":{"tf":1.0}},"df":1}}}}}}}}}}}}}},"_":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 7 - p2p node and channel discovery/":{"tf":1.4142135623730951}},"df":1}}}}}}}}}},"b":{"docs":{"https://phlip9.com/notes/WSL/WSL2 custom kernel/":{"tf":1.0}},"df":1},"d":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0}},"df":1,"e":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/financial instituion/":{"tf":1.0},"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/money services business (MSB)/":{"tf":1.0}},"df":2}},"w":{"docs":{},"df":0,"i":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/money services business (MSB)/":{"tf":1.0}},"df":1}}}},"e":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 11 - invoices/":{"tf":1.4142135623730951},"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":3.605551275463989},"https://phlip9.com/notes/btc-ln/BOLT 4 - onion routing protocol/":{"tf":2.23606797749979},"https://phlip9.com/notes/btc-ln/BOLT 7 - p2p node and channel discovery/":{"tf":1.4142135623730951},"https://phlip9.com/notes/btc-ln/breez lightning service providers/":{"tf":2.23606797749979},"https://phlip9.com/notes/btc-ln/lightning network notes/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.4142135623730951},"https://phlip9.com/notes/btc-ln/submarine swaps/":{"tf":1.4142135623730951}},"df":8,"_":{"docs":{},"df":0,"b":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"_":{"docs":{},"df":0,"m":{"docs":{},"df":0,"s":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 7 - p2p node and channel discovery/":{"tf":1.0}},"df":1}}}}}}}}},"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.0}},"df":1}}}},"p":{"docs":{},"df":0,"a":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.0}},"df":1}}},"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"p":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"_":{"docs":{},"df":0,"m":{"docs":{},"df":0,"i":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 7 - p2p node and channel discovery/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}},"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"g":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.0}},"df":1}}}},"s":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"s":{"docs":{},"df":0,"h":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.0}},"df":1}}}}}}}},"d":{"docs":{"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.0},"https://phlip9.com/notes/lang/lua/":{"tf":1.4142135623730951}},"df":2,"b":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"k":{"docs":{"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":2.0}},"df":2}}}}},"l":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0},"https://phlip9.com/notes/management/relieve often - why generals were more successful in WWII/":{"tf":1.0},"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.7320508075688772}},"df":4},"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.0}},"df":1,"e":{"docs":{},"df":0,"_":{"docs":{},"df":0,"p":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"_":{"docs":{},"df":0,"k":{"docs":{},"df":0,"w":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.0}},"df":1}}}}}}}}}}},"t":{"docs":{"https://phlip9.com/notes/lang/rust/rr with rust/":{"tf":1.0}},"df":1}},"f":{"docs":{},"df":0,"e":{"docs":{"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.0}},"df":1}},"t":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{"https://phlip9.com/notes/confidential computing/intel TDX/":{"tf":1.0},"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":2.0},"https://phlip9.com/notes/postgres/types of scans/":{"tf":2.23606797749979},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.4142135623730951}},"df":5}}},"w":{"docs":{"https://phlip9.com/notes/android/linux ADB udev setup/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.0},"https://phlip9.com/notes/crypto/acme protocol/":{"tf":1.0},"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":1.0},"https://phlip9.com/notes/fuzzing/fuzzcheck-rs/":{"tf":1.0},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/rr with rust/":{"tf":1.4142135623730951},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.7320508075688772},"https://phlip9.com/notes/networking/CIDR/":{"tf":1.0},"https://phlip9.com/notes/postgres/types of scans/":{"tf":1.4142135623730951},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/testing whether a coin is fair/":{"tf":1.0}},"df":13,"e":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/misc/kintsugi/":{"tf":1.0}},"df":1}}}},"f":{"docs":{"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/money services business (MSB)/":{"tf":1.0}},"df":1,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,":":{"docs":{},"df":0,":":{"docs":{},"df":0,"/":{"docs":{},"df":0,"8":{"docs":{},"df":0,"m":{"docs":{},"df":0,"u":{"docs":{},"df":0,"l":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"f":{"docs":{},"df":0,"c":{"docs":{},"df":0,"4":{"docs":{},"df":0,"2":{"docs":{},"df":0,"9":{"docs":{},"df":0,"1":{"docs":{"https://phlip9.com/notes/networking/ipv6 address space/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}},"1":{"docs":{},"df":0,"2":{"docs":{},"df":0,"3":{"docs":{},"df":0,"0":{"docs":{},"df":0,"5":{"docs":{"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":2.0}},"df":1}}}}},":":{"docs":{},"df":0,"f":{"docs":{},"df":0,"f":{"docs":{},"df":0,":":{"docs":{},"df":0,"f":{"docs":{},"df":0,"f":{"docs":{},"df":0,":":{"docs":{},"df":0,"f":{"docs":{},"df":0,"f":{"docs":{},"df":0,":":{"docs":{},"df":0,"f":{"docs":{},"df":0,"f":{"docs":{},"df":0,":":{"docs":{},"df":0,"f":{"docs":{},"df":0,"f":{"docs":{"https://phlip9.com/notes/networking/network interfaces/":{"tf":3.3166247903554}},"df":1}}}}}}}}}}}}}}},"f":{"docs":{},"df":0,"f":{"docs":{"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.7320508075688772}},"df":1,":":{"docs":{},"df":0,"0":{"docs":{},"df":0,":":{"docs":{},"df":0,"0":{"docs":{},"df":0,"/":{"docs":{},"df":0,"9":{"docs":{},"df":0,"6":{"docs":{},"df":0,"i":{"docs":{},"df":0,"p":{"docs":{},"df":0,"v":{"docs":{},"df":0,"4":{"docs":{"https://phlip9.com/notes/networking/ipv6 address space/":{"tf":1.0}},"df":1}}}}}}}}}}},"f":{"docs":{},"df":0,"f":{"docs":{},"df":0,"f":{"docs":{},"df":0,"f":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.0}},"df":1}}}}}}},"i":{"docs":{"https://phlip9.com/notes/android/android cli setup/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":3.3166247903554}},"df":2,"a":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/btc-ln/breez lightning service providers/":{"tf":2.0}},"df":1}},"b":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.4142135623730951}},"df":1,"(":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0}},"df":1}}},"n":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.4142135623730951}},"df":1,"+":{"docs":{},"df":0,"1":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0}},"df":1}}}},"0":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0}},"df":1,"(":{"docs":{},"df":0,"0":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0}},"df":1}}},"1":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0}},"df":1,"(":{"docs":{},"df":0,"1":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0}},"df":1}}},"2":{"docs":{},"df":0,"(":{"docs":{},"df":0,"n":{"docs":{},"df":0,"+":{"docs":{},"df":0,"2":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0}},"df":1}}}}},"e":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.0}},"df":1}},"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"n":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"c":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0}},"df":1}}}}}}}},"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/AI ML/Markov Decision Process (MDP)/":{"tf":1.4142135623730951}},"df":1}}},"e":{"docs":{},"df":0,"l":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/WSL/WSL2 custom kernel/":{"tf":1.4142135623730951},"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.4142135623730951},"https://phlip9.com/notes/btc-ln/BOLT 11 - invoices/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":3.4641016151377544},"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.0},"https://phlip9.com/notes/crypto/acme protocol/":{"tf":1.4142135623730951},"https://phlip9.com/notes/design/form design/":{"tf":3.605551275463989},"https://phlip9.com/notes/devops/azure CLI/":{"tf":1.0},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0},"https://phlip9.com/notes/lang/lua/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":3.872983346207417},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":5.477225575051661}},"df":15,"=":{"docs":{},"df":0,"2":{"docs":{"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.4142135623730951}},"df":1}},"_":{"docs":{},"df":0,"1":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0}},"df":1},"i":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0}},"df":1}},"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"g":{"docs":{},"df":0,"@":{"docs":{},"df":0,"g":{"docs":{},"df":0,"b":{"docs":{},"df":0,"i":{"docs":{},"df":0,"v":{"docs":{},"df":0,".":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.4142135623730951}},"df":2}}}}}}}}}}}}}}},"f":{"docs":{},"df":0,"o":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0},"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":2.0},"https://phlip9.com/notes/networking/network interface card (NIC)/":{"tf":1.0}},"df":3}},"g":{"docs":{"https://phlip9.com/notes/crypto/biscuit authz/":{"tf":1.4142135623730951}},"df":1,"u":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/android/root phone with magisk/":{"tf":1.0}},"df":1}}},"l":{"docs":{},"df":0,"e":{"docs":{"https://phlip9.com/notes/android/android cli setup/":{"tf":1.0},"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.7320508075688772},"https://phlip9.com/notes/android/root phone with magisk/":{"tf":1.7320508075688772},"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/foreign bank account report (FBAR)/":{"tf":2.0},"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":2.23606797749979},"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.7320508075688772},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":2.6457513110645907},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0},"https://phlip9.com/notes/devops/algo wireguard VPN server/":{"tf":1.0},"https://phlip9.com/notes/devops/docker compose/":{"tf":1.0},"https://phlip9.com/notes/devops/nomad/":{"tf":1.0},"https://phlip9.com/notes/devops/secrets/ejson-kms (AWS)/":{"tf":1.7320508075688772},"https://phlip9.com/notes/devops/secrets/mozilla SOPS/":{"tf":1.4142135623730951},"https://phlip9.com/notes/devops/secrets/sy - share secrets safely/":{"tf":1.0},"https://phlip9.com/notes/fuzzing/fuzzing/":{"tf":1.7320508075688772},"https://phlip9.com/notes/keyboards/moergo glove80/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0},"https://phlip9.com/notes/lang/flutter/flutter setup/":{"tf":1.0},"https://phlip9.com/notes/lang/lua/":{"tf":1.0},"https://phlip9.com/notes/lang/operator fixity and precedence/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/rr with rust/":{"tf":1.0},"https://phlip9.com/notes/misc/envsubst/":{"tf":1.0},"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":3.3166247903554},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":3.3166247903554},"https://phlip9.com/notes/misc/setting up a headless raspbian boot image/":{"tf":1.0},"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.4142135623730951},"https://phlip9.com/notes/performance/simdjson talk/":{"tf":2.0},"https://phlip9.com/notes/postgres/postgres performance tuning/":{"tf":2.23606797749979},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.4142135623730951},"https://phlip9.com/notes/reproducible builds/nix/nix debug broken package build/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/nix/nix debug spurrious rebuilds/":{"tf":1.7320508075688772},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.4142135623730951}},"df":34,"&":{"docs":{},"df":0,"g":{"docs":{},"df":0,"t":{"docs":{},"df":0,";":{"docs":{},"df":0,".":{"docs":{},"df":0,"d":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0}},"df":1}}}}}}}},"'":{"docs":{"https://phlip9.com/notes/android/root phone with magisk/":{"tf":1.0}},"df":1},"/":{"docs":{},"df":0,"c":{"docs":{},"df":0,"a":{"docs":{},"df":0,"u":{"docs":{},"df":0,"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"g":{"docs":{},"df":0,"/":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"b":{"docs":{},"df":0,"u":{"docs":{},"df":0,"i":{"docs":{},"df":0,"l":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/reproducible builds/nix/nix debug spurrious rebuilds/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}},"_":{"docs":{"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.0}},"df":1},"n":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.4142135623730951}},"df":1}}},"s":{"docs":{},"df":0,"/":{"docs":{},"df":0,"b":{"docs":{},"df":0,"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"b":{"docs":{},"df":0,"/":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"/":{"docs":{},"df":0,"c":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"y":{"docs":{},"df":0,".":{"docs":{},"df":0,"j":{"docs":{},"df":0,"s":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/android/root phone with magisk/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}},"y":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"m":{"docs":{"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.7320508075688772}},"df":1,"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"g":{"docs":{},"df":0,"g":{"docs":{"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.4142135623730951}},"df":1}}}},"p":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.0}},"df":1,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"(":{"docs":{},"df":0,"d":{"docs":{},"df":0,"i":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}},"l":{"docs":{"https://phlip9.com/notes/btc-ln/submarine swaps/":{"tf":1.7320508075688772},"https://phlip9.com/notes/crypto/tls exported keying material/":{"tf":1.0},"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/gdb ref/":{"tf":1.0},"https://phlip9.com/notes/lang/lua/":{"tf":1.0},"https://phlip9.com/notes/misc/kintsugi/":{"tf":1.0},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0},"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.7320508075688772},"https://phlip9.com/notes/performance/simdjson talk/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.0}},"df":11},"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0},"https://phlip9.com/notes/b l o c k c h a i n/bip158 - compact block filters/":{"tf":2.23606797749979},"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0},"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":3.0},"https://phlip9.com/notes/misc/water distillation setup/":{"tf":1.4142135623730951}},"df":7,"e":{"docs":{},"df":0,"d":{"docs":{},"df":0,"/":{"docs":{},"df":0,"p":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"c":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"s":{"docs":{"https://phlip9.com/notes/postgres/types of scans/":{"tf":1.0}},"df":1}}}}}}}}}}}}}},"n":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/AI ML/Markov Decision Process (MDP)/":{"tf":1.0},"https://phlip9.com/notes/android/OTA updates for rooted android phone/":{"tf":1.4142135623730951},"https://phlip9.com/notes/android/root phone with magisk/":{"tf":1.0},"https://phlip9.com/notes/b l o c k c h a i n/fastpay/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/BOLT 11 - invoices/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":2.0},"https://phlip9.com/notes/btc-ln/BOLT 4 - onion routing protocol/":{"tf":1.7320508075688772},"https://phlip9.com/notes/btc-ln/atomic multipath payments (AMP)/":{"tf":1.0},"https://phlip9.com/notes/combinatorics/k-combinations of a multiset/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.0},"https://phlip9.com/notes/crypto/acme protocol/":{"tf":1.0},"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":1.0},"https://phlip9.com/notes/devops/azure CLI/":{"tf":1.0},"https://phlip9.com/notes/devops/secrets/ejson-kms (AWS)/":{"tf":1.0},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":5.656854249492381},"https://phlip9.com/notes/lang/rust/rr with rust/":{"tf":1.0},"https://phlip9.com/notes/misc/kintsugi/":{"tf":1.4142135623730951},"https://phlip9.com/notes/reproducible builds/nix/nix auto-allocate-uids -> nixbld users/":{"tf":1.0}},"df":20,"_":{"docs":{},"df":0,"t":{"docs":{},"df":0,"x":{"docs":{"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.4142135623730951}},"df":1}}}},"n":{"docs":{},"df":0,"c":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/financial instituion/":{"tf":1.7320508075688772},"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/foreign bank account report (FBAR)/":{"tf":4.0},"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/money services business (MSB)/":{"tf":1.7320508075688772}},"df":3}}}},"c":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/financial instituion/":{"tf":1.4142135623730951},"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/foreign bank account report (FBAR)/":{"tf":2.0},"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/money services business (MSB)/":{"tf":1.4142135623730951}},"df":3}}},"d":{"docs":{"https://phlip9.com/notes/AI ML/Markov Decision Process (MDP)/":{"tf":1.0},"https://phlip9.com/notes/android/root phone with magisk/":{"tf":1.0},"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/foreign bank account report (FBAR)/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.7320508075688772},"https://phlip9.com/notes/combinatorics/k-combinations of a multiset/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":2.8284271247461903},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.0},"https://phlip9.com/notes/crypto/(talk) authenticated data structures for stateless validation/":{"tf":1.0},"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.7320508075688772},"https://phlip9.com/notes/lang/flutter/flutter setup/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/lua/":{"tf":1.0},"https://phlip9.com/notes/lang/operator fixity and precedence/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/rr with rust/":{"tf":1.0},"https://phlip9.com/notes/management/relieve often - why generals were more successful in WWII/":{"tf":1.0},"https://phlip9.com/notes/misc/kintsugi/":{"tf":1.0},"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.0},"https://phlip9.com/notes/performance/simdjson talk/":{"tf":1.0},"https://phlip9.com/notes/postgres/types of scans/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/statistics probability/herbie - float error fixer/":{"tf":1.4142135623730951},"https://phlip9.com/notes/statistics probability/p-value/":{"tf":1.0}},"df":23},"e":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/sui/":{"tf":1.0},"https://phlip9.com/notes/misc/kintsugi/":{"tf":1.4142135623730951},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.0}},"df":3,"r":{"docs":{"https://phlip9.com/notes/router/lightning router/lightning router overview/":{"tf":1.0}},"df":1}},"g":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/keyboards/moergo glove80/":{"tf":1.0}},"df":1}}},"i":{"docs":{"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.0}},"df":1,"_":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"y":{"docs":{"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.0}},"df":1}}}}}},"s":{"docs":{},"df":0,"h":{"docs":{"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.4142135623730951},"https://phlip9.com/notes/android/root phone with magisk/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.0},"https://phlip9.com/notes/combinatorics/k-combinations of a multiset/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/fuzzing/fuzzing/":{"tf":1.0},"https://phlip9.com/notes/lang/lua/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/rr with rust/":{"tf":1.0},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":10,"(":{"docs":{},"df":0,"m":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":1.0}},"df":1}}},"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{},"df":0,"f":{"docs":{"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":1.0}},"df":1}}}}}}},"t":{"docs":{"https://phlip9.com/notes/AI ML/Markov Decision Process (MDP)/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/standard error/":{"tf":1.0}},"df":2}}},"r":{"docs":{},"df":0,"e":{"docs":{"https://phlip9.com/notes/devops/k3s/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/operator fixity and precedence/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/sycamore x futures/":{"tf":1.0},"https://phlip9.com/notes/management/relieve often - why generals were more successful in WWII/":{"tf":1.7320508075688772}},"df":4,"f":{"docs":{},"df":0,"o":{"docs":{},"df":0,"x":{"docs":{"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.0}},"df":1}}},"w":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.4142135623730951}},"df":1}}}},"m":{"docs":{},"df":0,"w":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel TDX/":{"tf":1.0},"https://phlip9.com/notes/keyboards/moergo glove80/":{"tf":2.0}},"df":5}}}},"s":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/AI ML/Markov Decision Process (MDP)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/android/ADB over TCP inside WSL2/":{"tf":1.0},"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.7320508075688772},"https://phlip9.com/notes/android/linux ADB udev setup/":{"tf":1.0},"https://phlip9.com/notes/android/root phone with magisk/":{"tf":1.4142135623730951},"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.7320508075688772},"https://phlip9.com/notes/btc-ln/hosted channels/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/submarine swaps/":{"tf":1.4142135623730951},"https://phlip9.com/notes/combinatorics/k-combinations of a multiset/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.0},"https://phlip9.com/notes/crypto/acme protocol/":{"tf":1.0},"https://phlip9.com/notes/design/form design/":{"tf":1.0},"https://phlip9.com/notes/devops/docker compose/":{"tf":1.0},"https://phlip9.com/notes/ios/ios setup/":{"tf":1.0},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.7320508075688772},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.7320508075688772},"https://phlip9.com/notes/lang/koka-lang/":{"tf":1.0},"https://phlip9.com/notes/lang/lua/":{"tf":1.0},"https://phlip9.com/notes/lang/operator fixity and precedence/":{"tf":1.4142135623730951},"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":1.4142135623730951},"https://phlip9.com/notes/misc/kintsugi/":{"tf":2.6457513110645907},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":2.0},"https://phlip9.com/notes/misc/setting up a headless raspbian boot image/":{"tf":1.0},"https://phlip9.com/notes/networking/CIDR/":{"tf":1.0},"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.0},"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.4142135623730951},"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.0},"https://phlip9.com/notes/performance/profiling/":{"tf":1.0},"https://phlip9.com/notes/postgres/types of scans/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/reproducible-builds.org/":{"tf":1.4142135623730951},"https://phlip9.com/notes/router/lightning router/captive portal/arubanetworks captive portal/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":2.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/testing whether a coin is fair/":{"tf":1.0}},"df":37,"_":{"docs":{},"df":0,"p":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"_":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"m":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"_":{"docs":{},"df":0,"p":{"docs":{},"df":0,"o":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.4142135623730951}},"df":1}}}}}}}}}}}}}}}}}}}},"u":{"docs":{},"df":0,"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"_":{"docs":{},"df":0,"n":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"=":{"docs":{},"df":0,"p":{"docs":{},"df":0,"h":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"p":{"docs":{},"df":0,"9":{"docs":{"https://phlip9.com/notes/misc/setting up a headless raspbian boot image/":{"tf":1.0}},"df":1}}}}}}}}}}},"p":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{},"df":0,"s":{"docs":{},"df":0,"=":{"docs":{},"df":0,"&":{"docs":{},"df":0,"l":{"docs":{},"df":0,"t":{"docs":{},"df":0,";":{"docs":{},"df":0,".":{"docs":{},"df":0,".":{"docs":{},"df":0,"&":{"docs":{},"df":0,"g":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/misc/setting up a headless raspbian boot image/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}},"l":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/misc/kintsugi/":{"tf":1.0}},"df":1}}}}},"t":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/fastpay/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.0},"https://phlip9.com/notes/misc/kintsugi/":{"tf":1.7320508075688772},"https://phlip9.com/notes/postgres/types of scans/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/G-test - multinomial goodness-of-fit/":{"tf":1.7320508075688772},"https://phlip9.com/notes/statistics probability/multinomial distribution/":{"tf":2.0}},"df":6},"x":{"docs":{"https://phlip9.com/notes/AI ML/Markov Decision Process (MDP)/":{"tf":1.0},"https://phlip9.com/notes/android/android cli setup/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/secure time/":{"tf":1.4142135623730951},"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":1.0},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.0},"https://phlip9.com/notes/misc/pop_OS! tweaks/":{"tf":1.4142135623730951},"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/herbie - float error fixer/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/testing whether a coin is fair/":{"tf":1.0}},"df":12,"e":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/statistics probability/herbie - float error fixer/":{"tf":1.4142135623730951}},"df":1}},"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/lang/operator fixity and precedence/":{"tf":2.6457513110645907}},"df":1}}},"u":{"docs":{},"df":0,"p":{"docs":{"https://phlip9.com/notes/devops/azure CLI/":{"tf":1.0},"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.0}},"df":2}}}},"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"g":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":2.0},"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.7320508075688772},"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":1.0},"https://phlip9.com/notes/devops/consul/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/rr with rust/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/rust verification tools/":{"tf":1.0},"https://phlip9.com/notes/nvim/universal-ctags Notes/":{"tf":1.4142135623730951}},"df":10,"s":{"docs":{},"df":0,"&":{"docs":{},"df":0,"g":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/nvim/universal-ctags Notes/":{"tf":1.0}},"df":1}}},"=":{"docs":{},"df":0,"4":{"docs":{},"df":0,"1":{"docs":{},"df":0,"6":{"docs":{},"df":0,"3":{"docs":{},"df":0,"&":{"docs":{},"df":0,"l":{"docs":{},"df":0,"t":{"docs":{},"df":0,";":{"docs":{},"df":0,"u":{"docs":{},"df":0,"p":{"docs":{},"df":0,",":{"docs":{},"df":0,"b":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{},"df":0,"c":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,",":{"docs":{},"df":0,"r":{"docs":{},"df":0,"u":{"docs":{},"df":0,"n":{"docs":{},"df":0,"n":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"g":{"docs":{},"df":0,",":{"docs":{},"df":0,"m":{"docs":{},"df":0,"u":{"docs":{},"df":0,"l":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"&":{"docs":{},"df":0,"g":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/android/ADB over TCP inside WSL2/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"k":{"docs":{},"df":0,"e":{"docs":{"https://phlip9.com/notes/reproducible builds/nix/links/":{"tf":2.0},"https://phlip9.com/notes/reproducible builds/nix/nix auto-allocate-uids -> nixbld users/":{"tf":1.4142135623730951}},"df":2,".":{"docs":{},"df":0,"n":{"docs":{},"df":0,"i":{"docs":{},"df":0,"x":{"docs":{"https://phlip9.com/notes/reproducible builds/nix/links/":{"tf":1.0}},"df":1}}}}},"i":{"docs":{"https://phlip9.com/notes/lang/rust/rr with rust/":{"tf":1.0},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":2}},"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"g":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"p":{"docs":{},"df":0,"h":{"docs":{"https://phlip9.com/notes/performance/profiling/":{"tf":1.0}},"df":1}}}}}}},"s":{"docs":{},"df":0,"h":{"docs":{"https://phlip9.com/notes/android/root phone with magisk/":{"tf":2.0},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.4142135623730951}},"df":2}},"t":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 4 - onion routing protocol/":{"tf":1.0},"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":1.0},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":2.0}},"df":3,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/combinatorics/k-combinations of a multiset/":{"tf":1.7320508075688772}},"df":1}}}},"v":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/btc-ln/zero-conf channels/":{"tf":1.0},"https://phlip9.com/notes/keyboards/moergo glove80/":{"tf":1.0}},"df":2}}},"w":{"docs":{"https://phlip9.com/notes/reproducible builds/reproducible-builds.org/":{"tf":1.0}},"df":1,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"s":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":1.0}},"df":1}}}}}}}},"c":{"docs":{"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0}},"df":3},"e":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/devops/nomad/":{"tf":1.0}},"df":1}},"x":{"docs":{"https://phlip9.com/notes/WSL/WSL2 custom kernel/":{"tf":1.0}},"df":1,"i":{"docs":{},"df":0,"b":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":2.23606797749979},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.4142135623730951},"https://phlip9.com/notes/devops/secrets/mozilla SOPS/":{"tf":1.0},"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.0}},"df":4}}}}},"i":{"docs":{},"df":0,"g":{"docs":{},"df":0,"h":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.7320508075688772},"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":1.0}},"df":2}}},"p":{"docs":{},"df":0,"p":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.4142135623730951}},"df":1}}}}},"o":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0},"https://phlip9.com/notes/performance/simdjson talk/":{"tf":1.4142135623730951},"https://phlip9.com/notes/statistics probability/herbie - float error fixer/":{"tf":1.7320508075688772},"https://phlip9.com/notes/statistics probability/winsorize/":{"tf":1.4142135623730951}},"df":4}},"o":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.0},"https://phlip9.com/notes/misc/kintsugi/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/winsorize/":{"tf":1.0}},"df":3}},"w":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/fastpay/":{"tf":1.4142135623730951},"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":3.0},"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.0},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/koka-lang/":{"tf":1.4142135623730951},"https://phlip9.com/notes/misc/optimization solvers/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/lightning router overview/":{"tf":1.4142135623730951}},"df":9,"c":{"docs":{},"df":0,"h":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/btc-ln/atomic multipath payments (AMP)/":{"tf":1.7320508075688772},"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":1.4142135623730951}},"df":2}}}}}}},"u":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"k":{"docs":{},"df":0,"s":{"docs":{},"df":0,"/":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"k":{"docs":{"https://phlip9.com/notes/reproducible builds/nix/links/":{"tf":1.0}},"df":1}}}}}}}}}}}}},"s":{"docs":{},"df":0,"h":{"docs":{"https://phlip9.com/notes/misc/kintsugi/":{"tf":1.7320508075688772}},"df":1}},"t":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/ios/ios setup/":{"tf":2.0},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0},"https://phlip9.com/notes/lang/flutter/flutter setup/":{"tf":4.358898943540674}},"df":3,".":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"v":{"docs":{},"df":0,".":{"docs":{},"df":0,"h":{"docs":{},"df":0,"o":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{},"df":0,"&":{"docs":{},"df":0,"l":{"docs":{},"df":0,"t":{"docs":{},"df":0,";":{"docs":{},"df":0,"c":{"docs":{},"df":0,"r":{"docs":{},"df":0,"&":{"docs":{},"df":0,"g":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/lang/flutter/flutter setup/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}},"o":{"docs":{},"df":0,"p":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"v":{"docs":{},"df":0,"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"g":{"docs":{},"df":0,"&":{"docs":{},"df":0,"l":{"docs":{},"df":0,"t":{"docs":{},"df":0,";":{"docs":{},"df":0,"c":{"docs":{},"df":0,"r":{"docs":{},"df":0,"&":{"docs":{},"df":0,"g":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/lang/flutter/flutter setup/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}},"q":{"docs":{},"df":0,"u":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"&":{"docs":{},"df":0,"l":{"docs":{},"df":0,"t":{"docs":{},"df":0,";":{"docs":{},"df":0,"c":{"docs":{},"df":0,"r":{"docs":{},"df":0,"&":{"docs":{},"df":0,"g":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/lang/flutter/flutter setup/":{"tf":1.0}},"df":1}}}}}}}}}}}}}},"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"&":{"docs":{},"df":0,"l":{"docs":{},"df":0,"t":{"docs":{},"df":0,";":{"docs":{},"df":0,"c":{"docs":{},"df":0,"r":{"docs":{},"df":0,"&":{"docs":{},"df":0,"g":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/lang/flutter/flutter setup/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}},"r":{"docs":{},"df":0,"u":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/lang/flutter/flutter setup/":{"tf":1.0}},"df":1,"&":{"docs":{},"df":0,"l":{"docs":{},"df":0,"t":{"docs":{},"df":0,";":{"docs":{},"df":0,"c":{"docs":{},"df":0,"r":{"docs":{},"df":0,"&":{"docs":{},"df":0,"g":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/lang/flutter/flutter setup/":{"tf":1.0}},"df":1}}}}}}}}}}}}},"_":{"docs":{},"df":0,"h":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"=":{"docs":{},"df":0,"$":{"docs":{},"df":0,"h":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"/":{"docs":{},"df":0,".":{"docs":{},"df":0,"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"c":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"/":{"docs":{},"df":0,"f":{"docs":{},"df":0,"l":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/lang/flutter/flutter setup/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"m":{"docs":{},"df":0,"s":{"docs":{},"df":0,"p":{"docs":{},"df":0,"c":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.7320508075688772}},"df":1,"\"":{"docs":{},"df":0,":":{"docs":{},"df":0,"\"":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}},"t":{"docs":{"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.0}},"df":1}},"n":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":2.8284271247461903},"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.4142135623730951},"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.4142135623730951},"https://phlip9.com/notes/combinatorics/k-combinations of a multiset/":{"tf":1.7320508075688772},"https://phlip9.com/notes/crypto/TLS self-signed pubkey-only certs/":{"tf":1.4142135623730951},"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":3.4641016151377544},"https://phlip9.com/notes/crypto/tls exported keying material/":{"tf":1.0},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/lua/":{"tf":1.7320508075688772},"https://phlip9.com/notes/performance/bit hacks/":{"tf":6.0},"https://phlip9.com/notes/performance/simdjson talk/":{"tf":1.4142135623730951},"https://phlip9.com/notes/statistics probability/G-test - multinomial goodness-of-fit/":{"tf":2.0},"https://phlip9.com/notes/statistics probability/multinomial distribution/":{"tf":1.0}},"df":13,"(":{"docs":{},"df":0,"m":{"docs":{},"df":0,"s":{"docs":{},"df":0,"g":{"docs":{"https://phlip9.com/notes/lang/rust/understanding sycamore reactivity/":{"tf":1.0}},"df":1,")":{"docs":{},"df":0,")":{"docs":{},"df":0,"c":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/lang/rust/understanding sycamore reactivity/":{"tf":1.0}},"df":1}}}}}}}}}},"m":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{},"df":0,"(":{"docs":{},"df":0,"&":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{},"df":0,"p":{"docs":{},"df":0,";":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/lang/rust/understanding sycamore reactivity/":{"tf":1.0}},"df":1},"u":{"docs":{"https://phlip9.com/notes/lang/rust/understanding sycamore reactivity/":{"tf":1.0}},"df":1}}}}}}}}}},"s":{"docs":{},"df":0,"/":{"docs":{},"df":0,"t":{"docs":{},"df":0,"y":{"docs":{},"df":0,"p":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"/":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{},"df":0,"c":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0}},"df":1}}}}}}}}}}}},"o":{"docs":{},"df":0,"c":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":2.449489742783178},"https://phlip9.com/notes/confidential computing/gramine/":{"tf":1.4142135623730951}},"df":2,":":{"docs":{},"df":0,"2":{"docs":{},"df":0,"0":{"docs":{},"df":0,"_":{"docs":{},"df":0,"0":{"docs":{},"df":0,"4":{"docs":{"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/gramine/":{"tf":1.0},"https://phlip9.com/notes/devops/azure CLI/":{"tf":1.0}},"df":3}}}}}}}},"u":{"docs":{"https://phlip9.com/notes/btc-ln/breez lightning service providers/":{"tf":1.0},"https://phlip9.com/notes/design/form design/":{"tf":1.0}},"df":2,"s":{"docs":{"https://phlip9.com/notes/btc-ln/lightning libs/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.0},"https://phlip9.com/notes/design/form design/":{"tf":1.7320508075688772},"https://phlip9.com/notes/reproducible builds/nix/links/":{"tf":1.0}},"df":4}}},"l":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.7320508075688772},"https://phlip9.com/notes/lang/rust/understanding sycamore reactivity/":{"tf":1.0}},"df":2,"(":{"docs":{},"df":0,"0":{"docs":{},"df":0,".":{"docs":{},"df":0,"0":{"docs":{"https://phlip9.com/notes/statistics probability/G-test - multinomial goodness-of-fit/":{"tf":1.0}},"df":1}}}},"@":{"docs":{},"df":0,"(":{"docs":{},"df":0,"_":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0}},"df":1},"r":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0}},"df":1},"x":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.4142135623730951}},"df":1}}},"e":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":2.0}},"df":1}}},"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"w":{"docs":{"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.4142135623730951},"https://phlip9.com/notes/android/root phone with magisk/":{"tf":1.4142135623730951},"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/financial instituion/":{"tf":1.0},"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/money services business (MSB)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.0},"https://phlip9.com/notes/crypto/acme protocol/":{"tf":1.0},"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.4142135623730951},"https://phlip9.com/notes/misc/kintsugi/":{"tf":1.0},"https://phlip9.com/notes/performance/bit hacks/":{"tf":2.0},"https://phlip9.com/notes/postgres/postgres performance tuning/":{"tf":1.0},"https://phlip9.com/notes/postgres/types of scans/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/nix/nix debug broken package build/":{"tf":1.4142135623730951},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.7320508075688772},"https://phlip9.com/notes/router/lightning router/captive portal/arubanetworks captive portal/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":2.6457513110645907},"https://phlip9.com/notes/router/lightning router/lightning router overview/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/multinomial distribution/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/testing whether a coin is fair/":{"tf":1.4142135623730951}},"df":22}}}},"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1}}}},"o":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":3.0},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":2.23606797749979},"https://phlip9.com/notes/lang/lua/":{"tf":2.449489742783178},"https://phlip9.com/notes/lang/operator fixity and precedence/":{"tf":1.4142135623730951},"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.0}},"df":6,"(":{"docs":{},"df":0,"&":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{},"df":0,"p":{"docs":{},"df":0,";":{"docs":{},"df":0,"'":{"docs":{},"df":0,"a":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0}},"df":1},"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0}},"df":1}}}}}}}}}},"f":{"docs":{},"df":0,"n":{"docs":{},"df":0,"(":{"docs":{},"df":0,"&":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{},"df":0,"p":{"docs":{},"df":0,";":{"docs":{},"df":0,"'":{"docs":{},"df":0,"a":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0}},"df":1},"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0}},"df":1}}}}}}}}}}}}},"x":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0},"https://phlip9.com/notes/lang/lua/":{"tf":1.0}},"df":2}},".":{"docs":{},"df":0,"a":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0}},"df":1},"f":{"docs":{},"df":0,"o":{"docs":{},"df":0,"o":{"docs":{},"df":0,"_":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0}},"df":1}}}}},"n":{"docs":{},"df":0,"u":{"docs":{},"df":0,"m":{"docs":{},"df":0,"b":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"p":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"g":{"docs":{},"df":0,"(":{"docs":{},"df":0,"\"":{"docs":{},"df":0,"4":{"docs":{},"df":0,"2":{"docs":{},"df":0,"\"":{"docs":{},"df":0,")":{"docs":{},"df":0,".":{"docs":{},"df":0,"p":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}},"s":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.4142135623730951}},"df":1}}}},":":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.0}},"df":1}}}}}}},"_":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0}},"df":1}},"b":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"+":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"p":{"docs":{"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.0}},"df":1}}}}}}},"d":{"docs":{"https://phlip9.com/notes/misc/kintsugi/":{"tf":2.449489742783178}},"df":1},"t":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0}},"df":1}},"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/AI ML/Expectimax Search/":{"tf":1.0},"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.0}},"df":2}},"c":{"docs":{"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0},"https://phlip9.com/notes/lang/operator fixity and precedence/":{"tf":1.0},"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":1.4142135623730951},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":2.0}},"df":7},"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{},"df":0,"(":{"docs":{},"df":0,"(":{"docs":{},"df":0,"n":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0}},"df":1}}}}}}}},"i":{"docs":{},"df":0,"g":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/foreign bank account report (FBAR)/":{"tf":2.6457513110645907}},"df":1}}},"s":{"docs":{},"df":0,"h":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{},"df":0,"o":{"docs":{},"df":0,"w":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0}},"df":1}}}}},"t":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/btc utreexo - utxo accumulator/":{"tf":1.0},"https://phlip9.com/notes/devops/k3s/":{"tf":1.0},"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":1.0}},"df":3}},"v":{"docs":{"https://phlip9.com/notes/networking/network interfaces/":{"tf":5.291502622129181},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.0}},"df":2}},"g":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/fastpay/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0},"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":1.0},"https://phlip9.com/notes/design/form design/":{"tf":1.0}},"df":4}},"o":{"docs":{"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":1.0}},"df":1,"t":{"docs":{"https://phlip9.com/notes/crypto/acme protocol/":{"tf":1.0},"https://phlip9.com/notes/fuzzing/fuzzcheck-rs/":{"tf":1.0},"https://phlip9.com/notes/misc/prepping RPI for embedded dev/":{"tf":1.0}},"df":3}}},"k":{"docs":{"https://phlip9.com/notes/confidential computing/gramine/":{"tf":1.0},"https://phlip9.com/notes/devops/nomad/":{"tf":1.0},"https://phlip9.com/notes/fuzzing/fuzzcheck-rs/":{"tf":1.4142135623730951}},"df":3},"m":{"docs":{"https://phlip9.com/notes/AI ML/Expectimax Search/":{"tf":1.0},"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/foreign bank account report (FBAR)/":{"tf":2.0},"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/monetary instruments/":{"tf":2.0},"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel TDX/":{"tf":1.0},"https://phlip9.com/notes/design/form design/":{"tf":3.3166247903554},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0},"https://phlip9.com/notes/lang/lua/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/operator fixity and precedence/":{"tf":1.0},"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":1.4142135623730951},"https://phlip9.com/notes/performance/simdjson talk/":{"tf":1.4142135623730951},"https://phlip9.com/notes/reproducible builds/reproducible-builds.org/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.4142135623730951}},"df":16,"a":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/AI ML/Expectimax Search/":{"tf":1.0},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0}},"df":2},"t":{"docs":{"https://phlip9.com/notes/WSL/WSL2 custom kernel/":{"tf":1.0},"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/BOLT 4 - onion routing protocol/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":2.6457513110645907},"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":1.4142135623730951},"https://phlip9.com/notes/design/form design/":{"tf":1.0},"https://phlip9.com/notes/fuzzing/fuzzing/":{"tf":1.0},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0},"https://phlip9.com/notes/lang/lua/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":2.0},"https://phlip9.com/notes/misc/envsubst/":{"tf":1.4142135623730951},"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":1.0},"https://phlip9.com/notes/misc/prepping RPI for embedded dev/":{"tf":1.0},"https://phlip9.com/notes/misc/setting up a headless raspbian boot image/":{"tf":1.0},"https://phlip9.com/notes/networking/CIDR/":{"tf":1.0},"https://phlip9.com/notes/networking/ipv6 address space/":{"tf":1.4142135623730951},"https://phlip9.com/notes/performance/profiling/":{"tf":1.0}},"df":18}},"u":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/AI ML/Markov Decision Process (MDP)/":{"tf":1.0}},"df":1}}},"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"i":{"docs":{},"df":0,"x":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":4.0},"https://phlip9.com/notes/confidential computing/gramine/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":3.0},"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":1.0},"https://phlip9.com/notes/devops/secrets/fortanix DSM/":{"tf":1.4142135623730951}},"df":6,"/":{"docs":{},"df":0,"r":{"docs":{},"df":0,"u":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/lang/rust/rust x SGX/":{"tf":1.0}},"df":1}}}}}}}}},"h":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":3,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.0}},"df":1}}}},"u":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/lang/gdb ref/":{"tf":1.0},"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/standard error/":{"tf":1.0}},"df":3}}},"u":{"docs":{},"df":0,"m":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0}},"df":1}},"w":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/android/ADB over TCP inside WSL2/":{"tf":1.0},"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.4142135623730951},"https://phlip9.com/notes/btc-ln/BOLT 4 - onion routing protocol/":{"tf":1.4142135623730951},"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.0},"https://phlip9.com/notes/devops/algo wireguard VPN server/":{"tf":1.0},"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":1.0},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0},"https://phlip9.com/notes/networking/ipv6 address space/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.0}},"df":13,"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"s":{"docs":{},"df":0,"y":{"docs":{},"df":0,"s":{"docs":{},"df":0,"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"g":{"docs":{},"df":0,"=":{"docs":{},"df":0,"n":{"docs":{},"df":0,"o":{"docs":{"https://phlip9.com/notes/misc/prepping RPI for embedded dev/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}},"u":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/lightning libs/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":3.4641016151377544},"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.0},"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":1.0},"https://phlip9.com/notes/fuzzing/fuzzcheck-rs/":{"tf":1.0},"https://phlip9.com/notes/lang/flutter/flutter setup/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.0}},"df":9,"a":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.4142135623730951}},"df":1}}}},"r":{"docs":{"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.4142135623730951}},"df":1}}},"p":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/fastpay/":{"tf":4.242640687119285}},"df":1,"/":{"docs":{},"df":0,"h":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"b":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/statistics probability/herbie - float error fixer/":{"tf":1.0}},"df":1}}}}}},"g":{"docs":{},"df":0,"a":{"docs":{"https://phlip9.com/notes/networking/network interface card (NIC)/":{"tf":1.0}},"df":1}}},"q":{"docs":{},"df":0,"d":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/gramine/":{"tf":1.0},"https://phlip9.com/notes/devops/azure CLI/":{"tf":1.4142135623730951}},"df":3}}},"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{"https://phlip9.com/notes/statistics probability/testing whether a coin is fair/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/winsorize/":{"tf":1.0}},"df":2,"(":{"docs":{},"df":0,"1":{"docs":{},"df":0,".":{"docs":{},"df":0,"7":{"docs":{},"df":0,"5":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1}}}},"t":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1},"x":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1}},"t":{"docs":{"https://phlip9.com/notes/statistics probability/winsorize/":{"tf":2.0}},"df":1,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"x":{"docs":{"https://phlip9.com/notes/statistics probability/winsorize/":{"tf":1.7320508075688772}},"df":1}}}},"o":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.7320508075688772},"https://phlip9.com/notes/statistics probability/winsorize/":{"tf":1.4142135623730951}},"df":2}}}},"{":{"docs":{},"df":0,"1":{"docs":{},"df":0,"}":{"docs":{},"df":0,"{":{"docs":{},"df":0,"1":{"docs":{"https://phlip9.com/notes/AI ML/Markov Decision Process (MDP)/":{"tf":1.0}},"df":1},"2":{"docs":{"https://phlip9.com/notes/statistics probability/testing whether a coin is fair/":{"tf":1.0}},"df":1}}}},"2":{"docs":{},"df":0,"}":{"docs":{},"df":0,"{":{"docs":{},"df":0,"\\":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"p":{"docs":{},"df":0,"h":{"docs":{},"df":0,"a":{"docs":{},"df":0,"}":{"docs":{},"df":0,"}":{"docs":{},"df":0,"{":{"docs":{},"df":0,"2":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/statistics probability/CDF confidence bands - DKW inequality/":{"tf":1.0}},"df":1}}}}}}}}}}}}}},"\\":{"docs":{},"df":0,"h":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"{":{"docs":{},"df":0,"p":{"docs":{},"df":0,"}":{"docs":{},"df":0,"_":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/statistics probability/G-test - multinomial goodness-of-fit/":{"tf":1.0}},"df":1,"}":{"docs":{},"df":0,"{":{"docs":{},"df":0,"p":{"docs":{},"df":0,"_":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/statistics probability/G-test - multinomial goodness-of-fit/":{"tf":1.4142135623730951}},"df":1}}}}}}}}}}}}},"m":{"docs":{},"df":0,"u":{"docs":{},"df":0,"_":{"docs":{},"df":0,"x":{"docs":{"https://phlip9.com/notes/statistics probability/testing whether a coin is fair/":{"tf":1.0}},"df":1}}}},"p":{"docs":{},"df":0,"r":{"docs":{},"df":0,"{":{"docs":{},"df":0,"f":{"docs":{},"df":0,"(":{"docs":{},"df":0,"x":{"docs":{"https://phlip9.com/notes/statistics probability/p-value/":{"tf":1.0}},"df":1}}}}}},"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"g":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"^":{"docs":{},"df":0,"2":{"docs":{},"df":0,"}":{"docs":{},"df":0,"{":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/statistics probability/standard error/":{"tf":1.0}},"df":1}}}}},"_":{"docs":{},"df":0,"x":{"docs":{},"df":0,"}":{"docs":{},"df":0,"{":{"docs":{},"df":0,"\\":{"docs":{},"df":0,"s":{"docs":{},"df":0,"q":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{},"df":0,"{":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/statistics probability/standard error/":{"tf":1.0}},"df":1}}}}}}}}}}},"}":{"docs":{},"df":0,"{":{"docs":{},"df":0,"\\":{"docs":{},"df":0,"s":{"docs":{},"df":0,"q":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{},"df":0,"{":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/statistics probability/standard error/":{"tf":1.4142135623730951}},"df":1}}}}}}},"n":{"docs":{"https://phlip9.com/notes/statistics probability/standard error/":{"tf":1.0}},"df":1}}}}}}}}},"h":{"docs":{},"df":0,"}":{"docs":{},"df":0,"{":{"docs":{},"df":0,"h":{"docs":{"https://phlip9.com/notes/statistics probability/testing whether a coin is fair/":{"tf":1.0}},"df":1}}}},"n":{"docs":{"https://phlip9.com/notes/statistics probability/standard error/":{"tf":1.0}},"df":1,"!":{"docs":{},"df":0,"}":{"docs":{},"df":0,"{":{"docs":{},"df":0,"x":{"docs":{},"df":0,"_":{"docs":{},"df":0,"1":{"docs":{"https://phlip9.com/notes/statistics probability/multinomial distribution/":{"tf":1.0}},"df":1}}}}}}},"o":{"docs":{},"df":0,"_":{"docs":{},"df":0,"i":{"docs":{},"df":0,"}":{"docs":{},"df":0,"{":{"docs":{},"df":0,"e":{"docs":{},"df":0,"_":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/statistics probability/G-test - multinomial goodness-of-fit/":{"tf":1.0}},"df":1}}}}}}}},"x":{"docs":{},"df":0,"_":{"docs":{},"df":0,"1":{"docs":{"https://phlip9.com/notes/statistics probability/standard error/":{"tf":1.0}},"df":1}}},"z":{"docs":{},"df":0,"^":{"docs":{},"df":0,"2":{"docs":{},"df":0,"}":{"docs":{},"df":0,"{":{"docs":{},"df":0,"4":{"docs":{"https://phlip9.com/notes/statistics probability/testing whether a coin is fair/":{"tf":1.0}},"df":1}}}}},"}":{"docs":{},"df":0,"{":{"docs":{},"df":0,"2":{"docs":{"https://phlip9.com/notes/statistics probability/testing whether a coin is fair/":{"tf":1.0}},"df":1}}}}}},"m":{"docs":{},"df":0,"e":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/fastpay/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/rr with rust/":{"tf":1.0},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.7320508075688772},"https://phlip9.com/notes/networking/network interface card (NIC)/":{"tf":2.449489742783178},"https://phlip9.com/notes/networking/network interfaces/":{"tf":2.23606797749979},"https://phlip9.com/notes/statistics probability/testing whether a coin is fair/":{"tf":1.0}},"df":7,"b":{"docs":{},"df":0,"u":{"docs":{},"df":0,"f":{"docs":{},"df":0,"f":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":2.449489742783178}},"df":1,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.4142135623730951}},"df":1,".":{"docs":{},"df":0,"f":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"b":{"docs":{},"df":0,"u":{"docs":{},"df":0,"f":{"docs":{},"df":0,"f":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"d":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"p":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"y":{"docs":{},"df":0,"(":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"x":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"w":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"k":{"docs":{"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/reproducible builds/nix/links/":{"tf":1.0}},"df":3}}}}}},"n":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/sui/":{"tf":1.0}},"df":1}}},"k":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.0}},"df":1}}}},"u":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/foreign bank account report (FBAR)/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/breez lightning service providers/":{"tf":1.0}},"df":2}}},"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{},"df":0,"h":{"docs":{"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.0}},"df":1}}},"e":{"docs":{"https://phlip9.com/notes/btc-ln/lightning libs/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0},"https://phlip9.com/notes/devops/AKS - azure kubernetes service/":{"tf":1.0},"https://phlip9.com/notes/devops/service mesh/":{"tf":1.0},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.7320508075688772},"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":1.0},"https://phlip9.com/notes/misc/optimization solvers/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/reproducible-builds.org/":{"tf":1.4142135623730951},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.4142135623730951}},"df":10,"'":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0}},"df":1},"l":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.0}},"df":1}}},"n":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{"https://phlip9.com/notes/btc-ln/lightning libs/":{"tf":1.0}},"df":1}}},"q":{"docs":{"https://phlip9.com/notes/WSL/WSL2 custom kernel/":{"tf":1.0}},"df":1,"=":{"docs":{},"df":0,"1":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{"https://phlip9.com/notes/WSL/WSL2 custom kernel/":{"tf":1.0}},"df":1}}}}},"u":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"c":{"docs":{"https://phlip9.com/notes/WSL/WSL2 custom kernel/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":1.0}},"df":2,"y":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1}}}},"t":{"docs":{"https://phlip9.com/notes/management/relieve often - why generals were more successful in WWII/":{"tf":1.0},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.0}},"df":4,"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/statistics probability/testing whether a coin is fair/":{"tf":1.0}},"df":1}}}}}}}},"s":{"docs":{},"df":0,"h":{"docs":{"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":1.0},"https://phlip9.com/notes/crypto/biscuit authz/":{"tf":1.4142135623730951},"https://phlip9.com/notes/management/relieve often - why generals were more successful in WWII/":{"tf":1.4142135623730951},"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":1.7320508075688772},"https://phlip9.com/notes/misc/setting up a headless raspbian boot image/":{"tf":1.4142135623730951}},"df":7,"l":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.0}},"df":1}},"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"s":{"docs":{},"df":0,"/":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"p":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"y":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/secure time/":{"tf":1.0}},"df":1}}}}}}}}}}}}}},"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/btc-ln/breez lightning service providers/":{"tf":1.0}},"df":1}}}}},"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/btc-ln/breez lightning service providers/":{"tf":1.7320508075688772}},"df":1,"l":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/devops/docker compose/":{"tf":1.0},"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/nix/links/":{"tf":1.0}},"df":3}}}}}},"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"&":{"docs":{},"df":0,"l":{"docs":{},"df":0,"t":{"docs":{},"df":0,";":{"docs":{},"df":0,"f":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{},"df":0,"u":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"_":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"l":{"docs":{},"df":0,":":{"docs":{},"df":0,":":{"docs":{},"df":0,"f":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{},"df":0,"u":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,":":{"docs":{},"df":0,":":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"y":{"docs":{},"df":0,"_":{"docs":{},"df":0,"f":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{},"df":0,"u":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,":":{"docs":{},"df":0,":":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"_":{"docs":{},"df":0,"f":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{},"df":0,"u":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,":":{"docs":{},"df":0,":":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"f":{"docs":{"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"_":{"docs":{},"df":0,"p":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{"https://phlip9.com/notes/crypto/TLS self-signed pubkey-only certs/":{"tf":1.0}},"df":1}}}}},"v":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.4142135623730951}},"df":1}}}},"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"(":{"docs":{},"df":0,"2":{"docs":{"https://phlip9.com/notes/lang/lua/":{"tf":1.0}},"df":1},"a":{"docs":{"https://phlip9.com/notes/lang/lua/":{"tf":1.7320508075688772}},"df":1}}}}},"n":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/btc-ln/breez lightning service providers/":{"tf":1.7320508075688772},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0},"https://phlip9.com/notes/misc/kintsugi/":{"tf":1.0},"https://phlip9.com/notes/performance/simdjson talk/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/reproducible-builds.org/":{"tf":1.0}},"df":6,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/confidential computing/marblerun/":{"tf":1.0}},"df":1}}}}}},"y":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"y":{"docs":{},"df":0,"k":{"docs":{"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.4142135623730951}},"df":2}}}}}},"s":{"docs":{"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.4142135623730951},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.7320508075688772}},"df":2,"e":{"docs":{},"df":0,"v":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"s":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.0}},"df":1}}}}}}},"s":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.0}},"df":1}},"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"6":{"docs":{},"df":0,"4":{"docs":{"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.0}},"df":1}}}}}},"t":{"docs":{},"df":0,"%":{"docs":{},"df":0,"t":{"docs":{},"df":0,"%":{"docs":{},"df":0,".":{"docs":{},"df":0,"6":{"docs":{},"df":0,"f":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0}},"df":1}}}}}},"x":{"docs":{},"df":0,"s":{"docs":{},"df":0,"g":{"docs":{},"df":0,"x":{"docs":{"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0}},"df":2}}}}},"u":{"docs":{},"df":0,"c":{"docs":{},"df":0,"k":{"docs":{"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0},"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0},"https://phlip9.com/notes/performance/simdjson talk/":{"tf":1.0},"https://phlip9.com/notes/postgres/snippets/":{"tf":1.0}},"df":4,"i":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0}},"df":1}}}},"l":{"docs":{},"df":0,"f":{"docs":{},"df":0,"i":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/btc-ln/atomic multipath payments (AMP)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.0},"https://phlip9.com/notes/postgres/types of scans/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.0}},"df":4}}},"l":{"docs":{"https://phlip9.com/notes/AI ML/Markov Decision Process (MDP)/":{"tf":1.7320508075688772},"https://phlip9.com/notes/WSL/WSL2 custom kernel/":{"tf":1.0},"https://phlip9.com/notes/b l o c k c h a i n/bip158 - compact block filters/":{"tf":1.4142135623730951},"https://phlip9.com/notes/b l o c k c h a i n/btc utreexo - utxo accumulator/":{"tf":2.0},"https://phlip9.com/notes/b l o c k c h a i n/fastpay/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.4142135623730951},"https://phlip9.com/notes/btc-ln/BOLT 4 - onion routing protocol/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/zero-conf channels/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":2.0},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":2.0},"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.0},"https://phlip9.com/notes/devops/docker compose/":{"tf":1.0},"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":1.0},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0},"https://phlip9.com/notes/networking/CIDR/":{"tf":1.0},"https://phlip9.com/notes/networking/network interface card (NIC)/":{"tf":1.0},"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/nix/nix debug spurrious rebuilds/":{"tf":1.7320508075688772}},"df":19,"i":{"docs":{"https://phlip9.com/notes/AI ML/Expectimax Search/":{"tf":1.0},"https://phlip9.com/notes/android/root phone with magisk/":{"tf":1.4142135623730951},"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/atomic multipath payments (AMP)/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/breez lightning service providers/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/zero-conf channels/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/secure time/":{"tf":1.0},"https://phlip9.com/notes/crypto/acme protocol/":{"tf":1.0},"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":1.0},"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/nix/nix debug broken package build/":{"tf":1.0}},"df":13}}},"n":{"docs":{"https://phlip9.com/notes/devops/deployment strategies/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":3.7416573867739413},"https://phlip9.com/notes/lang/koka-lang/":{"tf":1.4142135623730951},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.0}},"df":4,"c":{"docs":{},"df":0,"(":{"docs":{},"df":0,"m":{"docs":{},"df":0,"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,")":{"docs":{},"df":0,".":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{},"df":0,"_":{"docs":{},"df":0,"o":{"docs":{},"df":0,"s":{"docs":{},"df":0,"_":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"(":{"docs":{},"df":0,")":{"docs":{},"df":0,".":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{},"df":0,"_":{"docs":{},"df":0,"b":{"docs":{},"df":0,"y":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}},"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/AI ML/Expectimax Search/":{"tf":2.8284271247461903},"https://phlip9.com/notes/AI ML/Markov Decision Process (MDP)/":{"tf":2.6457513110645907},"https://phlip9.com/notes/WSL/WSL2 custom kernel/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/lightning libs/":{"tf":1.0},"https://phlip9.com/notes/combinatorics/k-combinations of a multiset/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.7320508075688772},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":2.0},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.7320508075688772},"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":1.0},"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":2.8284271247461903},"https://phlip9.com/notes/crypto/tls exported keying material/":{"tf":1.0},"https://phlip9.com/notes/devops/service mesh/":{"tf":1.0},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":5.385164807134504},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":3.4641016151377544},"https://phlip9.com/notes/lang/koka-lang/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/lua/":{"tf":5.830951894845301},"https://phlip9.com/notes/lang/operator fixity and precedence/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/rust verification tools/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/rust/understanding sycamore reactivity/":{"tf":1.0},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.4142135623730951},"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.0},"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.0},"https://phlip9.com/notes/performance/profiling/":{"tf":1.7320508075688772},"https://phlip9.com/notes/statistics probability/testing whether a coin is fair/":{"tf":1.0}},"df":26,"(":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/lang/lua/":{"tf":1.0}},"df":1}}},".":{"docs":{},"df":0,"a":{"docs":{},"df":0,"p":{"docs":{},"df":0,"p":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0}},"df":1},"y":{"docs":{},"df":0,"(":{"docs":{},"df":0,"p":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"w":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"i":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}},"s":{"docs":{},"df":0,"/":{"docs":{},"df":0,"d":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"y":{"docs":{},"df":0,"p":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.7320508075688772}},"df":1}}}}}}}}}}}},"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"/":{"docs":{},"df":0,"a":{"docs":{},"df":0,"p":{"docs":{},"df":0,"p":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"v":{"docs":{},"df":0,"e":{"docs":{},"df":0,"/":{"docs":{},"df":0,"m":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{},"df":0,"/":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"g":{"docs":{},"df":0,"e":{"docs":{},"df":0,"b":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{"https://phlip9.com/notes/lang/operator fixity and precedence/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"d":{"docs":{"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/financial instituion/":{"tf":1.0},"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/foreign bank account report (FBAR)/":{"tf":1.0},"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/money services business (MSB)/":{"tf":2.8284271247461903},"https://phlip9.com/notes/b l o c k c h a i n/fastpay/":{"tf":2.8284271247461903},"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":5.477225575051661},"https://phlip9.com/notes/btc-ln/BOLT 7 - p2p node and channel discovery/":{"tf":1.4142135623730951},"https://phlip9.com/notes/btc-ln/breez lightning service providers/":{"tf":1.7320508075688772},"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":2.23606797749979},"https://phlip9.com/notes/btc-ln/submarine swaps/":{"tf":2.23606797749979}},"df":9,"e":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":4.242640687119285}},"df":1,"d":{"docs":{},"df":0,"_":{"docs":{},"df":0,"t":{"docs":{},"df":0,"x":{"docs":{"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.0}},"df":1}}}},"r":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":3.4641016151377544}},"df":1}},"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"g":{"docs":{},"df":0,"_":{"docs":{},"df":0,"c":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.7320508075688772}},"df":1}},"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"c":{"docs":{},"df":0,"k":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":2.449489742783178}},"df":1}}}},"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{},"df":0,"p":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{},"df":0,"_":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"x":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.0}},"df":1}}}}}}}}}}}},"p":{"docs":{},"df":0,"u":{"docs":{},"df":0,"b":{"docs":{},"df":0,"k":{"docs":{},"df":0,"e":{"docs":{},"df":0,"y":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.4142135623730951}},"df":1}}}}}},"s":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"s":{"docs":{},"df":0,"h":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.0}},"df":1}}}}}},"i":{"docs":{},"df":0,"g":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.7320508075688772}},"df":1}}}},"t":{"docs":{},"df":0,"x":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.0}},"df":1}}}}},"c":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.4142135623730951}},"df":1}},"g":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}},"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"c":{"docs":{},"df":0,"k":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":2.0}},"df":1}}}},"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"g":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":2.0}},"df":1}}}}}}}},"k":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0}},"df":1}},"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{},"df":0,"s":{"docs":{},"df":0,"/":{"docs":{},"df":0,"d":{"docs":{},"df":0,"p":{"docs":{},"df":0,"/":{"docs":{},"df":0,"b":{"docs":{},"df":0,"0":{"docs":{},"df":0,"7":{"docs":{},"df":0,"3":{"docs":{},"df":0,"q":{"docs":{},"df":0,"v":{"docs":{},"df":0,"s":{"docs":{},"df":0,"k":{"docs":{},"df":0,"2":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/misc/water distillation setup/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}},"r":{"docs":{},"df":0,"n":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"u":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0}},"df":1}}}}},"t":{"docs":{},"df":0,"h":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/fastpay/":{"tf":1.0},"https://phlip9.com/notes/combinatorics/k-combinations of a multiset/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0},"https://phlip9.com/notes/crypto/biscuit authz/":{"tf":1.4142135623730951},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.4142135623730951}},"df":6}}}}},"s":{"docs":{},"df":0,"e":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0}},"df":1}},"t":{"docs":{},"df":0,"u":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/financial instituion/":{"tf":1.0},"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/foreign bank account report (FBAR)/":{"tf":1.0},"https://phlip9.com/notes/b l o c k c h a i n/fastpay/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.7320508075688772},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0},"https://phlip9.com/notes/crypto/(talk) authenticated data structures for stateless validation/":{"tf":1.0},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":2.6457513110645907},"https://phlip9.com/notes/lang/rust/sycamore x futures/":{"tf":2.23606797749979},"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":1.0}},"df":10,"e":{"docs":{},"df":0,"&":{"docs":{},"df":0,"l":{"docs":{},"df":0,"t":{"docs":{},"df":0,";":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"g":{"docs":{},"df":0,"&":{"docs":{},"df":0,"g":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.4142135623730951}},"df":1}}}}}}}}},"t":{"docs":{},"df":0,"?":{"docs":{},"df":0,"&":{"docs":{},"df":0,"g":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0}},"df":1}}}}},"u":{"docs":{},"df":0,"&":{"docs":{},"df":0,"g":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/lang/rust/sycamore x futures/":{"tf":1.0}},"df":1}}}}}}}},"e":{"docs":{},"df":0,"x":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"s":{"docs":{"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0}},"df":1,"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"s":{"docs":{},"df":0,".":{"docs":{},"df":0,"i":{"docs":{},"df":0,"g":{"docs":{},"df":0,"n":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}},"z":{"docs":{"https://phlip9.com/notes/fuzzing/fuzzing/":{"tf":1.0}},"df":1,"z":{"docs":{"https://phlip9.com/notes/fuzzing/":{"tf":1.0},"https://phlip9.com/notes/fuzzing/bolero - fuzzing + property testing/":{"tf":2.23606797749979},"https://phlip9.com/notes/fuzzing/fuzzcheck-rs/":{"tf":2.23606797749979},"https://phlip9.com/notes/fuzzing/fuzzing/":{"tf":4.58257569495584}},"df":4,"c":{"docs":{},"df":0,"h":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"k":{"docs":{"https://phlip9.com/notes/fuzzing/fuzzcheck-rs/":{"tf":2.23606797749979}},"df":1,":":{"docs":{},"df":0,":":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/fuzzing/fuzzcheck-rs/":{"tf":1.0}},"df":1}}}}}}}}}}},"e":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/fuzzing/fuzzcheck-rs/":{"tf":2.449489742783178},"https://phlip9.com/notes/fuzzing/fuzzing/":{"tf":2.449489742783178},"https://phlip9.com/notes/lang/rust/rr with rust/":{"tf":1.7320508075688772}},"df":3}},"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"g":{"docs":{},"df":0,"/":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0}},"df":1}}}}}}}}}}},"w":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.0}},"df":1}},"x":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0}},"df":1}}},"g":{"docs":{"https://phlip9.com/notes/WSL/WSL2 custom kernel/":{"tf":1.4142135623730951},"https://phlip9.com/notes/android/root phone with magisk/":{"tf":1.4142135623730951},"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/":{"tf":1.4142135623730951},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":2.0},"https://phlip9.com/notes/statistics probability/G-test - multinomial goodness-of-fit/":{"tf":2.8284271247461903},"https://phlip9.com/notes/statistics probability/multinomial distribution/":{"tf":2.6457513110645907}},"df":6,"+":{"docs":{},"df":0,"r":{"docs":{},"df":0,"w":{"docs":{"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0}},"df":1}}},"0":{"docs":{},"df":0,"2":{"docs":{},"df":0,"d":{"docs":{},"df":0,"6":{"docs":{},"df":0,"2":{"docs":{},"df":0,"d":{"docs":{},"df":0,"5":{"docs":{},"df":0,"c":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"e":{"docs":{},"df":0,"1":{"docs":{"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0}},"df":1}}}}}}}}}}},"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"2":{"docs":{},"df":0,"u":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"_":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"_":{"docs":{},"df":0,"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"z":{"docs":{},"df":0,"e":{"docs":{},"df":0,"(":{"docs":{},"df":0,"1":{"docs":{},"df":0,"0":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0}},"df":1}},"x":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}},"1":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":2.8284271247461903}},"df":1,".":{"docs":{},"df":0,"a":{"docs":{},"df":0,"p":{"docs":{},"df":0,"p":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{},"df":0,"(":{"docs":{},"df":0,"t":{"docs":{},"df":0,"g":{"docs":{},"df":0,"1":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":2.0}},"df":1}}}}}}}}}}}},"2":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":2.8284271247461903}},"df":1,".":{"docs":{},"df":0,"a":{"docs":{},"df":0,"p":{"docs":{},"df":0,"p":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{},"df":0,"(":{"docs":{},"df":0,"t":{"docs":{},"df":0,"g":{"docs":{},"df":0,"2":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":2.0}},"df":1}}}}}}}}}}}},"_":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/statistics probability/multinomial distribution/":{"tf":1.0}},"df":1,"(":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/statistics probability/G-test - multinomial goodness-of-fit/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/multinomial distribution/":{"tf":1.0}},"df":2}}}}}}},"a":{"docs":{},"df":0,"b":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"4":{"docs":{},"df":0,"3":{"docs":{},"df":0,"9":{"docs":{},"df":0,"/":{"docs":{},"df":0,"n":{"docs":{},"df":0,"i":{"docs":{},"df":0,"x":{"docs":{"https://phlip9.com/notes/reproducible builds/nix/nix debug spurrious rebuilds/":{"tf":1.0}},"df":1}}}}}}}}}}}}}},"i":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":2.449489742783178}},"df":2}},"m":{"docs":{},"df":0,"e":{"docs":{"https://phlip9.com/notes/AI ML/Expectimax Search/":{"tf":2.0},"https://phlip9.com/notes/AI ML/Markov Decision Process (MDP)/":{"tf":3.0},"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/financial instituion/":{"tf":2.0},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/lightning router overview/":{"tf":1.4142135623730951}},"df":6,"o":{"docs":{},"df":0,"f":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"f":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"c":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1,"(":{"docs":{},"df":0,"s":{"docs":{},"df":0,"c":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}},"m":{"docs":{},"df":0,"a":{"docs":{"https://phlip9.com/notes/AI ML/Markov Decision Process (MDP)/":{"tf":4.123105625617661},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":2,"^":{"docs":{},"df":0,"2":{"docs":{"https://phlip9.com/notes/AI ML/Markov Decision Process (MDP)/":{"tf":1.0}},"df":1},"t":{"docs":{"https://phlip9.com/notes/AI ML/Markov Decision Process (MDP)/":{"tf":1.4142135623730951}},"df":1}}}}},"p":{"docs":{"https://phlip9.com/notes/misc/kintsugi/":{"tf":2.0}},"df":1},"r":{"docs":{},"df":0,"b":{"docs":{},"df":0,"a":{"docs":{},"df":0,"g":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.4142135623730951}},"df":1}}},"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.0}},"df":1}}}},"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{},"df":0,"/":{"docs":{},"df":0,"r":{"docs":{},"df":0,"u":{"docs":{},"df":0,"d":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{"https://phlip9.com/notes/lang/rust/rust verification tools/":{"tf":1.0}},"df":1}}}}}}}},"w":{"docs":{},"df":0,"a":{"docs":{},"df":0,"y":{"docs":{"https://phlip9.com/notes/networking/network interfaces/":{"tf":2.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":2.23606797749979}},"df":2,":":{"docs":{},"df":0,"p":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{},"df":0,"/":{"docs":{},"df":0,"o":{"docs":{},"df":0,"p":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{},"df":0,"s":{"docs":{},"df":0,"_":{"docs":{},"df":0,"a":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{},"df":0,"h":{"docs":{},"df":0,"?":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"k":{"docs":{},"df":0,"=":{"docs":{},"df":0,"x":{"docs":{},"df":0,"x":{"docs":{},"df":0,"x":{"docs":{"https://phlip9.com/notes/router/lightning router/lightning router overview/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"h":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/misc/kintsugi/":{"tf":1.0}},"df":1}}}},"w":{"docs":{},"df":0,"k":{"docs":{"https://phlip9.com/notes/confidential computing/gramine/":{"tf":1.0}},"df":1}}},"b":{"docs":{"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.4142135623730951}},"df":1,"/":{"docs":{"https://phlip9.com/notes/performance/simdjson talk/":{"tf":3.3166247903554}},"df":1}},"c":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1,"'":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.7320508075688772}},"df":1}},"c":{"docs":{"https://phlip9.com/notes/misc/prepping RPI for embedded dev/":{"tf":1.0}},"df":1,"8":{"docs":{"https://phlip9.com/notes/performance/simdjson talk/":{"tf":2.0}},"df":1},"_":{"docs":{},"df":0,"e":{"docs":{},"df":0,"x":{"docs":{},"df":0,"c":{"docs":{},"df":0,"e":{"docs":{},"df":0,"p":{"docs":{},"df":0,"t":{"docs":{},"df":0,"_":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.0}},"df":1}}}}}}}}}},"m":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0}},"df":1}},"d":{"docs":{},"df":0,"b":{"docs":{"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0},"https://phlip9.com/notes/lang/gdb ref/":{"tf":2.8284271247461903},"https://phlip9.com/notes/lang/rust/rr with rust/":{"tf":2.8284271247461903}},"df":3,"'":{"docs":{"https://phlip9.com/notes/lang/gdb ref/":{"tf":1.0}},"df":1}}},"e":{"docs":{"https://phlip9.com/notes/statistics probability/G-test - multinomial goodness-of-fit/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/p-value/":{"tf":2.23606797749979}},"df":2,"f":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"c":{"docs":{"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0}},"df":1}}}},"m":{"docs":{"https://phlip9.com/notes/ios/ios setup/":{"tf":1.7320508075688772}},"df":1,"_":{"docs":{},"df":0,"b":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"=":{"docs":{},"df":0,"$":{"docs":{},"df":0,"g":{"docs":{},"df":0,"e":{"docs":{},"df":0,"m":{"docs":{},"df":0,"_":{"docs":{},"df":0,"h":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"/":{"docs":{},"df":0,"b":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/ios/ios setup/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}},"h":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"=":{"docs":{},"df":0,"$":{"docs":{},"df":0,"h":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"/":{"docs":{},"df":0,".":{"docs":{},"df":0,"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"c":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"/":{"docs":{},"df":0,"g":{"docs":{},"df":0,"e":{"docs":{},"df":0,"m":{"docs":{"https://phlip9.com/notes/ios/ios setup/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}},"n":{"docs":{"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/gramine/":{"tf":1.0},"https://phlip9.com/notes/crypto/TLS self-signed pubkey-only certs/":{"tf":1.0},"https://phlip9.com/notes/misc/setting up a headless raspbian boot image/":{"tf":1.7320508075688772}},"df":4,"'":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.0}},"df":1}},".":{"docs":{},"df":0,"g":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/misc/setting up a headless raspbian boot image/":{"tf":1.0}},"df":1}}}},"/":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"f":{"docs":{},"df":0,"i":{"docs":{},"df":0,"g":{"docs":{"https://phlip9.com/notes/misc/setting up a headless raspbian boot image/":{"tf":1.0}},"df":1}}}}}},"w":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"k":{"docs":{},"df":0,"/":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"/":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"g":{"docs":{},"df":0,"e":{"docs":{},"df":0,"0":{"docs":{},"df":0,"/":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"o":{"docs":{},"df":0,"t":{"docs":{},"df":0,"f":{"docs":{"https://phlip9.com/notes/misc/setting up a headless raspbian boot image/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}},"2":{"docs":{},"df":0,":":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/gramine/":{"tf":1.0},"https://phlip9.com/notes/devops/azure CLI/":{"tf":1.0}},"df":3}}}}}}}},"_":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"t":{"docs":{},"df":0,"_":{"docs":{},"df":0,"k":{"docs":{},"df":0,"e":{"docs":{},"df":0,"y":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0}},"df":1}}}}}}},"c":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"f":{"docs":{"https://phlip9.com/notes/crypto/TLS self-signed pubkey-only certs/":{"tf":1.0}},"df":1}}}}}},"q":{"docs":{},"df":0,"u":{"docs":{},"df":0,"o":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0}},"df":1}}}}},"e":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/AI ML/Expectimax Search/":{"tf":1.0},"https://phlip9.com/notes/AI ML/Markov Decision Process (MDP)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/android/ADB over TCP inside WSL2/":{"tf":1.0},"https://phlip9.com/notes/android/android cli setup/":{"tf":1.0},"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":2.0},"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":2.23606797749979},"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":2.8284271247461903},"https://phlip9.com/notes/btc-ln/atomic multipath payments (AMP)/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.4142135623730951},"https://phlip9.com/notes/combinatorics/k-combinations of a multiset/":{"tf":2.23606797749979},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/gramine/":{"tf":2.449489742783178},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":3.605551275463989},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":2.0},"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":2.449489742783178},"https://phlip9.com/notes/crypto/TLS self-signed pubkey-only certs/":{"tf":1.0},"https://phlip9.com/notes/crypto/acme protocol/":{"tf":1.0},"https://phlip9.com/notes/devops/algo wireguard VPN server/":{"tf":1.0},"https://phlip9.com/notes/devops/consul/":{"tf":1.0},"https://phlip9.com/notes/devops/secrets/ejson-kms (AWS)/":{"tf":1.0},"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":1.0},"https://phlip9.com/notes/fuzzing/fuzzcheck-rs/":{"tf":1.7320508075688772},"https://phlip9.com/notes/fuzzing/fuzzing/":{"tf":2.0},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":2.6457513110645907},"https://phlip9.com/notes/lang/flutter/flutter setup/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/rr with rust/":{"tf":1.0},"https://phlip9.com/notes/management/relieve often - why generals were more successful in WWII/":{"tf":1.7320508075688772},"https://phlip9.com/notes/misc/setting up a headless raspbian boot image/":{"tf":1.0},"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.7320508075688772},"https://phlip9.com/notes/reproducible builds/nix/nix auto-allocate-uids -> nixbld users/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/rebuilderd/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/reproducible-builds.org/":{"tf":1.7320508075688772},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":2.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":3.0},"https://phlip9.com/notes/statistics probability/testing whether a coin is fair/":{"tf":1.0}},"df":39,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"d":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"k":{"docs":{},"df":0,"e":{"docs":{},"df":0,"y":{"docs":{"https://phlip9.com/notes/devops/secrets/ejson-kms (AWS)/":{"tf":1.0}},"df":1}}}}}}}}}},"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"n":{"docs":{},"df":0,"o":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,":":{"docs":{},"df":0,":":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"(":{"docs":{},"df":0,"p":{"docs":{"https://phlip9.com/notes/lang/rust/understanding sycamore reactivity/":{"tf":1.0}},"df":1}}}}}}}}},"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"x":{"docs":{},"df":0,"t":{"docs":{},"df":0,"(":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"g":{"docs":{},"df":0,":":{"docs":{},"df":0,":":{"docs":{},"df":0,"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"w":{"docs":{"https://phlip9.com/notes/lang/rust/understanding sycamore reactivity/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}},"s":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.0}},"df":1}}},"r":{"docs":{},"df":0,"s":{"docs":{},"df":0,"a":{"docs":{"https://phlip9.com/notes/confidential computing/gramine/":{"tf":1.4142135623730951}},"df":1}}},"u":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":2.0},"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel TDX/":{"tf":1.0}},"df":4}}}},"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"g":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/fastpay/":{"tf":1.0},"https://phlip9.com/notes/b l o c k c h a i n/sui/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/BOLT 4 - onion routing protocol/":{"tf":1.0}},"df":3}}},"t":{"docs":{"https://phlip9.com/notes/AI ML/Markov Decision Process (MDP)/":{"tf":1.0},"https://phlip9.com/notes/WSL/WSL2 custom kernel/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/atomic multipath payments (AMP)/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/breez lightning service providers/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/gramine/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel SGX/secure time/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/marblerun/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/mystikos/":{"tf":1.4142135623730951},"https://phlip9.com/notes/crypto/(talk) authenticated data structures for stateless validation/":{"tf":1.4142135623730951},"https://phlip9.com/notes/devops/secrets/mozilla SOPS/":{"tf":1.0},"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":1.0},"https://phlip9.com/notes/fuzzing/fuzzcheck-rs/":{"tf":1.0},"https://phlip9.com/notes/keyboards/moergo glove80/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/understanding sycamore reactivity/":{"tf":1.0},"https://phlip9.com/notes/management/relieve often - why generals were more successful in WWII/":{"tf":1.0},"https://phlip9.com/notes/misc/pop_OS! tweaks/":{"tf":1.0},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0},"https://phlip9.com/notes/networking/ipv6 address space/":{"tf":1.0},"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/arubanetworks captive portal/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.4142135623730951},"https://phlip9.com/notes/router/lightning router/lightning router overview/":{"tf":1.4142135623730951},"https://phlip9.com/notes/statistics probability/standard error/":{"tf":1.0}},"df":27,"_":{"docs":{},"df":0,"p":{"docs":{},"df":0,"c":{"docs":{},"df":0,"_":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"f":{"docs":{},"df":0,"o":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0}},"df":1,"_":{"docs":{},"df":0,"w":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"h":{"docs":{},"df":0,"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{},"df":0,"_":{"docs":{},"df":0,"p":{"docs":{},"df":0,"p":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}},"e":{"docs":{},"df":0,"_":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"c":{"docs":{},"df":0,"r":{"docs":{},"df":0,"y":{"docs":{},"df":0,"p":{"docs":{},"df":0,"t":{"docs":{},"df":0,"_":{"docs":{},"df":0,"k":{"docs":{},"df":0,"e":{"docs":{},"df":0,"y":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}},"q":{"docs":{},"df":0,"u":{"docs":{},"df":0,"o":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0}},"df":1}}}},"u":{"docs":{},"df":0,"n":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"k":{"docs":{},"df":0,"e":{"docs":{},"df":0,"d":{"docs":{},"df":0,"_":{"docs":{},"df":0,"m":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{},"df":0,"&":{"docs":{},"df":0,"l":{"docs":{},"df":0,"t":{"docs":{},"df":0,";":{"docs":{},"df":0,"f":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{},"df":0,"u":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"_":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"l":{"docs":{},"df":0,":":{"docs":{},"df":0,":":{"docs":{},"df":0,"f":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{},"df":0,"u":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,":":{"docs":{},"df":0,":":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"y":{"docs":{},"df":0,"_":{"docs":{},"df":0,"f":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{},"df":0,"u":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,":":{"docs":{},"df":0,":":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"_":{"docs":{"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/lang/lua/":{"tf":1.0}},"df":1,"a":{"docs":{},"df":0,"b":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"(":{"docs":{},"df":0,"c":{"docs":{"https://phlip9.com/notes/lang/lua/":{"tf":1.0}},"df":1}}}}}}}}}}},"p":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{},"df":0,"s":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1}}}},"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0}},"df":1}},"i":{"docs":{"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.4142135623730951}},"df":2}},"u":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.0}},"df":1}}}}},"f":{"docs":{},"df":0,"0":{"docs":{},"df":0,"6":{"docs":{},"df":0,"6":{"docs":{},"df":0,"9":{"docs":{},"df":0,"3":{"docs":{},"df":0,"a":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1}}}}}}},"g":{"docs":{},"df":0,"g":{"docs":{},"df":0,"g":{"docs":{"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.7320508075688772}},"df":1}}},"h":{"docs":{"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":1.0}},"df":1,"e":{"docs":{},"df":0,"f":{"docs":{"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.0}},"df":1}},"z":{"docs":{"https://phlip9.com/notes/performance/simdjson talk/":{"tf":2.449489742783178}},"df":1}},"i":{"docs":{"https://phlip9.com/notes/postgres/types of scans/":{"tf":1.0}},"df":1,"b":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/btc utreexo - utxo accumulator/":{"tf":1.0}},"df":1,"$":{"docs":{},"df":0,"0":{"docs":{},"df":0,".":{"docs":{},"df":0,"1":{"docs":{},"df":0,"1":{"docs":{},"df":0,"3":{"docs":{},"df":0,"/":{"docs":{},"df":0,"h":{"docs":{},"df":0,"r":{"docs":{},"df":0,"$":{"docs":{},"df":0,"0":{"docs":{},"df":0,".":{"docs":{},"df":0,"1":{"docs":{},"df":0,"4":{"docs":{},"df":0,"7":{"docs":{},"df":0,"/":{"docs":{},"df":0,"h":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0}},"df":1}}}}}}}}}}}}}},"2":{"docs":{},"df":0,"5":{"docs":{},"df":0,"/":{"docs":{},"df":0,"h":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0}},"df":1}}}}}},"2":{"docs":{},"df":0,"2":{"docs":{},"df":0,"6":{"docs":{},"df":0,"/":{"docs":{},"df":0,"h":{"docs":{},"df":0,"r":{"docs":{},"df":0,"$":{"docs":{},"df":0,"0":{"docs":{},"df":0,".":{"docs":{},"df":0,"2":{"docs":{},"df":0,"9":{"docs":{},"df":0,"4":{"docs":{},"df":0,"/":{"docs":{},"df":0,"h":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0}},"df":1}}}}}}}}}}}}}},"5":{"docs":{},"df":0,"0":{"docs":{},"df":0,"/":{"docs":{},"df":0,"h":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0}},"df":1}}}}}},"9":{"docs":{},"df":0,"9":{"docs":{},"df":0,"8":{"docs":{},"df":0,"/":{"docs":{},"df":0,"h":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0}},"df":1}}}}}}}},"5":{"docs":{},"df":0,".":{"docs":{},"df":0,"4":{"docs":{},"df":0,"2":{"docs":{},"df":0,"4":{"docs":{},"df":0,"/":{"docs":{},"df":0,"h":{"docs":{},"df":0,"r":{"docs":{},"df":0,"$":{"docs":{},"df":0,"7":{"docs":{},"df":0,".":{"docs":{},"df":0,"0":{"docs":{},"df":0,"5":{"docs":{},"df":0,"1":{"docs":{},"df":0,"/":{"docs":{},"df":0,"h":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}},"'":{"docs":{"https://phlip9.com/notes/postgres/types of scans/":{"tf":1.0}},"df":1},"/":{"docs":{"https://phlip9.com/notes/performance/simdjson talk/":{"tf":1.0}},"df":1},"1":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0}},"df":1}},"5":{"docs":{},"df":0,"0":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0}},"df":1}}},"2":{"docs":{},"df":0,"4":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0}},"df":1}}}},"4":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0}},"df":1}}},"5":{"docs":{},"df":0,"0":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0}},"df":1}},"7":{"docs":{},"df":0,"5":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0}},"df":1}},"n":{"docs":{},"df":0,"/":{"docs":{},"df":0,"a":{"docs":{},"df":0,"$":{"docs":{},"df":0,"0":{"docs":{},"df":0,".":{"docs":{},"df":0,"0":{"docs":{},"df":0,"9":{"docs":{},"df":0,"6":{"docs":{},"df":0,"/":{"docs":{},"df":0,"h":{"docs":{},"df":0,"r":{"docs":{},"df":0,"$":{"docs":{},"df":0,"0":{"docs":{},"df":0,".":{"docs":{},"df":0,"1":{"docs":{},"df":0,"2":{"docs":{},"df":0,"5":{"docs":{},"df":0,"/":{"docs":{},"df":0,"h":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}},"1":{"docs":{},"df":0,"9":{"docs":{},"df":0,"2":{"docs":{},"df":0,"/":{"docs":{},"df":0,"h":{"docs":{},"df":0,"r":{"docs":{},"df":0,"$":{"docs":{},"df":0,"0":{"docs":{},"df":0,".":{"docs":{},"df":0,"2":{"docs":{},"df":0,"5":{"docs":{},"df":0,"0":{"docs":{},"df":0,"/":{"docs":{},"df":0,"h":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}},"4":{"docs":{},"df":0,".":{"docs":{},"df":0,"6":{"docs":{},"df":0,"0":{"docs":{},"df":0,"8":{"docs":{},"df":0,"/":{"docs":{},"df":0,"h":{"docs":{},"df":0,"r":{"docs":{},"df":0,"$":{"docs":{},"df":0,"5":{"docs":{},"df":0,".":{"docs":{},"df":0,"9":{"docs":{},"df":0,"9":{"docs":{},"df":0,"0":{"docs":{},"df":0,"/":{"docs":{},"df":0,"h":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}},"d":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/nix/nix auto-allocate-uids -> nixbld users/":{"tf":1.0}},"df":2},"f":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1}}},"g":{"docs":{},"df":0,"a":{"docs":{"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.0}},"df":1}},"t":{"docs":{"https://phlip9.com/notes/WSL/WSL2 custom kernel/":{"tf":1.0},"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0},"https://phlip9.com/notes/android/linux ADB udev setup/":{"tf":1.0},"https://phlip9.com/notes/android/root phone with magisk/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":2.0},"https://phlip9.com/notes/confidential computing/gramine/":{"tf":1.7320508075688772},"https://phlip9.com/notes/devops/algo wireguard VPN server/":{"tf":1.4142135623730951},"https://phlip9.com/notes/devops/secrets/ejson (Shopify)/":{"tf":1.7320508075688772},"https://phlip9.com/notes/devops/secrets/mozilla SOPS/":{"tf":1.0},"https://phlip9.com/notes/devops/secrets/sy - share secrets safely/":{"tf":1.0},"https://phlip9.com/notes/lang/ATS/Install ATS2/":{"tf":1.7320508075688772},"https://phlip9.com/notes/lang/flutter/flutter setup/":{"tf":1.0},"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":8.426149773176359},"https://phlip9.com/notes/misc/setting up a headless raspbian boot image/":{"tf":1.0},"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/nix/nix auto-allocate-uids -> nixbld users/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/nix/nix debug broken package build/":{"tf":1.0}},"df":17,"@":{"docs":{},"df":0,"g":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"h":{"docs":{},"df":0,"u":{"docs":{},"df":0,"b":{"docs":{},"df":0,".":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,":":{"docs":{},"df":0,"f":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"i":{"docs":{},"df":0,"x":{"docs":{},"df":0,"/":{"docs":{},"df":0,"r":{"docs":{},"df":0,"u":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0}},"df":1}}}}}}}}}}}}},"g":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"h":{"docs":{},"df":0,"w":{"docs":{},"df":0,"x":{"docs":{},"df":0,"i":{"docs":{},"df":0,"/":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/lang/ATS/Install ATS2/":{"tf":1.7320508075688772}},"df":1}}}}}}}}}},"m":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"s":{"docs":{},"df":0,"o":{"docs":{},"df":0,"f":{"docs":{},"df":0,"t":{"docs":{},"df":0,"/":{"docs":{},"df":0,"w":{"docs":{},"df":0,"s":{"docs":{},"df":0,"l":{"docs":{},"df":0,"2":{"docs":{"https://phlip9.com/notes/WSL/WSL2 custom kernel/":{"tf":1.0}},"df":1}}}}}}}}}}}}}},"r":{"docs":{},"df":0,"p":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/misc/setting up a headless raspbian boot image/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}},"h":{"docs":{},"df":0,"u":{"docs":{},"df":0,"b":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/aptos/":{"tf":1.0},"https://phlip9.com/notes/b l o c k c h a i n/btc utreexo - utxo accumulator/":{"tf":1.0},"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0},"https://phlip9.com/notes/b l o c k c h a i n/sui/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/gramine/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/marblerun/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/mystikos/":{"tf":1.0},"https://phlip9.com/notes/crypto/dex - open-source OIDC & OAuth 2.0 provider/":{"tf":1.4142135623730951},"https://phlip9.com/notes/crypto/smallstep - private online CA & ACME server/":{"tf":1.0},"https://phlip9.com/notes/devops/azure CLI/":{"tf":1.0},"https://phlip9.com/notes/devops/kind (kubernetes in docker)/":{"tf":1.0},"https://phlip9.com/notes/devops/secrets/ejson (Shopify)/":{"tf":1.0},"https://phlip9.com/notes/devops/secrets/ejson-kms (AWS)/":{"tf":1.0},"https://phlip9.com/notes/devops/secrets/envkey/":{"tf":1.0},"https://phlip9.com/notes/devops/secrets/mozilla SOPS/":{"tf":1.0},"https://phlip9.com/notes/devops/secrets/sops-nix/":{"tf":1.0},"https://phlip9.com/notes/devops/secrets/sy - share secrets safely/":{"tf":1.0},"https://phlip9.com/notes/fuzzing/fuzzcheck-rs/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/rr with rust/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/rust verification tools/":{"tf":1.7320508075688772},"https://phlip9.com/notes/lang/rust/rust x SGX/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/rebuilderd/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/herbie - float error fixer/":{"tf":1.0}},"df":25,".":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"/":{"docs":{},"df":0,"g":{"docs":{},"df":0,"n":{"docs":{},"df":0,"z":{"docs":{},"df":0,"l":{"docs":{},"df":0,"b":{"docs":{},"df":0,"g":{"docs":{},"df":0,"/":{"docs":{},"df":0,"b":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"w":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}},"_":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"k":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"=":{"docs":{},"df":0,"+":{"docs":{},"df":0,"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{},"df":0,"s":{"docs":{},"df":0,"/":{"docs":{},"df":0,"g":{"docs":{},"df":0,"h":{"docs":{},"df":0,"_":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"k":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}},"v":{"docs":{},"df":0,"e":{"docs":{"https://phlip9.com/notes/android/root phone with magisk/":{"tf":1.0},"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0},"https://phlip9.com/notes/combinatorics/k-combinations of a multiset/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.0},"https://phlip9.com/notes/design/form design/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/gdb ref/":{"tf":1.0},"https://phlip9.com/notes/networking/ipv6 address space/":{"tf":1.0},"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/testing whether a coin is fair/":{"tf":1.0}},"df":10,"n":{"docs":{"https://phlip9.com/notes/AI ML/Expectimax Search/":{"tf":1.0},"https://phlip9.com/notes/AI ML/Markov Decision Process (MDP)/":{"tf":2.23606797749979},"https://phlip9.com/notes/combinatorics/k-combinations of a multiset/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":2.0},"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.7320508075688772},"https://phlip9.com/notes/crypto/dex - open-source OIDC & OAuth 2.0 provider/":{"tf":1.0},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0},"https://phlip9.com/notes/management/relieve often - why generals were more successful in WWII/":{"tf":1.0},"https://phlip9.com/notes/performance/bit hacks/":{"tf":2.0},"https://phlip9.com/notes/performance/simdjson talk/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/rebuilderd/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/reproducible-builds.org/":{"tf":1.7320508075688772},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":2.0},"https://phlip9.com/notes/statistics probability/CDF confidence bands - DKW inequality/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/G-test - multinomial goodness-of-fit/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/p-value/":{"tf":1.4142135623730951},"https://phlip9.com/notes/statistics probability/testing whether a coin is fair/":{"tf":2.6457513110645907}},"df":20}}}},"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{},"df":0,"s":{"docs":{"https://phlip9.com/notes/misc/water distillation setup/":{"tf":1.4142135623730951}},"df":1}}},"i":{"docs":{},"df":0,"b":{"docs":{},"df":0,"c":{"docs":{"https://phlip9.com/notes/confidential computing/mystikos/":{"tf":1.0}},"df":1,"_":{"docs":{},"df":0,"2":{"docs":{},"df":0,".":{"docs":{},"df":0,"2":{"docs":{},"df":0,"9":{"docs":{"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0}},"df":1}}}}}}}},"o":{"docs":{},"df":0,"b":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":1.4142135623730951},"https://phlip9.com/notes/crypto/(talk) authenticated data structures for stateless validation/":{"tf":1.4142135623730951},"https://phlip9.com/notes/devops/deployment strategies/":{"tf":1.0},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0},"https://phlip9.com/notes/lang/lua/":{"tf":1.0},"https://phlip9.com/notes/networking/ipv6 address space/":{"tf":2.23606797749979},"https://phlip9.com/notes/networking/network interface card (NIC)/":{"tf":1.0},"https://phlip9.com/notes/networking/network interfaces/":{"tf":2.449489742783178}},"df":9}}},"o":{"docs":{"https://phlip9.com/notes/lang/rust/sycamore x futures/":{"tf":1.0}},"df":1,"_":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"m":{"docs":{"https://phlip9.com/notes/lang/rust/sycamore x futures/":{"tf":1.0}},"df":1,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"s":{"docs":{},"df":0,":":{"docs":{},"df":0,":":{"docs":{},"df":0,"s":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"e":{"docs":{},"df":0,"p":{"docs":{},"df":0,"(":{"docs":{},"df":0,"d":{"docs":{},"df":0,"u":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/lang/rust/sycamore x futures/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}},"s":{"docs":{},"df":0,"s":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0},"https://phlip9.com/notes/postgres/postgres performance tuning/":{"tf":1.4142135623730951}},"df":2}}}}},"v":{"docs":{},"df":0,"e":{"docs":{},"df":0,"8":{"docs":{},"df":0,"0":{"docs":{"https://phlip9.com/notes/keyboards/moergo glove80/":{"tf":1.7320508075688772}},"df":1}}}}},"u":{"docs":{"https://phlip9.com/notes/misc/kintsugi/":{"tf":2.449489742783178}},"df":1,"e":{"docs":{"https://phlip9.com/notes/misc/kintsugi/":{"tf":4.58257569495584}},"df":1,"+":{"docs":{},"df":0,"p":{"docs":{},"df":0,"o":{"docs":{},"df":0,"w":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/misc/kintsugi/":{"tf":1.0}},"df":1}}}}}}},"v":{"docs":{},"df":0,"8":{"docs":{},"df":0,"0":{"docs":{},"df":0,"l":{"docs":{},"df":0,"h":{"docs":{},"df":0,"b":{"docs":{},"df":0,"o":{"docs":{},"df":0,"o":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/keyboards/moergo glove80/":{"tf":1.0}},"df":1}}}}}},"r":{"docs":{},"df":0,"h":{"docs":{},"df":0,"b":{"docs":{},"df":0,"o":{"docs":{},"df":0,"o":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/keyboards/moergo glove80/":{"tf":1.0}},"df":1}}}}}}}}}},"n":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"e":{"docs":{"https://phlip9.com/notes/misc/pop_OS! tweaks/":{"tf":1.0}},"df":1}}},"u":{"docs":{},"df":0,".":{"docs":{},"df":0,"h":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{},"df":0,"h":{"docs":{"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.0}},"df":1}}}},"v":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"s":{"docs":{"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.0}},"df":1,"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"_":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.0}},"df":1}}}}}}}}}},"/":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"b":{"docs":{},"df":0,"m":{"docs":{},"df":0,".":{"docs":{},"df":0,"s":{"docs":{},"df":0,"o":{"docs":{},"df":0,".":{"docs":{},"df":0,"6":{"docs":{"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0}},"df":1}}}}}}},"n":{"docs":{},"df":0,"u":{"docs":{},"df":0,"x":{"docs":{"https://phlip9.com/notes/WSL/WSL2 custom kernel/":{"tf":1.4142135623730951}},"df":1}}}}}},"a":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{},"df":0,"3":{"docs":{},"df":0,"2":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"t":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"h":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"d":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"u":{"docs":{},"df":0,"x":{"docs":{"https://phlip9.com/notes/misc/arm target triples/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}},"6":{"docs":{},"df":0,"4":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"t":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"h":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"d":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"u":{"docs":{},"df":0,"x":{"docs":{"https://phlip9.com/notes/misc/arm target triples/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}},"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"b":{"docs":{},"df":0,"i":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"m":{"docs":{},"df":0,"v":{"docs":{},"df":0,"6":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"t":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"o":{"docs":{},"df":0,"f":{"docs":{},"df":0,"t":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"u":{"docs":{},"df":0,"x":{"docs":{"https://phlip9.com/notes/misc/arm target triples/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}},"7":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"t":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"o":{"docs":{},"df":0,"f":{"docs":{},"df":0,"t":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"u":{"docs":{},"df":0,"x":{"docs":{"https://phlip9.com/notes/misc/arm target triples/":{"tf":1.4142135623730951}},"df":1}}}}}}}}}}}}}}}}}}}},"h":{"docs":{},"df":0,"f":{"docs":{"https://phlip9.com/notes/misc/prepping RPI for embedded dev/":{"tf":1.0}},"df":1,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"m":{"docs":{},"df":0,"v":{"docs":{},"df":0,"6":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"t":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"h":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"d":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"u":{"docs":{},"df":0,"x":{"docs":{"https://phlip9.com/notes/misc/arm target triples/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}},"7":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"t":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"h":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"d":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"u":{"docs":{},"df":0,"x":{"docs":{"https://phlip9.com/notes/misc/arm target triples/":{"tf":1.4142135623730951}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}},"o":{"docs":{"https://phlip9.com/notes/AI ML/Markov Decision Process (MDP)/":{"tf":1.0},"https://phlip9.com/notes/android/ADB over TCP inside WSL2/":{"tf":1.0},"https://phlip9.com/notes/android/OTA updates for rooted android phone/":{"tf":1.0},"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.4142135623730951},"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/gramine/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.7320508075688772},"https://phlip9.com/notes/confidential computing/intel SGX/secure time/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/marblerun/":{"tf":1.7320508075688772},"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":1.0},"https://phlip9.com/notes/crypto/(talk) authenticated data structures for stateless validation/":{"tf":1.0},"https://phlip9.com/notes/crypto/acme protocol/":{"tf":1.4142135623730951},"https://phlip9.com/notes/crypto/biscuit authz/":{"tf":1.0},"https://phlip9.com/notes/design/form design/":{"tf":1.7320508075688772},"https://phlip9.com/notes/devops/algo wireguard VPN server/":{"tf":1.0},"https://phlip9.com/notes/devops/secrets/1password - secrets automation/":{"tf":1.4142135623730951},"https://phlip9.com/notes/devops/service mesh/":{"tf":1.0},"https://phlip9.com/notes/fuzzing/fuzzcheck-rs/":{"tf":1.0},"https://phlip9.com/notes/keyboards/moergo glove80/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/gdb ref/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.0},"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":1.0},"https://phlip9.com/notes/misc/kintsugi/":{"tf":1.4142135623730951},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":2.0},"https://phlip9.com/notes/nvim/universal-ctags Notes/":{"tf":1.4142135623730951},"https://phlip9.com/notes/performance/simdjson talk/":{"tf":1.7320508075688772},"https://phlip9.com/notes/reproducible builds/nix/links/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/lightning router overview/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/winsorize/":{"tf":2.449489742783178}},"df":34,"a":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.7320508075688772},"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel TDX/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/mystikos/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.0}},"df":6}},"d":{"docs":{},"df":0,"b":{"docs":{},"df":0,"o":{"docs":{},"df":0,"l":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/performance/bit hacks/":{"tf":3.3166247903554}},"df":1}}}}},"e":{"docs":{"https://phlip9.com/notes/android/android cli setup/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0},"https://phlip9.com/notes/networking/CIDR/":{"tf":1.0}},"df":5},"l":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/misc/kintsugi/":{"tf":4.0}},"df":1,"e":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/misc/kintsugi/":{"tf":1.0}},"df":1}}},"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"b":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/bip158 - compact block filters/":{"tf":1.0}},"df":1}}}},"n":{"docs":{},"df":0,"n":{"docs":{},"df":0,"a":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1}}},"o":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0},"https://phlip9.com/notes/android/root phone with magisk/":{"tf":1.0},"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/money services business (MSB)/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/lightning network notes/":{"tf":1.0},"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":1.4142135623730951},"https://phlip9.com/notes/devops/deployment strategies/":{"tf":1.0},"https://phlip9.com/notes/fuzzing/fuzzing/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/rust/sycamore x futures/":{"tf":1.0},"https://phlip9.com/notes/misc/kintsugi/":{"tf":1.7320508075688772},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.4142135623730951},"https://phlip9.com/notes/router/lightning router/lightning router overview/":{"tf":1.4142135623730951},"https://phlip9.com/notes/statistics probability/G-test - multinomial goodness-of-fit/":{"tf":1.7320508075688772},"https://phlip9.com/notes/statistics probability/multinomial distribution/":{"tf":2.0},"https://phlip9.com/notes/statistics probability/testing whether a coin is fair/":{"tf":2.0}},"df":17,"b":{"docs":{},"df":0,"y":{"docs":{"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0}},"df":1}}},"g":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/android/android cli setup/":{"tf":1.0},"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0},"https://phlip9.com/notes/android/root phone with magisk/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.7320508075688772},"https://phlip9.com/notes/confidential computing/intel SGX/secure time/":{"tf":1.0},"https://phlip9.com/notes/crypto/dex - open-source OIDC & OAuth 2.0 provider/":{"tf":1.0},"https://phlip9.com/notes/lang/flutter/flutter setup/":{"tf":1.0},"https://phlip9.com/notes/misc/optimization solvers/":{"tf":1.4142135623730951}},"df":8,"e":{"docs":{},"df":0,"'":{"docs":{"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":1.0}},"df":1},".":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{"https://phlip9.com/notes/crypto/(talk) authenticated data structures for stateless validation/":{"tf":1.7320508075688772},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.0}},"df":2}}}},"/":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"p":{"docs":{},"df":0,"y":{"docs":{},"df":0,"b":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":1.0}},"df":1}}}}}}}},"f":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"e":{"docs":{},"df":0,"b":{"docs":{},"df":0,"o":{"docs":{},"df":0,"o":{"docs":{},"df":0,"k":{"docs":{"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.0}},"df":1}}}}}}}}},"_":{"docs":{},"df":0,"a":{"docs":{},"df":0,"p":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/android/android cli setup/":{"tf":1.0}},"df":1}}}},"n":{"docs":{},"df":0,"1":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0}},"df":1}}}}}},"s":{"docs":{},"df":0,"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"p":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 7 - p2p node and channel discovery/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.0}},"df":2,".":{"docs":{},"df":0,"m":{"docs":{},"df":0,"d":{"docs":{},"df":0,"#":{"docs":{},"df":0,"h":{"docs":{},"df":0,"t":{"docs":{},"df":0,"l":{"docs":{},"df":0,"c":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 7 - p2p node and channel discovery/":{"tf":1.0}},"df":1}}}}}}}}}}}},"t":{"docs":{},"df":0,"o":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.0}},"df":1},"t":{"docs":{},"df":0,"a":{"docs":{"https://phlip9.com/notes/statistics probability/standard error/":{"tf":1.0}},"df":1}}},"v":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/foreign bank account report (FBAR)/":{"tf":1.0},"https://phlip9.com/notes/b l o c k c h a i n/aptos/":{"tf":1.0}},"df":2}}}},"w":{"docs":{},"df":0,"u":{"docs":{},"df":0,"p":{"docs":{},"df":0,"q":{"docs":{},"df":0,"e":{"docs":{},"df":0,"k":{"docs":{},"df":0,"a":{"docs":{"https://phlip9.com/notes/crypto/acme protocol/":{"tf":1.0}},"df":1}}}}}}}},"p":{"docs":{},"df":0,"a":{"docs":{"https://phlip9.com/notes/confidential computing/intel TDX/":{"tf":1.4142135623730951}},"df":1,"s":{"docs":{},"df":0,"s":{"docs":{},"df":0,"w":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/android/linux ADB udev setup/":{"tf":1.0}},"df":1}}}}},"g":{"docs":{"https://phlip9.com/notes/devops/azure CLI/":{"tf":1.0},"https://phlip9.com/notes/devops/secrets/sy - share secrets safely/":{"tf":1.4142135623730951},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.4142135623730951}},"df":3,"m":{"docs":{},"df":0,"e":{"docs":{"https://phlip9.com/notes/devops/secrets/sy - share secrets safely/":{"tf":1.0}},"df":1}}}},"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"b":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.0},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0}},"df":2},"c":{"docs":{},"df":0,"e":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.0}},"df":1,"f":{"docs":{},"df":0,"u":{"docs":{},"df":0,"l":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":1.0}},"df":1}}}}}}},"d":{"docs":{},"df":0,"e":{"docs":{"https://phlip9.com/notes/networking/network interface card (NIC)/":{"tf":1.0}},"df":1},"l":{"docs":{"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":3.1622776601683795}},"df":1,"e":{"docs":{},"df":0,"w":{"docs":{"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":3.0}},"df":1}}}},"i":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/sui/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/lightning router overview/":{"tf":1.0}},"df":3}},"m":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/confidential computing/gramine/":{"tf":4.358898943540674},"https://phlip9.com/notes/confidential computing/marblerun/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/mystikos/":{"tf":1.0}},"df":3,"e":{"docs":{},"df":0,"p":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"j":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{},"df":0,"/":{"docs":{},"df":0,"g":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}},"o":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/distributed systems/papers/(2021) Leaderless Consensus/":{"tf":1.0}},"df":1}}}},"n":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/devops/secrets/1password - secrets automation/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.4142135623730951}},"df":4},"u":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/secure time/":{"tf":1.0},"https://phlip9.com/notes/networking/CIDR/":{"tf":1.0}},"df":2,"l":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0}},"df":1}}}}}}},"p":{"docs":{},"df":0,"h":{"docs":{"https://phlip9.com/notes/WSL/WSL2 custom kernel/":{"tf":2.0},"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.7320508075688772},"https://phlip9.com/notes/devops/consul/":{"tf":1.0},"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":1.7320508075688772},"https://phlip9.com/notes/misc/optimization solvers/":{"tf":1.0}},"df":5,"i":{"docs":{},"df":0,"c":{"docs":{"https://phlip9.com/notes/misc/pop_OS! tweaks/":{"tf":1.4142135623730951},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0},"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.0}},"df":3}}}}},"e":{"docs":{},"df":0,"0":{"docs":{"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.0}},"df":1},"a":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/fuzzing/fuzzing/":{"tf":1.4142135623730951},"https://phlip9.com/notes/reproducible builds/nix/nix auto-allocate-uids -> nixbld users/":{"tf":1.0}},"df":3,"e":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/money services business (MSB)/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/zero-conf channels/":{"tf":1.0},"https://phlip9.com/notes/combinatorics/k-combinations of a multiset/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0},"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/multinomial distribution/":{"tf":1.4142135623730951},"https://phlip9.com/notes/statistics probability/winsorize/":{"tf":1.0}},"df":9},"s":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/AI ML/Markov Decision Process (MDP)/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/testing whether a coin is fair/":{"tf":1.0}},"df":2}}}}},"e":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/devops/deployment strategies/":{"tf":2.0},"https://phlip9.com/notes/devops/linkerd/":{"tf":1.0},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.4142135623730951}},"df":4},"t":{"docs":{"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0}},"df":1,"(":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.4142135623730951}},"df":1}}}}}},"g":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/aptos/":{"tf":1.0}},"df":1},"p":{"docs":{"https://phlip9.com/notes/WSL/WSL2 custom kernel/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":2.0},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":2.6457513110645907},"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":1.0}},"df":5},"w":{"docs":{"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":1.0}},"df":1},"y":{"docs":{"https://phlip9.com/notes/fuzzing/fuzzing/":{"tf":1.0},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":2,"s":{"docs":{},"df":0,"c":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1}}}}}},"i":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/misc/kintsugi/":{"tf":1.0}},"df":1}},"o":{"docs":{},"df":0,"s":{"docs":{},"df":0,"s":{"docs":{"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/financial instituion/":{"tf":1.4142135623730951}},"df":1}},"u":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0}},"df":1}},"p":{"docs":{"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/gramine/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":1.0},"https://phlip9.com/notes/crypto/(talk) authenticated data structures for stateless validation/":{"tf":1.0},"https://phlip9.com/notes/design/form design/":{"tf":1.4142135623730951},"https://phlip9.com/notes/devops/azure CLI/":{"tf":1.7320508075688772},"https://phlip9.com/notes/lang/operator fixity and precedence/":{"tf":1.0},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":2.23606797749979},"https://phlip9.com/notes/networking/network interfaces/":{"tf":2.0},"https://phlip9.com/notes/nvim/universal-ctags Notes/":{"tf":1.0},"https://phlip9.com/notes/performance/profiling/":{"tf":1.0},"https://phlip9.com/notes/postgres/types of scans/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/nix/nix auto-allocate-uids -> nixbld users/":{"tf":2.0},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.4142135623730951}},"df":16,".":{"docs":{},"df":0,"a":{"docs":{},"df":0,"p":{"docs":{},"df":0,"p":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{},"df":0,"(":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"w":{"docs":{},"df":0,"_":{"docs":{},"df":0,"g":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"p":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1}}}}}}}}}}},"c":{"docs":{},"df":0,"i":{"docs":{},"df":0,"r":{"docs":{},"df":0,"c":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"_":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1}}},"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1}}}}}}}}}},"p":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"s":{"docs":{},"df":0,"_":{"docs":{},"df":0,"u":{"docs":{},"df":0,"p":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1}}}}}}}},"t":{"docs":{},"df":0,"g":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1}}}}}}}}}},"=":{"docs":{},"df":0,"m":{"docs":{},"df":0,"y":{"docs":{},"df":0,"g":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"p":{"docs":{"https://phlip9.com/notes/devops/azure CLI/":{"tf":1.0}},"df":1}}}}}}}},"a":{"docs":{},"df":0,"d":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.0}},"df":1}}}}},"w":{"docs":{"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":1.0},"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.4142135623730951}},"df":4}},"p":{"docs":{},"df":0,"c":{"docs":{"https://phlip9.com/notes/confidential computing/marblerun/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":1.0}},"df":2}}},"s":{"docs":{},"df":0,"c":{"docs":{"https://phlip9.com/notes/confidential computing/gramine/":{"tf":3.605551275463989}},"df":1,"/":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"f":{"docs":{},"df":0,"i":{"docs":{},"df":0,"g":{"docs":{},"df":0,".":{"docs":{},"df":0,"y":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/confidential computing/gramine/":{"tf":1.4142135623730951}},"df":1}}}}}}}}}}},"e":{"docs":{},"df":0,"x":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{},"df":0,"p":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"/":{"docs":{},"df":0,"o":{"docs":{},"df":0,"p":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"v":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"o":{"docs":{"https://phlip9.com/notes/confidential computing/gramine/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}},"g":{"docs":{},"df":0,"s":{"docs":{},"df":0,"c":{"docs":{},"df":0,".":{"docs":{},"df":0,"p":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/confidential computing/gramine/":{"tf":1.0}},"df":1}}}}}}}},"r":{"docs":{"https://phlip9.com/notes/lang/rust/self-referencing structs/":{"tf":1.0}},"df":1}},"t":{"docs":{"https://phlip9.com/notes/AI ML/Expectimax Search/":{"tf":1.0},"https://phlip9.com/notes/WSL/WSL2 custom kernel/":{"tf":2.449489742783178},"https://phlip9.com/notes/android/OTA updates for rooted android phone/":{"tf":1.0},"https://phlip9.com/notes/android/android cli setup/":{"tf":3.3166247903554},"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":3.3166247903554},"https://phlip9.com/notes/android/root phone with magisk/":{"tf":2.0},"https://phlip9.com/notes/b l o c k c h a i n/fastpay/":{"tf":4.358898943540674},"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":4.358898943540674},"https://phlip9.com/notes/btc-ln/BOLT 11 - invoices/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":3.3166247903554},"https://phlip9.com/notes/btc-ln/BOLT 7 - p2p node and channel discovery/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/breez lightning service providers/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/lightning network notes/":{"tf":2.0},"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":4.0},"https://phlip9.com/notes/btc-ln/submarine swaps/":{"tf":1.4142135623730951},"https://phlip9.com/notes/combinatorics/k-combinations of a multiset/":{"tf":2.6457513110645907},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":5.385164807134504},"https://phlip9.com/notes/confidential computing/gramine/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":3.4641016151377544},"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":1.0},"https://phlip9.com/notes/crypto/TLS self-signed pubkey-only certs/":{"tf":1.4142135623730951},"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":3.3166247903554},"https://phlip9.com/notes/crypto/tls exported keying material/":{"tf":1.0},"https://phlip9.com/notes/devops/algo wireguard VPN server/":{"tf":2.23606797749979},"https://phlip9.com/notes/devops/azure CLI/":{"tf":1.0},"https://phlip9.com/notes/devops/deployment strategies/":{"tf":1.4142135623730951},"https://phlip9.com/notes/distributed systems/papers/(2020) Semi-Fast Byzantine-tolerant Shared Register without Reliable Broadcast/":{"tf":1.7320508075688772},"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":3.1622776601683795},"https://phlip9.com/notes/keyboards/moergo glove80/":{"tf":1.0},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":5.5677643628300215},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":5.385164807134504},"https://phlip9.com/notes/lang/flutter/flutter setup/":{"tf":1.0},"https://phlip9.com/notes/lang/gdb ref/":{"tf":1.7320508075688772},"https://phlip9.com/notes/lang/koka-lang/":{"tf":1.7320508075688772},"https://phlip9.com/notes/lang/lua/":{"tf":5.385164807134504},"https://phlip9.com/notes/lang/operator fixity and precedence/":{"tf":2.449489742783178},"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/rr with rust/":{"tf":2.449489742783178},"https://phlip9.com/notes/lang/rust/sycamore x futures/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/understanding sycamore reactivity/":{"tf":2.0},"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":2.449489742783178},"https://phlip9.com/notes/misc/pop_OS! tweaks/":{"tf":2.23606797749979},"https://phlip9.com/notes/misc/prepping RPI for embedded dev/":{"tf":1.7320508075688772},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":2.8284271247461903},"https://phlip9.com/notes/networking/CIDR/":{"tf":1.7320508075688772},"https://phlip9.com/notes/networking/ipv6 address space/":{"tf":3.872983346207417},"https://phlip9.com/notes/networking/network interfaces/":{"tf":3.0},"https://phlip9.com/notes/performance/bit hacks/":{"tf":7.54983443527075},"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.0},"https://phlip9.com/notes/performance/profiling/":{"tf":1.0},"https://phlip9.com/notes/performance/simdjson talk/":{"tf":2.449489742783178},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.7320508075688772},"https://phlip9.com/notes/reproducible builds/nix/nix auto-allocate-uids -> nixbld users/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/nix/nix debug spurrious rebuilds/":{"tf":1.4142135623730951},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/CDF confidence bands - DKW inequality/":{"tf":1.4142135623730951},"https://phlip9.com/notes/statistics probability/G-test - multinomial goodness-of-fit/":{"tf":3.1622776601683795},"https://phlip9.com/notes/statistics probability/herbie - float error fixer/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/multinomial distribution/":{"tf":2.23606797749979},"https://phlip9.com/notes/statistics probability/testing whether a coin is fair/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/winsorize/":{"tf":5.830951894845301}},"df":62,";":{"docs":{},"df":0,"$":{"docs":{},"df":0,"1":{"docs":{},"df":0,"0":{"docs":{},"df":0,"k":{"docs":{"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/foreign bank account report (FBAR)/":{"tf":1.0}},"df":1}},"m":{"docs":{"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/financial instituion/":{"tf":1.4142135623730951}},"df":1}}},"&":{"docs":{},"df":0,"g":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0},"https://phlip9.com/notes/devops/azure CLI/":{"tf":1.0},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":2.6457513110645907},"https://phlip9.com/notes/lang/ATS/Install ATS2/":{"tf":1.7320508075688772},"https://phlip9.com/notes/lang/gdb ref/":{"tf":1.0},"https://phlip9.com/notes/lang/operator fixity and precedence/":{"tf":1.4142135623730951},"https://phlip9.com/notes/misc/prepping RPI for embedded dev/":{"tf":1.0},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.4142135623730951},"https://phlip9.com/notes/networking/CIDR/":{"tf":1.0},"https://phlip9.com/notes/performance/bit hacks/":{"tf":3.3166247903554},"https://phlip9.com/notes/performance/simdjson talk/":{"tf":2.0},"https://phlip9.com/notes/reproducible builds/nix/nix debug spurrious rebuilds/":{"tf":1.0}},"df":12,";":{"docs":{},"df":0,"&":{"docs":{},"df":0,"g":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":2.8284271247461903}},"df":2}}}}}}},"(":{"docs":{},"df":0,"&":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{},"df":0,"p":{"docs":{},"df":0,";":{"docs":{},"df":0,"k":{"docs":{},"df":0,"e":{"docs":{},"df":0,"y":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.0}},"df":1}}}}}}}}}}},"/":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"v":{"docs":{},"df":0,"/":{"docs":{},"df":0,"n":{"docs":{},"df":0,"u":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0}},"df":1}}}}}}}},"1":{"docs":{},"df":0,"2":{"docs":{"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.4142135623730951}},"df":1}},"5":{"docs":{},"df":0,"0":{"docs":{"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/foreign bank account report (FBAR)/":{"tf":1.4142135623730951}},"df":1}},"=":{"docs":{},"df":0,"&":{"docs":{},"df":0,"g":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/lang/operator fixity and precedence/":{"tf":1.0}},"df":1}}}},"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"g":{"docs":{},"df":0,"c":{"docs":{"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":3.872983346207417}},"df":1},"v":{"docs":{"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.4142135623730951}},"df":1,"[":{"docs":{},"df":0,"(":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{},"df":0,"x":{"docs":{"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.4142135623730951}},"df":1}}}}}}}},"t":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"b":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"_":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{},"df":0,"k":{"docs":{},"df":0,".":{"docs":{},"df":0,"f":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"g":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.0}},"df":1}}}},"x":{"docs":{},"df":0,"f":{"docs":{},"df":0,"r":{"docs":{},"df":0,"m":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}},"b":{"docs":{},"df":0,"_":{"docs":{},"df":0,"b":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.0}},"df":1}}}}}}},"o":{"docs":{},"df":0,"d":{"docs":{},"df":0,"y":{"docs":{},"df":0,".":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"f":{"docs":{},"df":0,"i":{"docs":{},"df":0,"g":{"docs":{},"df":0,"_":{"docs":{},"df":0,"s":{"docs":{},"df":0,"v":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.0}},"df":1}}}}}}}}},"p":{"docs":{},"df":0,"u":{"docs":{},"df":0,"_":{"docs":{},"df":0,"s":{"docs":{},"df":0,"v":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.0}},"df":1}}}}}}},"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"v":{"docs":{},"df":0,"_":{"docs":{},"df":0,"s":{"docs":{},"df":0,"v":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.0}},"df":1}}}}}}}}}}}},"c":{"docs":{},"df":0,"i":{"docs":{},"df":0,"p":{"docs":{},"df":0,"h":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"x":{"docs":{},"df":0,"t":{"docs":{},"df":0,"_":{"docs":{},"df":0,"s":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.0}},"df":1}}}}}}}}}}},"p":{"docs":{},"df":0,"u":{"docs":{},"df":0,"_":{"docs":{},"df":0,"s":{"docs":{},"df":0,"v":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.4142135623730951}},"df":1}}}}}}},"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"v":{"docs":{},"df":0,"_":{"docs":{},"df":0,"s":{"docs":{},"df":0,"v":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.0}},"df":1}}}}}},"v":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":2.6457513110645907}},"df":1}},"k":{"docs":{},"df":0,"e":{"docs":{},"df":0,"y":{"docs":{},"df":0,"_":{"docs":{},"df":0,"n":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.0}},"df":1}}},"p":{"docs":{},"df":0,"o":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.4142135623730951}},"df":1}}}}}},"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"q":{"docs":{},"df":0,"u":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.0}},"df":1}}}}}}}},"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"q":{"docs":{},"df":0,"u":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.7320508075688772}},"df":1,".":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"b":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"_":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{},"df":0,"k":{"docs":{},"df":0,".":{"docs":{},"df":0,"f":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"g":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.0}},"df":1}}}},"x":{"docs":{},"df":0,"f":{"docs":{},"df":0,"r":{"docs":{},"df":0,"m":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}},"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"f":{"docs":{},"df":0,"i":{"docs":{},"df":0,"g":{"docs":{},"df":0,"_":{"docs":{},"df":0,"s":{"docs":{},"df":0,"v":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.0}},"df":1}}}}}}}}},"p":{"docs":{},"df":0,"u":{"docs":{},"df":0,"_":{"docs":{},"df":0,"s":{"docs":{},"df":0,"v":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.7320508075688772}},"df":1}}}}}}},"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"v":{"docs":{},"df":0,"_":{"docs":{},"df":0,"s":{"docs":{},"df":0,"v":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.0}},"df":1}}}}}}},"k":{"docs":{},"df":0,"e":{"docs":{},"df":0,"y":{"docs":{},"df":0,"_":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.4142135623730951}},"df":1}},"n":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.0}},"df":1}}},"p":{"docs":{},"df":0,"o":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.4142135623730951}},"df":1}}}}}}}}}},"m":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"c":{"docs":{},"df":0,"_":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"b":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"_":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{},"df":0,"k":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"m":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"c":{"docs":{},"df":0,"_":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"b":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"_":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{},"df":0,"k":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}},"p":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"h":{"docs":{"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.7320508075688772}},"df":1}}},"i":{"docs":{},"df":0,"d":{"docs":{},"df":0,"=":{"docs":{},"df":0,"p":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.0}},"df":1}}}}}},"p":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{},"df":0,"=":{"docs":{},"df":0,"p":{"docs":{},"df":0,"p":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.0}},"df":1}}}}}}}},"r":{"docs":{},"df":0,"_":{"docs":{},"df":0,"p":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.0}},"df":1}},"s":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"g":{"docs":{"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.0}},"df":1}}}}}}}},"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.0}},"df":1}}}},"t":{"docs":{"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":2.0}},"df":1,"a":{"docs":{},"df":0,"g":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.4142135623730951}},"df":1}},"o":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"_":{"docs":{},"df":0,"s":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.0}},"df":1}}}}}}},"x":{"docs":{},"df":0,"x":{"docs":{},"df":0,"x":{"docs":{"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.0}},"df":1}}},"|":{"docs":{},"df":0,"0":{"docs":{},"df":0,":":{"docs":{},"df":0,"1":{"docs":{"https://phlip9.com/notes/btc-ln/atomic multipath payments (AMP)/":{"tf":1.7320508075688772}},"df":1}}},"1":{"docs":{},"df":0,":":{"docs":{},"df":0,"0":{"docs":{"https://phlip9.com/notes/btc-ln/atomic multipath payments (AMP)/":{"tf":1.7320508075688772}},"df":1}}}}},"k":{"docs":{"https://phlip9.com/notes/lang/flutter/flutter setup/":{"tf":1.0}},"df":1}},"u":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{"https://phlip9.com/notes/btc-ln/breez lightning service providers/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0},"https://phlip9.com/notes/crypto/(talk) authenticated data structures for stateless validation/":{"tf":1.0},"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":1.0},"https://phlip9.com/notes/devops/consul/":{"tf":1.0},"https://phlip9.com/notes/lang/lua/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/lightning router overview/":{"tf":1.4142135623730951},"https://phlip9.com/notes/statistics probability/CDF confidence bands - DKW inequality/":{"tf":1.0}},"df":8}}}},"d":{"docs":{"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.7320508075688772},"https://phlip9.com/notes/confidential computing/gramine/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0}},"df":5}}},"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/distributed systems/papers/(2021) Leaderless Consensus/":{"tf":1.0}},"df":1}}}}}},"s":{"docs":{},"df":0,"s":{"docs":{"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/foreign bank account report (FBAR)/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.0},"https://phlip9.com/notes/combinatorics/k-combinations of a multiset/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel TDX/":{"tf":1.0},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.0}},"df":8},"t":{"docs":{"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":3.1622776601683795},"https://phlip9.com/notes/confidential computing/intel TDX/":{"tf":1.4142135623730951},"https://phlip9.com/notes/router/lightning router/captive portal/arubanetworks captive portal/":{"tf":2.449489742783178}},"df":3,"'":{"docs":{"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.0}},"df":1}}}},"i":{"docs":{"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.4142135623730951}},"df":1,"d":{"docs":{"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.4142135623730951},"https://phlip9.com/notes/devops/kubernetes/":{"tf":1.0},"https://phlip9.com/notes/fuzzing/fuzzcheck-rs/":{"tf":1.0},"https://phlip9.com/notes/fuzzing/fuzzing/":{"tf":1.0},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0},"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.0},"https://phlip9.com/notes/postgres/postgres performance tuning/":{"tf":1.4142135623730951},"https://phlip9.com/notes/reproducible builds/nix/links/":{"tf":1.0}},"df":8,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"c":{"docs":{"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/foreign bank account report (FBAR)/":{"tf":1.0}},"df":1}}},"e":{"docs":{},"df":0,".":{"docs":{},"df":0,"h":{"docs":{},"df":0,"t":{"docs":{},"df":0,"m":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0}},"df":1}}}}},"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/postgres/postgres performance tuning/":{"tf":1.4142135623730951}},"df":1}}}}}},"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"b":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/misc/optimization solvers/":{"tf":1.7320508075688772}},"df":1}}}}}},"h":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/":{"tf":1.0},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":5.0990195135927845},"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.4142135623730951}},"df":5,"(":{"docs":{},"df":0,"b":{"docs":{},"df":0,"p":{"docs":{"https://phlip9.com/notes/btc-ln/atomic multipath payments (AMP)/":{"tf":1.0}},"df":1}},"k":{"docs":{"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":1.4142135623730951}},"df":1},"r":{"docs":{},"df":0,"_":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/btc-ln/atomic multipath payments (AMP)/":{"tf":1.0}},"df":1}},"a":{"docs":{},"df":0,"k":{"docs":{},"df":0,"_":{"docs":{},"df":0,"p":{"docs":{},"df":0,"u":{"docs":{},"df":0,"b":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0}},"df":1}}}}}}}},"*":{"docs":{},"df":0,"r":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.4142135623730951}},"df":1}}},"/":{"docs":{},"df":0,"w":{"docs":{"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.0}},"df":1}},"_":{"docs":{},"df":0,"0":{"docs":{"https://phlip9.com/notes/statistics probability/multinomial distribution/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/p-value/":{"tf":2.23606797749979}},"df":2},"i":{"docs":{"https://phlip9.com/notes/btc-ln/atomic multipath payments (AMP)/":{"tf":1.4142135623730951}},"df":1}},"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"k":{"docs":{"https://phlip9.com/notes/android/ADB over TCP inside WSL2/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0},"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":1.0},"https://phlip9.com/notes/performance/bit hacks/":{"tf":2.0}},"df":4,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"'":{"docs":{"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.0}},"df":1}}}}},"h":{"docs":{},"df":0,"a":{"docs":{"https://phlip9.com/notes/devops/k3s/":{"tf":1.0}},"df":1}},"i":{"docs":{},"df":0,"r":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/misc/kintsugi/":{"tf":1.0}},"df":1}}}}},"l":{"docs":{},"df":0,"f":{"docs":{"https://phlip9.com/notes/keyboards/moergo glove80/":{"tf":2.0},"https://phlip9.com/notes/management/relieve often - why generals were more successful in WWII/":{"tf":1.0},"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.7320508075688772}},"df":3},"o":{"docs":{},"df":0,"g":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.4142135623730951}},"df":1}}}},"v":{"docs":{"https://phlip9.com/notes/keyboards/moergo glove80/":{"tf":1.4142135623730951}},"df":1}},"m":{"docs":{},"df":0,"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.4142135623730951}},"df":2}}}},"n":{"docs":{"https://phlip9.com/notes/misc/optimization solvers/":{"tf":1.0}},"df":1,"d":{"docs":{"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.0},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0},"https://phlip9.com/notes/networking/network interface card (NIC)/":{"tf":1.0}},"df":3,"i":{"docs":{"https://phlip9.com/notes/combinatorics/k-combinations of a multiset/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/nix/nix auto-allocate-uids -> nixbld users/":{"tf":1.0}},"df":2},"l":{"docs":{"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/money services business (MSB)/":{"tf":1.0},"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.7320508075688772},"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/breez lightning service providers/":{"tf":1.4142135623730951},"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":3.0},"https://phlip9.com/notes/confidential computing/marblerun/":{"tf":1.0},"https://phlip9.com/notes/crypto/dex - open-source OIDC & OAuth 2.0 provider/":{"tf":1.0},"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0},"https://phlip9.com/notes/lang/lua/":{"tf":1.0},"https://phlip9.com/notes/networking/network interface card (NIC)/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/winsorize/":{"tf":1.4142135623730951}},"df":14,"e":{"docs":{},"df":0,"_":{"docs":{},"df":0,"l":{"docs":{},"df":0,"d":{"docs":{},"df":0,"k":{"docs":{},"df":0,"_":{"docs":{},"df":0,"e":{"docs":{},"df":0,"v":{"docs":{"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.0}},"df":1}}}}}}},"r":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":2.0},"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":1.0},"https://phlip9.com/notes/lang/koka-lang/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/understanding sycamore reactivity/":{"tf":1.4142135623730951}},"df":5}}},"s":{"docs":{},"df":0,"h":{"docs":{},"df":0,"a":{"docs":{},"df":0,"k":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 8 - secure noise transport/":{"tf":1.7320508075688772},"https://phlip9.com/notes/confidential computing/intel SGX/secure time/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/mystikos/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":2.23606797749979},"https://phlip9.com/notes/crypto/TLS self-signed pubkey-only certs/":{"tf":1.0},"https://phlip9.com/notes/devops/service mesh/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/arubanetworks captive portal/":{"tf":1.0}},"df":7}}}}},"g":{"docs":{"https://phlip9.com/notes/reproducible builds/nix/nix debug broken package build/":{"tf":1.0}},"df":1,"s":{"docs":{},"df":0,"/":{"docs":{},"df":0,"f":{"docs":{},"df":0,"a":{"docs":{},"df":0,"i":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/misc/setting up a headless raspbian boot image/":{"tf":1.0}},"df":1}}}}}}},"k":{"docs":{"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.0}},"df":1}},"p":{"docs":{},"df":0,"p":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/btc-ln/lightning rod/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/submarine swaps/":{"tf":1.0},"https://phlip9.com/notes/combinatorics/k-combinations of a multiset/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/secure time/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/marblerun/":{"tf":1.0},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":2.0},"https://phlip9.com/notes/lang/rust/rr with rust/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/understanding sycamore reactivity/":{"tf":1.4142135623730951},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0},"https://phlip9.com/notes/misc/setting up a headless raspbian boot image/":{"tf":1.0},"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.0},"https://phlip9.com/notes/performance/profiling/":{"tf":1.0}},"df":12}},"i":{"docs":{"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":1.7320508075688772}},"df":1}}},"r":{"docs":{"https://phlip9.com/notes/statistics probability/winsorize/":{"tf":1.0}},"df":1,"d":{"docs":{"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/secure time/":{"tf":1.0},"https://phlip9.com/notes/design/form design/":{"tf":1.0},"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":1.0},"https://phlip9.com/notes/keyboards/moergo glove80/":{"tf":1.4142135623730951},"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":1.0}},"df":7,"e":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0},"https://phlip9.com/notes/devops/kubernetes/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/nix/nix auto-allocate-uids -> nixbld users/":{"tf":1.0}},"df":3},"r":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0}},"df":1}},"t":{"docs":{"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.4142135623730951}},"df":2},"w":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/WSL/WSL2 custom kernel/":{"tf":1.4142135623730951},"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":2.6457513110645907},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.7320508075688772},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":2.449489742783178},"https://phlip9.com/notes/confidential computing/intel TDX/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/mystikos/":{"tf":1.0},"https://phlip9.com/notes/devops/nomad/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/rust/rr with rust/":{"tf":1.0},"https://phlip9.com/notes/networking/network interface card (NIC)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.4142135623730951},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.0}},"df":13,"e":{"docs":{},"df":0,"y":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0}},"df":1}}}}}},"o":{"docs":{},"df":0,"l":{"docs":{},"df":0,"d":{"docs":{},"df":0,"b":{"docs":{},"df":0,"o":{"docs":{},"df":0,"t":{"docs":{},"df":0,".":{"docs":{},"df":0,"n":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.0}},"df":1}}}}}}}}}},"s":{"docs":{},"df":0,"h":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.4142135623730951},"https://phlip9.com/notes/btc-ln/atomic multipath payments (AMP)/":{"tf":2.0},"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":2.8284271247461903},"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.0},"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":3.0},"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":1.4142135623730951},"https://phlip9.com/notes/networking/ipv6 address space/":{"tf":1.0},"https://phlip9.com/notes/postgres/types of scans/":{"tf":1.0}},"df":10,"(":{"docs":{},"df":0,"[":{"docs":{},"df":0,"u":{"docs":{},"df":0,"8":{"docs":{"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":1.0}},"df":1}}},"k":{"docs":{},"df":0,"e":{"docs":{},"df":0,"y":{"docs":{"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":1.0}},"df":1}}},"p":{"docs":{},"df":0,"u":{"docs":{},"df":0,"b":{"docs":{},"df":0,"k":{"docs":{},"df":0,"e":{"docs":{},"df":0,"y":{"docs":{"https://phlip9.com/notes/confidential computing/gramine/":{"tf":1.0}},"df":1}}}}}}},"/":{"docs":{},"df":0,"h":{"docs":{},"df":0,"e":{"docs":{},"df":0,"i":{"docs":{},"df":0,"g":{"docs":{},"df":0,"h":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.0}},"df":1}}}}}}},"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"p":{"docs":{"https://phlip9.com/notes/devops/nomad/":{"tf":1.0}},"df":1}}}}}},"k":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.0},"https://phlip9.com/notes/crypto/biscuit authz/":{"tf":1.0}},"df":2,"l":{"docs":{},"df":0,"/":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"/":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/lang/operator fixity and precedence/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}},"t":{"docs":{"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":2.0},"https://phlip9.com/notes/fuzzing/fuzzing/":{"tf":1.0}},"df":2,"e":{"docs":{"https://phlip9.com/notes/lang/rust/rr with rust/":{"tf":1.0}},"df":1},"{":{"docs":{},"df":0,"\\":{"docs":{},"df":0,"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"g":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"}":{"docs":{},"df":0,"_":{"docs":{},"df":0,"{":{"docs":{},"df":0,"\\":{"docs":{},"df":0,"m":{"docs":{},"df":0,"u":{"docs":{},"df":0,"_":{"docs":{},"df":0,"x":{"docs":{"https://phlip9.com/notes/statistics probability/standard error/":{"tf":1.4142135623730951}},"df":1}}}}}}}}}}}}}},"p":{"docs":{},"df":0,"}":{"docs":{},"df":0,"_":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/statistics probability/G-test - multinomial goodness-of-fit/":{"tf":2.0}},"df":1}}}}}},"v":{"docs":{},"df":0,"e":{"docs":{"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.0}},"df":2,"n":{"docs":{},"df":0,"'":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/rebuilderd/":{"tf":1.0}},"df":2}}}}}},"c":{"docs":{"https://phlip9.com/notes/btc-ln/hosted channels/":{"tf":1.7320508075688772}},"df":1},"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/WSL/WSL2 custom kernel/":{"tf":1.4142135623730951},"https://phlip9.com/notes/crypto/acme protocol/":{"tf":1.0},"https://phlip9.com/notes/design/form design/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.4142135623730951},"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":2.6457513110645907},"https://phlip9.com/notes/statistics probability/testing whether a coin is fair/":{"tf":1.4142135623730951}},"df":6,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/management/relieve often - why generals were more successful in WWII/":{"tf":1.0}},"df":1}}}}},"e":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/btc utreexo - utxo accumulator/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":4.123105625617661},"https://phlip9.com/notes/confidential computing/intel SGX/secure time/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":1.7320508075688772},"https://phlip9.com/notes/crypto/acme protocol/":{"tf":1.0},"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":3.605551275463989},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":5.0990195135927845}},"df":12,"2":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0}},"df":1},"=":{"docs":{},"df":0,"3":{"docs":{"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.4142135623730951}},"df":1}}}},"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"s":{"docs":{"https://phlip9.com/notes/misc/setting up a headless raspbian boot image/":{"tf":1.7320508075688772}},"df":1}}}}},"l":{"docs":{},"df":0,"t":{"docs":{},"df":0,"h":{"docs":{"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0},"https://phlip9.com/notes/devops/consul/":{"tf":1.7320508075688772},"https://phlip9.com/notes/devops/linkerd/":{"tf":1.0},"https://phlip9.com/notes/devops/service mesh/":{"tf":1.0}},"df":4,"i":{"docs":{"https://phlip9.com/notes/devops/deployment strategies/":{"tf":1.0}},"df":1}}}},"p":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0},"https://phlip9.com/notes/postgres/snippets/":{"tf":1.7320508075688772},"https://phlip9.com/notes/postgres/types of scans/":{"tf":3.7416573867739413}},"df":5},"v":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0},"https://phlip9.com/notes/performance/profiling/":{"tf":1.4142135623730951},"https://phlip9.com/notes/postgres/postgres performance tuning/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/lightning router overview/":{"tf":1.0}},"df":4,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/performance/profiling/":{"tf":1.0}},"df":1}}},"l":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":1.0}},"df":1}}}}},"i":{"docs":{},"df":0,"g":{"docs":{},"df":0,"h":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.0},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":5.196152422706632}},"df":2,"=":{"docs":{},"df":0,"3":{"docs":{},"df":0,"2":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1}}}}}}},"l":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/foreign bank account report (FBAR)/":{"tf":1.0},"https://phlip9.com/notes/keyboards/moergo glove80/":{"tf":2.23606797749979}},"df":2},"l":{"docs":{},"df":0,"o":{"docs":{"https://phlip9.com/notes/confidential computing/gramine/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/mystikos/":{"tf":1.0},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":2.449489742783178},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":2.8284271247461903}},"df":5,":":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.4142135623730951}},"df":1,"=":{"docs":{},"df":0,"+":{"docs":{},"df":0,"m":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.0}},"df":1}}}}}}}}}}},"w":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"l":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/confidential computing/gramine/":{"tf":1.7320508075688772}},"df":1}}}}}}},"p":{"docs":{"https://phlip9.com/notes/WSL/WSL2 custom kernel/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel TDX/":{"tf":2.0},"https://phlip9.com/notes/design/form design/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/gdb ref/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/rr with rust/":{"tf":2.0},"https://phlip9.com/notes/misc/kintsugi/":{"tf":1.0},"https://phlip9.com/notes/misc/prepping RPI for embedded dev/":{"tf":1.0},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0},"https://phlip9.com/notes/networking/CIDR/":{"tf":1.0},"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.0},"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.0},"https://phlip9.com/notes/postgres/postgres performance tuning/":{"tf":1.4142135623730951},"https://phlip9.com/notes/reproducible builds/rebuilderd/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/arubanetworks captive portal/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.4142135623730951}},"df":20,"(":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"m":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1}}}},"e":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.0}},"df":1}}}},"n":{"docs":{},"df":0,"c":{"docs":{"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0}},"df":1}},"r":{"docs":{},"df":0,"b":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/statistics probability/herbie - float error fixer/":{"tf":1.7320508075688772}},"df":1,"e":{"docs":{},"df":0,"'":{"docs":{"https://phlip9.com/notes/statistics probability/herbie - float error fixer/":{"tf":1.0}},"df":1}}}},"e":{"docs":{"https://phlip9.com/notes/AI ML/Markov Decision Process (MDP)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/android/root phone with magisk/":{"tf":1.0},"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.4142135623730951},"https://phlip9.com/notes/btc-ln/BOLT 11 - invoices/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.7320508075688772},"https://phlip9.com/notes/btc-ln/atomic multipath payments (AMP)/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.0},"https://phlip9.com/notes/combinatorics/k-combinations of a multiset/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.7320508075688772},"https://phlip9.com/notes/confidential computing/gramine/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.0},"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":1.0},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/lua/":{"tf":1.0},"https://phlip9.com/notes/lang/operator fixity and precedence/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/understanding sycamore reactivity/":{"tf":1.0},"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":1.0},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.4142135623730951},"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.4142135623730951},"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.4142135623730951},"https://phlip9.com/notes/reproducible builds/reproducible-builds.org/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.7320508075688772},"https://phlip9.com/notes/statistics probability/testing whether a coin is fair/":{"tf":1.0}},"df":26,"'":{"docs":{"https://phlip9.com/notes/android/android cli setup/":{"tf":1.0},"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":1.0},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/nix/nix auto-allocate-uids -> nixbld users/":{"tf":1.0}},"df":4},"t":{"docs":{"https://phlip9.com/notes/reproducible builds/nix/links/":{"tf":1.0}},"df":1}},"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.0}},"df":1}}}},"u":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":1.0}},"df":1}}}}},"x":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.4142135623730951},"https://phlip9.com/notes/postgres/snippets/":{"tf":2.449489742783178}},"df":2,"d":{"docs":{},"df":0,"u":{"docs":{},"df":0,"m":{"docs":{},"df":0,"p":{"docs":{"https://phlip9.com/notes/lang/gdb ref/":{"tf":1.0}},"df":1}}}}},"y":{"docs":{"https://phlip9.com/notes/":{"tf":1.0}},"df":1}},"g":{"docs":{},"df":0,"h":{"docs":{},"df":0,"g":{"docs":{"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.0}},"df":1}}},"h":{"docs":{},"df":0,"h":{"docs":{},"df":0,"h":{"docs":{"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.7320508075688772}},"df":1}}},"i":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.7320508075688772},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0},"https://phlip9.com/notes/performance/bit hacks/":{"tf":2.0},"https://phlip9.com/notes/statistics probability/winsorize/":{"tf":1.4142135623730951}},"df":4,"d":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/crypto/(talk) authenticated data structures for stateless validation/":{"tf":1.0},"https://phlip9.com/notes/devops/secrets/ejson-kms (AWS)/":{"tf":1.0},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.7320508075688772},"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.0}},"df":4}}},"e":{"docs":{"https://phlip9.com/notes/android/root phone with magisk/":{"tf":1.4142135623730951},"https://phlip9.com/notes/btc-ln/breez lightning service providers/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":2.23606797749979}},"df":3}},"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0}},"df":1}}}}}}},"g":{"docs":{},"df":0,"h":{"docs":{"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/foreign bank account report (FBAR)/":{"tf":2.0},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.0},"https://phlip9.com/notes/crypto/(talk) authenticated data structures for stateless validation/":{"tf":1.0},"https://phlip9.com/notes/crypto/acme protocol/":{"tf":1.0},"https://phlip9.com/notes/devops/deployment strategies/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/testing whether a coin is fair/":{"tf":1.0}},"df":6,"e":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/AI ML/Expectimax Search/":{"tf":1.0},"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0},"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":1.0},"https://phlip9.com/notes/lang/operator fixity and precedence/":{"tf":2.0},"https://phlip9.com/notes/misc/kintsugi/":{"tf":1.0},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0},"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.4142135623730951}},"df":9},"s":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.0},"https://phlip9.com/notes/distributed systems/papers/(2020) Semi-Fast Byzantine-tolerant Shared Register without Reliable Broadcast/":{"tf":2.0}},"df":2}}},"l":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/devops/consul/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/nix/nix auto-allocate-uids -> nixbld users/":{"tf":1.0}},"df":2,"g":{"docs":{},"df":0,"h":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/design/form design/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0},"https://phlip9.com/notes/misc/pop_OS! tweaks/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/reproducible-builds.org/":{"tf":1.0}},"df":4}}}}}}},"j":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"k":{"docs":{"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.0}},"df":1,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"g":{"docs":{},"df":0,"]":{"docs":{},"df":0,"(":{"docs":{},"df":0,"h":{"docs":{},"df":0,"t":{"docs":{},"df":0,"t":{"docs":{},"df":0,"p":{"docs":{},"df":0,"s":{"docs":{},"df":0,":":{"docs":{},"df":0,"/":{"docs":{},"df":0,"/":{"docs":{},"df":0,"w":{"docs":{},"df":0,"w":{"docs":{},"df":0,"w":{"docs":{},"df":0,".":{"docs":{},"df":0,"w":{"docs":{},"df":0,"i":{"docs":{},"df":0,"k":{"docs":{},"df":0,"i":{"docs":{},"df":0,"w":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{},"df":0,".":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"/":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"/":{"docs":{},"df":0,"d":{"docs":{},"df":0,"n":{"docs":{},"df":0,"s":{"docs":{},"df":0,"_":{"docs":{},"df":0,"h":{"docs":{},"df":0,"i":{"docs":{},"df":0,"j":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"k":{"docs":{"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"n":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 11 - invoices/":{"tf":1.4142135623730951}},"df":1}},"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/networking/CIDR/":{"tf":1.0}},"df":1,"i":{"docs":{"https://phlip9.com/notes/AI ML/Markov Decision Process (MDP)/":{"tf":1.0},"https://phlip9.com/notes/b l o c k c h a i n/btc utreexo - utxo accumulator/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/rust/rr with rust/":{"tf":1.0},"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":5.477225575051661},"https://phlip9.com/notes/misc/kintsugi/":{"tf":1.0}},"df":5}}}}},"t":{"docs":{"https://phlip9.com/notes/AI ML/Expectimax Search/":{"tf":1.0},"https://phlip9.com/notes/android/ADB over TCP inside WSL2/":{"tf":1.0},"https://phlip9.com/notes/android/OTA updates for rooted android phone/":{"tf":2.0},"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.4142135623730951},"https://phlip9.com/notes/android/root phone with magisk/":{"tf":1.4142135623730951},"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.0},"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":1.0},"https://phlip9.com/notes/fuzzing/fuzzcheck-rs/":{"tf":1.0},"https://phlip9.com/notes/keyboards/moergo glove80/":{"tf":2.449489742783178},"https://phlip9.com/notes/lang/rust/rr with rust/":{"tf":1.4142135623730951},"https://phlip9.com/notes/management/relieve often - why generals were more successful in WWII/":{"tf":1.0},"https://phlip9.com/notes/misc/pop_OS! tweaks/":{"tf":1.4142135623730951},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":2.6457513110645907},"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.4142135623730951},"https://phlip9.com/notes/reproducible builds/nix/nix auto-allocate-uids -> nixbld users/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/lightning router overview/":{"tf":1.0}},"df":18,"=":{"docs":{},"df":0,"1":{"docs":{},"df":0,"1":{"docs":{},"df":0,"2":{"docs":{"https://phlip9.com/notes/postgres/types of scans/":{"tf":1.0}},"df":1}}},"4":{"docs":{"https://phlip9.com/notes/postgres/types of scans/":{"tf":1.0}},"df":1}}}},"k":{"docs":{},"df":0,"d":{"docs":{},"df":0,"f":{"docs":{"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":3.872983346207417}},"df":1,"(":{"docs":{"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":1.0}},"df":1},":":{"docs":{},"df":0,":":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"v":{"docs":{},"df":0,"e":{"docs":{},"df":0,"(":{"docs":{},"df":0,"s":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":1.0}},"df":1}}}}}}}}}}},"p":{"docs":{},"df":0,"r":{"docs":{},"df":0,"k":{"docs":{"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":1.4142135623730951}},"df":1,"(":{"docs":{},"df":0,"h":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,":":{"docs":{},"df":0,":":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"x":{"docs":{},"df":0,"t":{"docs":{},"df":0,":":{"docs":{},"df":0,":":{"docs":{},"df":0,"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"w":{"docs":{},"df":0,"(":{"docs":{},"df":0,"&":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{},"df":0,"p":{"docs":{},"df":0,";":{"docs":{},"df":0,"p":{"docs":{},"df":0,"r":{"docs":{},"df":0,"k":{"docs":{"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"s":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":1.0}},"df":1,":":{"docs":{},"df":0,":":{"docs":{},"df":0,"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"w":{"docs":{},"df":0,"(":{"docs":{},"df":0,"s":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":1.4142135623730951}},"df":1}}}}}}}}}}}}}}}}}}},"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":3.3166247903554}},"df":1,"'":{"docs":{"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":1.0}},"df":1},"(":{"docs":{},"df":0,"h":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"(":{"docs":{},"df":0,"s":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":1.0}},"df":1}}}}}}}}},"s":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"t":{"docs":{},"df":0,"_":{"docs":{},"df":0,"v":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"u":{"docs":{"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":1.0}},"df":1}}}}}}}}}},":":{"docs":{},"df":0,":":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"x":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":1.4142135623730951}},"df":1,":":{"docs":{},"df":0,":":{"docs":{},"df":0,"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"w":{"docs":{},"df":0,"(":{"docs":{},"df":0,"k":{"docs":{},"df":0,"e":{"docs":{},"df":0,"y":{"docs":{"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":1.0}},"df":1}}}}}}},"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"g":{"docs":{},"df":0,"n":{"docs":{},"df":0,"'":{"docs":{"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":1.0}},"df":1}}}}}}}}}}}}}},"d":{"docs":{},"df":0,"i":{"docs":{},"df":0,"g":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"(":{"docs":{},"df":0,"p":{"docs":{},"df":0,"r":{"docs":{},"df":0,"k":{"docs":{"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":1.4142135623730951}},"df":1}}}}}}}}}}}},"_":{"docs":{},"df":0,"k":{"docs":{},"df":0,"e":{"docs":{},"df":0,"y":{"docs":{"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":1.4142135623730951}},"df":1,".":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,".":{"docs":{},"df":0,"u":{"docs":{},"df":0,"p":{"docs":{},"df":0,"d":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"(":{"docs":{},"df":0,"&":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{},"df":0,"p":{"docs":{},"df":0,";":{"docs":{},"df":0,"i":{"docs":{},"df":0,"k":{"docs":{},"df":0,"e":{"docs":{},"df":0,"y":{"docs":{"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}},"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,".":{"docs":{},"df":0,"u":{"docs":{},"df":0,"p":{"docs":{},"df":0,"d":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"(":{"docs":{},"df":0,"&":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{},"df":0,"p":{"docs":{},"df":0,";":{"docs":{},"df":0,"o":{"docs":{},"df":0,"k":{"docs":{},"df":0,"e":{"docs":{},"df":0,"y":{"docs":{"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"m":{"docs":{"https://phlip9.com/notes/WSL/WSL2 custom kernel/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/lightning rod/":{"tf":1.0}},"df":2}},"n":{"docs":{"https://phlip9.com/notes/misc/optimization solvers/":{"tf":1.0}},"df":1},"o":{"docs":{},"df":0,"c":{"docs":{"https://phlip9.com/notes/devops/docker compose/":{"tf":1.0},"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":1.0}},"df":2},"d":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/btc-ln/lightning rod/":{"tf":1.0}},"df":1}},"l":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/android/root phone with magisk/":{"tf":1.0},"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/foreign bank account report (FBAR)/":{"tf":1.0},"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/money services business (MSB)/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/hosted channels/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/lightning network notes/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/lightning rod/":{"tf":1.0},"https://phlip9.com/notes/keyboards/moergo glove80/":{"tf":1.4142135623730951},"https://phlip9.com/notes/misc/kintsugi/":{"tf":1.0},"https://phlip9.com/notes/misc/pop_OS! tweaks/":{"tf":1.0},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0},"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.0}},"df":11,"e":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/foreign bank account report (FBAR)/":{"tf":1.0},"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/monetary instruments/":{"tf":1.0}},"df":2}}},"e":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/lua/":{"tf":1.0}},"df":2},"i":{"docs":{"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0}},"df":1},"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"w":{"docs":{"https://phlip9.com/notes/misc/water distillation setup/":{"tf":1.0}},"df":1}}}},"m":{"docs":{},"df":0,"e":{"docs":{"https://phlip9.com/notes/keyboards/moergo glove80/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0},"https://phlip9.com/notes/misc/envsubst/":{"tf":1.7320508075688772},"https://phlip9.com/notes/networking/ipv6 address space/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/nix/nix auto-allocate-uids -> nixbld users/":{"tf":1.4142135623730951},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.0}},"df":6,"/":{"docs":{},"df":0,".":{"docs":{},"df":0,"s":{"docs":{},"df":0,"d":{"docs":{},"df":0,"k":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"/":{"docs":{},"df":0,"b":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"/":{"docs":{},"df":0,"s":{"docs":{},"df":0,"d":{"docs":{},"df":0,"k":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.4142135623730951}},"df":1}}}}}}}}}}}}}}}}}},"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0}},"df":1}}}}}}},"p":{"docs":{},"df":0,"h":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"p":{"docs":{},"df":0,"9":{"docs":{"https://phlip9.com/notes/misc/envsubst/":{"tf":1.4142135623730951}},"df":1,"/":{"docs":{},"df":0,".":{"docs":{},"df":0,"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"c":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"/":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{},"df":0,"/":{"docs":{},"df":0,"c":{"docs":{},"df":0,"m":{"docs":{},"df":0,"d":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/android/android cli setup/":{"tf":1.0}},"df":1}}}}}},"p":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"f":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"m":{"docs":{"https://phlip9.com/notes/android/android cli setup/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}},"f":{"docs":{},"df":0,"l":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/lang/flutter/flutter setup/":{"tf":1.0}},"df":1}}}}},"s":{"docs":{},"df":0,"d":{"docs":{},"df":0,"k":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"/":{"docs":{},"df":0,"c":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"/":{"docs":{},"df":0,"j":{"docs":{},"df":0,"a":{"docs":{},"df":0,"v":{"docs":{},"df":0,"a":{"docs":{},"df":0,"/":{"docs":{},"df":0,"c":{"docs":{},"df":0,"u":{"docs":{},"df":0,"r":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"/":{"docs":{},"df":0,"b":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"/":{"docs":{},"df":0,"j":{"docs":{},"df":0,"a":{"docs":{},"df":0,"v":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{"https://phlip9.com/notes/android/android cli setup/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"b":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"w":{"docs":{"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0}},"df":1}}}}},"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"p":{"docs":{},"df":0,"h":{"docs":{"https://phlip9.com/notes/AI ML/Expectimax Search/":{"tf":1.0}},"df":1}}}}}}},"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/distributed systems/papers/(2020) Semi-Fast Byzantine-tolerant Shared Register without Reliable Broadcast/":{"tf":1.0}},"df":1}}}},"o":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/devops/secrets/ejson-kms (AWS)/":{"tf":1.0}},"df":1},"k":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/gramine/":{"tf":1.0},"https://phlip9.com/notes/devops/AKS - azure kubernetes service/":{"tf":1.0},"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":1.0},"https://phlip9.com/notes/fuzzing/bolero - fuzzing + property testing/":{"tf":1.0},"https://phlip9.com/notes/ios/ios setup/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/rr with rust/":{"tf":1.4142135623730951},"https://phlip9.com/notes/networking/network interface card (NIC)/":{"tf":1.0}},"df":8,"u":{"docs":{},"df":0,"p":{"docs":{"https://phlip9.com/notes/misc/setting up a headless raspbian boot image/":{"tf":1.0}},"df":1}}}},"p":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 11 - invoices/":{"tf":2.23606797749979},"https://phlip9.com/notes/btc-ln/BOLT 4 - onion routing protocol/":{"tf":2.8284271247461903}},"df":2,"e":{"docs":{"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":1.0}},"df":1,"f":{"docs":{},"df":0,"u":{"docs":{},"df":0,"l":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/devops/deployment strategies/":{"tf":1.0}},"df":1}}}}}}},"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"z":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/fastpay/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":1.0},"https://phlip9.com/notes/performance/bit hacks/":{"tf":2.6457513110645907}},"df":3}}}}}},"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,")":{"docs":{},"df":0,"$":{"docs":{},"df":0,"9":{"docs":{},"df":0,"h":{"docs":{},"df":0,"t":{"docs":{},"df":0,"t":{"docs":{},"df":0,"p":{"docs":{},"df":0,"s":{"docs":{},"df":0,":":{"docs":{},"df":0,"/":{"docs":{},"df":0,"/":{"docs":{},"df":0,"w":{"docs":{},"df":0,"w":{"docs":{},"df":0,"w":{"docs":{},"df":0,".":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"z":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,".":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"/":{"docs":{},"df":0,"d":{"docs":{},"df":0,"i":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/misc/water distillation setup/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"/":{"docs":{},"df":0,"d":{"docs":{},"df":0,"p":{"docs":{},"df":0,"/":{"docs":{},"df":0,"b":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"1":{"docs":{},"df":0,"a":{"docs":{},"df":0,"3":{"docs":{},"df":0,"5":{"docs":{},"df":0,"z":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{"https://phlip9.com/notes/misc/water distillation setup/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}},"t":{"docs":{"https://phlip9.com/notes/android/android cli setup/":{"tf":1.7320508075688772},"https://phlip9.com/notes/android/root phone with magisk/":{"tf":1.0},"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":4.123105625617661},"https://phlip9.com/notes/btc-ln/BOLT 7 - p2p node and channel discovery/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/hosted channels/":{"tf":2.449489742783178},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":4.795831523312719},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":2.0},"https://phlip9.com/notes/confidential computing/intel SGX/secure time/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel TDX/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/marblerun/":{"tf":1.4142135623730951},"https://phlip9.com/notes/crypto/acme protocol/":{"tf":1.4142135623730951},"https://phlip9.com/notes/devops/AKS - azure kubernetes service/":{"tf":1.7320508075688772},"https://phlip9.com/notes/devops/docker compose/":{"tf":1.4142135623730951},"https://phlip9.com/notes/devops/nomad/":{"tf":1.0},"https://phlip9.com/notes/devops/secrets/doppler/":{"tf":1.0},"https://phlip9.com/notes/keyboards/moergo glove80/":{"tf":1.0},"https://phlip9.com/notes/lang/flutter/flutter setup/":{"tf":1.0},"https://phlip9.com/notes/misc/prepping RPI for embedded dev/":{"tf":1.4142135623730951},"https://phlip9.com/notes/networking/CIDR/":{"tf":2.449489742783178},"https://phlip9.com/notes/networking/ipv6 address space/":{"tf":1.0},"https://phlip9.com/notes/networking/network interfaces/":{"tf":2.6457513110645907},"https://phlip9.com/notes/postgres/postgres performance tuning/":{"tf":1.4142135623730951},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/nix/links/":{"tf":1.4142135623730951},"https://phlip9.com/notes/reproducible builds/rebuilderd/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":2.0}},"df":28,"&":{"docs":{},"df":0,"g":{"docs":{},"df":0,"t":{"docs":{},"df":0,";":{"docs":{},"df":0,":":{"docs":{},"df":0,"&":{"docs":{},"df":0,"l":{"docs":{},"df":0,"t":{"docs":{},"df":0,";":{"docs":{},"df":0,"b":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}},"_":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/networking/CIDR/":{"tf":1.4142135623730951}},"df":1}},"s":{"docs":{},"df":0,"o":{"docs":{},"df":0,"c":{"docs":{},"df":0,"k":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0}},"df":1}}}}}}},"n":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{"https://phlip9.com/notes/devops/algo wireguard VPN server/":{"tf":1.4142135623730951},"https://phlip9.com/notes/misc/prepping RPI for embedded dev/":{"tf":2.23606797749979},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.0}},"df":4,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/misc/prepping RPI for embedded dev/":{"tf":1.0}},"df":1}}}}}}}}},"t":{"docs":{"https://phlip9.com/notes/lang/flutter/flutter setup/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.0}},"df":2,"e":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/lightning router overview/":{"tf":1.0}},"df":2}},"p":{"docs":{},"df":0,"l":{"docs":{},"df":0,"u":{"docs":{},"df":0,"g":{"docs":{"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.0}},"df":1}}}},"s":{"docs":{},"df":0,"p":{"docs":{},"df":0,"o":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.0}},"df":2,"'":{"docs":{"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.0}},"df":1}}}}}},"u":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/secure time/":{"tf":1.0},"https://phlip9.com/notes/devops/algo wireguard VPN server/":{"tf":1.7320508075688772},"https://phlip9.com/notes/devops/nomad/":{"tf":1.0},"https://phlip9.com/notes/misc/kintsugi/":{"tf":1.4142135623730951},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.4142135623730951}},"df":6},"s":{"docs":{"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/money services business (MSB)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.0}},"df":2}},"v":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/design/form design/":{"tf":1.0}},"df":1,"s":{"docs":{},"df":0,"/":{"docs":{},"df":0,"d":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"p":{"docs":{},"df":0,"d":{"docs":{},"df":0,"o":{"docs":{},"df":0,"w":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/design/form design/":{"tf":1.0}},"df":1,"s":{"docs":{},"df":0,"/":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{},"df":0,"c":{"docs":{"https://phlip9.com/notes/design/form design/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}},"w":{"docs":{},"df":0,"/":{"docs":{},"df":0,"h":{"docs":{},"df":0,"o":{"docs":{},"df":0,"w":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0}},"df":1}}},"w":{"docs":{},"df":0,"h":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.0}},"df":1}}}}}}},"r":{"docs":{"https://phlip9.com/notes/lang/rust/rr with rust/":{"tf":1.0},"https://phlip9.com/notes/misc/uptime to downtime conversion/":{"tf":1.4142135623730951}},"df":2,"e":{"docs":{},"df":0,"f":{"docs":{},"df":0,"=":{"docs":{},"df":0,"\"":{"docs":{},"df":0,"h":{"docs":{},"df":0,"t":{"docs":{},"df":0,"t":{"docs":{},"df":0,"p":{"docs":{},"df":0,"s":{"docs":{},"df":0,":":{"docs":{},"df":0,"/":{"docs":{},"df":0,"/":{"docs":{},"df":0,"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"g":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,".":{"docs":{},"df":0,"e":{"docs":{},"df":0,"x":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{},"df":0,"p":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,".":{"docs":{},"df":0,"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{},"df":0,"/":{"docs":{},"df":0,"\"":{"docs":{},"df":0,"&":{"docs":{},"df":0,"g":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.0}},"df":2}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"s":{"docs":{},"df":0,"l":{"docs":{},"df":0,"(":{"docs":{},"df":0,"0":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1},"1":{"docs":{},"df":0,"5":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1}},"2":{"docs":{},"df":0,"1":{"docs":{},"df":0,"5":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1}},"2":{"docs":{},"df":0,"0":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1}},"4":{"docs":{},"df":0,"0":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.7320508075688772}},"df":1}},"6":{"docs":{},"df":0,"5":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1}}},"h":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1,"u":{"docs":{},"df":0,"e":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":2.0}},"df":1}}},"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"p":{"docs":{},"df":0,"(":{"docs":{},"df":0,"2":{"docs":{},"df":0,"4":{"docs":{},"df":0,"0":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1}}}}}}}}}},"m":{"docs":{"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":2.0},"https://phlip9.com/notes/devops/secrets/ejson-kms (AWS)/":{"tf":1.0}},"df":2,"'":{"docs":{"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.0}},"df":1}}},"t":{"docs":{},"df":0,"l":{"docs":{},"df":0,"c":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 11 - invoices/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":5.0},"https://phlip9.com/notes/btc-ln/BOLT 4 - onion routing protocol/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/breez lightning service providers/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/hosted channels/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/lightning network notes/":{"tf":2.6457513110645907},"https://phlip9.com/notes/btc-ln/lightning rod/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/submarine swaps/":{"tf":1.4142135623730951}},"df":9,"_":{"docs":{},"df":0,"b":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"p":{"docs":{},"df":0,"o":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.4142135623730951}},"df":1}}}}}}}}},"i":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.0}},"df":1}},"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"x":{"docs":{},"df":0,"_":{"docs":{},"df":0,"m":{"docs":{},"df":0,"s":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 7 - p2p node and channel discovery/":{"tf":1.0}},"df":1}}}}},"i":{"docs":{},"df":0,"m":{"docs":{},"df":0,"u":{"docs":{},"df":0,"m":{"docs":{},"df":0,"_":{"docs":{},"df":0,"m":{"docs":{},"df":0,"s":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 11 - invoices/":{"tf":1.0}},"df":1}}}}}}}}}}},"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"_":{"docs":{},"df":0,"m":{"docs":{},"df":0,"s":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 7 - p2p node and channel discovery/":{"tf":1.0}},"df":1}}}}},"i":{"docs":{},"df":0,"m":{"docs":{},"df":0,"u":{"docs":{},"df":0,"m":{"docs":{},"df":0,"_":{"docs":{},"df":0,"m":{"docs":{},"df":0,"s":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 11 - invoices/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.4142135623730951}},"df":2}}}}}}}}}}}}},"s":{"docs":{},"df":0,"&":{"docs":{},"df":0,"g":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.0}},"df":1}}},"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"u":{"docs":{},"df":0,"s":{"docs":{},"df":0,":":{"docs":{},"df":0,":":{"docs":{},"df":0,"s":{"docs":{},"df":0,"u":{"docs":{},"df":0,"c":{"docs":{},"df":0,"c":{"docs":{},"df":0,"e":{"docs":{},"df":0,"e":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}},"m":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":3.1622776601683795}},"df":2}},"t":{"docs":{},"df":0,"p":{"docs":{"https://phlip9.com/notes/android/android cli setup/":{"tf":1.0},"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":3.1622776601683795},"https://phlip9.com/notes/crypto/acme protocol/":{"tf":2.449489742783178},"https://phlip9.com/notes/devops/algo wireguard VPN server/":{"tf":1.0},"https://phlip9.com/notes/devops/consul/":{"tf":1.0},"https://phlip9.com/notes/lang/flutter/flutter setup/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":4.0},"https://phlip9.com/notes/router/lightning router/captive portal/arubanetworks captive portal/":{"tf":2.23606797749979},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":3.1622776601683795},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":6.48074069840786}},"df":13,".":{"docs":{},"df":0,"f":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{},"df":0,"(":{"docs":{},"df":0,"\"":{"docs":{},"df":0,"g":{"docs":{},"df":0,"o":{"docs":{},"df":0,"o":{"docs":{},"df":0,"g":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,".":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}},"s":{"docs":{},"df":0,"s":{"docs":{},"df":0,"l":{"docs":{},"df":0,"c":{"docs":{},"df":0,"a":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"f":{"docs":{},"df":0,"o":{"docs":{"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0}},"df":1}}}}}}}}}},"/":{"docs":{},"df":0,"1":{"docs":{},"df":0,".":{"docs":{},"df":0,"1":{"docs":{"https://phlip9.com/notes/crypto/acme protocol/":{"tf":2.0},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":2.449489742783178},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":4.0}},"df":3}}}},":":{"docs":{},"df":0,"/":{"docs":{},"df":0,"/":{"docs":{},"df":0,"&":{"docs":{},"df":0,"l":{"docs":{},"df":0,"t":{"docs":{},"df":0,";":{"docs":{},"df":0,"d":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"&":{"docs":{},"df":0,"g":{"docs":{},"df":0,"t":{"docs":{},"df":0,";":{"docs":{},"df":0,"/":{"docs":{},"df":0,".":{"docs":{},"df":0,"w":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/crypto/acme protocol/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}},"a":{"docs":{},"df":0,"p":{"docs":{},"df":0,"t":{"docs":{},"df":0,".":{"docs":{},"df":0,"l":{"docs":{},"df":0,"l":{"docs":{},"df":0,"v":{"docs":{},"df":0,"m":{"docs":{},"df":0,".":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"g":{"docs":{},"df":0,"/":{"docs":{},"df":0,"f":{"docs":{},"df":0,"o":{"docs":{},"df":0,"c":{"docs":{"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}},"b":{"docs":{},"df":0,"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"g":{"docs":{},"df":0,".":{"docs":{},"df":0,"v":{"docs":{},"df":0,"m":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,".":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"/":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"/":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}},"l":{"docs":{},"df":0,"l":{"docs":{},"df":0,"v":{"docs":{},"df":0,"m":{"docs":{},"df":0,".":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"g":{"docs":{},"df":0,"/":{"docs":{},"df":0,"d":{"docs":{},"df":0,"o":{"docs":{},"df":0,"c":{"docs":{},"df":0,"s":{"docs":{},"df":0,"/":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"b":{"docs":{},"df":0,"f":{"docs":{},"df":0,"u":{"docs":{},"df":0,"z":{"docs":{},"df":0,"z":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,".":{"docs":{},"df":0,"h":{"docs":{},"df":0,"t":{"docs":{},"df":0,"m":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/fuzzing/fuzzing/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}},"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"y":{"docs":{},"df":0,".":{"docs":{},"df":0,"g":{"docs":{},"df":0,"b":{"docs":{},"df":0,"i":{"docs":{},"df":0,"v":{"docs":{},"df":0,".":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.4142135623730951}},"df":2}}}}}}}}}}}},"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"u":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"e":{"docs":{},"df":0,".":{"docs":{},"df":0,"i":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{},"df":0,"f":{"docs":{},"df":0,".":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"g":{"docs":{},"df":0,"/":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"s":{"docs":{"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.0}},"df":2}}}}}}}}}}}}}}}}}}}}}},"u":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,".":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"b":{"docs":{},"df":0,"f":{"docs":{},"df":0,"u":{"docs":{},"df":0,"z":{"docs":{},"df":0,"z":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,".":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"f":{"docs":{},"df":0,"o":{"docs":{"https://phlip9.com/notes/fuzzing/fuzzing/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}},"w":{"docs":{},"df":0,"w":{"docs":{},"df":0,"w":{"docs":{},"df":0,".":{"docs":{},"df":0,"i":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"a":{"docs":{},"df":0,".":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"g":{"docs":{},"df":0,"/":{"docs":{},"df":0,"d":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"s":{"docs":{},"df":0,"/":{"docs":{},"df":0,"e":{"docs":{},"df":0,"x":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{},"df":0,"p":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}},"l":{"docs":{},"df":0,"p":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"z":{"docs":{},"df":0,".":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"g":{"docs":{},"df":0,"/":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"/":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"b":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"p":{"docs":{},"df":0,"i":{"docs":{},"df":0,"/":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"x":{"docs":{},"df":0,".":{"docs":{},"df":0,"h":{"docs":{},"df":0,"t":{"docs":{},"df":0,"m":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/misc/setting up a headless raspbian boot image/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"b":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{},"df":0,"h":{"docs":{},"df":0,"u":{"docs":{},"df":0,"r":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,".":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"/":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"b":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/combinatorics/k-combinations of a multiset/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}},"n":{"docs":{},"df":0,"o":{"docs":{},"df":0,"t":{"docs":{},"df":0,".":{"docs":{},"df":0,"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.4142135623730951}},"df":2}}}}}}}},"p":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/fuzzing/fuzzing/":{"tf":1.0}},"df":1}},"r":{"docs":{},"df":0,"f":{"docs":{},"df":0,"c":{"docs":{"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.0}},"df":2}}}}}}}}}},"a":{"docs":{"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":1.7320508075688772}},"df":1,"/":{"docs":{},"df":0,"1":{"docs":{},"df":0,".":{"docs":{},"df":0,"1":{"docs":{"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":1.0}},"df":1}}},"2":{"docs":{"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":1.0}},"df":1}}},"s":{"docs":{},"df":0,":":{"docs":{},"df":0,"/":{"docs":{},"df":0,"/":{"docs":{},"df":0,"1":{"docs":{},"df":0,"p":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{},"df":0,"s":{"docs":{},"df":0,"w":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"d":{"docs":{},"df":0,".":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"/":{"docs":{},"df":0,"p":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"d":{"docs":{},"df":0,"u":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{},"df":0,"s":{"docs":{},"df":0,"/":{"docs":{},"df":0,"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/devops/secrets/1password - secrets automation/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"u":{"docs":{},"df":0,"s":{"docs":{},"df":0,"h":{"docs":{},"df":0,".":{"docs":{},"df":0,"g":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"h":{"docs":{},"df":0,"u":{"docs":{},"df":0,"b":{"docs":{},"df":0,".":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"/":{"docs":{},"df":0,"p":{"docs":{},"df":0,"a":{"docs":{},"df":0,"p":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"s":{"docs":{},"df":0,".":{"docs":{},"df":0,"h":{"docs":{},"df":0,"t":{"docs":{},"df":0,"m":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/crypto/(talk) authenticated data structures for stateless validation/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}},"p":{"docs":{},"df":0,"i":{"docs":{},"df":0,".":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"u":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"d":{"docs":{},"df":0,"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"v":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,".":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{},"df":0,".":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"/":{"docs":{},"df":0,"s":{"docs":{},"df":0,"g":{"docs":{},"df":0,"x":{"docs":{},"df":0,"/":{"docs":{},"df":0,"c":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"f":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"/":{"docs":{},"df":0,"v":{"docs":{},"df":0,"3":{"docs":{},"df":0,"/":{"docs":{},"df":0,"q":{"docs":{},"df":0,"e":{"docs":{},"df":0,"/":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.0}},"df":1}}}}}}},"v":{"docs":{},"df":0,"e":{"docs":{},"df":0,"/":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.0}},"df":1}}}}}}}}},"t":{"docs":{},"df":0,"c":{"docs":{},"df":0,"b":{"docs":{},"df":0,"?":{"docs":{},"df":0,"f":{"docs":{},"df":0,"m":{"docs":{},"df":0,"s":{"docs":{},"df":0,"p":{"docs":{},"df":0,"c":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"t":{"docs":{},"df":0,".":{"docs":{},"df":0,"l":{"docs":{},"df":0,"l":{"docs":{},"df":0,"v":{"docs":{},"df":0,"m":{"docs":{},"df":0,".":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"g":{"docs":{},"df":0,"/":{"docs":{},"df":0,"l":{"docs":{},"df":0,"l":{"docs":{},"df":0,"v":{"docs":{},"df":0,"m":{"docs":{"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}},"r":{"docs":{},"df":0,"x":{"docs":{},"df":0,"i":{"docs":{},"df":0,"v":{"docs":{},"df":0,".":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"g":{"docs":{},"df":0,"/":{"docs":{},"df":0,"a":{"docs":{},"df":0,"b":{"docs":{},"df":0,"s":{"docs":{},"df":0,"/":{"docs":{},"df":0,"1":{"docs":{},"df":0,"8":{"docs":{},"df":0,"1":{"docs":{},"df":0,"2":{"docs":{},"df":0,".":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"1":{"docs":{},"df":0,"4":{"docs":{},"df":0,"0":{"docs":{"https://phlip9.com/notes/fuzzing/fuzzing/":{"tf":1.0}},"df":1}}}}}}}}}}}}}},"p":{"docs":{},"df":0,"d":{"docs":{},"df":0,"f":{"docs":{},"df":0,"/":{"docs":{},"df":0,"2":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"3":{"docs":{},"df":0,".":{"docs":{},"df":0,"1":{"docs":{},"df":0,"1":{"docs":{},"df":0,"5":{"docs":{},"df":0,"0":{"docs":{},"df":0,"6":{"docs":{},"df":0,".":{"docs":{},"df":0,"p":{"docs":{},"df":0,"d":{"docs":{},"df":0,"f":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/fastpay/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}},"z":{"docs":{},"df":0,"u":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,".":{"docs":{},"df":0,"m":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"s":{"docs":{},"df":0,"o":{"docs":{},"df":0,"f":{"docs":{},"df":0,"t":{"docs":{},"df":0,".":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"/":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}},"b":{"docs":{},"df":0,"g":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,".":{"docs":{},"df":0,"g":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"h":{"docs":{},"df":0,"u":{"docs":{},"df":0,"b":{"docs":{},"df":0,".":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"/":{"docs":{},"df":0,"p":{"docs":{},"df":0,"o":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"s":{"docs":{},"df":0,"/":{"docs":{},"df":0,"2":{"docs":{},"df":0,"0":{"docs":{},"df":0,"1":{"docs":{},"df":0,"9":{"docs":{"https://phlip9.com/notes/misc/arm target triples/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}},"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"o":{"docs":{},"df":0,"p":{"docs":{},"df":0,"s":{"docs":{},"df":0,".":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"g":{"docs":{},"df":0,"/":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"/":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"p":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"s":{"docs":{},"df":0,"/":{"docs":{},"df":0,"z":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{"https://phlip9.com/notes/btc-ln/zero-conf channels/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}},"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"c":{"docs":{},"df":0,"k":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"i":{"docs":{},"df":0,".":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"/":{"docs":{},"df":0,"s":{"docs":{},"df":0,"u":{"docs":{},"df":0,"b":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/btc-ln/breez lightning service providers/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}},"g":{"docs":{},"df":0,".":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"g":{"docs":{},"df":0,"e":{"docs":{},"df":0,"h":{"docs":{},"df":0,"r":{"docs":{},"df":0,".":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"g":{"docs":{},"df":0,"/":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{},"df":0,"i":{"docs":{},"df":0,"v":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"/":{"docs":{},"df":0,"1":{"docs":{},"df":0,"0":{"docs":{},"df":0,"3":{"docs":{},"df":0,"9":{"docs":{"https://phlip9.com/notes/fuzzing/fuzzing/":{"tf":1.0}},"df":1}}},"2":{"docs":{},"df":0,"6":{"docs":{},"df":0,"9":{"docs":{"https://phlip9.com/notes/fuzzing/fuzzing/":{"tf":1.0}},"df":1}},"8":{"docs":{},"df":0,"4":{"docs":{"https://phlip9.com/notes/fuzzing/fuzzing/":{"tf":1.0}},"df":1}}}},"5":{"docs":{},"df":0,"9":{"docs":{},"df":0,"1":{"docs":{"https://phlip9.com/notes/fuzzing/fuzzing/":{"tf":1.0}},"df":1}}},"6":{"docs":{},"df":0,"7":{"docs":{},"df":0,"2":{"docs":{"https://phlip9.com/notes/fuzzing/fuzzing/":{"tf":1.0}},"df":1}}},"8":{"docs":{},"df":0,"9":{"docs":{},"df":0,"6":{"docs":{"https://phlip9.com/notes/fuzzing/fuzzing/":{"tf":1.0}},"df":1}}},"9":{"docs":{},"df":0,"2":{"docs":{},"df":0,"5":{"docs":{"https://phlip9.com/notes/fuzzing/fuzzing/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}},"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"i":{"docs":{},"df":0,"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"f":{"docs":{},"df":0,"b":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"s":{"docs":{},"df":0,".":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"/":{"docs":{},"df":0,"2":{"docs":{},"df":0,"0":{"docs":{},"df":0,"1":{"docs":{},"df":0,"8":{"docs":{},"df":0,"/":{"docs":{},"df":0,"1":{"docs":{},"df":0,"0":{"docs":{},"df":0,"/":{"docs":{},"df":0,"0":{"docs":{},"df":0,"5":{"docs":{},"df":0,"/":{"docs":{},"df":0,"h":{"docs":{},"df":0,"o":{"docs":{},"df":0,"w":{"docs":{"https://phlip9.com/notes/fuzzing/fuzzing/":{"tf":1.0}},"df":1}}}}}}}}}}},"9":{"docs":{},"df":0,"/":{"docs":{},"df":0,"0":{"docs":{},"df":0,"1":{"docs":{},"df":0,"/":{"docs":{},"df":0,"2":{"docs":{},"df":0,"2":{"docs":{},"df":0,"/":{"docs":{},"df":0,"f":{"docs":{},"df":0,"u":{"docs":{},"df":0,"z":{"docs":{},"df":0,"z":{"docs":{"https://phlip9.com/notes/fuzzing/fuzzing/":{"tf":1.0}},"df":1}}}}}},"3":{"docs":{},"df":0,"/":{"docs":{},"df":0,"f":{"docs":{},"df":0,"u":{"docs":{},"df":0,"z":{"docs":{},"df":0,"z":{"docs":{"https://phlip9.com/notes/fuzzing/fuzzing/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"e":{"docs":{},"df":0,"z":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,".":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"/":{"docs":{},"df":0,"b":{"docs":{},"df":0,"i":{"docs":{},"df":0,"p":{"docs":{},"df":0,"1":{"docs":{},"df":0,"5":{"docs":{},"df":0,"8":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/bip158 - compact block filters/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}},"u":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"h":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,".":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,".":{"docs":{},"df":0,"n":{"docs":{},"df":0,"z":{"docs":{},"df":0,"/":{"docs":{},"df":0,"2":{"docs":{},"df":0,"0":{"docs":{},"df":0,"1":{"docs":{},"df":0,"1":{"docs":{},"df":0,"/":{"docs":{},"df":0,"0":{"docs":{},"df":0,"4":{"docs":{},"df":0,"/":{"docs":{},"df":0,"2":{"docs":{},"df":0,"5":{"docs":{},"df":0,"/":{"docs":{},"df":0,"s":{"docs":{},"df":0,"h":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"c":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{},"df":0,"s":{"docs":{},"df":0,"h":{"docs":{},"df":0,"a":{"docs":{},"df":0,"f":{"docs":{},"df":0,"t":{"docs":{},"df":0,".":{"docs":{},"df":0,"g":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"h":{"docs":{},"df":0,"u":{"docs":{},"df":0,"b":{"docs":{},"df":0,".":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"/":{"docs":{},"df":0,"b":{"docs":{},"df":0,"o":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"/":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"d":{"docs":{},"df":0,"u":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,".":{"docs":{},"df":0,"h":{"docs":{},"df":0,"t":{"docs":{},"df":0,"m":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/fuzzing/bolero - fuzzing + property testing/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}},"t":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"s":{"docs":{},"df":0,"/":{"docs":{},"df":0,"f":{"docs":{},"df":0,"i":{"docs":{},"df":0,"b":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"c":{"docs":{},"df":0,"i":{"docs":{},"df":0,".":{"docs":{},"df":0,"h":{"docs":{},"df":0,"t":{"docs":{},"df":0,"m":{"docs":{},"df":0,"l":{"docs":{},"df":0,"#":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/fuzzing/bolero - fuzzing + property testing/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"d":{"docs":{},"df":0,"r":{"docs":{},"df":0,"d":{"docs":{},"df":0,"v":{"docs":{},"df":0,"2":{"docs":{},"df":0,".":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{},"df":0,".":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"/":{"docs":{},"df":0,"v":{"docs":{},"df":0,"1":{"docs":{},"df":0,"/":{"docs":{},"df":0,"d":{"docs":{},"df":0,"l":{"docs":{},"df":0,"/":{"docs":{},"df":0,"g":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"/":{"docs":{},"df":0,"6":{"docs":{},"df":0,"7":{"docs":{},"df":0,"1":{"docs":{},"df":0,"2":{"docs":{},"df":0,"2":{"docs":{},"df":0,"2":{"docs":{},"df":0,"?":{"docs":{},"df":0,"e":{"docs":{},"df":0,"x":{"docs":{},"df":0,"p":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"v":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"=":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"u":{"docs":{"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"i":{"docs":{},"df":0,"r":{"docs":{},"df":0,"c":{"docs":{},"df":0,"u":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"p":{"docs":{},"df":0,"y":{"docs":{},"df":0,"t":{"docs":{},"df":0,"h":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,".":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"g":{"docs":{},"df":0,"/":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"b":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}},"o":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"w":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"h":{"docs":{},"df":0,".":{"docs":{},"df":0,"m":{"docs":{},"df":0,"u":{"docs":{},"df":0,"/":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"/":{"docs":{},"df":0,"d":{"docs":{},"df":0,"o":{"docs":{},"df":0,"w":{"docs":{},"df":0,"n":{"docs":{},"df":0,"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}},"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,".":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"/":{"docs":{},"df":0,"c":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"/":{"docs":{},"df":0,"b":{"docs":{},"df":0,"o":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{"https://phlip9.com/notes/fuzzing/bolero - fuzzing + property testing/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}},"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"v":{"docs":{},"df":0,"b":{"docs":{},"df":0,"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"g":{"docs":{},"df":0,"s":{"docs":{},"df":0,".":{"docs":{},"df":0,"m":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"s":{"docs":{},"df":0,"o":{"docs":{},"df":0,"f":{"docs":{},"df":0,"t":{"docs":{},"df":0,".":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"/":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"/":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/android/ADB over TCP inside WSL2/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"e":{"docs":{},"df":0,"l":{"docs":{},"df":0,"m":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"k":{"docs":{},"df":0,".":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"/":{"docs":{},"df":0,"2":{"docs":{},"df":0,"0":{"docs":{},"df":0,"2":{"docs":{},"df":0,"1":{"docs":{},"df":0,"/":{"docs":{},"df":0,"0":{"docs":{},"df":0,"6":{"docs":{},"df":0,"/":{"docs":{},"df":0,"0":{"docs":{},"df":0,"5":{"docs":{},"df":0,"/":{"docs":{},"df":0,"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/android/ADB over TCP inside WSL2/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}},"o":{"docs":{},"df":0,"p":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,".":{"docs":{},"df":0,"1":{"docs":{},"df":0,"p":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{},"df":0,"s":{"docs":{},"df":0,"w":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"d":{"docs":{},"df":0,".":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"/":{"docs":{},"df":0,"d":{"docs":{},"df":0,"o":{"docs":{},"df":0,"c":{"docs":{},"df":0,"s":{"docs":{},"df":0,"/":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/devops/secrets/1password - secrets automation/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}},"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{},"df":0,".":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"/":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"u":{"docs":{},"df":0,"d":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0}},"df":1,"#":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/android/android cli setup/":{"tf":1.0}},"df":1}}}}}}}},"/":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"/":{"docs":{},"df":0,"p":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"f":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"m":{"docs":{"https://phlip9.com/notes/android/root phone with magisk/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}},"u":{"docs":{},"df":0,"n":{"docs":{},"df":0,"/":{"docs":{},"df":0,"e":{"docs":{},"df":0,"m":{"docs":{},"df":0,"u":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0}},"df":1}}}},"o":{"docs":{},"df":0,"e":{"docs":{},"df":0,"m":{"docs":{"https://phlip9.com/notes/android/root phone with magisk/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}},"p":{"docs":{},"df":0,"p":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,".":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"/":{"docs":{},"df":0,"x":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"/":{"docs":{},"df":0,"d":{"docs":{},"df":0,"o":{"docs":{},"df":0,"w":{"docs":{},"df":0,"n":{"docs":{},"df":0,"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/ios/ios setup/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}},"n":{"docs":{},"df":0,"v":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{},"df":0,"i":{"docs":{},"df":0,"a":{"docs":{},"df":0,".":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"/":{"docs":{},"df":0,"c":{"docs":{},"df":0,"u":{"docs":{},"df":0,"d":{"docs":{},"df":0,"a":{"docs":{},"df":0,"/":{"docs":{},"df":0,"w":{"docs":{},"df":0,"s":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}},"s":{"docs":{},"df":0,".":{"docs":{},"df":0,"g":{"docs":{},"df":0,"o":{"docs":{},"df":0,"o":{"docs":{},"df":0,"g":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,".":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"/":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{},"df":0,"/":{"docs":{},"df":0,"i":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"g":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"#":{"docs":{},"df":0,"w":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"y":{"docs":{"https://phlip9.com/notes/android/root phone with magisk/":{"tf":1.0}},"df":1}}}}}}}}}}}}},"o":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"#":{"docs":{},"df":0,"b":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"b":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/android/OTA updates for rooted android phone/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"d":{"docs":{},"df":0,"h":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,".":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"/":{"docs":{},"df":0,"b":{"docs":{},"df":0,"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"g":{"docs":{},"df":0,"/":{"docs":{},"df":0,"2":{"docs":{},"df":0,"0":{"docs":{},"df":0,"1":{"docs":{},"df":0,"9":{"docs":{},"df":0,"/":{"docs":{},"df":0,"0":{"docs":{},"df":0,"3":{"docs":{},"df":0,"/":{"docs":{},"df":0,"0":{"docs":{},"df":0,"5":{"docs":{},"df":0,"/":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"d":{"docs":{},"df":0,"u":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/fuzzing/fuzzing/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"x":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{},"df":0,"p":{"docs":{},"df":0,".":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{"https://phlip9.com/notes/crypto/dex - open-source OIDC & OAuth 2.0 provider/":{"tf":1.0}},"df":1}}}}}}}},"l":{"docs":{},"df":0,".":{"docs":{},"df":0,"g":{"docs":{},"df":0,"o":{"docs":{},"df":0,"o":{"docs":{},"df":0,"g":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,".":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"/":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{},"df":0,"/":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"p":{"docs":{},"df":0,"o":{"docs":{},"df":0,"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"y":{"docs":{},"df":0,"/":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"o":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/android/android cli setup/":{"tf":1.4142135623730951}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"o":{"docs":{},"df":0,"c":{"docs":{},"df":0,"s":{"docs":{},"df":0,".":{"docs":{},"df":0,"c":{"docs":{},"df":0,"i":{"docs":{},"df":0,"r":{"docs":{},"df":0,"c":{"docs":{},"df":0,"u":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"p":{"docs":{},"df":0,"y":{"docs":{},"df":0,"t":{"docs":{},"df":0,"h":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,".":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"g":{"docs":{},"df":0,"/":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"/":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"/":{"docs":{},"df":0,"s":{"docs":{},"df":0,"h":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"c":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"v":{"docs":{},"df":0,"e":{"docs":{},"df":0,".":{"docs":{},"df":0,"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{},"df":0,"/":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0}},"df":1}}}}}},"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"g":{"docs":{},"df":0,"n":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"g":{"docs":{},"df":0,".":{"docs":{},"df":0,"h":{"docs":{},"df":0,"t":{"docs":{},"df":0,"m":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}},"d":{"docs":{},"df":0,"o":{"docs":{},"df":0,"c":{"docs":{},"df":0,"k":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,".":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"/":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"p":{"docs":{},"df":0,"o":{"docs":{},"df":0,"s":{"docs":{"https://phlip9.com/notes/devops/docker compose/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}},"e":{"docs":{},"df":0,"d":{"docs":{},"df":0,"g":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"s":{"docs":{},"df":0,".":{"docs":{},"df":0,"s":{"docs":{},"df":0,"y":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"m":{"docs":{},"df":0,"s":{"docs":{},"df":0,"/":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"b":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"u":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/confidential computing/marblerun/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}},"f":{"docs":{},"df":0,"l":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,".":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"v":{"docs":{},"df":0,"/":{"docs":{},"df":0,"g":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/lang/flutter/flutter setup/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}},"g":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,".":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"g":{"docs":{},"df":0,"/":{"docs":{},"df":0,"c":{"docs":{},"df":0,"u":{"docs":{},"df":0,"r":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"/":{"docs":{},"df":0,"u":{"docs":{},"df":0,"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"g":{"docs":{},"df":0,"u":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"/":{"docs":{},"df":0,"j":{"docs":{},"df":0,"a":{"docs":{},"df":0,"v":{"docs":{},"df":0,"a":{"docs":{},"df":0,"_":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"g":{"docs":{},"df":0,".":{"docs":{},"df":0,"h":{"docs":{},"df":0,"t":{"docs":{},"df":0,"m":{"docs":{},"df":0,"l":{"docs":{},"df":0,"#":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"_":{"docs":{},"df":0,"f":{"docs":{},"df":0,"i":{"docs":{},"df":0,"l":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"w":{"docs":{},"df":0,"n":{"docs":{},"df":0,"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{},"df":0,".":{"docs":{},"df":0,"0":{"docs":{},"df":0,"1":{"docs":{},"df":0,".":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"g":{"docs":{},"df":0,"/":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":2.6457513110645907},"https://phlip9.com/notes/confidential computing/gramine/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.4142135623730951}},"df":3}}}}}}}}}}}},"d":{"docs":{},"df":0,"o":{"docs":{},"df":0,"c":{"docs":{},"df":0,"k":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,".":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"/":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"u":{"docs":{},"df":0,"x":{"docs":{},"df":0,"/":{"docs":{},"df":0,"u":{"docs":{},"df":0,"b":{"docs":{},"df":0,"u":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"u":{"docs":{"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.0}},"df":1,"/":{"docs":{},"df":0,"g":{"docs":{},"df":0,"p":{"docs":{},"df":0,"g":{"docs":{"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}},"s":{"docs":{},"df":0,".":{"docs":{},"df":0,"c":{"docs":{},"df":0,"i":{"docs":{},"df":0,"r":{"docs":{},"df":0,"c":{"docs":{},"df":0,"u":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"p":{"docs":{},"df":0,"y":{"docs":{},"df":0,"t":{"docs":{},"df":0,"h":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,".":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"g":{"docs":{},"df":0,"/":{"docs":{},"df":0,"b":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"/":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"x":{"docs":{},"df":0,"p":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"_":{"docs":{},"df":0,"m":{"docs":{},"df":0,"4":{"docs":{},"df":0,"/":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"_":{"docs":{},"df":0,"u":{"docs":{},"df":0,"s":{"docs":{},"df":0,"/":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{},"df":0,"a":{"docs":{},"df":0,"f":{"docs":{},"df":0,"r":{"docs":{},"df":0,"u":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"q":{"docs":{},"df":0,"d":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"g":{"docs":{},"df":0,"g":{"docs":{},"df":0,".":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"/":{"docs":{},"df":0,"w":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{},"df":0,"o":{"docs":{},"df":0,"w":{"docs":{},"df":0,"s":{"docs":{},"df":0,"/":{"docs":{},"df":0,"2":{"docs":{},"df":0,"0":{"docs":{},"df":0,"2":{"docs":{},"df":0,"0":{"docs":{},"df":0,"/":{"docs":{},"df":0,"0":{"docs":{},"df":0,"5":{"docs":{},"df":0,"/":{"docs":{},"df":0,"3":{"docs":{},"df":0,"1":{"docs":{},"df":0,"/":{"docs":{},"df":0,"w":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{},"df":0,"o":{"docs":{},"df":0,"w":{"docs":{"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"e":{"docs":{},"df":0,"d":{"docs":{},"df":0,"p":{"docs":{},"df":0,".":{"docs":{},"df":0,"f":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"i":{"docs":{},"df":0,"x":{"docs":{},"df":0,".":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"/":{"docs":{},"df":0,"d":{"docs":{},"df":0,"o":{"docs":{},"df":0,"c":{"docs":{},"df":0,"s":{"docs":{},"df":0,"/":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"/":{"docs":{},"df":0,"g":{"docs":{},"df":0,"u":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0}},"df":1}}}},"h":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{},"df":0,"p":{"docs":{},"df":0,"/":{"docs":{},"df":0,"#":{"docs":{},"df":0,"f":{"docs":{},"df":0,"l":{"docs":{},"df":0,"c":{"docs":{"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0}},"df":1}}},"r":{"docs":{},"df":0,"u":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0}},"df":1}}},"s":{"docs":{},"df":0,"g":{"docs":{},"df":0,"x":{"docs":{"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"n":{"docs":{},"df":0,".":{"docs":{},"df":0,"w":{"docs":{},"df":0,"i":{"docs":{},"df":0,"k":{"docs":{},"df":0,"i":{"docs":{},"df":0,"p":{"docs":{},"df":0,"e":{"docs":{},"df":0,"d":{"docs":{},"df":0,"i":{"docs":{},"df":0,"a":{"docs":{},"df":0,".":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"g":{"docs":{},"df":0,"/":{"docs":{},"df":0,"w":{"docs":{},"df":0,"i":{"docs":{},"df":0,"k":{"docs":{},"df":0,"i":{"docs":{},"df":0,"/":{"docs":{},"df":0,"w":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"s":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{"https://phlip9.com/notes/statistics probability/winsorize/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}},"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"x":{"docs":{},"df":0,".":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"v":{"docs":{"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.0}},"df":1}}}}}}}},"p":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,".":{"docs":{},"df":0,"i":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"r":{"docs":{},"df":0,".":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"g":{"docs":{},"df":0,"/":{"docs":{},"df":0,"2":{"docs":{},"df":0,"0":{"docs":{},"df":0,"1":{"docs":{},"df":0,"9":{"docs":{},"df":0,"/":{"docs":{},"df":0,"6":{"docs":{},"df":0,"1":{"docs":{},"df":0,"1":{"docs":{},"df":0,".":{"docs":{},"df":0,"p":{"docs":{},"df":0,"d":{"docs":{},"df":0,"f":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/btc utreexo - utxo accumulator/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}},"x":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{},"df":0,"p":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,".":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"/":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"/":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{},"df":0,"/":{"docs":{},"df":0,"e":{"docs":{},"df":0,"v":{"docs":{},"df":0,"o":{"docs":{},"df":0,"f":{"docs":{},"df":0,"k":{"docs":{},"df":0,"h":{"docs":{},"df":0,"n":{"docs":{},"df":0,"u":{"docs":{},"df":0,"6":{"docs":{},"df":0,"0":{"docs":{},"df":0,"w":{"docs":{},"df":0,"g":{"docs":{"https://phlip9.com/notes/crypto/acme protocol/":{"tf":1.0}},"df":1,"/":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/crypto/acme protocol/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}},"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"w":{"docs":{"https://phlip9.com/notes/crypto/acme protocol/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}},"f":{"docs":{},"df":0,"b":{"docs":{},"df":0,"f":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"p":{"docs":{},"df":0,"p":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,".":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0}},"df":1}}}}}}}}}}}},"e":{"docs":{},"df":0,"l":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{},"df":0,"s":{"docs":{},"df":0,".":{"docs":{},"df":0,"n":{"docs":{},"df":0,"o":{"docs":{},"df":0,"/":{"docs":{},"df":0,"p":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"j":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{},"df":0,"s":{"docs":{},"df":0,"/":{"docs":{},"df":0,"k":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"s":{"docs":{},"df":0,"u":{"docs":{},"df":0,"g":{"docs":{},"df":0,"i":{"docs":{},"df":0,".":{"docs":{},"df":0,"p":{"docs":{},"df":0,"h":{"docs":{},"df":0,"p":{"docs":{"https://phlip9.com/notes/misc/kintsugi/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"o":{"docs":{},"df":0,"x":{"docs":{},"df":0,"g":{"docs":{},"df":0,"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"v":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"u":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"y":{"docs":{},"df":0,".":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"/":{"docs":{},"df":0,"2":{"docs":{},"df":0,"0":{"docs":{},"df":0,"1":{"docs":{},"df":0,"6":{"docs":{},"df":0,"/":{"docs":{},"df":0,"0":{"docs":{},"df":0,"3":{"docs":{},"df":0,"/":{"docs":{},"df":0,"1":{"docs":{},"df":0,"5":{"docs":{},"df":0,"/":{"docs":{},"df":0,"f":{"docs":{},"df":0,"u":{"docs":{},"df":0,"z":{"docs":{},"df":0,"z":{"docs":{"https://phlip9.com/notes/fuzzing/fuzzing/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"u":{"docs":{},"df":0,"z":{"docs":{},"df":0,"z":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"k":{"docs":{},"df":0,".":{"docs":{},"df":0,"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"o":{"docs":{},"df":0,"c":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,".":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"g":{"docs":{"https://phlip9.com/notes/fuzzing/fuzzcheck-rs/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}},"g":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{},"df":0,".":{"docs":{},"df":0,"s":{"docs":{},"df":0,"d":{"docs":{},"df":0,"k":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,".":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"?":{"docs":{},"df":0,"r":{"docs":{},"df":0,"c":{"docs":{},"df":0,"u":{"docs":{},"df":0,"p":{"docs":{},"df":0,"d":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"=":{"docs":{},"df":0,"f":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"s":{"docs":{"https://phlip9.com/notes/android/android cli setup/":{"tf":1.0},"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0}},"df":2}}}}}}}}}}}}}}}}}}}}}}}}}},"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"h":{"docs":{},"df":0,"u":{"docs":{},"df":0,"b":{"docs":{},"df":0,".":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"/":{"docs":{},"df":0,"0":{"docs":{},"df":0,"1":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"g":{"docs":{},"df":0,"/":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"u":{"docs":{},"df":0,"x":{"docs":{"https://phlip9.com/notes/confidential computing/gramine/":{"tf":1.0}},"df":1}}}}}}}}}}},"1":{"docs":{},"df":0,"p":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{},"df":0,"s":{"docs":{},"df":0,"w":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"d":{"docs":{},"df":0,"/":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/devops/secrets/1password - secrets automation/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}},"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"q":{"docs":{},"df":0,"/":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"i":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/btc-ln/lightning libs/":{"tf":1.0}},"df":1}}}}}}}}}}},"d":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"k":{"docs":{},"df":0,"o":{"docs":{},"df":0,"h":{"docs":{},"df":0,"l":{"docs":{},"df":0,"b":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"k":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"/":{"docs":{},"df":0,"e":{"docs":{},"df":0,"j":{"docs":{},"df":0,"s":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/devops/secrets/ejson-kms (AWS)/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}},"p":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/aptos/":{"tf":1.0}},"df":1}}}},"b":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"c":{"docs":{},"df":0,"u":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/crypto/biscuit authz/":{"tf":1.0}},"df":1}}}}},"t":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"/":{"docs":{},"df":0,"b":{"docs":{},"df":0,"i":{"docs":{},"df":0,"p":{"docs":{},"df":0,"s":{"docs":{},"df":0,"/":{"docs":{},"df":0,"b":{"docs":{},"df":0,"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"b":{"docs":{},"df":0,"/":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"/":{"docs":{},"df":0,"b":{"docs":{},"df":0,"i":{"docs":{},"df":0,"p":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/bip158 - compact block filters/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}},"o":{"docs":{},"df":0,"o":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"/":{"docs":{},"df":0,"c":{"docs":{},"df":0,"p":{"docs":{},"df":0,"p":{"docs":{},"df":0,"n":{"docs":{},"df":0,"o":{"docs":{},"df":0,"w":{"docs":{},"df":0,"_":{"docs":{},"df":0,"p":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"s":{"docs":{},"df":0,"_":{"docs":{},"df":0,"2":{"docs":{},"df":0,"0":{"docs":{},"df":0,"1":{"docs":{},"df":0,"8":{"docs":{},"df":0,"/":{"docs":{},"df":0,"b":{"docs":{},"df":0,"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"b":{"docs":{},"df":0,"/":{"docs":{},"df":0,"m":{"docs":{"https://phlip9.com/notes/fuzzing/fuzzing/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"e":{"docs":{},"df":0,"z":{"docs":{},"df":0,"/":{"docs":{},"df":0,"b":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"e":{"docs":{},"df":0,"z":{"docs":{"https://phlip9.com/notes/btc-ln/lightning libs/":{"tf":1.0}},"df":1,"m":{"docs":{},"df":0,"o":{"docs":{},"df":0,"b":{"docs":{},"df":0,"i":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/btc-ln/lightning libs/":{"tf":1.0}},"df":1}}}}}}}}}},"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"v":{"docs":{"https://phlip9.com/notes/btc-ln/lightning libs/":{"tf":1.0}},"df":1}}}}}}}}},"t":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{},"df":0,"/":{"docs":{},"df":0,"i":{"docs":{},"df":0,"m":{"docs":{},"df":0,"m":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/btc-ln/lightning libs/":{"tf":1.0}},"df":1}}}}}}}},"w":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/btc-ln/lightning libs/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}},"c":{"docs":{},"df":0,"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"d":{"docs":{},"df":0,"h":{"docs":{},"df":0,"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{},"df":0,"/":{"docs":{},"df":0,"n":{"docs":{},"df":0,"a":{"docs":{},"df":0,"k":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{},"df":0,"o":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{"https://phlip9.com/notes/btc-ln/lightning libs/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}},"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"b":{"docs":{},"df":0,"s":{"docs":{},"df":0,"/":{"docs":{},"df":0,"m":{"docs":{},"df":0,"y":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"k":{"docs":{},"df":0,"o":{"docs":{"https://phlip9.com/notes/confidential computing/mystikos/":{"tf":1.0}},"df":1,"s":{"docs":{},"df":0,"/":{"docs":{},"df":0,"b":{"docs":{},"df":0,"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"b":{"docs":{},"df":0,"/":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"/":{"docs":{},"df":0,"d":{"docs":{},"df":0,"o":{"docs":{},"df":0,"c":{"docs":{},"df":0,"/":{"docs":{},"df":0,"u":{"docs":{},"df":0,"s":{"docs":{"https://phlip9.com/notes/confidential computing/mystikos/":{"tf":1.4142135623730951}},"df":1}}}}}}}}}}}}}}}},"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"e":{"docs":{},"df":0,"/":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"/":{"docs":{},"df":0,"s":{"docs":{},"df":0,"o":{"docs":{},"df":0,"l":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"s":{"docs":{},"df":0,"/":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"d":{"docs":{},"df":0,"_":{"docs":{},"df":0,"t":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/confidential computing/mystikos/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"m":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"y":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"m":{"docs":{},"df":0,"s":{"docs":{},"df":0,"/":{"docs":{},"df":0,"n":{"docs":{},"df":0,"i":{"docs":{},"df":0,"x":{"docs":{"https://phlip9.com/notes/reproducible builds/nix/nix auto-allocate-uids -> nixbld users/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}},"x":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{},"df":0,"p":{"docs":{},"df":0,"/":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"x":{"docs":{"https://phlip9.com/notes/crypto/dex - open-source OIDC & OAuth 2.0 provider/":{"tf":1.0}},"df":1}}}}}}}}},"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"1":{"docs":{},"df":0,"s":{"docs":{},"df":0,"/":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"b":{"docs":{},"df":0,"f":{"docs":{},"df":0,"u":{"docs":{},"df":0,"z":{"docs":{},"df":0,"z":{"docs":{"https://phlip9.com/notes/fuzzing/fuzzing/":{"tf":1.0}},"df":1}}}}}}}}}}}}},"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{},"df":0,"h":{"docs":{},"df":0,"l":{"docs":{},"df":0,"y":{"docs":{},"df":0,"/":{"docs":{},"df":0,"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{},"df":0,"h":{"docs":{},"df":0,"l":{"docs":{},"df":0,"y":{"docs":{},"df":0,"/":{"docs":{},"df":0,"b":{"docs":{},"df":0,"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"b":{"docs":{},"df":0,"/":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"/":{"docs":{},"df":0,"e":{"docs":{},"df":0,"x":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{},"df":0,"p":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"/":{"docs":{},"df":0,"r":{"docs":{},"df":0,"u":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"/":{"docs":{},"df":0,"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{},"df":0,"h":{"docs":{},"df":0,"f":{"docs":{},"df":0,"i":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"d":{"docs":{},"df":0,"g":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"s":{"docs":{},"df":0,"s":{"docs":{},"df":0,"y":{"docs":{},"df":0,"s":{"docs":{},"df":0,"/":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"b":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"u":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/confidential computing/marblerun/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}},"n":{"docs":{},"df":0,"v":{"docs":{},"df":0,"k":{"docs":{},"df":0,"e":{"docs":{},"df":0,"y":{"docs":{},"df":0,"/":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"v":{"docs":{},"df":0,"k":{"docs":{},"df":0,"e":{"docs":{},"df":0,"y":{"docs":{"https://phlip9.com/notes/devops/secrets/envkey/":{"tf":1.0}},"df":1}}}}}}}}}}}}},"f":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"e":{"docs":{},"df":0,"b":{"docs":{},"df":0,"o":{"docs":{},"df":0,"o":{"docs":{},"df":0,"k":{"docs":{},"df":0,"e":{"docs":{},"df":0,"x":{"docs":{},"df":0,"p":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"/":{"docs":{},"df":0,"m":{"docs":{},"df":0,"i":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/lang/rust/rust verification tools/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}},"l":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"/":{"docs":{},"df":0,"f":{"docs":{},"df":0,"l":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,".":{"docs":{},"df":0,"g":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/lang/flutter/flutter setup/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}},"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"i":{"docs":{},"df":0,"x":{"docs":{},"df":0,"/":{"docs":{},"df":0,"r":{"docs":{},"df":0,"u":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0}},"df":1}}}},"s":{"docs":{},"df":0,"d":{"docs":{},"df":0,"k":{"docs":{},"df":0,"m":{"docs":{"https://phlip9.com/notes/devops/secrets/fortanix DSM/":{"tf":1.0}},"df":1}}}}}}}}}}}}},"g":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"p":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"j":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{},"df":0,"/":{"docs":{},"df":0,"g":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/confidential computing/gramine/":{"tf":1.0}},"df":1,"e":{"docs":{},"df":0,".":{"docs":{},"df":0,"g":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/confidential computing/gramine/":{"tf":1.4142135623730951}},"df":1}}}}}}}}}},"s":{"docs":{},"df":0,"c":{"docs":{},"df":0,".":{"docs":{},"df":0,"g":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/confidential computing/gramine/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}},"h":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"b":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/statistics probability/herbie - float error fixer/":{"tf":1.0}},"df":1}}}}},"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{},"df":0,"/":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"u":{"docs":{},"df":0,"x":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.0}},"df":1}}}}},"s":{"docs":{},"df":0,"g":{"docs":{},"df":0,"x":{"docs":{"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0}},"df":1,"d":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"p":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"m":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"v":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,".":{"docs":{},"df":0,"g":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/confidential computing/gramine/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"k":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"f":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"/":{"docs":{},"df":0,"f":{"docs":{},"df":0,"i":{"docs":{},"df":0,"x":{"docs":{"https://phlip9.com/notes/misc/setting up a headless raspbian boot image/":{"tf":1.0}},"df":1}}}}}}}}}}}},"p":{"docs":{},"df":0,"c":{"docs":{},"df":0,"y":{"docs":{},"df":0,"r":{"docs":{},"df":0,"d":{"docs":{},"df":0,"/":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"b":{"docs":{},"df":0,"u":{"docs":{},"df":0,"i":{"docs":{},"df":0,"l":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/reproducible builds/rebuilderd/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}},"u":{"docs":{},"df":0,"b":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/devops/kind (kubernetes in docker)/":{"tf":1.0}},"df":1}}}}}}}},"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"m":{"docs":{},"df":0,"i":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"/":{"docs":{},"df":0,"f":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/performance/simdjson talk/":{"tf":1.0}},"df":1,"v":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/performance/simdjson talk/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}},"i":{"docs":{},"df":0,"g":{"docs":{},"df":0,"h":{"docs":{},"df":0,"t":{"docs":{},"df":0,"n":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"g":{"docs":{},"df":0,"/":{"docs":{},"df":0,"b":{"docs":{},"df":0,"o":{"docs":{},"df":0,"l":{"docs":{},"df":0,"t":{"docs":{},"df":0,"s":{"docs":{},"df":0,"/":{"docs":{},"df":0,"b":{"docs":{},"df":0,"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"b":{"docs":{},"df":0,"/":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"/":{"docs":{},"df":0,"0":{"docs":{},"df":0,"2":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.0}},"df":1},"4":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 4 - onion routing protocol/":{"tf":1.0}},"df":1},"7":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 7 - p2p node and channel discovery/":{"tf":1.0}},"df":1},"8":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 8 - secure noise transport/":{"tf":1.0}},"df":1}}}}}}}}}}}}}},"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"s":{"docs":{},"df":0,"u":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"/":{"docs":{},"df":0,"5":{"docs":{},"df":0,"6":{"docs":{},"df":0,"5":{"docs":{},"df":0,"#":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"s":{"docs":{},"df":0,"u":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{"https://phlip9.com/notes/btc-ln/zero-conf channels/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}},"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"v":{"docs":{},"df":0,"k":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"/":{"docs":{},"df":0,"l":{"docs":{},"df":0,"d":{"docs":{},"df":0,"k":{"docs":{"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.0}},"df":1}}},"r":{"docs":{},"df":0,"u":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":2.449489742783178},"https://phlip9.com/notes/btc-ln/lightning libs/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.0}},"df":3}}}}}}}}}}}}}}}}}}},"o":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"/":{"docs":{},"df":0,"f":{"docs":{},"df":0,"u":{"docs":{},"df":0,"z":{"docs":{},"df":0,"z":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"k":{"docs":{"https://phlip9.com/notes/fuzzing/fuzzcheck-rs/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}},"m":{"docs":{},"df":0,"0":{"docs":{},"df":0,"r":{"docs":{},"df":0,"f":{"docs":{},"df":0,"3":{"docs":{},"df":0,"0":{"docs":{},"df":0,"/":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/android/linux ADB udev setup/":{"tf":1.0}},"df":1}}}}}}}}}}}}},"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"9":{"docs":{},"df":0,"2":{"docs":{},"df":0,"/":{"docs":{},"df":0,"s":{"docs":{},"df":0,"o":{"docs":{},"df":0,"p":{"docs":{"https://phlip9.com/notes/devops/secrets/sops-nix/":{"tf":1.0}},"df":1}}}}}}},"t":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/btc utreexo - utxo accumulator/":{"tf":1.0}},"df":1}},"o":{"docs":{},"df":0,"z":{"docs":{},"df":0,"i":{"docs":{},"df":0,"l":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"/":{"docs":{},"df":0,"s":{"docs":{},"df":0,"o":{"docs":{},"df":0,"p":{"docs":{"https://phlip9.com/notes/devops/secrets/mozilla SOPS/":{"tf":1.0}},"df":1}}}}}}}}}},"s":{"docs":{},"df":0,"b":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{},"df":0,"s":{"docs":{},"df":0,"/":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{},"df":0,"r":{"docs":{},"df":0,"/":{"docs":{},"df":0,"b":{"docs":{},"df":0,"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"b":{"docs":{},"df":0,"/":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"/":{"docs":{},"df":0,"r":{"docs":{},"df":0,"/":{"docs":{},"df":0,"g":{"docs":{},"df":0,".":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,".":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/statistics probability/G-test - multinomial goodness-of-fit/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"y":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"b":{"docs":{},"df":0,"s":{"docs":{},"df":0,"/":{"docs":{},"df":0,"m":{"docs":{},"df":0,"y":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/devops/o11y/jaeger oss e2e tracing/":{"tf":1.0}},"df":1}}}}}},"s":{"docs":{},"df":0,"u":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/sui/":{"tf":1.0}},"df":1,"/":{"docs":{},"df":0,"b":{"docs":{},"df":0,"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"b":{"docs":{},"df":0,"/":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"/":{"docs":{},"df":0,"d":{"docs":{},"df":0,"o":{"docs":{},"df":0,"c":{"docs":{},"df":0,"/":{"docs":{},"df":0,"p":{"docs":{},"df":0,"a":{"docs":{},"df":0,"p":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"/":{"docs":{},"df":0,"s":{"docs":{},"df":0,"u":{"docs":{},"df":0,"i":{"docs":{},"df":0,".":{"docs":{},"df":0,"p":{"docs":{},"df":0,"d":{"docs":{},"df":0,"f":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/sui/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"o":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"p":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0}},"df":1,"/":{"docs":{},"df":0,"o":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":2.0}},"df":1}}}}}}}}}}}}}}}}},"p":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"c":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"v":{"docs":{},"df":0,"e":{"docs":{},"df":0,"/":{"docs":{},"df":0,"o":{"docs":{},"df":0,"p":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"c":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"v":{"docs":{},"df":0,"e":{"docs":{},"df":0,"/":{"docs":{},"df":0,"b":{"docs":{},"df":0,"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"b":{"docs":{},"df":0,"/":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"/":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"c":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"v":{"docs":{},"df":0,"e":{"docs":{},"df":0,"/":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"/":{"docs":{},"df":0,"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,".":{"docs":{},"df":0,"c":{"docs":{},"df":0,"#":{"docs":{},"df":0,"l":{"docs":{},"df":0,"9":{"docs":{},"df":0,"3":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}},"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"g":{"docs":{},"df":0,"/":{"docs":{},"df":0,"s":{"docs":{},"df":0,"g":{"docs":{},"df":0,"x":{"docs":{},"df":0,"/":{"docs":{},"df":0,"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"_":{"docs":{},"df":0,"g":{"docs":{},"df":0,"c":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,".":{"docs":{},"df":0,"c":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"c":{"docs":{},"df":0,"l":{"docs":{},"df":0,"u":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"/":{"docs":{},"df":0,"o":{"docs":{},"df":0,"p":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"c":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"v":{"docs":{},"df":0,"e":{"docs":{},"df":0,"/":{"docs":{},"df":0,"b":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"s":{"docs":{},"df":0,"/":{"docs":{},"df":0,"s":{"docs":{},"df":0,"g":{"docs":{},"df":0,"x":{"docs":{},"df":0,"/":{"docs":{},"df":0,"s":{"docs":{},"df":0,"g":{"docs":{},"df":0,"x":{"docs":{},"df":0,"t":{"docs":{},"df":0,"y":{"docs":{},"df":0,"p":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,".":{"docs":{},"df":0,"h":{"docs":{},"df":0,"#":{"docs":{},"df":0,"l":{"docs":{},"df":0,"1":{"docs":{},"df":0,"0":{"docs":{},"df":0,"7":{"docs":{},"df":0,"3":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"u":{"docs":{},"df":0,"s":{"docs":{},"df":0,"p":{"docs":{},"df":0,"g":{"docs":{},"df":0,"/":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"b":{"docs":{},"df":0,"f":{"docs":{},"df":0,"u":{"docs":{},"df":0,"z":{"docs":{},"df":0,"z":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"f":{"docs":{"https://phlip9.com/notes/fuzzing/fuzzing/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}},"p":{"docs":{},"df":0,"h":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"p":{"docs":{},"df":0,"9":{"docs":{},"df":0,".":{"docs":{},"df":0,"k":{"docs":{},"df":0,"e":{"docs":{},"df":0,"y":{"docs":{"https://phlip9.com/notes/devops/azure CLI/":{"tf":1.0}},"df":1}}}},"/":{"docs":{},"df":0,"f":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"p":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"m":{"docs":{},"df":0,"_":{"docs":{},"df":0,"b":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"/":{"docs":{},"df":0,"b":{"docs":{},"df":0,"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"b":{"docs":{},"df":0,"/":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"/":{"docs":{},"df":0,"s":{"docs":{},"df":0,"r":{"docs":{},"df":0,"c":{"docs":{},"df":0,"/":{"docs":{},"df":0,"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{},"df":0,"6":{"docs":{},"df":0,"4":{"docs":{},"df":0,".":{"docs":{},"df":0,"r":{"docs":{},"df":0,"s":{"docs":{},"df":0,"#":{"docs":{},"df":0,"l":{"docs":{},"df":0,"1":{"docs":{},"df":0,"2":{"docs":{},"df":0,"3":{"docs":{"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.0}},"df":1}},"9":{"docs":{"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"i":{"docs":{},"df":0,"d":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"2":{"docs":{"https://phlip9.com/notes/statistics probability/winsorize/":{"tf":1.0}},"df":1}}}}}},"k":{"docs":{},"df":0,"c":{"docs":{},"df":0,"d":{"docs":{},"df":0,"d":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"e":{"docs":{},"df":0,"/":{"docs":{},"df":0,"b":{"docs":{},"df":0,"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"b":{"docs":{},"df":0,"/":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"/":{"docs":{},"df":0,"k":{"docs":{},"df":0,"c":{"docs":{},"df":0,"d":{"docs":{},"df":0,"d":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"e":{"docs":{},"df":0,"/":{"docs":{},"df":0,"s":{"docs":{},"df":0,"r":{"docs":{},"df":0,"c":{"docs":{},"df":0,"/":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"s":{"docs":{},"df":0,".":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/statistics probability/G-test - multinomial goodness-of-fit/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"r":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/lang/rust/rr with rust/":{"tf":1.4142135623730951}},"df":1}},"s":{"docs":{},"df":0,"h":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/devops/secrets/sy - share secrets safely/":{"tf":1.0}},"df":1}},"o":{"docs":{},"df":0,"p":{"docs":{},"df":0,"i":{"docs":{},"df":0,"f":{"docs":{},"df":0,"y":{"docs":{},"df":0,"/":{"docs":{},"df":0,"e":{"docs":{},"df":0,"j":{"docs":{},"df":0,"s":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/devops/secrets/ejson (Shopify)/":{"tf":1.0}},"df":1,"2":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"v":{"docs":{"https://phlip9.com/notes/devops/secrets/ejson (Shopify)/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}},"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"l":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"p":{"docs":{},"df":0,"/":{"docs":{},"df":0,"c":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"f":{"docs":{"https://phlip9.com/notes/crypto/smallstep - private online CA & ACME server/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}},"s":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"b":{"docs":{"https://phlip9.com/notes/lang/rust/rust verification tools/":{"tf":1.0}},"df":1}}}},"u":{"docs":{},"df":0,"b":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"w":{"docs":{},"df":0,"a":{"docs":{},"df":0,"p":{"docs":{},"df":0,"s":{"docs":{},"df":0,"/":{"docs":{},"df":0,"s":{"docs":{},"df":0,"w":{"docs":{},"df":0,"a":{"docs":{},"df":0,"p":{"docs":{"https://phlip9.com/notes/btc-ln/submarine swaps/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}},"t":{"docs":{},"df":0,"h":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"g":{"docs":{},"df":0,"n":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"/":{"docs":{},"df":0,"a":{"docs":{},"df":0,"f":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/fuzzing/fuzzing/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}},"o":{"docs":{},"df":0,"p":{"docs":{},"df":0,"j":{"docs":{},"df":0,"o":{"docs":{},"df":0,"h":{"docs":{},"df":0,"n":{"docs":{},"df":0,"w":{"docs":{},"df":0,"u":{"docs":{},"df":0,"/":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"g":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"k":{"docs":{"https://phlip9.com/notes/android/root phone with magisk/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}},"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"i":{"docs":{},"df":0,"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"f":{"docs":{},"df":0,"b":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"s":{"docs":{},"df":0,"/":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"g":{"docs":{},"df":0,"o":{"docs":{},"df":0,".":{"docs":{},"df":0,"g":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/devops/algo wireguard VPN server/":{"tf":1.0}},"df":1}}}}}}}},"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"e":{"docs":{},"df":0,"p":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/fuzzing/fuzzing/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}},"v":{"docs":{},"df":0,"i":{"docs":{},"df":0,"p":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"p":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"j":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{},"df":0,"/":{"docs":{},"df":0,"p":{"docs":{},"df":0,"r":{"docs":{},"df":0,"u":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/lang/rust/rust verification tools/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"o":{"docs":{},"df":0,"d":{"docs":{},"df":0,"b":{"docs":{},"df":0,"o":{"docs":{},"df":0,"l":{"docs":{},"df":0,"t":{"docs":{},"df":0,".":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"g":{"docs":{},"df":0,"/":{"docs":{},"df":0,"z":{"docs":{},"df":0,"/":{"docs":{},"df":0,"3":{"docs":{},"df":0,"n":{"docs":{},"df":0,"5":{"docs":{},"df":0,"s":{"docs":{},"df":0,"1":{"docs":{},"df":0,"t":{"docs":{},"df":0,"m":{"docs":{},"df":0,"n":{"docs":{},"df":0,"w":{"docs":{"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.0}},"df":1}}}}}}}}},"4":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"y":{"docs":{},"df":0,"a":{"docs":{},"df":0,"e":{"docs":{},"df":0,"1":{"docs":{},"df":0,"f":{"docs":{},"df":0,"j":{"docs":{"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.0}},"df":1}}}}}}},"v":{"docs":{},"df":0,"q":{"docs":{},"df":0,"8":{"docs":{},"df":0,"8":{"docs":{},"df":0,"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"o":{"docs":{"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.0}},"df":1}}}}}}}}},"8":{"docs":{},"df":0,"1":{"docs":{},"df":0,"a":{"docs":{},"df":0,"7":{"docs":{},"df":0,"e":{"docs":{},"df":0,"6":{"docs":{},"df":0,"f":{"docs":{},"df":0,"7":{"docs":{},"df":0,"m":{"docs":{"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.0}},"df":1}}}}}}}}},"a":{"docs":{},"df":0,"5":{"docs":{},"df":0,"9":{"docs":{},"df":0,"1":{"docs":{},"df":0,"1":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"7":{"docs":{},"df":0,"3":{"docs":{"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.0}},"df":1}}}}}}}},"a":{"docs":{},"df":0,"d":{"docs":{},"df":0,"b":{"docs":{},"df":0,"s":{"docs":{},"df":0,"q":{"docs":{},"df":0,"j":{"docs":{},"df":0,"v":{"docs":{"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.0}},"df":1}}}}}}},"q":{"docs":{},"df":0,"8":{"docs":{},"df":0,"t":{"docs":{},"df":0,"9":{"docs":{},"df":0,"s":{"docs":{},"df":0,"e":{"docs":{"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.0}},"df":1}}}}}}},"f":{"docs":{},"df":0,"n":{"docs":{},"df":0,"f":{"docs":{},"df":0,"7":{"docs":{},"df":0,"8":{"docs":{},"df":0,"r":{"docs":{},"df":0,"k":{"docs":{},"df":0,"v":{"docs":{},"df":0,"z":{"docs":{"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.0}},"df":1}}}}}}}},"z":{"docs":{},"df":0,"g":{"docs":{},"df":0,"t":{"docs":{},"df":0,"4":{"docs":{},"df":0,"b":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"z":{"docs":{"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.0}},"df":1}}}}}}}}},"p":{"docs":{},"df":0,"g":{"docs":{},"df":0,"f":{"docs":{},"df":0,"v":{"docs":{},"df":0,"t":{"docs":{},"df":0,"3":{"docs":{},"df":0,"9":{"docs":{},"df":0,"z":{"docs":{},"df":0,"5":{"docs":{"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.0}},"df":1}}}}}}}}},"t":{"docs":{},"df":0,"f":{"docs":{},"df":0,"n":{"docs":{},"df":0,"9":{"docs":{},"df":0,"f":{"docs":{},"df":0,"b":{"docs":{},"df":0,"k":{"docs":{},"df":0,"k":{"docs":{},"df":0,"g":{"docs":{"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}},"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"p":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"j":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{},"df":0,".":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{"https://phlip9.com/notes/confidential computing/gramine/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}},"u":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,".":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"a":{"docs":{},"df":0,"p":{"docs":{},"df":0,"o":{"docs":{},"df":0,"d":{"docs":{},"df":0,"s":{"docs":{},"df":0,".":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"g":{"docs":{},"df":0,"/":{"docs":{},"df":0,"u":{"docs":{},"df":0,"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"g":{"docs":{},"df":0,"/":{"docs":{},"df":0,"g":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/ios/ios setup/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"h":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"s":{"docs":{},"df":0,".":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"/":{"docs":{},"df":0,"b":{"docs":{},"df":0,"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"g":{"docs":{},"df":0,"/":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"u":{"docs":{"https://phlip9.com/notes/devops/deployment strategies/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}},"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"b":{"docs":{},"df":0,"i":{"docs":{},"df":0,"e":{"docs":{},"df":0,".":{"docs":{},"df":0,"u":{"docs":{},"df":0,"w":{"docs":{},"df":0,"p":{"docs":{},"df":0,"l":{"docs":{},"df":0,"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,".":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"g":{"docs":{"https://phlip9.com/notes/statistics probability/herbie - float error fixer/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}},"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"f":{"docs":{},"df":0,"o":{"docs":{},"df":0,"s":{"docs":{},"df":0,"c":{"docs":{},"df":0,"i":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"c":{"docs":{},"df":0,"e":{"docs":{},"df":0,".":{"docs":{},"df":0,"e":{"docs":{},"df":0,"p":{"docs":{},"df":0,"f":{"docs":{},"df":0,"l":{"docs":{},"df":0,".":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{},"df":0,"/":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"d":{"docs":{},"df":0,"/":{"docs":{},"df":0,"2":{"docs":{},"df":0,"8":{"docs":{},"df":0,"2":{"docs":{},"df":0,"6":{"docs":{},"df":0,"5":{"docs":{},"df":0,"7":{"docs":{},"df":0,"/":{"docs":{},"df":0,"f":{"docs":{},"df":0,"i":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"/":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"s":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"s":{"docs":{},"df":0,"u":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"p":{"docs":{},"df":0,".":{"docs":{},"df":0,"p":{"docs":{},"df":0,"d":{"docs":{},"df":0,"f":{"docs":{"https://phlip9.com/notes/distributed systems/papers/(2021) Leaderless Consensus/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"j":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"r":{"docs":{},"df":0,"u":{"docs":{},"df":0,".":{"docs":{},"df":0,"v":{"docs":{},"df":0,"e":{"docs":{},"df":0,"x":{"docs":{},"df":0,"i":{"docs":{},"df":0,"l":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"u":{"docs":{},"df":0,"m":{"docs":{},"df":0,".":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"g":{"docs":{},"df":0,"/":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"k":{"docs":{},"df":0,"s":{"docs":{},"df":0,"/":{"docs":{},"df":0,"b":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"k":{"docs":{},"df":0,"h":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/fuzzing/fuzzing/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"i":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,".":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"/":{"docs":{},"df":0,"p":{"docs":{},"df":0,"d":{"docs":{},"df":0,"f":{"docs":{},"df":0,"/":{"docs":{},"df":0,"f":{"docs":{},"df":0,"u":{"docs":{},"df":0,"z":{"docs":{},"df":0,"z":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"g":{"docs":{},"df":0,"_":{"docs":{},"df":0,"s":{"docs":{},"df":0,"u":{"docs":{},"df":0,"r":{"docs":{},"df":0,"v":{"docs":{},"df":0,"e":{"docs":{},"df":0,"y":{"docs":{},"df":0,"1":{"docs":{},"df":0,"9":{"docs":{},"df":0,".":{"docs":{},"df":0,"p":{"docs":{},"df":0,"d":{"docs":{},"df":0,"f":{"docs":{"https://phlip9.com/notes/fuzzing/fuzzing/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"k":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{},"df":0,".":{"docs":{},"df":0,"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"g":{"docs":{},"df":0,"s":{"docs":{},"df":0,".":{"docs":{},"df":0,"k":{"docs":{},"df":0,"8":{"docs":{},"df":0,"s":{"docs":{},"df":0,".":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{"https://phlip9.com/notes/devops/kind (kubernetes in docker)/":{"tf":1.0}},"df":1}}}}}}}}}}}}},"t":{"docs":{},"df":0,"s":{"docs":{},"df":0,"u":{"docs":{},"df":0,"g":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/misc/kintsugi/":{"tf":1.0}},"df":1}}}}}}},"o":{"docs":{},"df":0,"k":{"docs":{},"df":0,"a":{"docs":{"https://phlip9.com/notes/lang/koka-lang/":{"tf":1.0}},"df":1}}}},"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"n":{"docs":{},"df":0,".":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{},"df":0,"a":{"docs":{},"df":0,"f":{"docs":{},"df":0,"r":{"docs":{},"df":0,"u":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,".":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"/":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{},"df":0,"a":{"docs":{},"df":0,"f":{"docs":{},"df":0,"r":{"docs":{},"df":0,"u":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1}}}}}}}},"c":{"docs":{},"df":0,"i":{"docs":{},"df":0,"r":{"docs":{},"df":0,"c":{"docs":{},"df":0,"u":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"p":{"docs":{},"df":0,"y":{"docs":{},"df":0,"t":{"docs":{},"df":0,"h":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}},"m":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"s":{"docs":{},"df":0,"o":{"docs":{},"df":0,"f":{"docs":{},"df":0,"t":{"docs":{},"df":0,".":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"/":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/postgres/postgres performance tuning/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}},"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"k":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"d":{"docs":{},"df":0,".":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{"https://phlip9.com/notes/devops/linkerd/":{"tf":1.0}},"df":1,"/":{"docs":{},"df":0,"2":{"docs":{},"df":0,".":{"docs":{},"df":0,"1":{"docs":{},"df":0,"1":{"docs":{},"df":0,"/":{"docs":{},"df":0,"o":{"docs":{},"df":0,"v":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"v":{"docs":{},"df":0,"i":{"docs":{},"df":0,"e":{"docs":{},"df":0,"w":{"docs":{"https://phlip9.com/notes/devops/linkerd/":{"tf":1.0}},"df":1}}}}}}}}}}}}},"w":{"docs":{},"df":0,"h":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/devops/service mesh/":{"tf":1.0}},"df":1}}}}}}}}}}}}}},"n":{"docs":{},"df":0,"b":{"docs":{},"df":0,"i":{"docs":{},"df":0,"g":{"docs":{},"df":0,".":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"/":{"docs":{},"df":0,"#":{"docs":{},"df":0,"/":{"docs":{},"df":0,"o":{"docs":{},"df":0,"p":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/btc-ln/breez lightning service providers/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}},"m":{"docs":{},"df":0,".":{"docs":{},"df":0,"d":{"docs":{},"df":0,"o":{"docs":{},"df":0,".":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"/":{"docs":{},"df":0,"c":{"docs":{},"df":0,"/":{"docs":{},"df":0,"7":{"docs":{},"df":0,"5":{"docs":{},"df":0,"c":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"a":{"docs":{},"df":0,"4":{"docs":{},"df":0,"c":{"docs":{},"df":0,"0":{"docs":{},"df":0,"b":{"docs":{},"df":0,"8":{"docs":{"https://phlip9.com/notes/devops/algo wireguard VPN server/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}},"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"f":{"docs":{},"df":0,"o":{"docs":{},"df":0,"w":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,".":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"/":{"docs":{},"df":0,"b":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"k":{"docs":{},"df":0,"i":{"docs":{},"df":0,"/":{"docs":{},"df":0,"b":{"docs":{},"df":0,"l":{"docs":{},"df":0,"u":{"docs":{},"df":0,"e":{"docs":{},"df":0,"g":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"p":{"docs":{},"df":0,"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"y":{"docs":{},"df":0,"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,".":{"docs":{},"df":0,"h":{"docs":{},"df":0,"t":{"docs":{},"df":0,"m":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/devops/deployment strategies/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"e":{"docs":{},"df":0,"d":{"docs":{},"df":0,"i":{"docs":{},"df":0,"u":{"docs":{},"df":0,"m":{"docs":{},"df":0,".":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"/":{"docs":{},"df":0,"@":{"docs":{},"df":0,"d":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"n":{"docs":{},"df":0,"y":{"docs":{},"df":0,"_":{"docs":{},"df":0,"h":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"n":{"docs":{},"df":0,"i":{"docs":{},"df":0,"k":{"docs":{},"df":0,"/":{"docs":{},"df":0,"i":{"docs":{},"df":0,"m":{"docs":{},"df":0,"p":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"s":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}},"b":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"e":{"docs":{},"df":0,"z":{"docs":{"https://phlip9.com/notes/btc-ln/breez lightning service providers/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/lightning rod/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/zero-conf channels/":{"tf":1.0}},"df":3}}}}}}}}}}}}}}},"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"s":{"docs":{},"df":0,"o":{"docs":{},"df":0,"f":{"docs":{},"df":0,"t":{"docs":{},"df":0,".":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"/":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"v":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"g":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/devops/azure CLI/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}},"n":{"docs":{},"df":0,"i":{"docs":{},"df":0,"k":{"docs":{},"df":0,"u":{"docs":{},"df":0,"b":{"docs":{},"df":0,"e":{"docs":{},"df":0,".":{"docs":{},"df":0,"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"g":{"docs":{},"df":0,"s":{"docs":{},"df":0,".":{"docs":{},"df":0,"k":{"docs":{},"df":0,"8":{"docs":{},"df":0,"s":{"docs":{},"df":0,".":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{"https://phlip9.com/notes/devops/minikube/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}},"y":{"docs":{},"df":0,".":{"docs":{},"df":0,"g":{"docs":{},"df":0,"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"v":{"docs":{},"df":0,"e":{"docs":{},"df":0,"8":{"docs":{},"df":0,"0":{"docs":{},"df":0,".":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"/":{"docs":{},"df":0,"#":{"docs":{},"df":0,"/":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"y":{"docs":{},"df":0,"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{},"df":0,"/":{"docs":{},"df":0,"u":{"docs":{},"df":0,"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"/":{"docs":{},"df":0,"b":{"docs":{},"df":0,"7":{"docs":{},"df":0,"5":{"docs":{},"df":0,"3":{"docs":{},"df":0,"0":{"docs":{},"df":0,"b":{"docs":{},"df":0,"8":{"docs":{},"df":0,"0":{"docs":{"https://phlip9.com/notes/keyboards/moergo glove80/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}},"m":{"docs":{},"df":0,"y":{"docs":{},"df":0,"_":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"y":{"docs":{},"df":0,"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/keyboards/moergo glove80/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}},"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"w":{"docs":{},"df":0,"s":{"docs":{},"df":0,".":{"docs":{},"df":0,"y":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"b":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,".":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"/":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"m":{"docs":{},"df":0,"?":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{},"df":0,"=":{"docs":{},"df":0,"2":{"docs":{},"df":0,"0":{"docs":{},"df":0,"8":{"docs":{},"df":0,"3":{"docs":{},"df":0,"0":{"docs":{},"df":0,"8":{"docs":{},"df":0,"4":{"docs":{},"df":0,"6":{"docs":{"https://phlip9.com/notes/fuzzing/fuzzing/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"o":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"p":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"l":{"docs":{},"df":0,".":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"g":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}},"p":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"k":{"docs":{},"df":0,"a":{"docs":{},"df":0,"g":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,".":{"docs":{},"df":0,"m":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"s":{"docs":{},"df":0,"o":{"docs":{},"df":0,"f":{"docs":{},"df":0,"t":{"docs":{},"df":0,".":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"/":{"docs":{},"df":0,"k":{"docs":{},"df":0,"e":{"docs":{},"df":0,"y":{"docs":{},"df":0,"s":{"docs":{},"df":0,"/":{"docs":{},"df":0,"m":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"s":{"docs":{},"df":0,"o":{"docs":{},"df":0,"f":{"docs":{},"df":0,"t":{"docs":{},"df":0,".":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{},"df":0,"c":{"docs":{"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/gramine/":{"tf":1.0},"https://phlip9.com/notes/devops/azure CLI/":{"tf":1.0}},"df":3}}}}}}}}}}}}}}}}}},"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"p":{"docs":{},"df":0,"o":{"docs":{},"df":0,"s":{"docs":{},"df":0,"/":{"docs":{},"df":0,"a":{"docs":{},"df":0,"z":{"docs":{},"df":0,"u":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/devops/azure CLI/":{"tf":1.0}},"df":1}}}}}}}}}},"u":{"docs":{},"df":0,"b":{"docs":{},"df":0,"u":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"u":{"docs":{},"df":0,"/":{"docs":{},"df":0,"2":{"docs":{},"df":0,"0":{"docs":{},"df":0,".":{"docs":{},"df":0,"0":{"docs":{},"df":0,"4":{"docs":{},"df":0,"/":{"docs":{},"df":0,"p":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/gramine/":{"tf":1.0}},"df":2}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"r":{"docs":{},"df":0,".":{"docs":{},"df":0,"n":{"docs":{},"df":0,"s":{"docs":{},"df":0,"f":{"docs":{},"df":0,".":{"docs":{},"df":0,"g":{"docs":{},"df":0,"o":{"docs":{},"df":0,"v":{"docs":{},"df":0,"/":{"docs":{},"df":0,"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"v":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{},"df":0,"s":{"docs":{},"df":0,"/":{"docs":{},"df":0,"p":{"docs":{},"df":0,"u":{"docs":{},"df":0,"r":{"docs":{},"df":0,"l":{"docs":{},"df":0,"/":{"docs":{},"df":0,"1":{"docs":{},"df":0,"0":{"docs":{},"df":0,"1":{"docs":{},"df":0,"7":{"docs":{},"df":0,"6":{"docs":{},"df":0,"1":{"docs":{},"df":0,"4":{"docs":{},"df":0,"6":{"docs":{"https://phlip9.com/notes/distributed systems/papers/(2020) Semi-Fast Byzantine-tolerant Shared Register without Reliable Broadcast/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"e":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"d":{"docs":{},"df":0,"d":{"docs":{},"df":0,".":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"g":{"docs":{},"df":0,"/":{"docs":{},"df":0,"2":{"docs":{},"df":0,"0":{"docs":{},"df":0,"1":{"docs":{},"df":0,"6":{"docs":{},"df":0,"/":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"y":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/btc utreexo - utxo accumulator/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}},"k":{"docs":{},"df":0,"g":{"docs":{},"df":0,".":{"docs":{},"df":0,"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{},"df":0,"h":{"docs":{},"df":0,"l":{"docs":{},"df":0,"y":{"docs":{},"df":0,".":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"v":{"docs":{},"df":0,"/":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"b":{"docs":{"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.0}},"df":1}}},"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{},"df":0,"h":{"docs":{},"df":0,"l":{"docs":{},"df":0,"y":{"docs":{},"df":0,".":{"docs":{},"df":0,"p":{"docs":{},"df":0,"g":{"docs":{},"df":0,"p":{"docs":{"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}},"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"y":{"docs":{},"df":0,".":{"docs":{},"df":0,"r":{"docs":{},"df":0,"u":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/combinatorics/k-combinations of a multiset/":{"tf":1.0}},"df":1}}}}}}}},"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,".":{"docs":{},"df":0,"a":{"docs":{},"df":0,"z":{"docs":{},"df":0,"u":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,".":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{"https://phlip9.com/notes/devops/azure CLI/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}},"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"f":{"docs":{},"df":0,"i":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,".":{"docs":{},"df":0,"f":{"docs":{},"df":0,"i":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"f":{"docs":{},"df":0,"o":{"docs":{},"df":0,"x":{"docs":{},"df":0,".":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{"https://phlip9.com/notes/WSL/WSL2 custom kernel/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}},"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,".":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"/":{"docs":{},"df":0,"d":{"docs":{},"df":0,"o":{"docs":{},"df":0,"c":{"docs":{},"df":0,"s":{"docs":{},"df":0,"/":{"docs":{},"df":0,"k":{"docs":{},"df":0,"3":{"docs":{},"df":0,"s":{"docs":{},"df":0,"/":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"/":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/devops/k3s/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"e":{"docs":{},"df":0,"g":{"docs":{},"df":0,"e":{"docs":{},"df":0,"x":{"docs":{},"df":0,"1":{"docs":{},"df":0,"0":{"docs":{},"df":0,"1":{"docs":{},"df":0,".":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{"https://phlip9.com/notes/nvim/universal-ctags Notes/":{"tf":1.0}},"df":1}}}}}}}}}},"p":{"docs":{},"df":0,"o":{"docs":{},"df":0,"s":{"docs":{},"df":0,".":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"g":{"docs":{},"df":0,"h":{"docs":{},"df":0,"t":{"docs":{},"df":0,"s":{"docs":{},"df":0,".":{"docs":{},"df":0,"d":{"docs":{},"df":0,"i":{"docs":{},"df":0,"g":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"c":{"docs":{},"df":0,"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,".":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"/":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"l":{"docs":{},"df":0,".":{"docs":{},"df":0,"s":{"docs":{},"df":0,"h":{"docs":{"https://phlip9.com/notes/devops/algo wireguard VPN server/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"r":{"docs":{"https://phlip9.com/notes/lang/rust/rr with rust/":{"tf":1.0}},"df":1},"u":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"w":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{},"df":0,"m":{"docs":{},"df":0,".":{"docs":{},"df":0,"g":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"h":{"docs":{},"df":0,"u":{"docs":{},"df":0,"b":{"docs":{},"df":0,".":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"/":{"docs":{},"df":0,"t":{"docs":{},"df":0,"w":{"docs":{},"df":0,"i":{"docs":{},"df":0,"g":{"docs":{},"df":0,"g":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}},"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{"https://phlip9.com/notes/fuzzing/fuzzing/":{"tf":1.0}},"df":1,"u":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"g":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,".":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"u":{"docs":{},"df":0,"b":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{},"df":0,"w":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"k":{"docs":{},"df":0,"s":{"docs":{},"df":0,".":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{"https://phlip9.com/notes/router/lightning router/captive portal/arubanetworks captive portal/":{"tf":1.0}},"df":1,"/":{"docs":{},"df":0,"[":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/router/lightning router/captive portal/arubanetworks captive portal/":{"tf":1.4142135623730951}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"h":{"docs":{},"df":0,".":{"docs":{},"df":0,"r":{"docs":{},"df":0,"u":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"u":{"docs":{},"df":0,"p":{"docs":{},"df":0,".":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.4142135623730951}},"df":1}}}}}}}}}},"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"l":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"p":{"docs":{},"df":0,".":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"/":{"docs":{},"df":0,"c":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"f":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"/":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"x":{"docs":{},"df":0,".":{"docs":{},"df":0,"h":{"docs":{},"df":0,"t":{"docs":{},"df":0,"m":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/crypto/smallstep - private online CA & ACME server/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"r":{"docs":{},"df":0,"c":{"docs":{},"df":0,"e":{"docs":{},"df":0,"w":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,".":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"g":{"docs":{},"df":0,"/":{"docs":{},"df":0,"g":{"docs":{},"df":0,"d":{"docs":{},"df":0,"b":{"docs":{},"df":0,"/":{"docs":{},"df":0,"c":{"docs":{},"df":0,"u":{"docs":{},"df":0,"r":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"/":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"d":{"docs":{},"df":0,"o":{"docs":{},"df":0,"c":{"docs":{},"df":0,"s":{"docs":{},"df":0,"/":{"docs":{},"df":0,"g":{"docs":{},"df":0,"d":{"docs":{},"df":0,"b":{"docs":{},"df":0,".":{"docs":{},"df":0,"h":{"docs":{},"df":0,"t":{"docs":{},"df":0,"m":{"docs":{},"df":0,"l":{"docs":{},"df":0,"/":{"docs":{},"df":0,"t":{"docs":{},"df":0,"u":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/lang/gdb ref/":{"tf":1.4142135623730951}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"u":{"docs":{},"df":0,"b":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"w":{"docs":{},"df":0,"a":{"docs":{},"df":0,"p":{"docs":{},"df":0,"s":{"docs":{},"df":0,".":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"g":{"docs":{"https://phlip9.com/notes/btc-ln/submarine swaps/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}},"y":{"docs":{},"df":0,"c":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/lang/rust/understanding sycamore reactivity/":{"tf":1.0}},"df":1}}}}}}},"u":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"x":{"docs":{},"df":0,".":{"docs":{},"df":0,"b":{"docs":{},"df":0,"z":{"docs":{},"df":0,"/":{"docs":{},"df":0,"f":{"docs":{},"df":0,"y":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/foreign bank account report (FBAR)/":{"tf":1.0}},"df":1}}}}}}}}}}}},"v":{"docs":{},"df":0,"o":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"e":{"docs":{},"df":0,".":{"docs":{},"df":0,"g":{"docs":{},"df":0,"o":{"docs":{},"df":0,"o":{"docs":{},"df":0,"g":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,".":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}},"w":{"docs":{},"df":0,"h":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{},"df":0,"j":{"docs":{},"df":0,"d":{"docs":{},"df":0,"k":{"docs":{},"df":0,".":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{"https://phlip9.com/notes/android/android cli setup/":{"tf":1.0}},"df":1}}}}}}}}}}},"w":{"docs":{},"df":0,"w":{"docs":{},"df":0,".":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{},"df":0,"a":{"docs":{},"df":0,"f":{"docs":{},"df":0,"r":{"docs":{},"df":0,"u":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,".":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"/":{"docs":{},"df":0,"p":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"d":{"docs":{},"df":0,"u":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{},"df":0,"/":{"docs":{},"df":0,"4":{"docs":{},"df":0,"7":{"docs":{},"df":0,"4":{"docs":{},"df":0,"5":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}},"r":{"docs":{},"df":0,"u":{"docs":{},"df":0,"b":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{},"df":0,"w":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"k":{"docs":{},"df":0,"s":{"docs":{},"df":0,".":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"/":{"docs":{},"df":0,"v":{"docs":{},"df":0,"r":{"docs":{},"df":0,"d":{"docs":{},"df":0,"/":{"docs":{},"df":0,"g":{"docs":{},"df":0,"u":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"c":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"s":{"docs":{},"df":0,"a":{"docs":{},"df":0,"p":{"docs":{},"df":0,"p":{"docs":{},"df":0,"n":{"docs":{},"df":0,"o":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"/":{"docs":{},"df":0,"w":{"docs":{},"df":0,"w":{"docs":{},"df":0,"h":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{},"df":0,"p":{"docs":{},"df":0,"/":{"docs":{},"df":0,"w":{"docs":{},"df":0,"w":{"docs":{},"df":0,"h":{"docs":{},"df":0,"i":{"docs":{},"df":0,"m":{"docs":{},"df":0,"p":{"docs":{},"df":0,"l":{"docs":{},"df":0,"/":{"docs":{},"df":0,"j":{"docs":{},"df":0,"s":{"docs":{},"df":0,"/":{"docs":{},"df":0,"h":{"docs":{},"df":0,"t":{"docs":{},"df":0,"m":{"docs":{},"df":0,"l":{"docs":{},"df":0,"/":{"docs":{},"df":0,"w":{"docs":{},"df":0,"w":{"docs":{},"df":0,"h":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{},"df":0,"p":{"docs":{},"df":0,".":{"docs":{},"df":0,"h":{"docs":{},"df":0,"t":{"docs":{},"df":0,"m":{"docs":{},"df":0,"#":{"docs":{},"df":0,"h":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"f":{"docs":{},"df":0,"=":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{},"df":0,"a":{"docs":{},"df":0,"p":{"docs":{},"df":0,"3":{"docs":{},"df":0,".":{"docs":{},"df":0,"h":{"docs":{},"df":0,"t":{"docs":{},"df":0,"m":{"docs":{},"df":0,"l":{"docs":{},"df":0,"#":{"docs":{},"df":0,"1":{"docs":{},"df":0,"0":{"docs":{},"df":0,"3":{"docs":{},"df":0,"5":{"docs":{},"df":0,"6":{"docs":{},"df":0,"2":{"docs":{},"df":0,"3":{"docs":{"https://phlip9.com/notes/router/lightning router/captive portal/arubanetworks captive portal/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"b":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"c":{"docs":{},"df":0,"u":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,".":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"g":{"docs":{"https://phlip9.com/notes/crypto/biscuit authz/":{"tf":1.0}},"df":1}}}}}}}}}}}},"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"f":{"docs":{},"df":0,"i":{"docs":{},"df":0,"l":{"docs":{},"df":0,"l":{"docs":{},"df":0,".":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"/":{"docs":{},"df":0,"t":{"docs":{},"df":0,"h":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/btc-ln/breez lightning service providers/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}},"c":{"docs":{},"df":0,"e":{"docs":{},"df":0,"f":{"docs":{},"df":0,"n":{"docs":{},"df":0,"s":{"docs":{},"df":0,".":{"docs":{},"df":0,"n":{"docs":{},"df":0,"a":{"docs":{},"df":0,"u":{"docs":{},"df":0,".":{"docs":{},"df":0,"e":{"docs":{},"df":0,"d":{"docs":{},"df":0,"u":{"docs":{},"df":0,"/":{"docs":{},"df":0,"~":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{},"df":0,"g":{"docs":{},"df":0,"3":{"docs":{},"df":0,"2":{"docs":{},"df":0,"6":{"docs":{},"df":0,"/":{"docs":{},"df":0,"b":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"1":{"docs":{},"df":0,"8":{"docs":{},"df":0,".":{"docs":{},"df":0,"p":{"docs":{},"df":0,"d":{"docs":{},"df":0,"f":{"docs":{"https://phlip9.com/notes/fuzzing/fuzzing/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"s":{"docs":{},"df":0,"u":{"docs":{},"df":0,"l":{"docs":{},"df":0,".":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{"https://phlip9.com/notes/devops/consul/":{"tf":1.0}},"df":1}}}}}}}}},"d":{"docs":{},"df":0,"o":{"docs":{},"df":0,"c":{"docs":{},"df":0,"k":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,".":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"/":{"docs":{},"df":0,"p":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"d":{"docs":{},"df":0,"u":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{},"df":0,"s":{"docs":{},"df":0,"/":{"docs":{},"df":0,"d":{"docs":{},"df":0,"o":{"docs":{},"df":0,"c":{"docs":{},"df":0,"k":{"docs":{"https://phlip9.com/notes/misc/setting up a headless raspbian boot image/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}},"p":{"docs":{},"df":0,"p":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,".":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{"https://phlip9.com/notes/devops/secrets/doppler/":{"tf":1.0}},"df":1}}}}}}}}}}},"f":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"i":{"docs":{},"df":0,"x":{"docs":{},"df":0,".":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"/":{"docs":{},"df":0,"b":{"docs":{},"df":0,"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"g":{"docs":{},"df":0,"/":{"docs":{},"df":0,"2":{"docs":{},"df":0,"0":{"docs":{},"df":0,"1":{"docs":{},"df":0,"8":{"docs":{},"df":0,"/":{"docs":{},"df":0,"0":{"docs":{},"df":0,"2":{"docs":{},"df":0,"/":{"docs":{},"df":0,"u":{"docs":{},"df":0,"p":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}},"f":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"i":{"docs":{},"df":0,"x":{"docs":{"https://phlip9.com/notes/devops/secrets/fortanix DSM/":{"tf":1.0}},"df":1}}}}}}}},"p":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"d":{"docs":{},"df":0,"u":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{},"df":0,"s":{"docs":{},"df":0,"/":{"docs":{},"df":0,"d":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{"https://phlip9.com/notes/devops/secrets/fortanix DSM/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}},"u":{"docs":{},"df":0,"z":{"docs":{},"df":0,"z":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"g":{"docs":{},"df":0,"b":{"docs":{},"df":0,"o":{"docs":{},"df":0,"o":{"docs":{},"df":0,"k":{"docs":{},"df":0,".":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"g":{"docs":{"https://phlip9.com/notes/fuzzing/fuzzing/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}},"g":{"docs":{},"df":0,"a":{"docs":{},"df":0,"b":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{},"df":0,".":{"docs":{},"df":0,"u":{"docs":{},"df":0,"r":{"docs":{},"df":0,"d":{"docs":{},"df":0,"h":{"docs":{},"df":0,"r":{"docs":{},"df":0,".":{"docs":{},"df":0,"f":{"docs":{},"df":0,"r":{"docs":{},"df":0,"/":{"docs":{},"df":0,"2":{"docs":{},"df":0,"0":{"docs":{},"df":0,"2":{"docs":{},"df":0,"1":{"docs":{},"df":0,"/":{"docs":{},"df":0,"0":{"docs":{},"df":0,"5":{"docs":{},"df":0,"/":{"docs":{},"df":0,"0":{"docs":{},"df":0,"8":{"docs":{},"df":0,"/":{"docs":{},"df":0,"t":{"docs":{},"df":0,"u":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"p":{"docs":{"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"h":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{},"df":0,"h":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"p":{"docs":{},"df":0,".":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"/":{"docs":{},"df":0,"c":{"docs":{},"df":0,"2":{"docs":{},"df":0,"m":{"docs":{"https://phlip9.com/notes/devops/nomad/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}},"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{},"df":0,".":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"/":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"/":{"docs":{},"df":0,"w":{"docs":{},"df":0,"w":{"docs":{},"df":0,"w":{"docs":{},"df":0,"/":{"docs":{},"df":0,"u":{"docs":{},"df":0,"s":{"docs":{},"df":0,"/":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"/":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"v":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"p":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"/":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"/":{"docs":{},"df":0,"g":{"docs":{},"df":0,"u":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"/":{"docs":{},"df":0,"s":{"docs":{},"df":0,"g":{"docs":{},"df":0,"x":{"docs":{"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"j":{"docs":{},"df":0,"a":{"docs":{},"df":0,"e":{"docs":{},"df":0,"g":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"g":{"docs":{},"df":0,".":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{"https://phlip9.com/notes/devops/o11y/jaeger oss e2e tracing/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}},"m":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"s":{"docs":{},"df":0,"o":{"docs":{},"df":0,"f":{"docs":{},"df":0,"t":{"docs":{},"df":0,".":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"/":{"docs":{},"df":0,"s":{"docs":{},"df":0,"o":{"docs":{},"df":0,"f":{"docs":{},"df":0,"t":{"docs":{},"df":0,"w":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}},"n":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{},"df":0,"p":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"j":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{},"df":0,".":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{"https://phlip9.com/notes/devops/nomad/":{"tf":1.0}},"df":1,"/":{"docs":{},"df":0,"d":{"docs":{},"df":0,"o":{"docs":{},"df":0,"c":{"docs":{"https://phlip9.com/notes/devops/nomad/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}},"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{},"df":0,"p":{"docs":{},"df":0,"b":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"r":{"docs":{},"df":0,"y":{"docs":{},"df":0,"p":{"docs":{},"df":0,"i":{"docs":{},"df":0,".":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"g":{"docs":{},"df":0,"/":{"docs":{},"df":0,"s":{"docs":{},"df":0,"o":{"docs":{},"df":0,"f":{"docs":{},"df":0,"t":{"docs":{},"df":0,"w":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/misc/setting up a headless raspbian boot image/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}},"d":{"docs":{},"df":0,"o":{"docs":{},"df":0,"c":{"docs":{},"df":0,"u":{"docs":{},"df":0,"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,".":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"g":{"docs":{},"df":0,"/":{"docs":{},"df":0,"p":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"k":{"docs":{},"df":0,"a":{"docs":{},"df":0,"g":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"/":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"s":{"docs":{},"df":0,"/":{"docs":{},"df":0,"v":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"s":{"docs":{},"df":0,"/":{"docs":{},"df":0,"3":{"docs":{},"df":0,".":{"docs":{},"df":0,"6":{"docs":{},"df":0,".":{"docs":{},"df":0,"2":{"docs":{},"df":0,"/":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"p":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"s":{"docs":{},"df":0,"/":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/statistics probability/MAD - median absolute deviation/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"s":{"docs":{},"df":0,"p":{"docs":{},"df":0,"e":{"docs":{},"df":0,"e":{"docs":{},"df":0,"d":{"docs":{},"df":0,"s":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"p":{"docs":{},"df":0,"e":{"docs":{},"df":0,".":{"docs":{},"df":0,"a":{"docs":{},"df":0,"p":{"docs":{},"df":0,"p":{"docs":{"https://phlip9.com/notes/WSL/WSL2 custom kernel/":{"tf":1.0},"https://phlip9.com/notes/performance/profiling/":{"tf":1.0}},"df":2}}}}}}}}}}}}}},"w":{"docs":{},"df":0,"i":{"docs":{},"df":0,"k":{"docs":{},"df":0,"i":{"docs":{},"df":0,"w":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{},"df":0,".":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"/":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"/":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"k":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"g":{"docs":{},"df":0,"_":{"docs":{},"df":0,"w":{"docs":{},"df":0,"h":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{},"df":0,"h":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"_":{"docs":{},"df":0,"a":{"docs":{},"df":0,"_":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"_":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"_":{"docs":{},"df":0,"f":{"docs":{},"df":0,"a":{"docs":{},"df":0,"i":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/statistics probability/testing whether a coin is fair/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"g":{"docs":{"https://phlip9.com/notes/statistics probability/G-test - multinomial goodness-of-fit/":{"tf":1.0}},"df":1},"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"d":{"docs":{},"df":0,"i":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"_":{"docs":{},"df":0,"a":{"docs":{},"df":0,"b":{"docs":{},"df":0,"s":{"docs":{},"df":0,"o":{"docs":{},"df":0,"l":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"_":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"v":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/statistics probability/MAD - median absolute deviation/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}},"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{},"df":0,"w":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"k":{"docs":{},"df":0,"_":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"f":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"e":{"docs":{},"df":0,"_":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/networking/network interface card (NIC)/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}},"p":{"docs":{"https://phlip9.com/notes/statistics probability/p-value/":{"tf":1.0}},"df":1,"o":{"docs":{},"df":0,"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"v":{"docs":{},"df":0,"e":{"docs":{},"df":0,"_":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"_":{"docs":{},"df":0,"o":{"docs":{},"df":0,"p":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/AI ML/Expectimax Search/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}},"s":{"docs":{},"df":0,"o":{"docs":{},"df":0,"f":{"docs":{},"df":0,"t":{"docs":{},"df":0,"w":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"_":{"docs":{},"df":0,"g":{"docs":{},"df":0,"u":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"d":{"docs":{},"df":0,"_":{"docs":{},"df":0,"e":{"docs":{},"df":0,"x":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"s":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}},"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"d":{"docs":{},"df":0,"_":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/statistics probability/standard error/":{"tf":1.0}},"df":1}}}}}}}}}}}}}},"v":{"docs":{},"df":0,"i":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{},"df":0,"u":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"_":{"docs":{},"df":0,"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{},"df":0,"w":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"k":{"docs":{},"df":0,"_":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"f":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}},"w":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"s":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/statistics probability/winsorize/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}},"y":{"docs":{},"df":0,"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{},"df":0,"u":{"docs":{},"df":0,"b":{"docs":{},"df":0,"e":{"docs":{},"df":0,".":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"/":{"docs":{},"df":0,"w":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{},"df":0,"?":{"docs":{},"df":0,"v":{"docs":{},"df":0,"=":{"docs":{},"df":0,"a":{"docs":{},"df":0,"x":{"docs":{},"df":0,"z":{"docs":{},"df":0,"w":{"docs":{},"df":0,"x":{"docs":{},"df":0,"x":{"docs":{},"df":0,"z":{"docs":{},"df":0,"2":{"docs":{},"df":0,"j":{"docs":{},"df":0,"g":{"docs":{"https://phlip9.com/notes/management/relieve often - why generals were more successful in WWII/":{"tf":1.0}},"df":1}}}}}}}}}},"g":{"docs":{},"df":0,"o":{"docs":{},"df":0,"0":{"docs":{},"df":0,"k":{"docs":{},"df":0,"b":{"docs":{},"df":0,"o":{"docs":{},"df":0,"q":{"docs":{},"df":0,"k":{"docs":{},"df":0,"o":{"docs":{"https://phlip9.com/notes/fuzzing/fuzzing/":{"tf":1.0}},"df":1}}}}}}}},"p":{"docs":{},"df":0,"r":{"docs":{},"df":0,"d":{"docs":{},"df":0,"h":{"docs":{},"df":0,"e":{"docs":{},"df":0,"b":{"docs":{},"df":0,"j":{"docs":{},"df":0,"t":{"docs":{},"df":0,"m":{"docs":{},"df":0,"0":{"docs":{"https://phlip9.com/notes/distributed systems/papers/(2021) Leaderless Consensus/":{"tf":1.0}},"df":1}}}}}}}}}}},"i":{"docs":{},"df":0,"f":{"docs":{},"df":0,"e":{"docs":{},"df":0,"b":{"docs":{},"df":0,"d":{"docs":{},"df":0,"l":{"docs":{},"df":0,"v":{"docs":{},"df":0,"u":{"docs":{},"df":0,"l":{"docs":{},"df":0,"d":{"docs":{},"df":0,"w":{"docs":{"https://phlip9.com/notes/distributed systems/papers/(2020) Semi-Fast Byzantine-tolerant Shared Register without Reliable Broadcast/":{"tf":1.0}},"df":1}}}}}}}}}}},"l":{"docs":{},"df":0,"l":{"docs":{},"df":0,"l":{"docs":{},"df":0,"j":{"docs":{},"df":0,"r":{"docs":{},"df":0,"h":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"y":{"docs":{},"df":0,"u":{"docs":{},"df":0,"k":{"docs":{"https://phlip9.com/notes/fuzzing/fuzzing/":{"tf":1.0}},"df":1}}}}}}}}}}},"q":{"docs":{},"df":0,"e":{"docs":{},"df":0,"j":{"docs":{},"df":0,"2":{"docs":{},"df":0,"3":{"docs":{},"df":0,"t":{"docs":{},"df":0,"9":{"docs":{},"df":0,"4":{"docs":{},"df":0,"0":{"docs":{},"df":0,"u":{"docs":{},"df":0,"y":{"docs":{"https://phlip9.com/notes/misc/kintsugi/":{"tf":1.0}},"df":1}}}}}}}}}}},"t":{"docs":{},"df":0,"u":{"docs":{},"df":0,"z":{"docs":{},"df":0,"i":{"docs":{},"df":0,"e":{"docs":{},"df":0,"b":{"docs":{},"df":0,"_":{"docs":{},"df":0,"s":{"docs":{},"df":0,"l":{"docs":{},"df":0,"x":{"docs":{},"df":0,"0":{"docs":{"https://phlip9.com/notes/crypto/(talk) authenticated data structures for stateless validation/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"y":{"docs":{},"df":0,"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{},"df":0,"u":{"docs":{},"df":0,".":{"docs":{},"df":0,"b":{"docs":{},"df":0,"e":{"docs":{},"df":0,"/":{"docs":{},"df":0,"e":{"docs":{},"df":0,"o":{"docs":{},"df":0,"9":{"docs":{},"df":0,"c":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/misc/kintsugi/":{"tf":1.0}},"df":1}}}}}}}}}}}}}},"z":{"docs":{},"df":0,"m":{"docs":{},"df":0,"k":{"docs":{},"df":0,".":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"v":{"docs":{},"df":0,"/":{"docs":{},"df":0,"d":{"docs":{},"df":0,"o":{"docs":{},"df":0,"c":{"docs":{},"df":0,"s":{"docs":{},"df":0,"/":{"docs":{},"df":0,"b":{"docs":{},"df":0,"e":{"docs":{},"df":0,"h":{"docs":{},"df":0,"a":{"docs":{},"df":0,"v":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"s":{"docs":{},"df":0,"/":{"docs":{},"df":0,"h":{"docs":{},"df":0,"o":{"docs":{},"df":0,"l":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/keyboards/moergo glove80/":{"tf":1.0}},"df":1}}}},"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"y":{"docs":{"https://phlip9.com/notes/keyboards/moergo glove80/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"u":{"docs":{},"df":0,"b":{"docs":{"https://phlip9.com/notes/btc-ln/breez lightning service providers/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/lightning libs/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.0}},"df":3},"e":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":3.0}},"df":1,"_":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"_":{"docs":{},"df":0,"r":{"docs":{},"df":0,"g":{"docs":{},"df":0,"b":{"docs":{},"df":0,"_":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"(":{"docs":{},"df":0,"p":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}},"g":{"docs":{},"df":0,"e":{"docs":{"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/misc/kintsugi/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/multinomial distribution/":{"tf":1.0}},"df":3}},"h":{"docs":{"https://phlip9.com/notes/btc-ln/breez lightning service providers/":{"tf":1.0}},"df":1},"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.0}},"df":3}}},"n":{"docs":{},"df":0,"d":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/misc/kintsugi/":{"tf":1.0}},"df":1}}}},"w":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":2.449489742783178}},"df":1},"y":{"docs":{},"df":0,"p":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/android/ADB over TCP inside WSL2/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.0}},"df":3,"p":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/AI ML/Markov Decision Process (MDP)/":{"tf":1.0}},"df":1}}}}}}},"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"x":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":2.0}},"df":2}}}},"v":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0}},"df":2}}}}}}},"o":{"docs":{},"df":0,"t":{"docs":{},"df":0,"h":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{"https://phlip9.com/notes/statistics probability/G-test - multinomial goodness-of-fit/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/multinomial distribution/":{"tf":1.4142135623730951}},"df":2,"i":{"docs":{"https://phlip9.com/notes/statistics probability/G-test - multinomial goodness-of-fit/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/p-value/":{"tf":2.449489742783178}},"df":2}},"t":{"docs":{"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":1.0}},"df":1}}}}}}}},"i":{"docs":{},"df":0,"'":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.0}},"df":2},"l":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/combinatorics/k-combinations of a multiset/":{"tf":1.0},"https://phlip9.com/notes/ios/ios setup/":{"tf":1.0},"https://phlip9.com/notes/misc/kintsugi/":{"tf":1.0}},"df":3}},"m":{"docs":{"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.7320508075688772},"https://phlip9.com/notes/fuzzing/fuzzcheck-rs/":{"tf":1.0},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0}},"df":4},"t":{"docs":{},"df":0,"h":{"docs":{"https://phlip9.com/notes/btc-ln/atomic multipath payments (AMP)/":{"tf":1.0},"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.0}},"df":2}},"v":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.0},"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":1.0},"https://phlip9.com/notes/misc/optimization solvers/":{"tf":1.0},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.4142135623730951},"https://phlip9.com/notes/reproducible builds/nix/nix auto-allocate-uids -> nixbld users/":{"tf":1.0}},"df":6}},".":{"docs":{"https://phlip9.com/notes/AI ML/Expectimax Search/":{"tf":1.7320508075688772},"https://phlip9.com/notes/AI ML/Markov Decision Process (MDP)/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/submarine swaps/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":1.0},"https://phlip9.com/notes/crypto/(talk) authenticated data structures for stateless validation/":{"tf":1.0},"https://phlip9.com/notes/devops/azure CLI/":{"tf":1.0},"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":1.0},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.7320508075688772},"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":1.0},"https://phlip9.com/notes/performance/bit hacks/":{"tf":2.0},"https://phlip9.com/notes/statistics probability/standard error/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/testing whether a coin is fair/":{"tf":1.4142135623730951}},"df":12,"i":{"docs":{},"df":0,".":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/statistics probability/standard error/":{"tf":1.7320508075688772}},"df":1}}}},"/":{"docs":{},"df":0,"o":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0},"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.4142135623730951}},"df":2}},"2":{"docs":{},"df":0,"c":{"docs":{"https://phlip9.com/notes/misc/prepping RPI for embedded dev/":{"tf":1.4142135623730951},"https://phlip9.com/notes/misc/setting up a headless raspbian boot image/":{"tf":1.0}},"df":2,"p":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"p":{"docs":{},"df":0,"h":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1}}}}}}}}}},"6":{"docs":{},"df":0,"4":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0}},"df":2}},"[":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"b":{"docs":{},"df":0,"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":1.0}},"df":1}}}}}}}},"_":{"docs":{},"df":0,"s":{"docs":{},"df":0,"p":{"docs":{},"df":0,"h":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"(":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"_":{"docs":{},"df":0,"x":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.7320508075688772}},"df":1}}}}}}}}}}}},"a":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":3.0},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":2.0},"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.7320508075688772}},"df":3,"n":{"docs":{},"df":0,"a":{"docs":{"https://phlip9.com/notes/networking/ipv6 address space/":{"tf":1.4142135623730951},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.4142135623730951}},"df":3}},"s":{"docs":{},"df":0,".":{"docs":{},"df":0,"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"g":{"docs":{},"df":0,"n":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"u":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{},"df":0,"y":{"docs":{},"df":0,"p":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0}},"df":1}}}}}}}}}}},"p":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0}},"df":1}}}}},"_":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"u":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"_":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0}},"df":1,"_":{"docs":{},"df":0,"p":{"docs":{},"df":0,"e":{"docs":{},"df":0,"m":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}},"s":{"docs":{},"df":0,"_":{"docs":{},"df":0,"f":{"docs":{},"df":0,"m":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0}},"df":1}}}}}}}}},"b":{"docs":{},"df":0,"m":{"docs":{"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.4142135623730951}},"df":2,"i":{"docs":{},"df":0,"b":{"docs":{},"df":0,"m":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0}},"df":1}}},"’":{"docs":{"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.0}},"df":1}}},"c":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0}},"df":1,"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/performance/profiling/":{"tf":1.0}},"df":1}}},"m":{"docs":{},"df":0,"p":{"docs":{"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.0}},"df":2}},"o":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.4142135623730951}},"df":1}},"q":{"docs":{},"df":0,"0":{"docs":{"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.0}},"df":1}}},"d":{"docs":{"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":2.23606797749979},"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":2.23606797749979},"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":4.358898943540674},"https://phlip9.com/notes/btc-ln/BOLT 4 - onion routing protocol/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/BOLT 7 - p2p node and channel discovery/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/atomic multipath payments (AMP)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/gramine/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":4.242640687119285},"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":2.8284271247461903},"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.0},"https://phlip9.com/notes/crypto/biscuit authz/":{"tf":1.0},"https://phlip9.com/notes/devops/azure CLI/":{"tf":1.7320508075688772},"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.0},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0},"https://phlip9.com/notes/misc/water distillation setup/":{"tf":1.0},"https://phlip9.com/notes/networking/CIDR/":{"tf":1.7320508075688772},"https://phlip9.com/notes/networking/ipv6 address space/":{"tf":2.449489742783178},"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.0},"https://phlip9.com/notes/postgres/snippets/":{"tf":2.23606797749979},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.0}},"df":21,"/":{"docs":{},"df":0,"s":{"docs":{},"df":0,"v":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0}},"df":1}}}},"e":{"docs":{},"df":0,"a":{"docs":{"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.7320508075688772},"https://phlip9.com/notes/combinatorics/k-combinations of a multiset/":{"tf":1.0},"https://phlip9.com/notes/misc/kintsugi/":{"tf":1.0}},"df":3,"l":{"docs":{"https://phlip9.com/notes/btc-ln/breez lightning service providers/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":1.0},"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":1.0},"https://phlip9.com/notes/devops/deployment strategies/":{"tf":1.0},"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/multinomial distribution/":{"tf":1.0}},"df":7}},"m":{"docs":{},"df":0,"p":{"docs":{},"df":0,"o":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/fastpay/":{"tf":1.0}},"df":1}}}},"n":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/AI ML/Markov Decision Process (MDP)/":{"tf":1.0},"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/foreign bank account report (FBAR)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":2.449489742783178},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":2.23606797749979},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.7320508075688772},"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":4.242640687119285},"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/marblerun/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":1.4142135623730951},"https://phlip9.com/notes/crypto/dex - open-source OIDC & OAuth 2.0 provider/":{"tf":1.7320508075688772},"https://phlip9.com/notes/devops/deployment strategies/":{"tf":1.0},"https://phlip9.com/notes/performance/profiling/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/reproducible-builds.org/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/testing whether a coin is fair/":{"tf":1.0}},"df":14,"i":{"docs":{},"df":0,"f":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.0}},"df":1,"i":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.4142135623730951},"https://phlip9.com/notes/btc-ln/atomic multipath payments (AMP)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.4142135623730951},"https://phlip9.com/notes/design/form design/":{"tf":1.0},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0},"https://phlip9.com/notes/networking/CIDR/":{"tf":2.0},"https://phlip9.com/notes/postgres/types of scans/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/rebuilderd/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":2.23606797749979},"https://phlip9.com/notes/router/lightning router/captive portal/arubanetworks captive portal/":{"tf":1.4142135623730951},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":3.1622776601683795}},"df":12}}}}}},"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{"https://phlip9.com/notes/lang/lua/":{"tf":1.0}},"df":1},"s":{"docs":{},"df":0,"y":{"docs":{},"df":0,"n":{"docs":{},"df":0,"c":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.0}},"df":1}}}}}}}}}},"k":{"docs":{"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.4142135623730951},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.0}},"df":2},"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"m":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/devops/azure CLI/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}},"r":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/lang/operator fixity and precedence/":{"tf":1.0}},"df":1,"s":{"docs":{},"df":0,"2":{"docs":{"https://phlip9.com/notes/lang/operator fixity and precedence/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/winsorize/":{"tf":1.0}},"df":2}}}},"x":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":4.123105625617661},"https://phlip9.com/notes/performance/bit hacks/":{"tf":2.0},"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.4142135623730951},"https://phlip9.com/notes/postgres/types of scans/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/winsorize/":{"tf":3.1622776601683795}},"df":5}},"e":{"docs":{},"df":0,"e":{"docs":{},"df":0,"e":{"docs":{"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.4142135623730951}},"df":1}},"s":{"docs":{},"df":0,"g":{"docs":{"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.4142135623730951}},"df":2}},"t":{"docs":{},"df":0,"f":{"docs":{"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":2.449489742783178},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":3.4641016151377544}},"df":3}}},"f":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"f":{"docs":{},"df":0,"i":{"docs":{},"df":0,"g":{"docs":{"https://phlip9.com/notes/android/ADB over TCP inside WSL2/":{"tf":1.0}},"df":1}}}}}},"f":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.0},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0},"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/G-test - multinomial goodness-of-fit/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/standard error/":{"tf":1.0}},"df":5},"i":{"docs":{"https://phlip9.com/notes/confidential computing/gramine/":{"tf":1.4142135623730951}},"df":1}},"g":{"docs":{},"df":0,"n":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/WSL/WSL2 custom kernel/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/operator fixity and precedence/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/rr with rust/":{"tf":1.0},"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":1.0},"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.0},"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.0},"https://phlip9.com/notes/postgres/snippets/":{"tf":1.0}},"df":11}}},"o":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/distributed systems/papers/(2021) Leaderless Consensus/":{"tf":1.0}},"df":1}}},"k":{"docs":{},"df":0,"e":{"docs":{},"df":0,"y":{"docs":{"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":1.4142135623730951}},"df":1,".":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"_":{"docs":{},"df":0,"m":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{},"df":0,"(":{"docs":{},"df":0,")":{"docs":{},"df":0,".":{"docs":{},"df":0,"z":{"docs":{},"df":0,"i":{"docs":{},"df":0,"p":{"docs":{},"df":0,"(":{"docs":{},"df":0,"&":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{},"df":0,"p":{"docs":{},"df":0,";":{"docs":{},"df":0,"p":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"d":{"docs":{},"df":0,"_":{"docs":{},"df":0,"k":{"docs":{},"df":0,"e":{"docs":{},"df":0,"y":{"docs":{"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"_":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":1.4142135623730951}},"df":1}}}},"m":{"docs":{"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":3.605551275463989}},"df":1}},"l":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/reproducible builds/reproducible-builds.org/":{"tf":1.0}},"df":1}}}}},"p":{"docs":{"https://phlip9.com/notes/misc/optimization solvers/":{"tf":1.0}},"df":1}},"m":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel SGX/secure time/":{"tf":1.0},"https://phlip9.com/notes/lang/lua/":{"tf":2.0}},"df":3,"a":{"docs":{},"df":0,"g":{"docs":{"https://phlip9.com/notes/WSL/WSL2 custom kernel/":{"tf":1.0},"https://phlip9.com/notes/android/OTA updates for rooted android phone/":{"tf":2.0},"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0},"https://phlip9.com/notes/android/root phone with magisk/":{"tf":1.4142135623730951},"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/lightning network notes/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/gramine/":{"tf":2.23606797749979},"https://phlip9.com/notes/devops/algo wireguard VPN server/":{"tf":1.0},"https://phlip9.com/notes/devops/azure CLI/":{"tf":1.0},"https://phlip9.com/notes/misc/prepping RPI for embedded dev/":{"tf":1.0},"https://phlip9.com/notes/misc/setting up a headless raspbian boot image/":{"tf":3.7416573867739413},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":2.8284271247461903}},"df":13,"e":{"docs":{},"df":0,"&":{"docs":{},"df":0,"g":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/misc/scanning QR codes on desktop/":{"tf":1.0}},"df":1}}},"_":{"docs":{},"df":0,"2":{"docs":{},"df":0,"0":{"docs":{},"df":0,"2":{"docs":{},"df":0,"2":{"docs":{"https://phlip9.com/notes/misc/setting up a headless raspbian boot image/":{"tf":1.0}},"df":1}}}},"n":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{"https://phlip9.com/notes/confidential computing/gramine/":{"tf":1.0}},"df":1}}}},"s":{"docs":{},"df":0,"/":{"docs":{},"df":0,"p":{"docs":{},"df":0,"i":{"docs":{},"df":0,"x":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{},"df":0,"2":{"docs":{"https://phlip9.com/notes/android/root phone with magisk/":{"tf":1.7320508075688772}},"df":1}}}}}}},";":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/android/android cli setup/":{"tf":2.449489742783178}},"df":1}}}}}}}}}},"i":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/btc-ln/breez lightning service providers/":{"tf":1.0},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0},"https://phlip9.com/notes/lang/operator fixity and precedence/":{"tf":1.0},"https://phlip9.com/notes/management/relieve often - why generals were more successful in WWII/":{"tf":1.0},"https://phlip9.com/notes/misc/kintsugi/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/p-value/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/standard error/":{"tf":1.0}},"df":7}}}},"g":{"docs":{},"df":0,"_":{"docs":{},"df":0,"n":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"=":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{},"df":0,"p":{"docs":{},"df":0,"b":{"docs":{},"df":0,"i":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"_":{"docs":{},"df":0,"h":{"docs":{},"df":0,"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"s":{"docs":{"https://phlip9.com/notes/misc/setting up a headless raspbian boot image/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}},"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"d":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/AI ML/Markov Decision Process (MDP)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.4142135623730951},"https://phlip9.com/notes/btc-ln/zero-conf channels/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":2.0},"https://phlip9.com/notes/fuzzing/fuzzcheck-rs/":{"tf":1.0},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0},"https://phlip9.com/notes/lang/gdb ref/":{"tf":1.0},"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":1.0},"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.0}},"df":9}}},"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/btc-ln/lightning libs/":{"tf":1.0}},"df":1}}}}},"u":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0},"https://phlip9.com/notes/lang/lua/":{"tf":1.0}},"df":2}}},"o":{"docs":{"https://phlip9.com/notes/btc-ln/breez lightning service providers/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":1.0},"https://phlip9.com/notes/crypto/TLS self-signed pubkey-only certs/":{"tf":1.0},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.0}},"df":5},"p":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/winsorize/":{"tf":1.0}},"df":2}}},"e":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.0}},"df":1}},"l":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.7320508075688772},"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0},"https://phlip9.com/notes/crypto/TLS self-signed pubkey-only certs/":{"tf":1.4142135623730951},"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":2.0},"https://phlip9.com/notes/crypto/tls exported keying material/":{"tf":1.0},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/understanding sycamore reactivity/":{"tf":1.4142135623730951},"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.0}},"df":10,"&":{"docs":{},"df":0,"l":{"docs":{},"df":0,"t":{"docs":{},"df":0,";":{"docs":{},"df":0,"t":{"docs":{},"df":0,"&":{"docs":{},"df":0,"g":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/combinatorics/k-combinations of a multiset/":{"tf":1.4142135623730951}},"df":1}}}}}}}},"'":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.0}},"df":1}},"e":{"docs":{},"df":0,"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/foreign bank account report (FBAR)/":{"tf":1.0},"https://phlip9.com/notes/b l o c k c h a i n/fastpay/":{"tf":1.7320508075688772},"https://phlip9.com/notes/btc-ln/lightning libs/":{"tf":1.4142135623730951},"https://phlip9.com/notes/btc-ln/lightning rod/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":4.0},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel SGX/secure time/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":2.0},"https://phlip9.com/notes/crypto/biscuit authz/":{"tf":1.0},"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":1.0},"https://phlip9.com/notes/fuzzing/fuzzcheck-rs/":{"tf":1.0},"https://phlip9.com/notes/fuzzing/fuzzing/":{"tf":1.0},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.7320508075688772},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":2.23606797749979},"https://phlip9.com/notes/misc/optimization solvers/":{"tf":1.0},"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.0},"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":2.0},"https://phlip9.com/notes/statistics probability/G-test - multinomial goodness-of-fit/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/multinomial distribution/":{"tf":1.4142135623730951},"https://phlip9.com/notes/statistics probability/winsorize/":{"tf":1.0}},"df":24}}}}},"i":{"docs":{"https://phlip9.com/notes/AI ML/Markov Decision Process (MDP)/":{"tf":1.0},"https://phlip9.com/notes/WSL/WSL2 custom kernel/":{"tf":1.0},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0},"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/G-test - multinomial goodness-of-fit/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/multinomial distribution/":{"tf":1.0}},"df":6,"c":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.7320508075688772},"https://phlip9.com/notes/statistics probability/standard error/":{"tf":1.0}},"df":2,"i":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/AI ML/Markov Decision Process (MDP)/":{"tf":1.0},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.7320508075688772},"https://phlip9.com/notes/lang/lua/":{"tf":1.7320508075688772},"https://phlip9.com/notes/lang/rust/understanding sycamore reactivity/":{"tf":1.4142135623730951},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.0}},"df":5,"l":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0}},"df":1}}}}}}},"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/BOLT 8 - secure noise transport/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/atomic multipath payments (AMP)/":{"tf":1.0},"https://phlip9.com/notes/combinatorics/k-combinations of a multiset/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":2.0},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":1.4142135623730951},"https://phlip9.com/notes/devops/algo wireguard VPN server/":{"tf":1.0},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.7320508075688772},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":3.7416573867739413},"https://phlip9.com/notes/lang/lua/":{"tf":1.4142135623730951},"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":1.0},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":4.69041575982343},"https://phlip9.com/notes/postgres/postgres performance tuning/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.4142135623730951},"https://phlip9.com/notes/statistics probability/p-value/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/standard error/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/winsorize/":{"tf":2.6457513110645907}},"df":19,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/btc-ln/submarine swaps/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.0},"https://phlip9.com/notes/misc/setting up a headless raspbian boot image/":{"tf":1.0}},"df":3}}}}}}},"s":{"docs":{},"df":0,"s":{"docs":{"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.0},"https://phlip9.com/notes/crypto/(talk) authenticated data structures for stateless validation/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/multinomial distribution/":{"tf":1.0}},"df":3},"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0}},"df":1}}}}},"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"v":{"docs":{"https://phlip9.com/notes/AI ML/Markov Decision Process (MDP)/":{"tf":1.0},"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0},"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":1.0},"https://phlip9.com/notes/fuzzing/fuzzcheck-rs/":{"tf":1.0},"https://phlip9.com/notes/misc/setting up a headless raspbian boot image/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.4142135623730951}},"df":7}}}},"q":{"docs":{"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.0}},"df":1,"0":{"docs":{"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.0}},"df":1}}},"n":{"docs":{},"df":0,"]":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":2.23606797749979}},"df":1}}}}},"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"f":{"docs":{},"df":0,"_":{"docs":{},"df":0,"p":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"x":{"docs":{},"df":0,"t":{"docs":{},"df":0,"_":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"d":{"docs":{},"df":0,"s":{"docs":{},"df":0,"a":{"docs":{},"df":0,"_":{"docs":{},"df":0,"d":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"_":{"docs":{},"df":0,"s":{"docs":{},"df":0,"d":{"docs":{},"df":0,"k":{"docs":{},"df":0,"_":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"_":{"docs":{},"df":0,"p":{"docs":{},"df":0,"a":{"docs":{},"df":0,"g":{"docs":{},"df":0,"e":{"docs":{},"df":0,"_":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{},"df":0,"x":{"docs":{"https://phlip9.com/notes/postgres/types of scans/":{"tf":1.0}},"df":1}}}}}}}}},"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"c":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"s":{"docs":{"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.0}},"df":2}}},"u":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/money services business (MSB)/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/herbie - float error fixer/":{"tf":1.4142135623730951}},"df":2}}},"t":{"docs":{"https://phlip9.com/notes/android/OTA updates for rooted android phone/":{"tf":1.4142135623730951},"https://phlip9.com/notes/btc-ln/breez lightning service providers/":{"tf":1.0}},"df":2}}},"b":{"docs":{},"df":0,"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":2.0},"https://phlip9.com/notes/btc-ln/BOLT 8 - secure noise transport/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/breez lightning service providers/":{"tf":2.23606797749979},"https://phlip9.com/notes/btc-ln/hosted channels/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":2.0},"https://phlip9.com/notes/devops/consul/":{"tf":1.0},"https://phlip9.com/notes/devops/linkerd/":{"tf":1.0},"https://phlip9.com/notes/devops/service mesh/":{"tf":1.4142135623730951},"https://phlip9.com/notes/networking/network interface card (NIC)/":{"tf":1.0}},"df":9,"/":{"docs":{},"df":0,"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{},"df":0,"b":{"docs":{},"df":0,"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/btc-ln/submarine swaps/":{"tf":1.0}},"df":1}}}}}}}}},"_":{"docs":{},"df":0,"p":{"docs":{},"df":0,"a":{"docs":{},"df":0,"y":{"docs":{"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.0}},"df":1,"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"s":{"docs":{},"df":0,".":{"docs":{},"df":0,"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"c":{"docs":{},"df":0,"k":{"docs":{"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.4142135623730951}},"df":1,"(":{"docs":{},"df":0,")":{"docs":{},"df":0,".":{"docs":{},"df":0,"g":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{},"df":0,"_":{"docs":{},"df":0,"m":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{},"df":0,"(":{"docs":{},"df":0,"h":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{},"df":0,"h":{"docs":{"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"c":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"v":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{"https://phlip9.com/notes/reproducible builds/reproducible-builds.org/":{"tf":1.0}},"df":1}}}}}}},"l":{"docs":{"https://phlip9.com/notes/lang/rust/rr with rust/":{"tf":1.4142135623730951},"https://phlip9.com/notes/nvim/universal-ctags Notes/":{"tf":1.0}},"df":2,"u":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/foreign bank account report (FBAR)/":{"tf":1.0},"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/money services business (MSB)/":{"tf":1.7320508075688772},"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/atomic multipath payments (AMP)/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.7320508075688772},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":4.69041575982343},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel SGX/secure time/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":1.0},"https://phlip9.com/notes/crypto/(talk) authenticated data structures for stateless validation/":{"tf":1.0},"https://phlip9.com/notes/crypto/acme protocol/":{"tf":1.0},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0},"https://phlip9.com/notes/lang/gdb ref/":{"tf":1.0},"https://phlip9.com/notes/lang/lua/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/rust/rr with rust/":{"tf":1.4142135623730951},"https://phlip9.com/notes/postgres/postgres performance tuning/":{"tf":1.0},"https://phlip9.com/notes/postgres/types of scans/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.7320508075688772},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":2.449489742783178}},"df":23},"s":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/btc utreexo - utxo accumulator/":{"tf":2.0},"https://phlip9.com/notes/combinatorics/k-combinations of a multiset/":{"tf":1.0},"https://phlip9.com/notes/crypto/(talk) authenticated data structures for stateless validation/":{"tf":1.4142135623730951}},"df":3}}},"o":{"docs":{},"df":0,"m":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.4142135623730951},"https://phlip9.com/notes/btc-ln/zero-conf channels/":{"tf":1.0}},"df":2,"p":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/crypto/TLS self-signed pubkey-only certs/":{"tf":1.0}},"df":1}},"e":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/management/relieve often - why generals were more successful in WWII/":{"tf":1.4142135623730951}},"df":1}},"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/monetary instruments/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.0}},"df":2}}}}},"r":{"docs":{},"df":0,"p":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.4142135623730951}},"df":2}}},"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.0}},"df":1,"l":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0}},"df":1}}}}}}}},"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/fastpay/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/submarine swaps/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/secure time/":{"tf":1.0},"https://phlip9.com/notes/crypto/acme protocol/":{"tf":1.0},"https://phlip9.com/notes/keyboards/moergo glove80/":{"tf":1.0},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/lightning router overview/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/standard error/":{"tf":1.0}},"df":11}},"d":{"docs":{"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":1.0}},"df":1},"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/fastpay/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel SGX/secure time/":{"tf":1.0},"https://phlip9.com/notes/devops/deployment strategies/":{"tf":1.0},"https://phlip9.com/notes/performance/simdjson talk/":{"tf":1.0}},"df":4}}}}}}},"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"p":{"docs":{"https://phlip9.com/notes/statistics probability/cheat sheet/":{"tf":1.0}},"df":1,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 7 - p2p node and channel discovery/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0},"https://phlip9.com/notes/fuzzing/fuzzing/":{"tf":1.0},"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":1.4142135623730951},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/rebuilderd/":{"tf":1.0}},"df":8}}}},"x":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/fastpay/":{"tf":1.4142135623730951},"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.4142135623730951},"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.0},"https://phlip9.com/notes/combinatorics/k-combinations of a multiset/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/gramine/":{"tf":1.0},"https://phlip9.com/notes/lang/lua/":{"tf":1.0},"https://phlip9.com/notes/performance/bit hacks/":{"tf":2.6457513110645907},"https://phlip9.com/notes/postgres/postgres performance tuning/":{"tf":1.0},"https://phlip9.com/notes/postgres/types of scans/":{"tf":4.69041575982343},"https://phlip9.com/notes/statistics probability/winsorize/":{"tf":2.0}},"df":10,".":{"docs":{},"df":0,"h":{"docs":{},"df":0,"t":{"docs":{},"df":0,"m":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.7320508075688772}},"df":3,"l":{"docs":{"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.0}},"df":1}}}}},"_":{"docs":{"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.4142135623730951}},"df":1}}},"i":{"docs":{},"df":0,"c":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.4142135623730951},"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0},"https://phlip9.com/notes/design/form design/":{"tf":1.0},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":2.449489742783178},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":3.605551275463989},"https://phlip9.com/notes/statistics probability/p-value/":{"tf":1.0}},"df":8},"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/postgres/types of scans/":{"tf":1.0}},"df":1}}}},"v":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{},"df":0,"u":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/marblerun/":{"tf":1.0},"https://phlip9.com/notes/performance/bit hacks/":{"tf":2.0},"https://phlip9.com/notes/reproducible builds/reproducible-builds.org/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/CDF confidence bands - DKW inequality/":{"tf":1.0}},"df":7}},"u":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0}},"df":1}}}},"u":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.7320508075688772}},"df":1}},"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0}},"df":1}}}}}},"e":{"docs":{},"df":0,"q":{"docs":{},"df":0,"u":{"docs":{"https://phlip9.com/notes/statistics probability/CDF confidence bands - DKW inequality/":{"tf":3.1622776601683795}},"df":1}},"t":{"docs":{"https://phlip9.com/notes/android/ADB over TCP inside WSL2/":{"tf":1.0},"https://phlip9.com/notes/networking/network interfaces/":{"tf":2.23606797749979}},"df":2,"6":{"docs":{"https://phlip9.com/notes/networking/network interfaces/":{"tf":3.3166247903554}},"df":1}}},"f":{"docs":{},"df":0,"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{"https://phlip9.com/notes/statistics probability/multinomial distribution/":{"tf":1.0}},"df":1}},"r":{"docs":{"https://phlip9.com/notes/statistics probability/multinomial distribution/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/testing whether a coin is fair/":{"tf":1.7320508075688772}},"df":2,"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/lang/rust/rr with rust/":{"tf":1.0}},"df":1}}}}},"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/AI ML/Markov Decision Process (MDP)/":{"tf":1.7320508075688772},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":2}}},"x":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0},"https://phlip9.com/notes/lang/operator fixity and precedence/":{"tf":2.0}},"df":2,"(":{"docs":{},"df":0,"r":{"docs":{},"df":0,"|":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/lang/operator fixity and precedence/":{"tf":1.0}},"df":1}}}},"l":{"docs":{"https://phlip9.com/notes/lang/operator fixity and precedence/":{"tf":2.6457513110645907}},"df":1},"r":{"docs":{"https://phlip9.com/notes/lang/operator fixity and precedence/":{"tf":2.6457513110645907}},"df":1}}},"l":{"docs":{},"df":0,"u":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"c":{"docs":{"https://phlip9.com/notes/reproducible builds/reproducible-builds.org/":{"tf":1.0}},"df":1}}}}},"o":{"docs":{"https://phlip9.com/notes/android/android cli setup/":{"tf":1.0},"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0},"https://phlip9.com/notes/b l o c k c h a i n/fastpay/":{"tf":1.0},"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/atomic multipath payments (AMP)/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":2.23606797749979},"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":1.0},"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":3.605551275463989},"https://phlip9.com/notes/design/form design/":{"tf":1.7320508075688772},"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.4142135623730951},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0},"https://phlip9.com/notes/postgres/postgres performance tuning/":{"tf":1.0},"https://phlip9.com/notes/postgres/snippets/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.0}},"df":17,"_":{"docs":{},"df":0,"u":{"docs":{},"df":0,"f":{"docs":{},"df":0,"2":{"docs":{},"df":0,".":{"docs":{},"df":0,"t":{"docs":{},"df":0,"x":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1}}}}}}}},"r":{"docs":{},"df":0,"m":{"docs":{"https://phlip9.com/notes/AI ML/Expectimax Search/":{"tf":1.0},"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/foreign bank account report (FBAR)/":{"tf":1.0},"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/money services business (MSB)/":{"tf":1.0},"https://phlip9.com/notes/b l o c k c h a i n/fastpay/":{"tf":1.7320508075688772},"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/BOLT 11 - invoices/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":2.0},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.0},"https://phlip9.com/notes/design/form design/":{"tf":1.0},"https://phlip9.com/notes/lang/operator fixity and precedence/":{"tf":1.0},"https://phlip9.com/notes/misc/envsubst/":{"tf":1.0},"https://phlip9.com/notes/postgres/postgres performance tuning/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":2.0},"https://phlip9.com/notes/router/lightning router/captive portal/arubanetworks captive portal/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":2.8284271247461903},"https://phlip9.com/notes/statistics probability/testing whether a coin is fair/":{"tf":1.0}},"df":19}}},"r":{"docs":{},"df":0,"a":{"docs":{"https://phlip9.com/notes/reproducible builds/nix/links/":{"tf":1.4142135623730951}},"df":1,"/":{"docs":{},"df":0,"r":{"docs":{},"df":0,"c":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"k":{"docs":{"https://phlip9.com/notes/crypto/TLS self-signed pubkey-only certs/":{"tf":1.0}},"df":1}}}}}}},"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"e":{"docs":{},"df":0,"/":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"/":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"y":{"docs":{},"df":0,"_":{"docs":{},"df":0,"s":{"docs":{},"df":0,"u":{"docs":{},"df":0,"b":{"docs":{},"df":0,"s":{"docs":{},"df":0,"c":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"b":{"docs":{"https://phlip9.com/notes/devops/o11y/jaeger oss e2e tracing/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"u":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{},"df":0,"u":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0},"https://phlip9.com/notes/devops/nomad/":{"tf":1.4142135623730951},"https://phlip9.com/notes/devops/secrets/1password - secrets automation/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/rust/rust verification tools/":{"tf":1.0},"https://phlip9.com/notes/misc/optimization solvers/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/reproducible-builds.org/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.4142135623730951}},"df":10}}}}}}}}}},"t":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/AI ML/Markov Decision Process (MDP)/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/standard error/":{"tf":1.0}},"df":2}}},"g":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"s":{"docs":{"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.0}},"df":1}}}},"y":{"docs":{},"df":0,"d":{"docs":{},"df":0,"o":{"docs":{},"df":0,"t":{"docs":{},"df":0,"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{},"df":0,"/":{"docs":{},"df":0,"g":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":1.0}},"df":1}}}}}}}}}}}},"h":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/btc-ln/zero-conf channels/":{"tf":1.0},"https://phlip9.com/notes/lang/lua/":{"tf":1.7320508075688772}},"df":2}}}}},"i":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.4142135623730951},"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":3.1622776601683795},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":2.23606797749979},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":2.23606797749979},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":2.0},"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/testing whether a coin is fair/":{"tf":1.0}},"df":8,".":{"docs":{},"df":0,"s":{"docs":{},"df":0,"h":{"docs":{"https://phlip9.com/notes/android/android cli setup/":{"tf":1.4142135623730951},"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.4142135623730951}},"df":2}}},":":{"docs":{},"df":0,":":{"docs":{},"df":0,"s":{"docs":{},"df":0,"y":{"docs":{},"df":0,"n":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"i":{"docs":{},"df":0,"z":{"docs":{},"df":0,"e":{"docs":{},"df":0,"_":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}},"_":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"y":{"docs":{"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.0}},"df":1}}}}}},"i":{"docs":{"https://phlip9.com/notes/AI ML/Markov Decision Process (MDP)/":{"tf":1.0},"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.4142135623730951},"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.4142135623730951},"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":2.0},"https://phlip9.com/notes/btc-ln/atomic multipath payments (AMP)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/btc-ln/breez lightning service providers/":{"tf":2.449489742783178},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":2.6457513110645907},"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/secure time/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel TDX/":{"tf":1.0},"https://phlip9.com/notes/crypto/biscuit authz/":{"tf":1.0},"https://phlip9.com/notes/devops/azure CLI/":{"tf":1.0},"https://phlip9.com/notes/distributed systems/papers/(2020) Semi-Fast Byzantine-tolerant Shared Register without Reliable Broadcast/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":2.0},"https://phlip9.com/notes/lang/lua/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/understanding sycamore reactivity/":{"tf":1.0},"https://phlip9.com/notes/management/relieve often - why generals were more successful in WWII/":{"tf":1.0},"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":3.3166247903554},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0},"https://phlip9.com/notes/networking/ipv6 address space/":{"tf":1.0},"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/nix/nix debug broken package build/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/arubanetworks captive portal/":{"tf":2.449489742783178},"https://phlip9.com/notes/statistics probability/multinomial distribution/":{"tf":1.0}},"df":27,"a":{"docs":{},"df":0,"i":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0}},"df":1}}},"t":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0}},"df":1}}}},"j":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/mystikos/":{"tf":1.0}},"df":2}}}},"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/WSL/WSL2 custom kernel/":{"tf":1.4142135623730951},"https://phlip9.com/notes/statistics probability/G-test - multinomial goodness-of-fit/":{"tf":1.0}},"df":2}}},"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"m":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"y":{"docs":{},"df":0,"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"g":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.0}},"df":1}}}}}}}}}},"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/android/root phone with magisk/":{"tf":1.0},"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.4142135623730951},"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/operator fixity and precedence/":{"tf":1.4142135623730951}},"df":6,"(":{"docs":{},"df":0,"x":{"docs":{"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":1.0}},"df":1}},".":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"p":{"docs":{},"df":0,"p":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"c":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0}},"df":1}}}}}}}}}}},"_":{"docs":{},"df":0,"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{},"df":0,"p":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":1.0}},"df":1}}}}}}}}}},"p":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/btc utreexo - utxo accumulator/":{"tf":1.0},"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.0},"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":4.123105625617661},"https://phlip9.com/notes/design/form design/":{"tf":4.58257569495584},"https://phlip9.com/notes/distributed systems/papers/(2021) Leaderless Consensus/":{"tf":1.0},"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":1.0},"https://phlip9.com/notes/fuzzing/fuzzcheck-rs/":{"tf":1.7320508075688772},"https://phlip9.com/notes/fuzzing/fuzzing/":{"tf":1.7320508075688772},"https://phlip9.com/notes/lang/gdb ref/":{"tf":1.0},"https://phlip9.com/notes/lang/operator fixity and precedence/":{"tf":2.23606797749979},"https://phlip9.com/notes/misc/envsubst/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/nix/nix debug spurrious rebuilds/":{"tf":1.7320508075688772}},"df":16,"r":{"docs":{},"df":0,"c":{"docs":{"https://phlip9.com/notes/lang/gdb ref/":{"tf":1.0}},"df":1}}}}},"s":{"docs":{},"df":0,"c":{"docs":{},"df":0,"r":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/misc/pop_OS! tweaks/":{"tf":1.0},"https://phlip9.com/notes/misc/setting up a headless raspbian boot image/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.0}},"df":3}}}},"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"u":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/confidential computing/gramine/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/secure time/":{"tf":1.7320508075688772},"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":1.0}},"df":3}}},"r":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/devops/service mesh/":{"tf":1.0},"https://phlip9.com/notes/lang/lua/":{"tf":1.0},"https://phlip9.com/notes/postgres/snippets/":{"tf":1.7320508075688772},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.4142135623730951}},"df":5,"/":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"m":{"docs":{},"df":0,"o":{"docs":{},"df":0,"v":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/btc utreexo - utxo accumulator/":{"tf":1.0}},"df":1}}}}}},"s":{"docs":{},"df":0,"/":{"docs":{},"df":0,"u":{"docs":{},"df":0,"p":{"docs":{},"df":0,"d":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"/":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/postgres/types of scans/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}},"i":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/WSL/WSL2 custom kernel/":{"tf":1.4142135623730951},"https://phlip9.com/notes/android/ADB over TCP inside WSL2/":{"tf":3.4641016151377544},"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.4142135623730951},"https://phlip9.com/notes/android/root phone with magisk/":{"tf":2.0},"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":3.0},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":2.449489742783178},"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/marblerun/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/mystikos/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":2.0},"https://phlip9.com/notes/devops/azure CLI/":{"tf":1.0},"https://phlip9.com/notes/devops/k3s/":{"tf":1.0},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":2.23606797749979},"https://phlip9.com/notes/lang/rust/rr with rust/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/rust/understanding sycamore reactivity/":{"tf":1.7320508075688772},"https://phlip9.com/notes/management/relieve often - why generals were more successful in WWII/":{"tf":1.0},"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":1.7320508075688772},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0},"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.4142135623730951},"https://phlip9.com/notes/postgres/types of scans/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.4142135623730951}},"df":24},"g":{"docs":{},"df":0,"h":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/combinatorics/k-combinations of a multiset/":{"tf":1.0},"https://phlip9.com/notes/networking/CIDR/":{"tf":1.0}},"df":2}}}},"p":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/nix/nix debug broken package build/":{"tf":1.4142135623730951},"https://phlip9.com/notes/reproducible builds/reproducible-builds.org/":{"tf":1.0}},"df":3}}}},"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/WSL/WSL2 custom kernel/":{"tf":2.6457513110645907},"https://phlip9.com/notes/android/ADB over TCP inside WSL2/":{"tf":1.0},"https://phlip9.com/notes/android/OTA updates for rooted android phone/":{"tf":2.449489742783178},"https://phlip9.com/notes/android/android cli setup/":{"tf":3.4641016151377544},"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":4.58257569495584},"https://phlip9.com/notes/android/root phone with magisk/":{"tf":3.0},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":6.708203932499369},"https://phlip9.com/notes/confidential computing/gramine/":{"tf":2.8284271247461903},"https://phlip9.com/notes/devops/algo wireguard VPN server/":{"tf":2.6457513110645907},"https://phlip9.com/notes/devops/azure CLI/":{"tf":1.7320508075688772},"https://phlip9.com/notes/devops/secrets/sy - share secrets safely/":{"tf":1.0},"https://phlip9.com/notes/ios/ios setup/":{"tf":2.8284271247461903},"https://phlip9.com/notes/lang/ATS/Install ATS2/":{"tf":1.7320508075688772},"https://phlip9.com/notes/lang/flutter/flutter setup/":{"tf":2.6457513110645907},"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":2.0},"https://phlip9.com/notes/lang/rust/rr with rust/":{"tf":2.0},"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":2.0},"https://phlip9.com/notes/misc/pop_OS! tweaks/":{"tf":1.0},"https://phlip9.com/notes/misc/prepping RPI for embedded dev/":{"tf":2.0},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":2.6457513110645907},"https://phlip9.com/notes/misc/scanning QR codes on desktop/":{"tf":1.0},"https://phlip9.com/notes/misc/setting up a headless raspbian boot image/":{"tf":2.0},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":2.6457513110645907},"https://phlip9.com/notes/reproducible builds/nix/nix auto-allocate-uids -> nixbld users/":{"tf":2.449489742783178},"https://phlip9.com/notes/reproducible builds/nix/nix debug broken package build/":{"tf":1.4142135623730951},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.0}},"df":26,"l":{"docs":{},"df":0,".":{"docs":{},"df":0,"s":{"docs":{},"df":0,"h":{"docs":{"https://phlip9.com/notes/android/android cli setup/":{"tf":2.23606797749979}},"df":1}}},"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,".":{"docs":{},"df":0,"z":{"docs":{},"df":0,"i":{"docs":{},"df":0,"p":{"docs":{"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0}},"df":1}}}}}},"p":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"y":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"g":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"g":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"b":{"docs":{},"df":0,"u":{"docs":{},"df":0,"g":{"docs":{"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.7320508075688772}},"df":1}}}}}}}}}}}}}}}}}},"n":{"docs":{},"df":0,"c":{"docs":{"https://phlip9.com/notes/AI ML/Markov Decision Process (MDP)/":{"tf":1.0},"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":2.449489742783178},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":2.0},"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/marblerun/":{"tf":1.0},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0},"https://phlip9.com/notes/lang/lua/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/operator fixity and precedence/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/sycamore x futures/":{"tf":1.0},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0},"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/nix/nix debug broken package build/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/rebuilderd/":{"tf":1.0}},"df":16,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"m":{"docs":{},"df":0,"p":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.4142135623730951}},"df":1}}}}}}}}}}}}}}}}},"s":{"docs":{},"df":0,"y":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.7320508075688772}},"df":1}},"y":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0}},"df":1}}},"t":{"docs":{"https://phlip9.com/notes/devops/linkerd/":{"tf":1.0},"https://phlip9.com/notes/performance/simdjson talk/":{"tf":1.0}},"df":2,"a":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/btc-ln/lightning libs/":{"tf":1.0}},"df":1}},"i":{"docs":{"https://phlip9.com/notes/performance/simdjson talk/":{"tf":1.0}},"df":1}}}},"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/AI ML/Expectimax Search/":{"tf":1.0},"https://phlip9.com/notes/AI ML/Markov Decision Process (MDP)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/android/OTA updates for rooted android phone/":{"tf":1.0},"https://phlip9.com/notes/b l o c k c h a i n/bip158 - compact block filters/":{"tf":1.0},"https://phlip9.com/notes/b l o c k c h a i n/btc utreexo - utxo accumulator/":{"tf":1.0},"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/breez lightning service providers/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.7320508075688772},"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.0},"https://phlip9.com/notes/crypto/(talk) authenticated data structures for stateless validation/":{"tf":1.0},"https://phlip9.com/notes/crypto/biscuit authz/":{"tf":1.0},"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":1.0},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.7320508075688772},"https://phlip9.com/notes/lang/flutter/flutter setup/":{"tf":1.0},"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":1.0},"https://phlip9.com/notes/misc/pop_OS! tweaks/":{"tf":1.0},"https://phlip9.com/notes/misc/setting up a headless raspbian boot image/":{"tf":1.0},"https://phlip9.com/notes/networking/CIDR/":{"tf":2.23606797749979},"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.0},"https://phlip9.com/notes/postgres/types of scans/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/rebuilderd/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/reproducible-builds.org/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.4142135623730951},"https://phlip9.com/notes/statistics probability/multinomial distribution/":{"tf":1.0}},"df":26}}},"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"u":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/financial instituion/":{"tf":1.4142135623730951},"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/foreign bank account report (FBAR)/":{"tf":1.7320508075688772},"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/money services business (MSB)/":{"tf":1.4142135623730951}},"df":3}}},"t":{"docs":{"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/financial instituion/":{"tf":1.0},"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/money services business (MSB)/":{"tf":1.0}},"df":2}}}},"r":{"docs":{},"df":0,"u":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0},"https://phlip9.com/notes/android/root phone with magisk/":{"tf":1.0},"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.7320508075688772},"https://phlip9.com/notes/confidential computing/intel SGX/secure time/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/rr with rust/":{"tf":1.0},"https://phlip9.com/notes/performance/simdjson talk/":{"tf":2.23606797749979}},"df":10}},"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.4142135623730951},"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/monetary instruments/":{"tf":2.23606797749979},"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/money services business (MSB)/":{"tf":2.8284271247461903}},"df":3}}}}}}},"u":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/foreign bank account report (FBAR)/":{"tf":1.4142135623730951}},"df":1}}},"t":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":5.5677643628300215},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":3.4641016151377544},"https://phlip9.com/notes/lang/koka-lang/":{"tf":1.7320508075688772}},"df":5,"(":{"docs":{},"df":0,"8":{"docs":{},"df":0,".":{"docs":{},"df":0,"0":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1}}}},".":{"docs":{},"df":0,"p":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"(":{"docs":{"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0}},"df":1,"t":{"docs":{},"df":0,"h":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.4142135623730951}},"df":1}}}}}}}}}},"0":{"docs":{},"df":0,"8":{"docs":{},"df":0,"h":{"docs":{},"df":0,"/":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"g":{"docs":{},"df":0,"h":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"m":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/secure time/":{"tf":1.0}},"df":1}}}}}}}}}}}},"_":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"_":{"docs":{},"df":0,"v":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":2.0}},"df":1}}}}}}},"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"f":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":2.0}},"df":1}}}},"e":{"docs":{},"df":0,"g":{"docs":{"https://phlip9.com/notes/combinatorics/k-combinations of a multiset/":{"tf":1.0},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/rust verification tools/":{"tf":1.4142135623730951},"https://phlip9.com/notes/misc/optimization solvers/":{"tf":1.0},"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.4142135623730951},"https://phlip9.com/notes/statistics probability/winsorize/":{"tf":1.7320508075688772}},"df":6,"r":{"docs":{"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0},"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/money services business (MSB)/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/breez lightning service providers/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":2.23606797749979},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel TDX/":{"tf":1.7320508075688772},"https://phlip9.com/notes/confidential computing/marblerun/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":1.0},"https://phlip9.com/notes/devops/consul/":{"tf":1.0},"https://phlip9.com/notes/devops/docker compose/":{"tf":1.0},"https://phlip9.com/notes/devops/service mesh/":{"tf":1.0},"https://phlip9.com/notes/fuzzing/bolero - fuzzing + property testing/":{"tf":1.0},"https://phlip9.com/notes/lang/koka-lang/":{"tf":1.0},"https://phlip9.com/notes/networking/network interface card (NIC)/":{"tf":1.0},"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/nix/links/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/testing whether a coin is fair/":{"tf":1.0}},"df":18}},"l":{"docs":{"https://phlip9.com/notes/WSL/WSL2 custom kernel/":{"tf":1.0},"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0},"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":2.23606797749979},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":4.242640687119285},"https://phlip9.com/notes/confidential computing/gramine/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":6.4031242374328485},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":6.244997998398398},"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":4.123105625617661},"https://phlip9.com/notes/confidential computing/intel SGX/secure time/":{"tf":1.7320508075688772},"https://phlip9.com/notes/confidential computing/intel TDX/":{"tf":3.0},"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/rust/rr with rust/":{"tf":1.0}},"df":13,"'":{"docs":{"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/secure time/":{"tf":1.0}},"df":3},"(":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/gramine/":{"tf":1.0}},"df":2}},"/":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"u":{"docs":{},"df":0,"x":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.0}},"df":1}}}}}},"’":{"docs":{"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.0}},"df":1}},"n":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/foreign bank account report (FBAR)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/btc-ln/lightning libs/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/devops/service mesh/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/rust verification tools/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":2.449489742783178},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":3.4641016151377544}},"df":8},"t":{"docs":{"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":1.0}},"df":1}},"r":{"docs":{"https://phlip9.com/notes/networking/CIDR/":{"tf":1.0}},"df":1,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/btc-ln/atomic multipath payments (AMP)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":1.0},"https://phlip9.com/notes/crypto/zkdocs/":{"tf":1.0},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/nix/nix auto-allocate-uids -> nixbld users/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.4142135623730951}},"df":12}}},"c":{"docs":{},"df":0,"e":{"docs":{},"df":0,"p":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/lang/rust/rr with rust/":{"tf":1.0},"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/arubanetworks captive portal/":{"tf":1.4142135623730951},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.4142135623730951}},"df":5}}}},"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/foreign bank account report (FBAR)/":{"tf":2.0},"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.0},"https://phlip9.com/notes/combinatorics/k-combinations of a multiset/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.0},"https://phlip9.com/notes/fuzzing/fuzzing/":{"tf":1.0},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/testing whether a coin is fair/":{"tf":1.0}},"df":8,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"g":{"docs":{},"df":0,"/":{"docs":{},"df":0,"u":{"docs":{},"df":0,"s":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0}},"df":1}}},"l":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0}},"df":1}}}}}}}},"f":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{"https://phlip9.com/notes/android/ADB over TCP inside WSL2/":{"tf":1.0},"https://phlip9.com/notes/b l o c k c h a i n/fastpay/":{"tf":1.0},"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.4142135623730951},"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.7320508075688772},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.7320508075688772},"https://phlip9.com/notes/confidential computing/intel SGX/secure time/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/marblerun/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/mystikos/":{"tf":1.0},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":3.3166247903554},"https://phlip9.com/notes/lang/koka-lang/":{"tf":1.0},"https://phlip9.com/notes/misc/optimization solvers/":{"tf":1.0},"https://phlip9.com/notes/misc/prepping RPI for embedded dev/":{"tf":1.4142135623730951},"https://phlip9.com/notes/networking/CIDR/":{"tf":1.0},"https://phlip9.com/notes/networking/ipv6 address space/":{"tf":1.4142135623730951},"https://phlip9.com/notes/networking/network interface card (NIC)/":{"tf":2.0},"https://phlip9.com/notes/networking/network interfaces/":{"tf":6.48074069840786},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":2.0}},"df":21,"e":{"docs":{},"df":0,"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.7320508075688772}},"df":1}}}},"r":{"docs":{},"df":0,"f":{"docs":{},"df":0,"c":{"docs":{},"df":0,"4":{"docs":{},"df":0,"2":{"docs":{},"df":0,"9":{"docs":{},"df":0,"1":{"docs":{"https://phlip9.com/notes/networking/ipv6 address space/":{"tf":1.0}},"df":1}}}}}}}}}}},"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"d":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/monetary instruments/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/BOLT 4 - onion routing protocol/":{"tf":2.449489742783178},"https://phlip9.com/notes/btc-ln/submarine swaps/":{"tf":1.0},"https://phlip9.com/notes/combinatorics/k-combinations of a multiset/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0},"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":1.4142135623730951},"https://phlip9.com/notes/fuzzing/fuzzcheck-rs/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/rust verification tools/":{"tf":1.0},"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.4142135623730951}},"df":10,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/money services business (MSB)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/btc-ln/lightning rod/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/submarine swaps/":{"tf":1.4142135623730951},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.4142135623730951}},"df":5}}}}}}},"n":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":2.0},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":1.0},"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":1.7320508075688772},"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":2.0},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0},"https://phlip9.com/notes/postgres/postgres performance tuning/":{"tf":1.0},"https://phlip9.com/notes/postgres/types of scans/":{"tf":1.7320508075688772}},"df":10,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"_":{"docs":{},"df":0,"b":{"docs":{},"df":0,"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"c":{"docs":{},"df":0,"k":{"docs":{},"df":0,"_":{"docs":{},"df":0,"s":{"docs":{"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":1.0}},"df":1}}}}}}}}}},"e":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/btc-ln/breez lightning service providers/":{"tf":1.0},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0},"https://phlip9.com/notes/networking/ipv6 address space/":{"tf":1.0},"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":2.23606797749979},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":3.3166247903554},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":3.3166247903554},"https://phlip9.com/notes/router/lightning router/lightning router overview/":{"tf":1.0}},"df":8}}},"o":{"docs":{},"df":0,"p":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.4142135623730951}},"df":2}}}},"p":{"docs":{"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.0}},"df":1,"o":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/understanding sycamore reactivity/":{"tf":1.4142135623730951},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.4142135623730951},"https://phlip9.com/notes/statistics probability/winsorize/":{"tf":1.7320508075688772}},"df":4},"s":{"docs":{"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.4142135623730951}},"df":2}},"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/rust verification tools/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":2.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":3.0}},"df":4}}}},"r":{"docs":{},"df":0,"u":{"docs":{},"df":0,"p":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.0}},"df":1}}}},"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/AI ML/Expectimax Search/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.4142135623730951}},"df":2}}}},"v":{"docs":{"https://phlip9.com/notes/AI ML/Expectimax Search/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/CDF confidence bands - DKW inequality/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/testing whether a coin is fair/":{"tf":1.4142135623730951},"https://phlip9.com/notes/statistics probability/winsorize/":{"tf":2.449489742783178}},"df":4,"e":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.4142135623730951}},"df":2,"t":{"docs":{"https://phlip9.com/notes/crypto/acme protocol/":{"tf":1.0}},"df":1}}}}}},"i":{"docs":{},"df":0,"m":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/design/form design/":{"tf":1.4142135623730951}},"df":1}}}},"o":{"docs":{},"df":0,"&":{"docs":{},"df":0,"l":{"docs":{},"df":0,"t":{"docs":{},"df":0,";":{"docs":{},"df":0,"&":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{},"df":0,"p":{"docs":{},"df":0,";":{"docs":{},"df":0,"m":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.0}},"df":1}}}}}}}},"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"c":{"docs":{},"df":0,":":{"docs":{},"df":0,":":{"docs":{},"df":0,"b":{"docs":{},"df":0,"o":{"docs":{},"df":0,"x":{"docs":{},"df":0,"e":{"docs":{},"df":0,"d":{"docs":{},"df":0,":":{"docs":{},"df":0,":":{"docs":{},"df":0,"b":{"docs":{},"df":0,"o":{"docs":{},"df":0,"x":{"docs":{},"df":0,"&":{"docs":{},"df":0,"l":{"docs":{},"df":0,"t":{"docs":{},"df":0,";":{"docs":{},"df":0,"f":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{},"df":0,"u":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"_":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"l":{"docs":{},"df":0,":":{"docs":{},"df":0,":":{"docs":{},"df":0,"f":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{},"df":0,"u":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,":":{"docs":{},"df":0,":":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"y":{"docs":{},"df":0,"_":{"docs":{},"df":0,"f":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{},"df":0,"u":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"v":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"&":{"docs":{},"df":0,"l":{"docs":{},"df":0,"t":{"docs":{},"df":0,";":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"g":{"docs":{},"df":0,"&":{"docs":{},"df":0,"g":{"docs":{},"df":0,"t":{"docs":{},"df":0,";":{"docs":{},"df":0,"&":{"docs":{},"df":0,"g":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/crypto/TLS self-signed pubkey-only certs/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}},"/":{"docs":{},"df":0,"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/fastpay/":{"tf":1.0}},"df":1}}}},"_":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/performance/bit hacks/":{"tf":2.8284271247461903}},"df":1}},"p":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"&":{"docs":{},"df":0,"l":{"docs":{},"df":0,"t":{"docs":{},"df":0,";":{"docs":{},"df":0,"f":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{},"df":0,"u":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"_":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"l":{"docs":{},"df":0,":":{"docs":{},"df":0,":":{"docs":{},"df":0,"f":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{},"df":0,"u":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,":":{"docs":{},"df":0,":":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"y":{"docs":{},"df":0,"_":{"docs":{},"df":0,"f":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{},"df":0,"u":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,":":{"docs":{},"df":0,":":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"_":{"docs":{},"df":0,"f":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{},"df":0,"u":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,":":{"docs":{},"df":0,":":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"r":{"docs":{},"df":0,"a":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/secure time/":{"tf":1.0}},"df":1},"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"s":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.0},"https://phlip9.com/notes/performance/simdjson talk/":{"tf":1.0}},"df":2}}},"o":{"docs":{},"df":0,"d":{"docs":{},"df":0,"u":{"docs":{},"df":0,"c":{"docs":{"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel TDX/":{"tf":1.0},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.4142135623730951},"https://phlip9.com/notes/reproducible builds/reproducible-builds.org/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.4142135623730951}},"df":6,"t":{"docs":{"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/financial instituion/":{"tf":1.0},"https://phlip9.com/notes/fuzzing/fuzzing/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.4142135623730951}},"df":4,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/misc/kintsugi/":{"tf":1.0}},"df":1}}}}}}}},"u":{"docs":{},"df":0,"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.0}},"df":1}}}}}},"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.4142135623730951}},"df":1}}},"u":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":1.0},"https://phlip9.com/notes/distributed systems/papers/(2021) Leaderless Consensus/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/standard error/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/testing whether a coin is fair/":{"tf":1.4142135623730951}},"df":4}}},"}":{"docs":{},"df":0,"{":{"docs":{},"df":0,"p":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.4142135623730951}},"df":1}}}},"v":{"docs":{},"df":0,"_":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":2.8284271247461903}},"df":1}},"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.0},"https://phlip9.com/notes/design/form design/":{"tf":1.0}},"df":3}}},"r":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 11 - invoices/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/atomic multipath payments (AMP)/":{"tf":1.0},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/rust/rust verification tools/":{"tf":1.0}},"df":4}},"s":{"docs":{"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":2.23606797749979}},"df":1}},"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"s":{"docs":{"https://phlip9.com/notes/statistics probability/standard error/":{"tf":1.4142135623730951},"https://phlip9.com/notes/statistics probability/testing whether a coin is fair/":{"tf":1.4142135623730951}},"df":2},"t":{"docs":{"https://phlip9.com/notes/networking/CIDR/":{"tf":1.0}},"df":1}},"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"g":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.0}},"df":1}}}}},"i":{"docs":{},"df":0,"s":{"docs":{"https://phlip9.com/notes/reproducible builds/reproducible-builds.org/":{"tf":1.0}},"df":1}},"o":{"docs":{},"df":0,"c":{"docs":{"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":1.0}},"df":1,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,".":{"docs":{},"df":0,"h":{"docs":{},"df":0,"t":{"docs":{},"df":0,"m":{"docs":{},"df":0,"l":{"docs":{},"df":0,"&":{"docs":{},"df":0,"g":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/misc/envsubst/":{"tf":1.0}},"df":1}}}}}}}}}}}}}},"i":{"docs":{},"df":0,"c":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 11 - invoices/":{"tf":2.23606797749979},"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.4142135623730951},"https://phlip9.com/notes/btc-ln/submarine swaps/":{"tf":1.4142135623730951}},"df":3,"e":{"docs":{},"df":0,":":{"docs":{},"df":0,":":{"docs":{},"df":0,"p":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"v":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 11 - invoices/":{"tf":1.0}},"df":1}}}}}}}}}}},"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"g":{"docs":{},"df":0,"g":{"docs":{},"df":0,"e":{"docs":{},"df":0,"d":{"docs":{},"df":0,"f":{"docs":{},"df":0,"i":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 11 - invoices/":{"tf":1.0}},"df":1}}}}}}}}}}}}},"p":{"docs":{},"df":0,"a":{"docs":{},"df":0,"y":{"docs":{"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.4142135623730951}},"df":1,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"&":{"docs":{},"df":0,"l":{"docs":{},"df":0,"t":{"docs":{},"df":0,";":{"docs":{},"df":0,"e":{"docs":{},"df":0,"&":{"docs":{},"df":0,"g":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}},"k":{"docs":{"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0}},"df":1},"l":{"docs":{},"df":0,"v":{"docs":{"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":1.0}},"df":1}}}}},"o":{"docs":{"https://phlip9.com/notes/btc-ln/lightning libs/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/lightning rod/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":1.0},"https://phlip9.com/notes/ios/":{"tf":1.0},"https://phlip9.com/notes/ios/ios setup/":{"tf":2.449489742783178},"https://phlip9.com/notes/lang/flutter/flutter setup/":{"tf":2.0},"https://phlip9.com/notes/lang/lua/":{"tf":1.0},"https://phlip9.com/notes/misc/prepping RPI for embedded dev/":{"tf":1.0},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0},"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.7320508075688772},"https://phlip9.com/notes/postgres/types of scans/":{"tf":1.4142135623730951}},"df":13,":":{"docs":{},"df":0,":":{"docs":{},"df":0,":":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.4142135623730951}},"df":1}}}}}}}},"c":{"docs":{},"df":0,"t":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.4142135623730951}},"df":1}}},"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"/":{"docs":{},"df":0,"t":{"docs":{},"df":0,"l":{"docs":{},"df":0,"s":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/secure time/":{"tf":1.0}},"df":1}}}}}}}}}},"t":{"docs":{"https://phlip9.com/notes/devops/k3s/":{"tf":1.0}},"df":1}},"p":{"docs":{"https://phlip9.com/notes/android/ADB over TCP inside WSL2/":{"tf":1.4142135623730951},"https://phlip9.com/notes/android/android cli setup/":{"tf":1.0},"https://phlip9.com/notes/devops/azure CLI/":{"tf":3.3166247903554},"https://phlip9.com/notes/networking/CIDR/":{"tf":4.242640687119285},"https://phlip9.com/notes/networking/ipv6 address space/":{"tf":1.0},"https://phlip9.com/notes/networking/network interfaces/":{"tf":3.1622776601683795},"https://phlip9.com/notes/router/lightning router/captive portal/arubanetworks captive portal/":{"tf":2.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":2.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/lightning router overview/":{"tf":1.0}},"df":10,"+":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{},"df":0,"k":{"docs":{"https://phlip9.com/notes/networking/CIDR/":{"tf":1.0},"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.4142135623730951}},"df":2}}}}},".":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{},"df":0,"_":{"docs":{},"df":0,"u":{"docs":{},"df":0,"3":{"docs":{},"df":0,"2":{"docs":{"https://phlip9.com/notes/networking/CIDR/":{"tf":1.4142135623730951}},"df":1}}}}}}},"a":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":1.4142135623730951}},"df":1,"d":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"s":{"docs":{"https://phlip9.com/notes/devops/azure CLI/":{"tf":1.0}},"df":1}}}}}},"i":{"docs":{},"df":0,"r":{"docs":{},"df":0,"s":{"docs":{},"df":0,"(":{"docs":{},"df":0,"a":{"docs":{"https://phlip9.com/notes/lang/lua/":{"tf":1.4142135623730951}},"df":1}}}}}},"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"f":{"docs":{},"df":0,"i":{"docs":{},"df":0,"g":{"docs":{"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.0}},"df":1,"u":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/devops/azure CLI/":{"tf":1.0}},"df":1}}}}}}}},"e":{"docs":{},"df":0,"t":{"docs":{},"df":0,"k":{"docs":{},"df":0,"o":{"docs":{},"df":0,"v":{"docs":{},"df":0,"/":{"docs":{},"df":0,"c":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/reproducible builds/nix/nix debug spurrious rebuilds/":{"tf":1.0}},"df":1}}}}}}}}}},"h":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/ios/ios setup/":{"tf":2.0},"https://phlip9.com/notes/lang/flutter/flutter setup/":{"tf":1.4142135623730951}},"df":2}}},"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{"https://phlip9.com/notes/devops/algo wireguard VPN server/":{"tf":1.0}},"df":1}}},"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"g":{"docs":{"https://phlip9.com/notes/devops/azure CLI/":{"tf":1.0}},"df":1}}},"v":{"docs":{},"df":0,"4":{"docs":{"https://phlip9.com/notes/devops/azure CLI/":{"tf":1.4142135623730951},"https://phlip9.com/notes/networking/CIDR/":{"tf":1.4142135623730951},"https://phlip9.com/notes/networking/ipv6 address space/":{"tf":1.0},"https://phlip9.com/notes/networking/network interfaces/":{"tf":2.23606797749979}},"df":4,"(":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{},"df":0,"d":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 7 - p2p node and channel discovery/":{"tf":1.0}},"df":1}}}}},"+":{"docs":{},"df":0,"i":{"docs":{},"df":0,"p":{"docs":{},"df":0,"v":{"docs":{},"df":0,"6":{"docs":{"https://phlip9.com/notes/devops/azure CLI/":{"tf":1.0}},"df":1}}}}},"/":{"docs":{},"df":0,"6":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 7 - p2p node and channel discovery/":{"tf":1.0}},"df":1},"i":{"docs":{},"df":0,"p":{"docs":{},"df":0,"v":{"docs":{},"df":0,"6":{"docs":{"https://phlip9.com/notes/networking/ipv6 address space/":{"tf":1.4142135623730951}},"df":1}}}}},"a":{"docs":{},"df":0,"d":{"docs":{},"df":0,"d":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/networking/CIDR/":{"tf":1.7320508075688772}},"df":1}}}}},"6":{"docs":{"https://phlip9.com/notes/devops/azure CLI/":{"tf":1.7320508075688772},"https://phlip9.com/notes/networking/CIDR/":{"tf":1.0},"https://phlip9.com/notes/networking/ipv6 address space/":{"tf":2.23606797749979},"https://phlip9.com/notes/networking/network interfaces/":{"tf":2.8284271247461903}},"df":4,"(":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{},"df":0,"d":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 7 - p2p node and channel discovery/":{"tf":1.0}},"df":1}}}}}}}},"r":{"docs":{"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/foreign bank account report (FBAR)/":{"tf":1.4142135623730951}},"df":1},"s":{"docs":{},"df":0,"_":{"docs":{},"df":0,"p":{"docs":{},"df":0,"m":{"docs":{},"df":0,"f":{"docs":{},"df":0,"_":{"docs":{},"df":0,"s":{"docs":{},"df":0,"u":{"docs":{},"df":0,"b":{"docs":{},"df":0,"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{},"df":0,"(":{"docs":{},"df":0,"p":{"docs":{"https://phlip9.com/notes/statistics probability/G-test - multinomial goodness-of-fit/":{"tf":1.0}},"df":1,"_":{"docs":{},"df":0,"h":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/statistics probability/multinomial distribution/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}},"u":{"docs":{},"df":0,"s":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.4142135623730951}},"df":1}}},"e":{"docs":{},"df":0,"v":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0}},"df":1}},"n":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":2.0}},"df":1}}},"f":{"docs":{},"df":0,"o":{"docs":{},"df":0,"o":{"docs":{},"df":0,"a":{"docs":{},"df":0,"b":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0}},"df":1}}}}}},"g":{"docs":{},"df":0,"x":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"v":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"e":{"docs":{},"df":0,":":{"docs":{},"df":0,":":{"docs":{},"df":0,"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"w":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0}},"df":1}}}}}}}}}}}}},"h":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.0}},"df":1},"n":{"docs":{},"df":0,"'":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/btc utreexo - utxo accumulator/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/BOLT 8 - secure noise transport/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.4142135623730951},"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":1.0},"https://phlip9.com/notes/devops/azure CLI/":{"tf":1.0},"https://phlip9.com/notes/ios/ios setup/":{"tf":1.0},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/rr with rust/":{"tf":1.0},"https://phlip9.com/notes/misc/kintsugi/":{"tf":1.0}},"df":11}},"o":{"docs":{},"df":0,"b":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"(":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.4142135623730951}},"df":1}}},"n":{"docs":{"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0}},"df":1}}}}}}},"o":{"docs":{},"df":0,"d":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":2.23606797749979}},"df":1}},"k":{"docs":{},"df":0,"1":{"docs":{},"df":0,"2":{"docs":{},"df":0,"3":{"docs":{"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0}},"df":1}}}},"l":{"docs":{"https://phlip9.com/notes/AI ML/Markov Decision Process (MDP)/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/secure time/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel TDX/":{"tf":2.23606797749979},"https://phlip9.com/notes/devops/docker compose/":{"tf":1.0},"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.4142135623730951},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.4142135623730951},"https://phlip9.com/notes/reproducible builds/nix/links/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/nix/nix debug broken package build/":{"tf":1.0}},"df":10}},"p":{"docs":{"https://phlip9.com/notes/btc-ln/breez lightning service providers/":{"tf":1.0},"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.0}},"df":2},"s":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.4142135623730951}},"df":2},"u":{"docs":{"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0},"https://phlip9.com/notes/b l o c k c h a i n/fastpay/":{"tf":1.0},"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/lightning rod/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":1.0},"https://phlip9.com/notes/crypto/(talk) authenticated data structures for stateless validation/":{"tf":1.0},"https://phlip9.com/notes/crypto/acme protocol/":{"tf":1.4142135623730951},"https://phlip9.com/notes/crypto/biscuit authz/":{"tf":1.0},"https://phlip9.com/notes/devops/nomad/":{"tf":1.0},"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":1.0},"https://phlip9.com/notes/lang/flutter/flutter setup/":{"tf":1.0},"https://phlip9.com/notes/misc/pop_OS! tweaks/":{"tf":1.4142135623730951},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/nix/nix auto-allocate-uids -> nixbld users/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":2.6457513110645907},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":3.7416573867739413}},"df":20,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"c":{"docs":{"https://phlip9.com/notes/crypto/acme protocol/":{"tf":1.0}},"df":1}}},"e":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.0}},"df":1,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"\"":{"docs":{},"df":0,":":{"docs":{},"df":0,"\"":{"docs":{},"df":0,"2":{"docs":{},"df":0,"0":{"docs":{},"df":0,"1":{"docs":{},"df":0,"9":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.0}},"df":1}}}}}}}}}}},"r":{"docs":{"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/money services business (MSB)/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/gramine/":{"tf":1.4142135623730951}},"df":2}}}},"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{"https://phlip9.com/notes/confidential computing/marblerun/":{"tf":1.0}},"df":1}}},"v":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":2.449489742783178},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":2.23606797749979}},"df":5,"_":{"docs":{},"df":0,"s":{"docs":{},"df":0,"v":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.0}},"df":1,"_":{"docs":{},"df":0,"p":{"docs":{},"df":0,"c":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0}},"df":1}},"q":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0}},"df":1}}}}}},"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"c":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"v":{"docs":{},"df":0,"e":{"docs":{},"df":0,"q":{"docs":{},"df":0,"u":{"docs":{},"df":0,"o":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"b":{"docs":{},"df":0,"o":{"docs":{},"df":0,"d":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.4142135623730951}},"df":1}}}},"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"u":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.7320508075688772}},"df":1}}}}}}}}}}}}}}}}},"p":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"d":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.7320508075688772},"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.7320508075688772}},"df":2,"l":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0}},"df":1}}}}}}},"s":{"docs":{},"df":0,"v":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.7320508075688772},"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":2.8284271247461903}},"df":2,"l":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0}},"df":1}}}}},"y":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"m":{"docs":{"https://phlip9.com/notes/reproducible builds/nix/nix debug spurrious rebuilds/":{"tf":1.4142135623730951}},"df":1}}}}}},"t":{"docs":{},"df":0,"'":{"docs":{"https://phlip9.com/notes/":{"tf":1.4142135623730951},"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0},"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/foreign bank account report (FBAR)/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/lightning rod/":{"tf":1.0},"https://phlip9.com/notes/combinatorics/k-combinations of a multiset/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.7320508075688772},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":1.0},"https://phlip9.com/notes/crypto/(talk) authenticated data structures for stateless validation/":{"tf":1.0},"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":1.4142135623730951},"https://phlip9.com/notes/design/form design/":{"tf":1.0},"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":1.7320508075688772},"https://phlip9.com/notes/fuzzing/fuzzcheck-rs/":{"tf":1.0},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.0},"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":1.4142135623730951},"https://phlip9.com/notes/misc/kintsugi/":{"tf":2.449489742783178},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.7320508075688772},"https://phlip9.com/notes/networking/ipv6 address space/":{"tf":1.0},"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.0},"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":2.0},"https://phlip9.com/notes/statistics probability/G-test - multinomial goodness-of-fit/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/p-value/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/standard error/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/testing whether a coin is fair/":{"tf":1.4142135623730951}},"df":32,"l":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/devops/algo wireguard VPN server/":{"tf":1.0},"https://phlip9.com/notes/misc/kintsugi/":{"tf":1.0},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/nix/nix debug broken package build/":{"tf":1.4142135623730951},"https://phlip9.com/notes/reproducible builds/nix/nix debug spurrious rebuilds/":{"tf":1.0}},"df":5}}},"e":{"docs":{},"df":0,"m":{"docs":{"https://phlip9.com/notes/combinatorics/k-combinations of a multiset/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":2.0},"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.7320508075688772},"https://phlip9.com/notes/postgres/types of scans/":{"tf":2.0}},"df":4,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"u":{"docs":{"https://phlip9.com/notes/confidential computing/intel TDX/":{"tf":1.0}},"df":1}}}}}},"r":{"docs":{"https://phlip9.com/notes/AI ML/Markov Decision Process (MDP)/":{"tf":4.123105625617661},"https://phlip9.com/notes/combinatorics/k-combinations of a multiset/":{"tf":2.449489742783178},"https://phlip9.com/notes/lang/lua/":{"tf":2.6457513110645907},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":4}},"h":{"docs":{"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.4142135623730951}},"df":1},"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{},"df":0,"f":{"docs":{"https://phlip9.com/notes/combinatorics/k-combinations of a multiset/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":2.0},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.7320508075688772},"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":1.0},"https://phlip9.com/notes/devops/kind (kubernetes in docker)/":{"tf":1.0},"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":1.0},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/router/lightning router/captive portal/arubanetworks captive portal/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":2.0},"https://phlip9.com/notes/statistics probability/CDF confidence bands - DKW inequality/":{"tf":1.0}},"df":13}}}},"u":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.4142135623730951}},"df":2}},"’":{"docs":{"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.4142135623730951}},"df":2}},"v":{"docs":{"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.0}},"df":1}},"j":{"docs":{"https://phlip9.com/notes/combinatorics/k-combinations of a multiset/":{"tf":1.4142135623730951},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":2.0},"https://phlip9.com/notes/statistics probability/multinomial distribution/":{"tf":1.0}},"df":4,"&":{"docs":{},"df":0,"g":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/lang/gdb ref/":{"tf":1.0}},"df":1}}},"1":{"docs":{},"df":0,"2":{"docs":{"https://phlip9.com/notes/WSL/WSL2 custom kernel/":{"tf":1.4142135623730951}},"df":1}},"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"k":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/misc/water distillation setup/":{"tf":1.0}},"df":1}}}},"e":{"docs":{},"df":0,"g":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/devops/o11y/jaeger oss e2e tracing/":{"tf":1.4142135623730951}},"df":1}}}},"n":{"docs":{"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":3.4641016151377544},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.4142135623730951}},"df":3,"k":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":1.0}},"df":1}},"u":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.4142135623730951}},"df":2}}}}},"p":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{"https://phlip9.com/notes/misc/kintsugi/":{"tf":1.0}},"df":1}}}}},"r":{"docs":{},"df":0,"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"g":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0}},"df":1}}}}},"v":{"docs":{},"df":0,"a":{"docs":{"https://phlip9.com/notes/android/android cli setup/":{"tf":2.0},"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":2.449489742783178},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.0},"https://phlip9.com/notes/crypto/biscuit authz/":{"tf":1.0},"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":1.0}},"df":5,".":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"g":{"docs":{},"df":0,".":{"docs":{},"df":0,"u":{"docs":{},"df":0,"n":{"docs":{},"df":0,"s":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"f":{"docs":{},"df":0,"i":{"docs":{},"df":0,"e":{"docs":{},"df":0,"d":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"k":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}},"c":{"docs":{"https://phlip9.com/notes/android/android cli setup/":{"tf":1.7320508075688772}},"df":1}}}},"d":{"docs":{},"df":0,"k":{"docs":{"https://phlip9.com/notes/android/android cli setup/":{"tf":1.0},"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.4142135623730951}},"df":2,"1":{"docs":{},"df":0,".":{"docs":{},"df":0,"8":{"docs":{"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0}},"df":1}}}}},"e":{"docs":{},"df":0,"l":{"docs":{},"df":0,"l":{"docs":{},"df":0,"y":{"docs":{},"df":0,"f":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"h":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/btc utreexo - utxo accumulator/":{"tf":1.0}},"df":1}}}}}}},"s":{"docs":{},"df":0,"u":{"docs":{"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.0}},"df":1}}},"g":{"docs":{},"df":0,"a":{"docs":{},"df":0,"w":{"docs":{},"df":0,"k":{"docs":{"https://phlip9.com/notes/lang/ATS/Install ATS2/":{"tf":1.0}},"df":1}}}},"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"j":{"docs":{},"df":0,"a":{"docs":{},"df":0,"2":{"docs":{"https://phlip9.com/notes/confidential computing/gramine/":{"tf":1.4142135623730951}},"df":1}}}},"t":{"docs":{"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.0}},"df":1}},"k":{"docs":{"https://phlip9.com/notes/keyboards/moergo glove80/":{"tf":1.0}},"df":1},"o":{"docs":{},"df":0,"b":{"docs":{"https://phlip9.com/notes/devops/nomad/":{"tf":3.3166247903554},"https://phlip9.com/notes/fuzzing/fuzzing/":{"tf":1.0}},"df":2,"s":{"docs":{},"df":0,"/":{"docs":{},"df":0,"m":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/devops/nomad/":{"tf":1.4142135623730951}},"df":1}}}}}},"h":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/fuzzing/fuzzing/":{"tf":1.0}},"df":1}},"i":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/misc/kintsugi/":{"tf":2.23606797749979},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.0}},"df":2,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/misc/kintsugi/":{"tf":1.0}},"df":1}}},"t":{"docs":{"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/foreign bank account report (FBAR)/":{"tf":1.0},"https://phlip9.com/notes/misc/water distillation setup/":{"tf":1.4142135623730951},"https://phlip9.com/notes/statistics probability/multinomial distribution/":{"tf":1.0}},"df":3,"l":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/foreign bank account report (FBAR)/":{"tf":1.0}},"df":1}},"s":{"docs":{},"df":0,"/":{"docs":{},"df":0,"d":{"docs":{},"df":0,"p":{"docs":{},"df":0,"/":{"docs":{},"df":0,"b":{"docs":{},"df":0,"0":{"docs":{},"df":0,"9":{"docs":{},"df":0,"n":{"docs":{},"df":0,"p":{"docs":{},"df":0,"l":{"docs":{},"df":0,"t":{"docs":{},"df":0,"l":{"docs":{},"df":0,"q":{"docs":{},"df":0,"k":{"docs":{"https://phlip9.com/notes/misc/water distillation setup/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}},"s":{"docs":{},"df":0,"e":{"docs":{"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.4142135623730951}},"df":2},"h":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/aptos/":{"tf":1.0}},"df":1}},"u":{"docs":{},"df":0,"r":{"docs":{},"df":0,"n":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/misc/prepping RPI for embedded dev/":{"tf":1.4142135623730951}},"df":1,".":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"f":{"docs":{"https://phlip9.com/notes/misc/prepping RPI for embedded dev/":{"tf":1.0}},"df":1}}}}},"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/reproducible builds/reproducible-builds.org/":{"tf":1.0}},"df":1}}}}},"e":{"docs":{},"df":0,"y":{"docs":{"https://phlip9.com/notes/postgres/postgres performance tuning/":{"tf":1.0}},"df":1}}}}}},"q":{"docs":{"https://phlip9.com/notes/reproducible builds/nix/nix debug spurrious rebuilds/":{"tf":1.7320508075688772}},"df":1},"s":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/marblerun/":{"tf":1.0},"https://phlip9.com/notes/crypto/acme protocol/":{"tf":1.0},"https://phlip9.com/notes/devops/secrets/ejson-kms (AWS)/":{"tf":1.7320508075688772},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0},"https://phlip9.com/notes/performance/simdjson talk/":{"tf":1.7320508075688772}},"df":6,".":{"docs":{},"df":0,"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{},"df":0,"s":{"docs":{},"df":0,"(":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{},"df":0,"u":{"docs":{},"df":0,"n":{"docs":{},"df":0,"k":{"docs":{},"df":0,".":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"(":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/confidential computing/gramine/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}},"m":{"docs":{},"df":0,"s":{"docs":{},"df":0,"g":{"docs":{"https://phlip9.com/notes/confidential computing/gramine/":{"tf":1.0}},"df":1}}}}}}}}}},":":{"docs":{},"df":0,"\"":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{},"df":0,"v":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"y":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0}},"df":1}},"u":{"docs":{},"df":0,"r":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0}},"df":1}}}}}}}}}}},"d":{"docs":{},"df":0,"i":{"docs":{},"df":0,"g":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0}},"df":1}}}}}},"e":{"docs":{},"df":0,"p":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{},"df":0,"p":{"docs":{},"df":0,"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"u":{"docs":{},"df":0,"d":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"y":{"docs":{},"df":0,"m":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0}},"df":1}}}}}}}}}}}},"x":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.4142135623730951}},"df":1}}}}}},"i":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.4142135623730951}},"df":1},"s":{"docs":{},"df":0,"v":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"c":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"v":{"docs":{},"df":0,"e":{"docs":{},"df":0,"q":{"docs":{},"df":0,"u":{"docs":{},"df":0,"o":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"b":{"docs":{},"df":0,"o":{"docs":{},"df":0,"d":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0}},"df":1}}}},"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"u":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}},"n":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,",":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"m":{"docs":{},"df":0,"p":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0}},"df":1}}}}}}}}}}}}},"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"c":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0}},"df":1}}}},"p":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"f":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"m":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"f":{"docs":{},"df":0,"o":{"docs":{},"df":0,"b":{"docs":{},"df":0,"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"b":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}},"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"i":{"docs":{},"df":0,"f":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"h":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{},"df":0,"h":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0}},"df":1}}}},"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"u":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}},"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"v":{"docs":{},"df":0,"o":{"docs":{},"df":0,"c":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}},"s":{"docs":{},"df":0,"g":{"docs":{},"df":0,"x":{"docs":{},"df":0,",":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"m":{"docs":{},"df":0,"p":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0}},"df":1}}}}}}}}}}}},"i":{"docs":{},"df":0,"g":{"docs":{},"df":0,"n":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"u":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0}},"df":1}}}}}}}},"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{},"df":0,"p":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0}},"df":1}}}}}}}}},"v":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"s":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0}},"df":1,"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,",":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"m":{"docs":{},"df":0,"p":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}},"_":{"docs":{},"df":0,"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{},"df":0,"p":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/confidential computing/gramine/":{"tf":2.0}},"df":1,"[":{"docs":{},"df":0,"'":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{},"df":0,"'":{"docs":{},"df":0,"]":{"docs":{},"df":0,".":{"docs":{},"df":0,"s":{"docs":{},"df":0,"p":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/confidential computing/gramine/":{"tf":1.4142135623730951}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"u":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.4142135623730951}},"df":2,"a":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.4142135623730951}},"df":2}}}},"m":{"docs":{},"df":0,"p":{"docs":{"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0},"https://phlip9.com/notes/postgres/types of scans/":{"tf":1.0}},"df":3}},"n":{"docs":{},"df":0,"e":{"docs":{"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/foreign bank account report (FBAR)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":2.0}},"df":3},"k":{"docs":{"https://phlip9.com/notes/lang/gdb ref/":{"tf":1.0},"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.0}},"df":2}}},"w":{"docs":{},"df":0,"k":{"docs":{"https://phlip9.com/notes/crypto/acme protocol/":{"tf":1.4142135623730951}},"df":1}},"ö":{"docs":{},"df":0,"r":{"docs":{},"df":0,"g":{"docs":{"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.4142135623730951}},"df":1}}}},"k":{"docs":{"https://phlip9.com/notes/AI ML/Markov Decision Process (MDP)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/android/root phone with magisk/":{"tf":1.0},"https://phlip9.com/notes/b l o c k c h a i n/":{"tf":1.0},"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":2.6457513110645907},"https://phlip9.com/notes/combinatorics/k-combinations of a multiset/":{"tf":3.4641016151377544},"https://phlip9.com/notes/distributed systems/papers/(2021) Leaderless Consensus/":{"tf":1.0},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.4142135623730951},"https://phlip9.com/notes/performance/bit hacks/":{"tf":2.23606797749979},"https://phlip9.com/notes/statistics probability/CDF confidence bands - DKW inequality/":{"tf":1.4142135623730951},"https://phlip9.com/notes/statistics probability/MAD - median absolute deviation/":{"tf":1.4142135623730951},"https://phlip9.com/notes/statistics probability/kelly criterion + ELO/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/multinomial distribution/":{"tf":2.23606797749979}},"df":12,"(":{"docs":{},"df":0,"1":{"docs":{"https://phlip9.com/notes/statistics probability/kelly criterion + ELO/":{"tf":1.0}},"df":1},"e":{"docs":{},"df":0,"(":{"docs":{},"df":0,"e":{"docs":{},"df":0,"_":{"docs":{},"df":0,"g":{"docs":{"https://phlip9.com/notes/statistics probability/kelly criterion + ELO/":{"tf":1.0}},"df":1}}}}}},")":{"docs":{},"df":0,".":{"docs":{},"df":0,".":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/combinatorics/k-combinations of a multiset/":{"tf":1.0}},"df":1}}}},".":{"docs":{},"df":0,".":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/combinatorics/k-combinations of a multiset/":{"tf":1.4142135623730951}},"df":1}}},"3":{"docs":{"https://phlip9.com/notes/devops/k3s/":{"tf":1.4142135623730951}},"df":1},"8":{"docs":{"https://phlip9.com/notes/confidential computing/marblerun/":{"tf":1.7320508075688772},"https://phlip9.com/notes/crypto/acme protocol/":{"tf":1.0},"https://phlip9.com/notes/devops/kubernetes/":{"tf":1.0}},"df":3},"9":{"docs":{"https://phlip9.com/notes/devops/kubernetes/":{"tf":1.0}},"df":1},"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"b":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.0}},"df":1,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"_":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"s":{"docs":{},"df":0,"o":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"_":{"docs":{},"df":0,"u":{"docs":{},"df":0,"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"_":{"docs":{},"df":0,"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"v":{"docs":{"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}},"g":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"b":{"docs":{},"df":0,"b":{"docs":{"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.0}},"df":1}}}}},"o":{"docs":{},"df":0,"b":{"docs":{},"df":0,"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"v":{"docs":{"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.0}},"df":1}}}}}},"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"_":{"docs":{},"df":0,"m":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}},"o":{"docs":{},"df":0,"l":{"docs":{},"df":0,"o":{"docs":{"https://phlip9.com/notes/distributed systems/papers/(2021) Leaderless Consensus/":{"tf":1.0}},"df":1}}}}},"b":{"docs":{"https://phlip9.com/notes/android/root phone with magisk/":{"tf":1.0},"https://phlip9.com/notes/crypto/(talk) authenticated data structures for stateless validation/":{"tf":1.4142135623730951},"https://phlip9.com/notes/postgres/snippets/":{"tf":1.7320508075688772}},"df":3,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"s":{"docs":{},"df":0,"/":{"docs":{},"df":0,"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{"https://phlip9.com/notes/router/lightning router/lightning router overview/":{"tf":1.4142135623730951}},"df":1}}}}}}},"y":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{"https://phlip9.com/notes/router/lightning router/lightning router overview/":{"tf":1.4142135623730951}},"df":1}}}},"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"b":{"docs":{},"df":0,"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"&":{"docs":{},"df":0,"l":{"docs":{},"df":0,"t":{"docs":{},"df":0,";":{"docs":{},"df":0,"t":{"docs":{},"df":0,"&":{"docs":{},"df":0,"g":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/combinatorics/k-combinations of a multiset/":{"tf":1.7320508075688772}},"df":1}}}}}}}}}}}}}}},"n":{"docs":{},"df":0,"f":{"docs":{},"df":0,"i":{"docs":{},"df":0,"g":{"docs":{},"df":0,"_":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"f":{"docs":{},"df":0,"i":{"docs":{},"df":0,"g":{"docs":{},"df":0,"=":{"docs":{},"df":0,"m":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"s":{"docs":{},"df":0,"o":{"docs":{},"df":0,"f":{"docs":{},"df":0,"t":{"docs":{},"df":0,"/":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"f":{"docs":{},"df":0,"i":{"docs":{},"df":0,"g":{"docs":{"https://phlip9.com/notes/WSL/WSL2 custom kernel/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"d":{"docs":{},"df":0,"f":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.7320508075688772},"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":1.0},"https://phlip9.com/notes/crypto/tls exported keying material/":{"tf":1.0}},"df":5,".":{"docs":{},"df":0,"f":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"z":{"docs":{},"df":0,"e":{"docs":{},"df":0,"(":{"docs":{},"df":0,"&":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{},"df":0,"p":{"docs":{},"df":0,";":{"docs":{},"df":0,"m":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}},"u":{"docs":{},"df":0,"p":{"docs":{},"df":0,"d":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"(":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"x":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}},"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"c":{"docs":{},"df":0,"a":{"docs":{},"df":0,"k":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0}},"df":1}}}},"e":{"docs":{},"df":0,"p":{"docs":{"https://phlip9.com/notes/android/ADB over TCP inside WSL2/":{"tf":1.0},"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":4.0},"https://phlip9.com/notes/confidential computing/gramine/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel SGX/secure time/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":1.0},"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":1.0},"https://phlip9.com/notes/design/form design/":{"tf":1.0},"https://phlip9.com/notes/management/relieve often - why generals were more successful in WWII/":{"tf":1.4142135623730951},"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":1.0},"https://phlip9.com/notes/misc/kintsugi/":{"tf":1.0}},"df":13,"e":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/secure time/":{"tf":2.0}},"df":1}},"s":{"docs":{},"df":0,"”":{"docs":{},"df":0,"–":{"docs":{},"df":0,"w":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"h":{"docs":{},"df":0,"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.0}},"df":1}}}}}}}}}}}},"l":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/statistics probability/kelly criterion + ELO/":{"tf":1.4142135623730951}},"df":1}}},"r":{"docs":{},"df":0,"b":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/secure time/":{"tf":1.0}},"df":1}}}},"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/WSL/WSL2 custom kernel/":{"tf":3.7416573867739413},"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":4.47213595499958},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":2.8284271247461903},"https://phlip9.com/notes/confidential computing/gramine/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel TDX/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/mystikos/":{"tf":1.7320508075688772},"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/rr with rust/":{"tf":1.0},"https://phlip9.com/notes/misc/pop_OS! tweaks/":{"tf":2.6457513110645907},"https://phlip9.com/notes/misc/prepping RPI for embedded dev/":{"tf":1.7320508075688772},"https://phlip9.com/notes/misc/setting up a headless raspbian boot image/":{"tf":1.4142135623730951},"https://phlip9.com/notes/networking/network interface card (NIC)/":{"tf":2.23606797749979},"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.7320508075688772},"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.0},"https://phlip9.com/notes/performance/profiling/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/nix/nix auto-allocate-uids -> nixbld users/":{"tf":1.0}},"df":18,".":{"docs":{},"df":0,"g":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/WSL/WSL2 custom kernel/":{"tf":1.0}},"df":1}}}},"/":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"o":{"docs":{},"df":0,"l":{"docs":{},"df":0,"s":{"docs":{},"df":0,"/":{"docs":{},"df":0,"p":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"f":{"docs":{"https://phlip9.com/notes/WSL/WSL2 custom kernel/":{"tf":1.0}},"df":1}}}}}}}}}}},"=":{"docs":{},"df":0,"c":{"docs":{},"df":0,":":{"docs":{},"df":0,"\\":{"docs":{},"df":0,"\\":{"docs":{},"df":0,"u":{"docs":{},"df":0,"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"s":{"docs":{},"df":0,"\\":{"docs":{},"df":0,"\\":{"docs":{},"df":0,"p":{"docs":{},"df":0,"h":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"p":{"docs":{},"df":0,"9":{"docs":{},"df":0,"\\":{"docs":{},"df":0,"\\":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"u":{"docs":{},"df":0,"x":{"docs":{"https://phlip9.com/notes/WSL/WSL2 custom kernel/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}},"s":{"docs":{},"df":0,"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"r":{"docs":{},"df":0,"c":{"docs":{},"df":0,"e":{"docs":{},"df":0,"d":{"docs":{},"df":0,"i":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.4142135623730951}},"df":1}}}}}}}}}}}}},"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.4142135623730951}},"df":2}}}}}},"v":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.0}},"df":1}}}},"y":{"docs":{"https://phlip9.com/notes/WSL/WSL2 custom kernel/":{"tf":1.0},"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.4142135623730951},"https://phlip9.com/notes/b l o c k c h a i n/fastpay/":{"tf":1.7320508075688772},"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":4.795831523312719},"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":3.1622776601683795},"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":2.0},"https://phlip9.com/notes/confidential computing/gramine/":{"tf":3.1622776601683795},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":6.0},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":3.4641016151377544},"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":2.8284271247461903},"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":5.477225575051661},"https://phlip9.com/notes/confidential computing/intel SGX/secure time/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel TDX/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/marblerun/":{"tf":1.7320508075688772},"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":2.6457513110645907},"https://phlip9.com/notes/crypto/TLS self-signed pubkey-only certs/":{"tf":1.0},"https://phlip9.com/notes/crypto/biscuit authz/":{"tf":2.6457513110645907},"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":5.385164807134504},"https://phlip9.com/notes/crypto/tls exported keying material/":{"tf":2.23606797749979},"https://phlip9.com/notes/devops/algo wireguard VPN server/":{"tf":1.4142135623730951},"https://phlip9.com/notes/devops/azure CLI/":{"tf":1.4142135623730951},"https://phlip9.com/notes/devops/secrets/ejson-kms (AWS)/":{"tf":3.7416573867739413},"https://phlip9.com/notes/devops/secrets/envkey/":{"tf":1.0},"https://phlip9.com/notes/devops/secrets/mozilla SOPS/":{"tf":1.7320508075688772},"https://phlip9.com/notes/keyboards/moergo glove80/":{"tf":3.605551275463989},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0},"https://phlip9.com/notes/lang/lua/":{"tf":1.0},"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":1.0},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":2.0},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.7320508075688772},"https://phlip9.com/notes/statistics probability/testing whether a coin is fair/":{"tf":1.4142135623730951}},"df":34,".":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":1.0}},"df":1}}},"n":{"docs":{},"df":0,"(":{"docs":{},"df":0,")":{"docs":{},"df":0,".":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"_":{"docs":{},"df":0,"v":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0}},"df":1}}}}}}}}}},"p":{"docs":{},"df":0,"e":{"docs":{},"df":0,"m":{"docs":{"https://phlip9.com/notes/confidential computing/gramine/":{"tf":1.7320508075688772}},"df":1}}}},"/":{"docs":{},"df":0,"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":1.0}},"df":1}}}}}}},"=":{"docs":{},"df":0,"2":{"docs":{"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.4142135623730951}},"df":1},"3":{"docs":{"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.0}},"df":1}},"_":{"docs":{},"df":0,"h":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{},"df":0,"h":{"docs":{"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":1.4142135623730951}},"df":1,".":{"docs":{},"df":0,"0":{"docs":{},"df":0,".":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{},"df":0,"_":{"docs":{},"df":0,"s":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":1.0}},"df":1}}}}}}}}}}}}}},"i":{"docs":{"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":2.449489742783178}},"df":1,"d":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/secure time/":{"tf":1.0}},"df":2}},"p":{"docs":{},"df":0,"a":{"docs":{},"df":0,"i":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/crypto/TLS self-signed pubkey-only certs/":{"tf":1.0}},"df":1,".":{"docs":{},"df":0,"1":{"docs":{"https://phlip9.com/notes/crypto/TLS self-signed pubkey-only certs/":{"tf":1.4142135623730951}},"df":1}}}}},"o":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":2.0},"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":2.0}},"df":2},"y":{"docs":{},"df":0,"_":{"docs":{},"df":0,"k":{"docs":{},"df":0,"s":{"docs":{},"df":0,"s":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.0}},"df":1}}}}}}}}}},"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"q":{"docs":{},"df":0,"u":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.4142135623730951}},"df":1}}}}}}},"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"z":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.4142135623730951}},"df":1}}}},"b":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/lang/flutter/flutter setup/":{"tf":1.0},"https://phlip9.com/notes/lang/gdb ref/":{"tf":2.23606797749979},"https://phlip9.com/notes/lang/rust/rr with rust/":{"tf":1.0}},"df":3}}},"o":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/keyboards/":{"tf":1.0},"https://phlip9.com/notes/keyboards/moergo glove80/":{"tf":1.7320508075688772},"https://phlip9.com/notes/misc/setting up a headless raspbian boot image/":{"tf":1.0}},"df":3}}}}},"i":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.4142135623730951}},"df":2}},"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"a":{"docs":{},"df":0,"g":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.4142135623730951}},"df":1}}},"p":{"docs":{},"df":0,"/":{"docs":{},"df":0,"f":{"docs":{},"df":0,"i":{"docs":{},"df":0,"r":{"docs":{},"df":0,"m":{"docs":{},"df":0,"w":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/keyboards/moergo glove80/":{"tf":1.0}},"df":1}}}}}}}}}}},"n":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.7320508075688772}},"df":1,"e":{"docs":{},"df":0,":":{"docs":{},"df":0,":":{"docs":{},"df":0,"s":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0}},"df":1}}},"=":{"docs":{},"df":0,"4":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.0}},"df":1}}}}}},"p":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1},"i":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0},"https://phlip9.com/notes/crypto/TLS self-signed pubkey-only certs/":{"tf":1.0},"https://phlip9.com/notes/crypto/biscuit authz/":{"tf":1.0}},"df":3,":":{"docs":{},"df":0,":":{"docs":{},"df":0,"f":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"_":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"_":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{},"df":0,"_":{"docs":{},"df":0,"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"g":{"docs":{},"df":0,"n":{"docs":{},"df":0,"_":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"g":{"docs":{},"df":0,"o":{"docs":{},"df":0,"(":{"docs":{},"df":0,"k":{"docs":{},"df":0,"e":{"docs":{},"df":0,"y":{"docs":{},"df":0,"_":{"docs":{},"df":0,"p":{"docs":{},"df":0,"a":{"docs":{},"df":0,"i":{"docs":{},"df":0,"r":{"docs":{},"df":0,".":{"docs":{},"df":0,"0":{"docs":{"https://phlip9.com/notes/crypto/TLS self-signed pubkey-only certs/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"o":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":2.23606797749979},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.7320508075688772},"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.0}},"df":3}}}}},"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"s":{"docs":{"https://phlip9.com/notes/keyboards/moergo glove80/":{"tf":1.0}},"df":1}}}}},"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"q":{"docs":{},"df":0,"u":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":3.7416573867739413}},"df":2,".":{"docs":{},"df":0,"c":{"docs":{},"df":0,"p":{"docs":{},"df":0,"u":{"docs":{},"df":0,"s":{"docs":{},"df":0,"v":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.0}},"df":1}}}}}},"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"v":{"docs":{},"df":0,"s":{"docs":{},"df":0,"v":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.0}},"df":1}}}}}}},":":{"docs":{},"df":0,":":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"f":{"docs":{},"df":0,"a":{"docs":{},"df":0,"u":{"docs":{},"df":0,"l":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.4142135623730951}},"df":1}}}}}}}}}}}}}}}},"s":{"docs":{},"df":0,".":{"docs":{},"df":0,"h":{"docs":{},"df":0,"t":{"docs":{},"df":0,"m":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/lang/gdb ref/":{"tf":1.0}},"df":1}}}}},"[":{"docs":{},"df":0,"0":{"docs":{"https://phlip9.com/notes/reproducible builds/nix/nix debug spurrious rebuilds/":{"tf":1.4142135623730951}},"df":1}},"_":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"a":{"docs":{},"df":0,"g":{"docs":{"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.0}},"df":1}}}}}},"m":{"docs":{},"df":0,"g":{"docs":{},"df":0,"r":{"docs":{},"df":0,".":{"docs":{},"df":0,"s":{"docs":{},"df":0,"p":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{},"df":0,"_":{"docs":{},"df":0,"s":{"docs":{},"df":0,"p":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{},"df":0,"a":{"docs":{},"df":0,"b":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"_":{"docs":{},"df":0,"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{},"df":0,"p":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{},"df":0,"s":{"docs":{},"df":0,"(":{"docs":{},"df":0,"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{},"df":0,"p":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0}},"df":1}}}},"w":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.7320508075688772},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0}},"df":2}}}}}},"i":{"docs":{},"df":0,"b":{"docs":{"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.4142135623730951},"https://phlip9.com/notes/performance/simdjson talk/":{"tf":1.0},"https://phlip9.com/notes/postgres/types of scans/":{"tf":1.4142135623730951}},"df":3},"l":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/android/linux ADB udev setup/":{"tf":1.0}},"df":1,"e":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":1.0}},"df":1}}}},"n":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/fastpay/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/lightning libs/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.0},"https://phlip9.com/notes/devops/kind (kubernetes in docker)/":{"tf":2.0},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/sycamore x futures/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/understanding sycamore reactivity/":{"tf":1.0},"https://phlip9.com/notes/postgres/types of scans/":{"tf":1.0}},"df":10,"a":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1},"c":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/networking/ipv6 address space/":{"tf":1.0}},"df":1}}}}},"g":{"docs":{},"df":0,"d":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{"https://phlip9.com/notes/combinatorics/k-combinations of a multiset/":{"tf":1.0}},"df":1}}}},"t":{"docs":{},"df":0,"s":{"docs":{},"df":0,"u":{"docs":{},"df":0,"g":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/misc/kintsugi/":{"tf":1.7320508075688772}},"df":1}}}}}},"s":{"docs":{},"df":0,"h":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/distributed systems/papers/(2020) Semi-Fast Byzantine-tolerant Shared Register without Reliable Broadcast/":{"tf":1.0}},"df":1}}}}},"t":{"docs":{"https://phlip9.com/notes/misc/kintsugi/":{"tf":1.0},"https://phlip9.com/notes/networking/network interface card (NIC)/":{"tf":1.0}},"df":2,".":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"/":{"docs":{},"df":0,"p":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"d":{"docs":{},"df":0,"u":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{},"df":0,"s":{"docs":{},"df":0,"/":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/misc/kintsugi/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}},"c":{"docs":{},"df":0,"h":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/misc/kintsugi/":{"tf":1.0}},"df":1}}}}}},"l":{"docs":{"https://phlip9.com/notes/statistics probability/G-test - multinomial goodness-of-fit/":{"tf":1.4142135623730951}},"df":1,"_":{"docs":{},"df":0,"d":{"docs":{},"df":0,"i":{"docs":{},"df":0,"v":{"docs":{},"df":0,"_":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"m":{"docs":{},"df":0,"(":{"docs":{},"df":0,"p":{"docs":{},"df":0,"_":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/statistics probability/G-test - multinomial goodness-of-fit/":{"tf":1.4142135623730951}},"df":1}}}}}}}}},"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"g":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"c":{"docs":{},"df":0,"e":{"docs":{},"df":0,"(":{"docs":{},"df":0,"p":{"docs":{"https://phlip9.com/notes/statistics probability/G-test - multinomial goodness-of-fit/":{"tf":1.0}},"df":1,"_":{"docs":{},"df":0,"h":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/statistics probability/G-test - multinomial goodness-of-fit/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}},"m":{"docs":{"https://phlip9.com/notes/devops/secrets/ejson (Shopify)/":{"tf":1.0},"https://phlip9.com/notes/devops/secrets/ejson-kms (AWS)/":{"tf":2.6457513110645907},"https://phlip9.com/notes/devops/secrets/mozilla SOPS/":{"tf":2.0},"https://phlip9.com/notes/devops/secrets/sy - share secrets safely/":{"tf":1.0}},"df":4,"a":{"docs":{},"df":0,"c":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0}},"df":1,":":{"docs":{},"df":0,":":{"docs":{},"df":0,"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"w":{"docs":{},"df":0,"_":{"docs":{},"df":0,"k":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"2":{"docs":{},"df":0,"5":{"docs":{},"df":0,"6":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}},"o":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0}},"df":1}}},"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"w":{"docs":{"https://phlip9.com/notes/management/relieve often - why generals were more successful in WWII/":{"tf":1.0}},"df":1}},"i":{"docs":{},"df":0,"f":{"docs":{},"df":0,"e":{"docs":{"https://phlip9.com/notes/misc/kintsugi/":{"tf":2.0}},"df":1}}},"o":{"docs":{},"df":0,"w":{"docs":{"https://phlip9.com/notes/AI ML/Markov Decision Process (MDP)/":{"tf":1.0},"https://phlip9.com/notes/b l o c k c h a i n/aptos/":{"tf":1.0},"https://phlip9.com/notes/b l o c k c h a i n/sui/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/atomic multipath payments (AMP)/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/submarine swaps/":{"tf":1.0},"https://phlip9.com/notes/combinatorics/k-combinations of a multiset/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/secure time/":{"tf":1.0},"https://phlip9.com/notes/crypto/biscuit authz/":{"tf":1.0},"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":1.0},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0},"https://phlip9.com/notes/lang/operator fixity and precedence/":{"tf":1.0},"https://phlip9.com/notes/misc/kintsugi/":{"tf":1.0},"https://phlip9.com/notes/postgres/postgres performance tuning/":{"tf":1.4142135623730951},"https://phlip9.com/notes/postgres/snippets/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.4142135623730951},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/standard error/":{"tf":1.4142135623730951}},"df":22,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"d":{"docs":{},"df":0,"g":{"docs":{"https://phlip9.com/notes/crypto/zkdocs/":{"tf":1.0}},"df":1}}}},"n":{"docs":{"https://phlip9.com/notes/AI ML/Expectimax Search/":{"tf":1.4142135623730951},"https://phlip9.com/notes/btc-ln/BOLT 11 - invoices/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/statistics probability/CDF confidence bands - DKW inequality/":{"tf":1.0}},"df":5,"/":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"m":{"docs":{"https://phlip9.com/notes/crypto/acme protocol/":{"tf":1.0}},"df":1}}}}}}}},"o":{"docs":{},"df":0,"k":{"docs":{},"df":0,"a":{"docs":{"https://phlip9.com/notes/lang/koka-lang/":{"tf":1.7320508075688772}},"df":1}},"l":{"docs":{},"df":0,"m":{"docs":{},"df":0,"o":{"docs":{},"df":0,"g":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"v":{"docs":{"https://phlip9.com/notes/statistics probability/CDF confidence bands - DKW inequality/":{"tf":1.4142135623730951}},"df":1}}}}}}}},"n":{"docs":{},"df":0,"w":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/distributed systems/papers/(2020) Semi-Fast Byzantine-tolerant Shared Register without Reliable Broadcast/":{"tf":1.0}},"df":1}}}},"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/sui/":{"tf":1.0}},"df":1}}}},"p":{"docs":{"https://phlip9.com/notes/crypto/TLS self-signed pubkey-only certs/":{"tf":1.0}},"df":1},"s":{"docs":{"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.4142135623730951}},"df":1,"s":{"docs":{"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":2.8284271247461903}},"df":2}},"u":{"docs":{},"df":0,"b":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/devops/minikube/":{"tf":1.0}},"df":1}}},"r":{"docs":{},"df":0,"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/confidential computing/marblerun/":{"tf":1.0},"https://phlip9.com/notes/devops/AKS - azure kubernetes service/":{"tf":1.7320508075688772},"https://phlip9.com/notes/devops/k3s/":{"tf":1.0},"https://phlip9.com/notes/devops/kind (kubernetes in docker)/":{"tf":2.0},"https://phlip9.com/notes/devops/kubernetes/":{"tf":2.0},"https://phlip9.com/notes/devops/linkerd/":{"tf":1.0},"https://phlip9.com/notes/devops/minikube/":{"tf":1.4142135623730951}},"df":7}}}}}},"l":{"docs":{},"df":0,"l":{"docs":{},"df":0,"b":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"k":{"docs":{"https://phlip9.com/notes/statistics probability/G-test - multinomial goodness-of-fit/":{"tf":1.0}},"df":1}}}}}},"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/distributed systems/papers/(2020) Semi-Fast Byzantine-tolerant Shared Register without Reliable Broadcast/":{"tf":1.0}},"df":1}}}},"v":{"docs":{"https://phlip9.com/notes/devops/consul/":{"tf":1.7320508075688772}},"df":1,"m":{"docs":{"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":2.449489742783178},"https://phlip9.com/notes/confidential computing/intel TDX/":{"tf":1.7320508075688772},"https://phlip9.com/notes/lang/rust/rr with rust/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/nix/nix auto-allocate-uids -> nixbld users/":{"tf":1.0}},"df":4}},"w":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"g":{"docs":{"https://phlip9.com/notes/confidential computing/gramine/":{"tf":1.4142135623730951}},"df":1}}}},"y":{"docs":{},"df":0,"o":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{"https://phlip9.com/notes/misc/prepping RPI for embedded dev/":{"tf":1.0}},"df":1}}}}},"l":{"docs":{"https://phlip9.com/notes/android/android cli setup/":{"tf":1.0},"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/":{"tf":1.4142135623730951},"https://phlip9.com/notes/b l o c k c h a i n/":{"tf":1.0},"https://phlip9.com/notes/combinatorics/k-combinations of a multiset/":{"tf":1.4142135623730951},"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":1.0},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":4.795831523312719},"https://phlip9.com/notes/lang/gdb ref/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/rr with rust/":{"tf":1.0},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":5.0},"https://phlip9.com/notes/networking/ipv6 address space/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.7320508075688772},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":2.449489742783178}},"df":13,"&":{"docs":{},"df":0,"g":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/lang/gdb ref/":{"tf":1.4142135623730951}},"df":1}}},"1":{"docs":{"https://phlip9.com/notes/networking/network interface card (NIC)/":{"tf":1.0}},"df":1,"/":{"docs":{},"df":0,"l":{"docs":{},"df":0,"2":{"docs":{"https://phlip9.com/notes/performance/simdjson talk/":{"tf":1.0}},"df":1}}}},"2":{"docs":{"https://phlip9.com/notes/networking/network interface card (NIC)/":{"tf":1.0},"https://phlip9.com/notes/networking/network interfaces/":{"tf":2.23606797749979}},"df":2},"3":{"docs":{"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.7320508075688772}},"df":1},"4":{"docs":{"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.0}},"df":1},"_":{"docs":{},"df":0,"0":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0}},"df":1},"1":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.4142135623730951}},"df":1},"2":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.4142135623730951}},"df":1},"i":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0}},"df":1},"s":{"docs":{},"df":0,"q":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.4142135623730951}},"df":1}}},"a":{"docs":{"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0}},"df":2,"b":{"docs":{"https://phlip9.com/notes/misc/water distillation setup/":{"tf":1.0}},"df":1,"e":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0},"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":1.7320508075688772},"https://phlip9.com/notes/crypto/tls exported keying material/":{"tf":1.4142135623730951},"https://phlip9.com/notes/design/form design/":{"tf":2.8284271247461903},"https://phlip9.com/notes/devops/azure CLI/":{"tf":1.0},"https://phlip9.com/notes/devops/deployment strategies/":{"tf":1.0},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.7320508075688772}},"df":8,".":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"b":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1,"(":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"m":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,".":{"docs":{},"df":0,"f":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.7320508075688772}},"df":1}}}}}}}}}}}}}}}}}}}}}}}},"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/misc/water distillation setup/":{"tf":1.0}},"df":1},"y":{"docs":{},"df":0,"/":{"docs":{},"df":0,"d":{"docs":{},"df":0,"p":{"docs":{},"df":0,"/":{"docs":{},"df":0,"b":{"docs":{},"df":0,"0":{"docs":{},"df":0,"8":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"c":{"docs":{},"df":0,"g":{"docs":{},"df":0,"2":{"docs":{},"df":0,"n":{"docs":{},"df":0,"4":{"docs":{"https://phlip9.com/notes/misc/water distillation setup/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}},"s":{"docs":{},"df":0,"/":{"docs":{},"df":0,"a":{"docs":{},"df":0,"p":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/aptos/":{"tf":1.0}},"df":1}}}}}}},"c":{"docs":{},"df":0,"k":{"docs":{"https://phlip9.com/notes/networking/CIDR/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.4142135623730951}},"df":3},"q":{"docs":{},"df":0,"u":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/misc/kintsugi/":{"tf":1.0}},"df":1}}}}},"g":{"docs":{"https://phlip9.com/notes/router/lightning router/lightning router overview/":{"tf":1.0}},"df":1},"h":{"docs":{"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.0}},"df":1,"a":{"docs":{},"df":0,"v":{"docs":{"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.4142135623730951}},"df":2}}},"i":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":1.0}},"df":1}},"k":{"docs":{},"df":0,"e":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.4142135623730951}},"df":1}},"m":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.7320508075688772}},"df":1,"b":{"docs":{},"df":0,"d":{"docs":{},"df":0,"a":{"docs":{"https://phlip9.com/notes/crypto/(talk) authenticated data structures for stateless validation/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.4142135623730951},"https://phlip9.com/notes/statistics probability/kelly criterion + ELO/":{"tf":2.0}},"df":3}},"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.4142135623730951}},"df":1,"(":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"g":{"docs":{},"df":0,"_":{"docs":{},"df":0,"x":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.4142135623730951}},"df":1}}}}}}}}}}},"n":{"docs":{"https://phlip9.com/notes/android/ADB over TCP inside WSL2/":{"tf":1.4142135623730951},"https://phlip9.com/notes/networking/CIDR/":{"tf":1.0},"https://phlip9.com/notes/networking/network interfaces/":{"tf":4.123105625617661}},"df":3,"1":{"docs":{},"df":0,"@":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{},"df":0,"h":{"docs":{},"df":0,"0":{"docs":{"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.0}},"df":1}}}}}},"2":{"docs":{},"df":0,"@":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{},"df":0,"h":{"docs":{},"df":0,"0":{"docs":{"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.0}},"df":1}}}}}},"3":{"docs":{},"df":0,"@":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{},"df":0,"h":{"docs":{},"df":0,"0":{"docs":{"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.0}},"df":1}}}}}},"4":{"docs":{},"df":0,"@":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{},"df":0,"h":{"docs":{},"df":0,"0":{"docs":{"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.0}},"df":1}}}}}},"d":{"docs":{"https://phlip9.com/notes/btc-ln/lightning rod/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.0}},"df":2},"g":{"docs":{"https://phlip9.com/notes/lang/":{"tf":1.0},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.7320508075688772},"https://phlip9.com/notes/lang/koka-lang/":{"tf":1.4142135623730951}},"df":3,".":{"docs":{},"df":0,"g":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"h":{"docs":{},"df":0,"u":{"docs":{},"df":0,"b":{"docs":{},"df":0,".":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"/":{"docs":{},"df":0,"k":{"docs":{},"df":0,"o":{"docs":{},"df":0,"k":{"docs":{},"df":0,"a":{"docs":{},"df":0,"/":{"docs":{},"df":0,"d":{"docs":{},"df":0,"o":{"docs":{},"df":0,"c":{"docs":{},"df":0,"/":{"docs":{},"df":0,"b":{"docs":{},"df":0,"o":{"docs":{},"df":0,"o":{"docs":{},"df":0,"k":{"docs":{},"df":0,".":{"docs":{},"df":0,"h":{"docs":{},"df":0,"t":{"docs":{},"df":0,"m":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/lang/koka-lang/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}},"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"g":{"docs":{},"df":0,"/":{"docs":{},"df":0,"?":{"docs":{},"df":0,"v":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"=":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"b":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"&":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{},"df":0,"p":{"docs":{},"df":0,";":{"docs":{},"df":0,"m":{"docs":{},"df":0,"o":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"=":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"b":{"docs":{},"df":0,"u":{"docs":{},"df":0,"g":{"docs":{},"df":0,"&":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{},"df":0,"p":{"docs":{},"df":0,";":{"docs":{},"df":0,"e":{"docs":{},"df":0,"d":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"=":{"docs":{},"df":0,"2":{"docs":{},"df":0,"0":{"docs":{},"df":0,"2":{"docs":{},"df":0,"1":{"docs":{},"df":0,"&":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{},"df":0,"p":{"docs":{},"df":0,";":{"docs":{},"df":0,"g":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"=":{"docs":{},"df":0,"6":{"docs":{},"df":0,"d":{"docs":{},"df":0,"0":{"docs":{},"df":0,"8":{"docs":{},"df":0,"a":{"docs":{},"df":0,"5":{"docs":{},"df":0,"f":{"docs":{},"df":0,"a":{"docs":{},"df":0,"8":{"docs":{},"df":0,"9":{"docs":{},"df":0,"8":{"docs":{},"df":0,"e":{"docs":{},"df":0,"b":{"docs":{},"df":0,"5":{"docs":{},"df":0,"e":{"docs":{},"df":0,"4":{"docs":{},"df":0,"3":{"docs":{},"df":0,"f":{"docs":{},"df":0,"9":{"docs":{},"df":0,"a":{"docs":{},"df":0,"0":{"docs":{},"df":0,"f":{"docs":{},"df":0,"7":{"docs":{},"df":0,"d":{"docs":{},"df":0,"3":{"docs":{},"df":0,"0":{"docs":{},"df":0,"f":{"docs":{},"df":0,"d":{"docs":{},"df":0,"d":{"docs":{},"df":0,"0":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/combinatorics/k-combinations of a multiset/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"/":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/lang/ATS/":{"tf":1.0}},"df":1}},"f":{"docs":{},"df":0,"l":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/lang/flutter/":{"tf":1.0}},"df":1}}}}},"r":{"docs":{},"df":0,"u":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/lang/rust/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/rust x SGX/":{"tf":1.0}},"df":2}}}}},"u":{"docs":{},"df":0,"a":{"docs":{},"df":0,"g":{"docs":{"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":1.0},"https://phlip9.com/notes/crypto/biscuit authz/":{"tf":1.4142135623730951},"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":1.0},"https://phlip9.com/notes/fuzzing/fuzzing/":{"tf":1.0},"https://phlip9.com/notes/lang/koka-lang/":{"tf":1.0},"https://phlip9.com/notes/lang/operator fixity and precedence/":{"tf":1.4142135623730951},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.7320508075688772},"https://phlip9.com/notes/reproducible builds/nix/links/":{"tf":1.0}},"df":10,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"=":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/lang/ATS/Install ATS2/":{"tf":1.0}},"df":1}}}}}}}}}},"p":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"p":{"docs":{"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.0}},"df":1}}}},"r":{"docs":{},"df":0,"g":{"docs":{"https://phlip9.com/notes/AI ML/Markov Decision Process (MDP)/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":1.0},"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":1.0},"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":1.0},"https://phlip9.com/notes/misc/optimization solvers/":{"tf":1.0},"https://phlip9.com/notes/postgres/types of scans/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/reproducible-builds.org/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":2.8284271247461903},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":4.358898943540674},"https://phlip9.com/notes/statistics probability/testing whether a coin is fair/":{"tf":1.7320508075688772}},"df":13,"e":{"docs":{},"df":0,"&":{"docs":{},"df":0,"l":{"docs":{},"df":0,"t":{"docs":{},"df":0,";":{"docs":{},"df":0,"/":{"docs":{},"df":0,"h":{"docs":{},"df":0,"1":{"docs":{},"df":0,"&":{"docs":{},"df":0,"g":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.0}},"df":2}}}}},"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"&":{"docs":{},"df":0,"g":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.0}},"df":2}}}}}}}}}}}}},".":{"docs":{},"df":0,"&":{"docs":{},"df":0,"l":{"docs":{},"df":0,"t":{"docs":{},"df":0,";":{"docs":{},"df":0,"/":{"docs":{},"df":0,"p":{"docs":{},"df":0,"&":{"docs":{},"df":0,"g":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.0}},"df":2}}}}}}}}}},"r":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0}},"df":1},"s":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/statistics probability/winsorize/":{"tf":1.0}},"df":1}}}}},"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0}},"df":1}},"t":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/fastpay/":{"tf":2.6457513110645907},"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0},"https://phlip9.com/notes/combinatorics/k-combinations of a multiset/":{"tf":1.7320508075688772},"https://phlip9.com/notes/crypto/biscuit authz/":{"tf":1.0},"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":1.0},"https://phlip9.com/notes/lang/lua/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/rr with rust/":{"tf":1.0},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0},"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.0},"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.7320508075688772}},"df":10,"_":{"docs":{},"df":0,"p":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"y":{"docs":{},"df":0,"_":{"docs":{},"df":0,"t":{"docs":{},"df":0,"x":{"docs":{},"df":0,"n":{"docs":{},"df":0,"_":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"x":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/fastpay/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}},"l":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/misc/kintsugi/":{"tf":1.0}},"df":1}}}},"t":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{},"df":0,"_":{"docs":{},"df":0,"p":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"=":{"docs":{},"df":0,"b":{"docs":{},"df":0,"o":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"d":{"docs":{},"df":0,".":{"docs":{},"df":0,"m":{"docs":{},"df":0,"t":{"docs":{},"df":0,"x":{"docs":{},"df":0,"_":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}},"e":{"docs":{"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":2.23606797749979}},"df":1,"n":{"docs":{},"df":0,"c":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/fastpay/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/secure time/":{"tf":1.0},"https://phlip9.com/notes/devops/linkerd/":{"tf":1.4142135623730951},"https://phlip9.com/notes/devops/service mesh/":{"tf":1.0},"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":1.7320508075688772}},"df":6}},"r":{"docs":{"https://phlip9.com/notes/android/root phone with magisk/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.7320508075688772},"https://phlip9.com/notes/lang/rust/rr with rust/":{"tf":2.0},"https://phlip9.com/notes/management/relieve often - why generals were more successful in WWII/":{"tf":1.7320508075688772},"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":1.0},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0},"https://phlip9.com/notes/networking/CIDR/":{"tf":1.0},"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.0}},"df":8},"s":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/android/OTA updates for rooted android phone/":{"tf":1.0},"https://phlip9.com/notes/android/root phone with magisk/":{"tf":1.0},"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.0},"https://phlip9.com/notes/keyboards/moergo glove80/":{"tf":1.4142135623730951},"https://phlip9.com/notes/misc/pop_OS! tweaks/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.0}},"df":9}}},"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.4142135623730951}},"df":2}}}},"u":{"docs":{},"df":0,"n":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":2.23606797749979},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":3.4641016151377544},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":4.242640687119285},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/flutter/flutter setup/":{"tf":1.0}},"df":5}},"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/foreign bank account report (FBAR)/":{"tf":1.4142135623730951}},"df":1}}}}},"w":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/cheat sheet/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/testing whether a coin is fair/":{"tf":1.0}},"df":3},"x":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0}},"df":1},"y":{"docs":{"https://phlip9.com/notes/misc/kintsugi/":{"tf":1.4142135623730951}},"df":1,"e":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/submarine swaps/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":3.0},"https://phlip9.com/notes/confidential computing/marblerun/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":1.7320508075688772},"https://phlip9.com/notes/devops/service mesh/":{"tf":1.7320508075688772},"https://phlip9.com/notes/keyboards/moergo glove80/":{"tf":3.4641016151377544},"https://phlip9.com/notes/misc/kintsugi/":{"tf":1.0},"https://phlip9.com/notes/networking/network interface card (NIC)/":{"tf":2.23606797749979},"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.4142135623730951},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":2.0},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/router/lightning router/captive portal/arubanetworks captive portal/":{"tf":1.4142135623730951},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":2.0}},"df":15}},"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/android/android cli setup/":{"tf":1.7320508075688772},"https://phlip9.com/notes/keyboards/moergo glove80/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0}},"df":3,";":{"docs":{},"df":0,"1":{"docs":{},"df":0,".":{"docs":{},"df":0,"0":{"docs":{},"df":0,".":{"docs":{},"df":0,"2":{"docs":{"https://phlip9.com/notes/android/android cli setup/":{"tf":1.0}},"df":1}}}}}}}}}},"z":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.7320508075688772}},"df":1},"y":{"docs":{},"df":0,"_":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0}},"df":1}}}}}}}},"b":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/performance/bit hacks/":{"tf":2.23606797749979}},"df":1},"r":{"docs":{"https://phlip9.com/notes/WSL/WSL2 custom kernel/":{"tf":1.0}},"df":1}},"c":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/keyboards/moergo glove80/":{"tf":1.0}},"df":1}}}},"d":{"docs":{},"df":0,"a":{"docs":{},"df":0,"p":{"docs":{"https://phlip9.com/notes/crypto/dex - open-source OIDC & OAuth 2.0 provider/":{"tf":1.0}},"df":1}},"k":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 11 - invoices/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/lightning libs/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.0}},"df":3},"o":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/AI ML/Markov Decision Process (MDP)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/statistics probability/multinomial distribution/":{"tf":2.23606797749979},"https://phlip9.com/notes/statistics probability/standard error/":{"tf":1.0}},"df":3}}},"e":{"docs":{"https://phlip9.com/notes/AI ML/Markov Decision Process (MDP)/":{"tf":2.0},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":2.6457513110645907},"https://phlip9.com/notes/statistics probability/CDF confidence bands - DKW inequality/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/testing whether a coin is fair/":{"tf":1.7320508075688772}},"df":4,"_":{"docs":{},"df":0,"g":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{},"df":0,"_":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"u":{"docs":{},"df":0,"n":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{},"df":0,"_":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"k":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"_":{"docs":{},"df":0,"w":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"p":{"docs":{},"df":0,"p":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}},"i":{"docs":{"https://phlip9.com/notes/AI ML/Expectimax Search/":{"tf":2.449489742783178}},"df":1,"n":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"_":{"docs":{},"df":0,"w":{"docs":{},"df":0,"h":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"_":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"_":{"docs":{},"df":0,"w":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"p":{"docs":{},"df":0,"p":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}},"p":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"d":{"docs":{},"df":0,"_":{"docs":{},"df":0,"c":{"docs":{},"df":0,"s":{"docs":{},"df":0,"s":{"docs":{},"df":0,".":{"docs":{},"df":0,"b":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0}},"df":1}}}}}}}}}}}},"x":{"docs":{"https://phlip9.com/notes/AI ML/Expectimax Search/":{"tf":2.0}},"df":1}},"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.4142135623730951}},"df":2}},"d":{"docs":{"https://phlip9.com/notes/btc-ln/lightning rod/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0},"https://phlip9.com/notes/crypto/acme protocol/":{"tf":1.0},"https://phlip9.com/notes/management/relieve often - why generals were more successful in WWII/":{"tf":1.4142135623730951},"https://phlip9.com/notes/networking/CIDR/":{"tf":1.0},"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.7320508075688772},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.4142135623730951}},"df":10,"e":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/devops/consul/":{"tf":1.0}},"df":1,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"s":{"docs":{"https://phlip9.com/notes/distributed systems/papers/(2020) Semi-Fast Byzantine-tolerant Shared Register without Reliable Broadcast/":{"tf":1.0},"https://phlip9.com/notes/distributed systems/papers/(2021) Leaderless Consensus/":{"tf":1.7320508075688772}},"df":2}}}}}},"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"g":{"docs":{},"df":0,"/":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"i":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.0}},"df":1}}}}}}}}}},"f":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.7320508075688772}},"df":1},"k":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0}},"df":3,"&":{"docs":{},"df":0,"l":{"docs":{},"df":0,"t":{"docs":{},"df":0,";":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"c":{"docs":{},"df":0,":":{"docs":{},"df":0,":":{"docs":{},"df":0,"s":{"docs":{},"df":0,"y":{"docs":{},"df":0,"n":{"docs":{},"df":0,"c":{"docs":{},"df":0,":":{"docs":{},"df":0,":":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"c":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"&":{"docs":{},"df":0,"l":{"docs":{},"df":0,"t":{"docs":{},"df":0,";":{"docs":{},"df":0,"w":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"p":{"docs":{},"df":0,":":{"docs":{},"df":0,":":{"docs":{},"df":0,"f":{"docs":{},"df":0,"i":{"docs":{},"df":0,"l":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,":":{"docs":{},"df":0,":":{"docs":{},"df":0,"b":{"docs":{},"df":0,"o":{"docs":{},"df":0,"x":{"docs":{},"df":0,"e":{"docs":{},"df":0,"d":{"docs":{},"df":0,":":{"docs":{},"df":0,":":{"docs":{},"df":0,"b":{"docs":{},"df":0,"o":{"docs":{},"df":0,"x":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"g":{"docs":{},"df":0,"f":{"docs":{},"df":0,"i":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"i":{"docs":{"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":1.0}},"df":1}},"r":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/AI ML/Markov Decision Process (MDP)/":{"tf":2.0},"https://phlip9.com/notes/btc-ln/BOLT 4 - onion routing protocol/":{"tf":1.4142135623730951},"https://phlip9.com/notes/btc-ln/atomic multipath payments (AMP)/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0},"https://phlip9.com/notes/misc/kintsugi/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/nix/links/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/reproducible-builds.org/":{"tf":1.0}},"df":8}},"v":{"docs":{"https://phlip9.com/notes/combinatorics/k-combinations of a multiset/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0},"https://phlip9.com/notes/devops/algo wireguard VPN server/":{"tf":1.0},"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":1.0},"https://phlip9.com/notes/fuzzing/fuzzing/":{"tf":1.0},"https://phlip9.com/notes/misc/kintsugi/":{"tf":1.4142135623730951},"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.4142135623730951}},"df":8}},"d":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":2.6457513110645907}},"df":1,".":{"docs":{},"df":0,"d":{"docs":{},"df":0,"i":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1}}}}}},"v":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"u":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.4142135623730951}},"df":1}}}}}},"e":{"docs":{"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.4142135623730951}},"df":2},"f":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/combinatorics/k-combinations of a multiset/":{"tf":1.0},"https://phlip9.com/notes/design/form design/":{"tf":1.4142135623730951},"https://phlip9.com/notes/keyboards/moergo glove80/":{"tf":3.0},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0},"https://phlip9.com/notes/lang/operator fixity and precedence/":{"tf":2.23606797749979},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0},"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.0},"https://phlip9.com/notes/performance/profiling/":{"tf":1.7320508075688772}},"df":8,"o":{"docs":{},"df":0,"v":{"docs":{"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.0}},"df":1}}}},"g":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.7320508075688772},"https://phlip9.com/notes/confidential computing/gramine/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0},"https://phlip9.com/notes/networking/CIDR/":{"tf":1.0}},"df":4}},"l":{"docs":{"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/foreign bank account report (FBAR)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":2.0}},"df":4}},"i":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/misc/kintsugi/":{"tf":1.0}},"df":1,"i":{"docs":{},"df":0,"m":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.4142135623730951}},"df":3}}}}},"i":{"docs":{},"df":0,"b":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/statistics probability/G-test - multinomial goodness-of-fit/":{"tf":1.0}},"df":1}}}}},"m":{"docs":{},"df":0,"i":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/performance/simdjson talk/":{"tf":1.0}},"df":1,"e":{"docs":{},"df":0,"/":{"docs":{},"df":0,"f":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"b":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"6":{"docs":{},"df":0,"4":{"docs":{"https://phlip9.com/notes/performance/simdjson talk/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}},"n":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 8 - secure noise transport/":{"tf":1.4142135623730951}},"df":1,"(":{"docs":{},"df":0,"s":{"docs":{},"df":0,"c":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1}}}}}}},"g":{"docs":{},"df":0,"t":{"docs":{},"df":0,"h":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/BOLT 4 - onion routing protocol/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/BOLT 7 - p2p node and channel discovery/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/BOLT 8 - secure noise transport/":{"tf":1.4142135623730951},"https://phlip9.com/notes/combinatorics/k-combinations of a multiset/":{"tf":1.4142135623730951},"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":2.0},"https://phlip9.com/notes/devops/azure CLI/":{"tf":1.0},"https://phlip9.com/notes/devops/secrets/ejson-kms (AWS)/":{"tf":1.0},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/lua/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":3.3166247903554},"https://phlip9.com/notes/networking/CIDR/":{"tf":1.0},"https://phlip9.com/notes/postgres/snippets/":{"tf":1.4142135623730951},"https://phlip9.com/notes/statistics probability/winsorize/":{"tf":1.4142135623730951}},"df":15,"(":{"docs":{},"df":0,"'":{"docs":{},"df":0,"1":{"docs":{},"df":0,"2":{"docs":{},"df":0,"3":{"docs":{},"df":0,"4":{"docs":{"https://phlip9.com/notes/postgres/snippets/":{"tf":1.0}},"df":1}}}}},"d":{"docs":{},"df":0,"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"b":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0}},"df":1}}}}}}}}},"o":{"docs":{},"df":0,"t":{"docs":{},"df":0,"h":{"docs":{"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.7320508075688772}},"df":1}}},"t":{"docs":{},"df":0,"h":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":2.0}},"df":1}}}},"r":{"docs":{},"df":0,"p":{"docs":{"https://phlip9.com/notes/statistics probability/winsorize/":{"tf":2.0}},"df":1,"(":{"docs":{},"df":0,"0":{"docs":{},"df":0,".":{"docs":{},"df":0,"0":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.4142135623730951}},"df":1}}},"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1}}}}}},"c":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{},"df":0,"p":{"docs":{"https://phlip9.com/notes/statistics probability/winsorize/":{"tf":1.7320508075688772}},"df":1}}}}}}},"s":{"docs":{},"df":0,"s":{"docs":{"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0},"https://phlip9.com/notes/b l o c k c h a i n/aptos/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/BOLT 4 - onion routing protocol/":{"tf":1.0},"https://phlip9.com/notes/combinatorics/k-combinations of a multiset/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0},"https://phlip9.com/notes/devops/deployment strategies/":{"tf":1.0},"https://phlip9.com/notes/ios/ios setup/":{"tf":1.0},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.7320508075688772},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0},"https://phlip9.com/notes/lang/operator fixity and precedence/":{"tf":1.0},"https://phlip9.com/notes/management/relieve often - why generals were more successful in WWII/":{"tf":1.0},"https://phlip9.com/notes/misc/kintsugi/":{"tf":1.4142135623730951},"https://phlip9.com/notes/networking/CIDR/":{"tf":1.0},"https://phlip9.com/notes/performance/bit hacks/":{"tf":2.0},"https://phlip9.com/notes/performance/simdjson talk/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.4142135623730951},"https://phlip9.com/notes/statistics probability/standard error/":{"tf":1.0}},"df":19}},"t":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/secure time/":{"tf":1.0},"https://phlip9.com/notes/crypto/dex - open-source OIDC & OAuth 2.0 provider/":{"tf":1.0},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/understanding sycamore reactivity/":{"tf":1.0},"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":1.4142135623730951},"https://phlip9.com/notes/misc/kintsugi/":{"tf":1.0},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0},"https://phlip9.com/notes/misc/setting up a headless raspbian boot image/":{"tf":1.0},"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.4142135623730951}},"df":10,"'":{"docs":{"https://phlip9.com/notes/AI ML/Markov Decision Process (MDP)/":{"tf":1.0},"https://phlip9.com/notes/android/android cli setup/":{"tf":1.0},"https://phlip9.com/notes/android/root phone with magisk/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.7320508075688772},"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":1.0},"https://phlip9.com/notes/crypto/acme protocol/":{"tf":1.0},"https://phlip9.com/notes/devops/azure CLI/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.4142135623730951},"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":1.4142135623730951},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.4142135623730951},"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.0},"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/nix/nix auto-allocate-uids -> nixbld users/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/nix/nix debug spurrious rebuilds/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/CDF confidence bands - DKW inequality/":{"tf":1.0}},"df":16},"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/lang/rust/rr with rust/":{"tf":1.0}},"df":1}}}},"v":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/AI ML/Expectimax Search/":{"tf":1.4142135623730951},"https://phlip9.com/notes/AI ML/Markov Decision Process (MDP)/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.7320508075688772},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":2.0},"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":4.0},"https://phlip9.com/notes/confidential computing/marblerun/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":1.4142135623730951},"https://phlip9.com/notes/crypto/acme protocol/":{"tf":1.0},"https://phlip9.com/notes/crypto/biscuit authz/":{"tf":1.0},"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":1.0},"https://phlip9.com/notes/fuzzing/fuzzing/":{"tf":1.0},"https://phlip9.com/notes/keyboards/moergo glove80/":{"tf":1.0},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0},"https://phlip9.com/notes/lang/koka-lang/":{"tf":1.0},"https://phlip9.com/notes/lang/lua/":{"tf":1.0},"https://phlip9.com/notes/lang/operator fixity and precedence/":{"tf":2.0},"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.7320508075688772},"https://phlip9.com/notes/lang/rust/rust verification tools/":{"tf":1.0},"https://phlip9.com/notes/management/relieve often - why generals were more successful in WWII/":{"tf":1.4142135623730951},"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":1.0},"https://phlip9.com/notes/misc/kintsugi/":{"tf":1.0},"https://phlip9.com/notes/networking/network interface card (NIC)/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.4142135623730951},"https://phlip9.com/notes/router/lightning router/lightning router overview/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/testing whether a coin is fair/":{"tf":1.4142135623730951}},"df":31,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{"https://phlip9.com/notes/statistics probability/testing whether a coin is fair/":{"tf":1.0}},"df":1}}}}}},"w":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/distributed systems/papers/(2020) Semi-Fast Byzantine-tolerant Shared Register without Reliable Broadcast/":{"tf":1.0}},"df":1}},"x":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{"https://phlip9.com/notes/lang/lua/":{"tf":1.0}},"df":1,"o":{"docs":{},"df":0,"g":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"p":{"docs":{},"df":0,"h":{"docs":{"https://phlip9.com/notes/combinatorics/k-combinations of a multiset/":{"tf":1.0},"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.4142135623730951}},"df":2}}}}}}}}}},"g":{"docs":{"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":2.449489742783178}},"df":1},"h":{"docs":{"https://phlip9.com/notes/misc/setting up a headless raspbian boot image/":{"tf":1.0}},"df":1},"i":{"docs":{"https://phlip9.com/notes/statistics probability/multinomial distribution/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/testing whether a coin is fair/":{"tf":1.0}},"df":2,"a":{"docs":{},"df":0,"b":{"docs":{},"df":0,"i":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.0}},"df":1}}}},"b":{"docs":{"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.4142135623730951},"https://phlip9.com/notes/btc-ln/lightning libs/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/gramine/":{"tf":1.0},"https://phlip9.com/notes/lang/lua/":{"tf":1.0},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0},"https://phlip9.com/notes/performance/simdjson talk/":{"tf":1.0}},"df":7,"/":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"b":{"docs":{},"df":0,"/":{"docs":{},"df":0,"c":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"g":{"docs":{},"df":0,"/":{"docs":{},"df":0,"1":{"docs":{},"df":0,"6":{"docs":{},"df":0,"/":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"c":{"docs":{},"df":0,"l":{"docs":{},"df":0,"u":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/reproducible builds/nix/nix debug spurrious rebuilds/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}},"x":{"docs":{},"df":0,"8":{"docs":{},"df":0,"6":{"docs":{},"df":0,"_":{"docs":{},"df":0,"6":{"docs":{},"df":0,"4":{"docs":{"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0}},"df":1}}}}}}},"a":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0}},"df":1,"s":{"docs":{},"df":0,"/":{"docs":{},"df":0,"m":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0}},"df":1}}}}}},"c":{"docs":{"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/mystikos/":{"tf":1.0}},"df":2,"u":{"docs":{},"df":0,"r":{"docs":{},"df":0,"l":{"docs":{},"df":0,"4":{"docs":{"https://phlip9.com/notes/confidential computing/gramine/":{"tf":1.0}},"df":1}}}}},"d":{"docs":{},"df":0,"w":{"docs":{"https://phlip9.com/notes/WSL/WSL2 custom kernel/":{"tf":1.0}},"df":1}},"e":{"docs":{},"df":0,"l":{"docs":{},"df":0,"f":{"docs":{"https://phlip9.com/notes/WSL/WSL2 custom kernel/":{"tf":1.0}},"df":1}}},"f":{"docs":{},"df":0,"u":{"docs":{},"df":0,"z":{"docs":{},"df":0,"z":{"docs":{"https://phlip9.com/notes/fuzzing/fuzzing/":{"tf":1.4142135623730951}},"df":1}}}},"g":{"docs":{},"df":0,"c":{"docs":{"https://phlip9.com/notes/lang/ATS/Install ATS2/":{"tf":1.0}},"df":1},"m":{"docs":{},"df":0,"p":{"docs":{"https://phlip9.com/notes/lang/ATS/Install ATS2/":{"tf":1.0}},"df":1}},"t":{"docs":{},"df":0,"k":{"docs":{"https://phlip9.com/notes/lang/flutter/flutter setup/":{"tf":1.0}},"df":1}}},"j":{"docs":{},"df":0,"s":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/lang/ATS/Install ATS2/":{"tf":1.0}},"df":1}}}},"n":{"docs":{},"df":0,"s":{"docs":{},"df":0,"s":{"docs":{},"df":0,"3":{"docs":{"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0}},"df":1}}}},"o":{"docs":{"https://phlip9.com/notes/confidential computing/mystikos/":{"tf":1.4142135623730951}},"df":1},"p":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"b":{"docs":{},"df":0,"u":{"docs":{},"df":0,"f":{"docs":{"https://phlip9.com/notes/confidential computing/gramine/":{"tf":1.0}},"df":1,"1":{"docs":{},"df":0,"7":{"docs":{"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0}},"df":1}}}}},"c":{"docs":{"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0}},"df":1}}}}}},"r":{"docs":{},"df":0,"a":{"docs":{"https://phlip9.com/notes/":{"tf":1.0}},"df":1,"r":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/btc-ln/lightning libs/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":2.0},"https://phlip9.com/notes/confidential computing/gramine/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":2.0},"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/secure time/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":2.0},"https://phlip9.com/notes/crypto/TLS self-signed pubkey-only certs/":{"tf":1.0},"https://phlip9.com/notes/devops/secrets/ejson (Shopify)/":{"tf":1.0},"https://phlip9.com/notes/fuzzing/fuzzing/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.7320508075688772},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.7320508075688772},"https://phlip9.com/notes/lang/flutter/flutter setup/":{"tf":1.0},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":2.449489742783178},"https://phlip9.com/notes/networking/network interface card (NIC)/":{"tf":1.0},"https://phlip9.com/notes/performance/simdjson talk/":{"tf":1.0}},"df":17},"y":{"docs":{},"df":0,"'":{"docs":{"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0}},"df":1}}}}},"s":{"docs":{},"df":0,"g":{"docs":{},"df":0,"x":{"docs":{"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":4.0},"https://phlip9.com/notes/confidential computing/gramine/":{"tf":3.0}},"df":2,"_":{"docs":{},"df":0,"d":{"docs":{},"df":0,"c":{"docs":{},"df":0,"a":{"docs":{},"df":0,"p":{"docs":{},"df":0,"_":{"docs":{},"df":0,"q":{"docs":{},"df":0,"l":{"docs":{},"df":0,".":{"docs":{},"df":0,"s":{"docs":{},"df":0,"o":{"docs":{},"df":0,".":{"docs":{},"df":0,"1":{"docs":{"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0}},"df":1}}}}}}}}}}}},"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"c":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"v":{"docs":{},"df":0,"e":{"docs":{},"df":0,"_":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"m":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.4142135623730951}},"df":1}}}}}}}}}}}}}},"i":{"docs":{},"df":0,"d":{"docs":{},"df":0,"_":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"c":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"v":{"docs":{},"df":0,"e":{"docs":{},"df":0,".":{"docs":{},"df":0,"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"g":{"docs":{},"df":0,"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"d":{"docs":{},"df":0,".":{"docs":{},"df":0,"s":{"docs":{},"df":0,"o":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}},"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,".":{"docs":{},"df":0,"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"g":{"docs":{},"df":0,"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"d":{"docs":{},"df":0,".":{"docs":{},"df":0,"s":{"docs":{},"df":0,"o":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.4142135623730951}},"df":1}}}}}}}}}}}},"p":{"docs":{},"df":0,"c":{"docs":{},"df":0,"e":{"docs":{},"df":0,".":{"docs":{},"df":0,"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"g":{"docs":{},"df":0,"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"d":{"docs":{},"df":0,".":{"docs":{},"df":0,"s":{"docs":{},"df":0,"o":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.4142135623730951}},"df":1}}}}}}}}}}}},"v":{"docs":{},"df":0,"e":{"docs":{},"df":0,".":{"docs":{},"df":0,"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"g":{"docs":{},"df":0,"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"d":{"docs":{},"df":0,".":{"docs":{},"df":0,"s":{"docs":{},"df":0,"o":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.4142135623730951}},"df":1}}}}}}}}}}}}},"q":{"docs":{},"df":0,"e":{"docs":{},"df":0,".":{"docs":{},"df":0,"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"g":{"docs":{},"df":0,"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"d":{"docs":{},"df":0,".":{"docs":{},"df":0,"s":{"docs":{},"df":0,"o":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.4142135623730951}},"df":1}}}}}}}}}},"3":{"docs":{},"df":0,".":{"docs":{},"df":0,"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"g":{"docs":{},"df":0,"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"d":{"docs":{},"df":0,".":{"docs":{},"df":0,"s":{"docs":{},"df":0,"o":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0}},"df":1}}}}}}}}}}}},"v":{"docs":{},"df":0,"e":{"docs":{},"df":0,".":{"docs":{},"df":0,"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"g":{"docs":{},"df":0,"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"d":{"docs":{},"df":0,".":{"docs":{},"df":0,"s":{"docs":{},"df":0,"o":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0}},"df":1}}}}}}}}}}}}},"t":{"docs":{},"df":0,"d":{"docs":{},"df":0,"q":{"docs":{},"df":0,"e":{"docs":{},"df":0,".":{"docs":{},"df":0,"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"g":{"docs":{},"df":0,"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"d":{"docs":{},"df":0,".":{"docs":{},"df":0,"s":{"docs":{},"df":0,"o":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}},"q":{"docs":{},"df":0,"x":{"docs":{},"df":0,"_":{"docs":{},"df":0,"t":{"docs":{},"df":0,"d":{"docs":{},"df":0,"q":{"docs":{},"df":0,"e":{"docs":{},"df":0,".":{"docs":{},"df":0,"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"g":{"docs":{},"df":0,"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"d":{"docs":{},"df":0,".":{"docs":{},"df":0,"s":{"docs":{},"df":0,"o":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}},"s":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/WSL/WSL2 custom kernel/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.7320508075688772}},"df":2}},"t":{"docs":{},"df":0,"d":{"docs":{},"df":0,"c":{"docs":{"https://phlip9.com/notes/lang/flutter/flutter setup/":{"tf":1.4142135623730951}},"df":1}}}},"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"o":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0}},"df":1}}}},"u":{"docs":{},"df":0,"n":{"docs":{},"df":0,"w":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/WSL/WSL2 custom kernel/":{"tf":1.0}},"df":1,"8":{"docs":{"https://phlip9.com/notes/confidential computing/gramine/":{"tf":1.0}},"df":1}}}}}}},"x":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"p":{"docs":{},"df":0,"o":{"docs":{},"df":0,"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"1":{"docs":{"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0}},"df":1}}}}}}}}}},"t":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"6":{"docs":{"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0}},"df":1}}}}}},"c":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"s":{"docs":{"https://phlip9.com/notes/android/android cli setup/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/flutter/flutter setup/":{"tf":1.0},"https://phlip9.com/notes/misc/optimization solvers/":{"tf":1.7320508075688772},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":2.0}},"df":6}}},"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"k":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0}},"df":1}}}}}},"e":{"docs":{"https://phlip9.com/notes/statistics probability/multinomial distribution/":{"tf":1.0}},"df":1,"b":{"docs":{},"df":0,"i":{"docs":{},"df":0,"g":{"docs":{"https://phlip9.com/notes/misc/water distillation setup/":{"tf":1.0}},"df":1}}}},"f":{"docs":{},"df":0,"e":{"docs":{"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0},"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/foreign bank account report (FBAR)/":{"tf":1.0}},"df":2,"]":{"docs":{},"df":0,"(":{"docs":{},"df":0,"h":{"docs":{},"df":0,"t":{"docs":{},"df":0,"t":{"docs":{},"df":0,"p":{"docs":{},"df":0,"s":{"docs":{},"df":0,":":{"docs":{},"df":0,"/":{"docs":{},"df":0,"/":{"docs":{},"df":0,"w":{"docs":{},"df":0,"w":{"docs":{},"df":0,"w":{"docs":{},"df":0,".":{"docs":{},"df":0,"w":{"docs":{},"df":0,"i":{"docs":{},"df":0,"k":{"docs":{},"df":0,"i":{"docs":{},"df":0,"w":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{},"df":0,".":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"/":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"/":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"w":{"docs":{},"df":0,"a":{"docs":{},"df":0,"y":{"docs":{},"df":0,"%":{"docs":{},"df":0,"2":{"docs":{},"df":0,"7":{"docs":{},"df":0,"s":{"docs":{},"df":0,"_":{"docs":{},"df":0,"g":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"_":{"docs":{},"df":0,"o":{"docs":{},"df":0,"f":{"docs":{},"df":0,"_":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"f":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"c":{"docs":{},"df":0,"y":{"docs":{},"df":0,"c":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0},"https://phlip9.com/notes/devops/docker compose/":{"tf":1.0}},"df":2}}}},"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"m":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.4142135623730951},"https://phlip9.com/notes/misc/prepping RPI for embedded dev/":{"tf":1.0}},"df":2}}}},"o":{"docs":{"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":1.0}},"df":1},"t":{"docs":{"https://phlip9.com/notes/confidential computing/mystikos/":{"tf":1.0}},"df":1}},"g":{"docs":{},"df":0,"_":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":2.449489742783178}},"df":1},"x":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.7320508075688772}},"df":1},"z":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":2.449489742783178}},"df":1}},"h":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/bip158 - compact block filters/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.4142135623730951},"https://phlip9.com/notes/btc-ln/lightning libs/":{"tf":1.0},"https://phlip9.com/notes/crypto/(talk) authenticated data structures for stateless validation/":{"tf":1.0},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":3.3166247903554}},"df":5,"l":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/misc/kintsugi/":{"tf":1.0}},"df":1}},"n":{"docs":{"https://phlip9.com/notes/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/BOLT 11 - invoices/":{"tf":1.7320508075688772},"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/BOLT 8 - secure noise transport/":{"tf":1.4142135623730951},"https://phlip9.com/notes/btc-ln/breez lightning service providers/":{"tf":3.1622776601683795},"https://phlip9.com/notes/btc-ln/lightning libs/":{"tf":3.0},"https://phlip9.com/notes/btc-ln/lightning network notes/":{"tf":1.4142135623730951},"https://phlip9.com/notes/btc-ln/lightning rod/":{"tf":1.7320508075688772},"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":3.1622776601683795},"https://phlip9.com/notes/btc-ln/submarine swaps/":{"tf":2.0},"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/lightning router overview/":{"tf":2.23606797749979}},"df":12,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"g":{"docs":{},"df":0,"/":{"docs":{},"df":0,"b":{"docs":{},"df":0,"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"b":{"docs":{},"df":0,"/":{"docs":{},"df":0,"7":{"docs":{},"df":0,"1":{"docs":{},"df":0,"1":{"docs":{},"df":0,"b":{"docs":{},"df":0,"c":{"docs":{},"df":0,"e":{"docs":{},"df":0,"f":{"docs":{},"df":0,"b":{"docs":{},"df":0,"c":{"docs":{},"df":0,"c":{"docs":{},"df":0,"0":{"docs":{},"df":0,"9":{"docs":{},"df":0,"9":{"docs":{},"df":0,"9":{"docs":{},"df":0,"5":{"docs":{},"df":0,"4":{"docs":{},"df":0,"3":{"docs":{},"df":0,"d":{"docs":{},"df":0,"9":{"docs":{},"df":0,"6":{"docs":{},"df":0,"2":{"docs":{},"df":0,"2":{"docs":{},"df":0,"c":{"docs":{},"df":0,"0":{"docs":{},"df":0,"3":{"docs":{},"df":0,"0":{"docs":{},"df":0,"f":{"docs":{},"df":0,"f":{"docs":{},"df":0,"7":{"docs":{},"df":0,"d":{"docs":{},"df":0,"c":{"docs":{},"df":0,"8":{"docs":{},"df":0,"1":{"docs":{},"df":0,"1":{"docs":{},"df":0,"8":{"docs":{},"df":0,"f":{"docs":{},"df":0,"c":{"docs":{},"df":0,"2":{"docs":{},"df":0,"6":{"docs":{},"df":0,"f":{"docs":{},"df":0,"/":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"g":{"docs":{},"df":0,"h":{"docs":{},"df":0,"t":{"docs":{},"df":0,"n":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"g":{"docs":{},"df":0,"/":{"docs":{},"df":0,"s":{"docs":{},"df":0,"r":{"docs":{},"df":0,"c":{"docs":{},"df":0,"/":{"docs":{},"df":0,"l":{"docs":{},"df":0,"n":{"docs":{},"df":0,"/":{"docs":{},"df":0,"m":{"docs":{},"df":0,"s":{"docs":{},"df":0,"g":{"docs":{},"df":0,"s":{"docs":{},"df":0,".":{"docs":{},"df":0,"r":{"docs":{},"df":0,"s":{"docs":{},"df":0,"#":{"docs":{},"df":0,"l":{"docs":{},"df":0,"1":{"docs":{},"df":0,"8":{"docs":{},"df":0,"1":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.0}},"df":1}}},"2":{"docs":{},"df":0,"2":{"docs":{},"df":0,"2":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.0}},"df":1}},"3":{"docs":{},"df":0,"5":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.0}},"df":1}},"4":{"docs":{},"df":0,"4":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.0}},"df":1}},"5":{"docs":{},"df":0,"6":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.0}},"df":1}},"7":{"docs":{},"df":0,"9":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"_":{"docs":{},"df":0,"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{},"df":0,"_":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"k":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,":":{"docs":{},"df":0,":":{"docs":{},"df":0,"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{},"df":0,"u":{"docs":{},"df":0,"p":{"docs":{},"df":0,"_":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"b":{"docs":{},"df":0,"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{},"df":0,"(":{"docs":{},"df":0,"p":{"docs":{},"df":0,"e":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"m":{"docs":{},"df":0,"g":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"v":{"docs":{},"df":0,"k":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.4142135623730951}},"df":1}}}}}}}}}},"w":{"docs":{},"df":0,"e":{"docs":{},"df":0,"i":{"docs":{},"df":0,"g":{"docs":{},"df":0,"h":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/confidential computing/marblerun/":{"tf":1.0},"https://phlip9.com/notes/devops/k3s/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/rust/rr with rust/":{"tf":1.0}},"df":3}}}}}}}}},"k":{"docs":{},"df":0,"e":{"docs":{"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0}},"df":1,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"h":{"docs":{},"df":0,"o":{"docs":{},"df":0,"o":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/statistics probability/G-test - multinomial goodness-of-fit/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/multinomial distribution/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/testing whether a coin is fair/":{"tf":1.0}},"df":3}}}}}},"w":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{"https://phlip9.com/notes/AI ML/Expectimax Search/":{"tf":1.0},"https://phlip9.com/notes/combinatorics/k-combinations of a multiset/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/secure time/":{"tf":1.0},"https://phlip9.com/notes/networking/CIDR/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.4142135623730951},"https://phlip9.com/notes/statistics probability/testing whether a coin is fair/":{"tf":1.0}},"df":9}}}}},"m":{"docs":{},"df":0,"b":{"docs":{"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0}},"df":1,"o":{"docs":{},"df":0,"t":{"docs":{},"df":0,"h":{"docs":{"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.7320508075688772}},"df":1}}},"t":{"docs":{},"df":0,"h":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.7320508075688772}},"df":1}}}},"i":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/AI ML/Expectimax Search/":{"tf":1.0},"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/money services business (MSB)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/lightning rod/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.7320508075688772},"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":1.0},"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":2.449489742783178},"https://phlip9.com/notes/performance/simdjson talk/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":2.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.7320508075688772},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":2.8284271247461903},"https://phlip9.com/notes/statistics probability/standard error/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/testing whether a coin is fair/":{"tf":1.0}},"df":13}}},"n":{"docs":{},"df":0,"e":{"docs":{"https://phlip9.com/notes/WSL/WSL2 custom kernel/":{"tf":1.0},"https://phlip9.com/notes/android/android cli setup/":{"tf":2.0},"https://phlip9.com/notes/confidential computing/gramine/":{"tf":1.4142135623730951},"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":1.7320508075688772},"https://phlip9.com/notes/devops/secrets/ejson (Shopify)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/flutter/flutter setup/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/rr with rust/":{"tf":1.0},"https://phlip9.com/notes/misc/kintsugi/":{"tf":1.4142135623730951},"https://phlip9.com/notes/misc/prepping RPI for embedded dev/":{"tf":1.0},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0},"https://phlip9.com/notes/nvim/universal-ctags Notes/":{"tf":2.0},"https://phlip9.com/notes/performance/simdjson talk/":{"tf":1.4142135623730951}},"df":12,".":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/performance/simdjson talk/":{"tf":1.0}},"df":1}}}},"a":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/AI ML/Expectimax Search/":{"tf":2.449489742783178},"https://phlip9.com/notes/AI ML/Markov Decision Process (MDP)/":{"tf":1.0},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":4.242640687119285},"https://phlip9.com/notes/lang/koka-lang/":{"tf":1.0},"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":1.7320508075688772},"https://phlip9.com/notes/misc/optimization solvers/":{"tf":1.0},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":7,"l":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/winsorize/":{"tf":1.4142135623730951}},"df":2}}}},"r":{"docs":{"https://phlip9.com/notes/reproducible builds/reproducible-builds.org/":{"tf":1.0}},"df":1},"s":{"docs":{},"df":0,"=":{"docs":{},"df":0,"1":{"docs":{"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":1.4142135623730951}},"df":1}}}},"g":{"docs":{},"df":0,"o":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.0}},"df":2}},"k":{"docs":{"https://phlip9.com/notes/android/root phone with magisk/":{"tf":1.0},"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/financial instituion/":{"tf":1.0},"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/money services business (MSB)/":{"tf":1.0},"https://phlip9.com/notes/b l o c k c h a i n/fastpay/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/gramine/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.7320508075688772},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/secure time/":{"tf":1.0},"https://phlip9.com/notes/crypto/acme protocol/":{"tf":1.7320508075688772},"https://phlip9.com/notes/devops/kubernetes/":{"tf":1.0},"https://phlip9.com/notes/fuzzing/fuzzing/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/rust x SGX/":{"tf":1.0},"https://phlip9.com/notes/networking/ipv6 address space/":{"tf":2.23606797749979},"https://phlip9.com/notes/networking/network interface card (NIC)/":{"tf":2.0},"https://phlip9.com/notes/networking/network interfaces/":{"tf":3.7416573867739413},"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.0},"https://phlip9.com/notes/postgres/postgres performance tuning/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/nix/links/":{"tf":1.4142135623730951},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.4142135623730951},"https://phlip9.com/notes/statistics probability/CDF confidence bands - DKW inequality/":{"tf":1.0}},"df":25,"/":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{},"df":0,"h":{"docs":{"https://phlip9.com/notes/networking/network interfaces/":{"tf":3.3166247903554}},"df":1}}},"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"o":{"docs":{},"df":0,"p":{"docs":{},"df":0,"b":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"k":{"docs":{"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.4142135623730951}},"df":1}}}}}}}}},"a":{"docs":{},"df":0,"b":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.0}},"df":1}}},"e":{"docs":{},"df":0,"d":{"docs":{},"df":0,"p":{"docs":{},"df":0,"u":{"docs":{},"df":0,"b":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"i":{"docs":{},"df":0,"p":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{},"df":0,"d":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"s":{"docs":{"https://phlip9.com/notes/devops/azure CLI/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}},"r":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/confidential computing/marblerun/":{"tf":1.0},"https://phlip9.com/notes/devops/linkerd/":{"tf":2.0},"https://phlip9.com/notes/devops/service mesh/":{"tf":1.7320508075688772}},"df":3}}}},"t":{"docs":{"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":2.23606797749979}},"df":1},"u":{"docs":{},"df":0,"x":{"docs":{"https://phlip9.com/notes/WSL/WSL2 custom kernel/":{"tf":2.6457513110645907},"https://phlip9.com/notes/android/android cli setup/":{"tf":1.4142135623730951},"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.7320508075688772},"https://phlip9.com/notes/android/linux ADB udev setup/":{"tf":1.4142135623730951},"https://phlip9.com/notes/android/root phone with magisk/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":2.23606797749979},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":2.449489742783178},"https://phlip9.com/notes/confidential computing/intel TDX/":{"tf":1.7320508075688772},"https://phlip9.com/notes/confidential computing/mystikos/":{"tf":1.7320508075688772},"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":1.0},"https://phlip9.com/notes/lang/flutter/flutter setup/":{"tf":2.8284271247461903},"https://phlip9.com/notes/lang/rust/rr with rust/":{"tf":1.4142135623730951},"https://phlip9.com/notes/misc/arm target triples/":{"tf":3.0},"https://phlip9.com/notes/misc/prepping RPI for embedded dev/":{"tf":1.0},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.4142135623730951},"https://phlip9.com/notes/misc/setting up a headless raspbian boot image/":{"tf":1.0},"https://phlip9.com/notes/networking/network interfaces/":{"tf":3.0},"https://phlip9.com/notes/performance/simdjson talk/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/rebuilderd/":{"tf":1.0}},"df":20,"/":{"docs":{},"df":0,"2":{"docs":{},"df":0,".":{"docs":{},"df":0,"1":{"docs":{},"df":0,"5":{"docs":{},"df":0,".":{"docs":{},"df":0,"1":{"docs":{},"df":0,"/":{"docs":{},"df":0,"d":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"/":{"docs":{},"df":0,"u":{"docs":{},"df":0,"b":{"docs":{},"df":0,"u":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"u":{"docs":{},"df":0,"2":{"docs":{},"df":0,"0":{"docs":{},"df":0,".":{"docs":{},"df":0,"0":{"docs":{},"df":0,"4":{"docs":{"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.4142135623730951}},"df":1}}}}}}}}}}}}}}}}}}}}}}},"2":{"docs":{},"df":0,"1":{"docs":{},"df":0,"/":{"docs":{},"df":0,"p":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"b":{"docs":{},"df":0,"u":{"docs":{},"df":0,"i":{"docs":{},"df":0,"l":{"docs":{},"df":0,"t":{"docs":{},"df":0,"_":{"docs":{},"df":0,"a":{"docs":{},"df":0,"e":{"docs":{},"df":0,"_":{"docs":{},"df":0,"2":{"docs":{},"df":0,".":{"docs":{},"df":0,"2":{"docs":{},"df":0,"1":{"docs":{},"df":0,".":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,".":{"docs":{},"df":0,"g":{"docs":{},"df":0,"z":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}},"x":{"docs":{},"df":0,"8":{"docs":{},"df":0,"6":{"docs":{},"df":0,"_":{"docs":{},"df":0,"6":{"docs":{},"df":0,"4":{"docs":{"https://phlip9.com/notes/misc/setting up a headless raspbian boot image/":{"tf":1.0}},"df":1}}}}}}}}}},"q":{"docs":{},"df":0,"u":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/breez lightning service providers/":{"tf":2.6457513110645907},"https://phlip9.com/notes/management/relieve often - why generals were more successful in WWII/":{"tf":1.0},"https://phlip9.com/notes/misc/kintsugi/":{"tf":1.0}},"df":4}}}},"s":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/WSL/WSL2 custom kernel/":{"tf":1.0},"https://phlip9.com/notes/android/android cli setup/":{"tf":2.0},"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.7320508075688772},"https://phlip9.com/notes/android/root phone with magisk/":{"tf":1.0},"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/money services business (MSB)/":{"tf":1.0},"https://phlip9.com/notes/b l o c k c h a i n/fastpay/":{"tf":1.0},"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.4142135623730951},"https://phlip9.com/notes/btc-ln/BOLT 11 - invoices/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/BOLT 4 - onion routing protocol/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/BOLT 8 - secure noise transport/":{"tf":1.0},"https://phlip9.com/notes/combinatorics/k-combinations of a multiset/":{"tf":1.7320508075688772},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":2.23606797749979},"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":2.0},"https://phlip9.com/notes/devops/azure CLI/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":2.6457513110645907},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":2.0},"https://phlip9.com/notes/lang/gdb ref/":{"tf":1.0},"https://phlip9.com/notes/lang/operator fixity and precedence/":{"tf":1.7320508075688772},"https://phlip9.com/notes/misc/envsubst/":{"tf":1.0},"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":1.4142135623730951},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0},"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.0},"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.0},"https://phlip9.com/notes/postgres/snippets/":{"tf":1.4142135623730951},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/rebuilderd/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/winsorize/":{"tf":1.4142135623730951}},"df":28,"&":{"docs":{},"df":0,"l":{"docs":{},"df":0,"t":{"docs":{},"df":0,";":{"docs":{},"df":0,"d":{"docs":{},"df":0,"y":{"docs":{},"df":0,"n":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"&":{"docs":{},"df":0,"g":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0}},"df":1}}}}}}}}}},"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"&":{"docs":{},"df":0,"g":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.7320508075688772}},"df":1}}}}}},"t":{"docs":{},"df":0,"&":{"docs":{},"df":0,"g":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0}},"df":1}}}}}}}},"(":{"docs":{},"df":0,"a":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":3.0}},"df":1}},"1":{"docs":{"https://phlip9.com/notes/statistics probability/winsorize/":{"tf":2.449489742783178}},"df":1},"[":{"docs":{},"df":0,"1":{"docs":{"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0}},"df":1}},"_":{"docs":{},"df":0,"a":{"docs":{},"df":0,"p":{"docs":{},"df":0,"p":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.4142135623730951}},"df":1,"(":{"docs":{},"df":0,"x":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0}},"df":1}},"2":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0}},"df":1}}}}}}},"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.7320508075688772}},"df":1,"s":{"docs":{},"df":0,"(":{"docs":{},"df":0,"x":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.7320508075688772}},"df":1}},"{":{"docs":{},"df":0,"a":{"docs":{},"df":0,"}":{"docs":{},"df":0,"{":{"docs":{},"df":0,"0":{"docs":{},"df":0,"}":{"docs":{},"df":0,"(":{"docs":{},"df":0,"x":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0}},"df":1}}}}}}}}}}}},"n":{"docs":{},"df":0,"i":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.7320508075688772}},"df":1}}},"v":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.4142135623730951}},"df":1,"(":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.4142135623730951}},"df":1}}}},"_":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{},"df":0,"d":{"docs":{},"df":0,"1":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.4142135623730951}},"df":1}}}},"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"s":{"docs":{},"df":0,"_":{"docs":{},"df":0,"u":{"docs":{},"df":0,"n":{"docs":{},"df":0,"f":{"docs":{},"df":0,"o":{"docs":{},"df":0,"l":{"docs":{},"df":0,"d":{"docs":{},"df":0,"(":{"docs":{},"df":0,"l":{"docs":{},"df":0,"_":{"docs":{},"df":0,"0":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.4142135623730951}},"df":1}}}}}}}}}}}}}}}}}},"z":{"docs":{},"df":0,"i":{"docs":{},"df":0,"p":{"docs":{},"df":0,"w":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"h":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.4142135623730951}},"df":1}}}}}}}},"e":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/BOLT 8 - secure noise transport/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.4142135623730951},"https://phlip9.com/notes/crypto/acme protocol/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/understanding sycamore reactivity/":{"tf":2.449489742783178},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.0}},"df":6,":":{"docs":{},"df":0,"2":{"docs":{},"df":0,"2":{"docs":{},"df":0,"0":{"docs":{},"df":0,"5":{"docs":{},"df":0,",":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"u":{"docs":{},"df":0,"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{},"df":0,"d":{"docs":{},"df":0,"r":{"docs":{},"df":0,",":{"docs":{},"df":0,"f":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"k":{"docs":{},"df":0,",":{"docs":{},"df":0,"n":{"docs":{},"df":0,"o":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"y":{"docs":{"https://phlip9.com/notes/android/ADB over TCP inside WSL2/":{"tf":1.4142135623730951}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"t":{"docs":{},"df":0,"e":{"docs":{"https://phlip9.com/notes/btc-ln/lightning libs/":{"tf":1.0},"https://phlip9.com/notes/misc/setting up a headless raspbian boot image/":{"tf":1.0}},"df":2,".":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"f":{"docs":{},"df":0,"o":{"docs":{"https://phlip9.com/notes/misc/setting up a headless raspbian boot image/":{"tf":1.0}},"df":1}}}},"z":{"docs":{},"df":0,"i":{"docs":{},"df":0,"p":{"docs":{"https://phlip9.com/notes/misc/setting up a headless raspbian boot image/":{"tf":1.0}},"df":1}}}},"r":{"docs":{"https://phlip9.com/notes/lang/koka-lang/":{"tf":1.0},"https://phlip9.com/notes/misc/kintsugi/":{"tf":1.0},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0},"https://phlip9.com/notes/performance/simdjson talk/":{"tf":1.0},"https://phlip9.com/notes/postgres/snippets/":{"tf":1.4142135623730951}},"df":5}},"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/lang/operator fixity and precedence/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/nix/nix auto-allocate-uids -> nixbld users/":{"tf":1.0}},"df":2}},"l":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 4 - onion routing protocol/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.7320508075688772},"https://phlip9.com/notes/confidential computing/mystikos/":{"tf":1.0},"https://phlip9.com/notes/design/form design/":{"tf":1.0},"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":1.0},"https://phlip9.com/notes/misc/kintsugi/":{"tf":2.0},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":2.0}},"df":7}}},"v":{"docs":{},"df":0,"e":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/fastpay/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/BOLT 8 - secure noise transport/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/breez lightning service providers/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0},"https://phlip9.com/notes/devops/secrets/envkey/":{"tf":1.0},"https://phlip9.com/notes/lang/flutter/flutter setup/":{"tf":1.4142135623730951},"https://phlip9.com/notes/misc/envsubst/":{"tf":2.23606797749979}},"df":9}}},"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0}},"df":1}},"c":{"docs":{"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/foreign bank account report (FBAR)/":{"tf":1.0}},"df":1},"v":{"docs":{},"df":0,"m":{"docs":{"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0},"https://phlip9.com/notes/fuzzing/fuzzing/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.7320508075688772}},"df":3}}},"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"o":{"docs":{"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.4142135623730951},"https://phlip9.com/notes/android/root phone with magisk/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.0}},"df":4}}},"n":{"docs":{"https://phlip9.com/notes/btc-ln/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/BOLT 8 - secure noise transport/":{"tf":2.0},"https://phlip9.com/notes/btc-ln/breez lightning service providers/":{"tf":1.4142135623730951},"https://phlip9.com/notes/btc-ln/hosted channels/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/lightning libs/":{"tf":1.4142135623730951},"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/submarine swaps/":{"tf":3.1622776601683795}},"df":8,"(":{"docs":{},"df":0,"p":{"docs":{},"df":0,"_":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/statistics probability/G-test - multinomial goodness-of-fit/":{"tf":1.0}},"df":1}}}},":":{"docs":{},"df":0,":":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"g":{"docs":{},"df":0,":":{"docs":{},"df":0,":":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,":":{"docs":{},"df":0,":":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"h":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 11 - invoices/":{"tf":1.0}},"df":1,"h":{"docs":{},"df":0,"o":{"docs":{},"df":0,"p":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 11 - invoices/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"\\":{"docs":{},"df":0,"b":{"docs":{},"df":0,"i":{"docs":{},"df":0,"g":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/statistics probability/G-test - multinomial goodness-of-fit/":{"tf":2.0}},"df":1}}}}},"d":{"docs":{"https://phlip9.com/notes/btc-ln/breez lightning service providers/":{"tf":1.7320508075688772}},"df":1}},"o":{"docs":{"https://phlip9.com/notes/networking/network interfaces/":{"tf":2.8284271247461903},"https://phlip9.com/notes/performance/bit hacks/":{"tf":2.449489742783178},"https://phlip9.com/notes/statistics probability/winsorize/":{"tf":1.4142135623730951}},"df":3,"0":{"docs":{"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.0}},"df":1},"a":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0},"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.7320508075688772},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":3.0},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":1.7320508075688772},"https://phlip9.com/notes/devops/AKS - azure kubernetes service/":{"tf":1.0},"https://phlip9.com/notes/devops/linkerd/":{"tf":1.0},"https://phlip9.com/notes/devops/service mesh/":{"tf":1.0},"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":2.8284271247461903},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.7320508075688772},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0},"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.0},"https://phlip9.com/notes/performance/simdjson talk/":{"tf":1.0},"https://phlip9.com/notes/postgres/postgres performance tuning/":{"tf":1.0},"https://phlip9.com/notes/postgres/types of scans/":{"tf":1.4142135623730951},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.4142135623730951},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.0}},"df":18,"b":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"c":{"docs":{"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":1.0}},"df":1}}}}}},"e":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":2.449489742783178}},"df":1,"w":{"docs":{},"df":0,"i":{"docs":{},"df":0,"p":{"docs":{"https://phlip9.com/notes/confidential computing/intel TDX/":{"tf":1.0}},"df":1}}}}},"s":{"docs":{},"df":0,"/":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/performance/simdjson talk/":{"tf":1.0}},"df":1}}}}}}},"n":{"docs":{"https://phlip9.com/notes/management/relieve often - why generals were more successful in WWII/":{"tf":1.0}},"df":1}},"c":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/android/android cli setup/":{"tf":1.7320508075688772},"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":2.23606797749979},"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.7320508075688772},"https://phlip9.com/notes/btc-ln/submarine swaps/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/gramine/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":2.449489742783178},"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.7320508075688772},"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/secure time/":{"tf":2.0},"https://phlip9.com/notes/devops/docker compose/":{"tf":1.4142135623730951},"https://phlip9.com/notes/devops/kind (kubernetes in docker)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/devops/linkerd/":{"tf":1.0},"https://phlip9.com/notes/devops/minikube/":{"tf":1.0},"https://phlip9.com/notes/devops/service mesh/":{"tf":1.0},"https://phlip9.com/notes/distributed systems/papers/(2020) Semi-Fast Byzantine-tolerant Shared Register without Reliable Broadcast/":{"tf":2.0},"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.7320508075688772},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0},"https://phlip9.com/notes/lang/flutter/flutter setup/":{"tf":1.0},"https://phlip9.com/notes/lang/lua/":{"tf":4.123105625617661},"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":1.0},"https://phlip9.com/notes/misc/kintsugi/":{"tf":1.0},"https://phlip9.com/notes/misc/setting up a headless raspbian boot image/":{"tf":1.0},"https://phlip9.com/notes/networking/ipv6 address space/":{"tf":2.6457513110645907},"https://phlip9.com/notes/networking/network interface card (NIC)/":{"tf":1.7320508075688772},"https://phlip9.com/notes/networking/network interfaces/":{"tf":2.449489742783178},"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":2.23606797749979},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":2.0}},"df":32,"/":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{},"df":0,"/":{"docs":{},"df":0,"c":{"docs":{},"df":0,"m":{"docs":{},"df":0,"d":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/android/android cli setup/":{"tf":1.0}},"df":1}}}}}}}}}}}}}},"b":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/WSL/WSL2 custom kernel/":{"tf":1.0}},"df":1}}},"f":{"docs":{},"df":0,"l":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/lang/flutter/flutter setup/":{"tf":1.0}},"df":1}}}}}},"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"f":{"docs":{},"df":0,"i":{"docs":{},"df":0,"g":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.4142135623730951}},"df":1}}}}}},"e":{"docs":{},"df":0,"_":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"f":{"docs":{},"df":0,"a":{"docs":{},"df":0,"u":{"docs":{},"df":0,"l":{"docs":{},"df":0,"t":{"docs":{},"df":0,"=":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"_":{"docs":{},"df":0,"u":{"docs":{},"df":0,"s":{"docs":{},"df":0,".":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{},"df":0,"f":{"docs":{"https://phlip9.com/notes/misc/setting up a headless raspbian boot image/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}},"h":{"docs":{},"df":0,"o":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0},"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.0}},"df":3}}}},"l":{"docs":{},"df":0,"y":{"docs":{},"df":0,"/":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"c":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"s":{"docs":{"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.0}},"df":1}}}}}}}}},"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"m":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1}}}},"t":{"docs":{"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/money services business (MSB)/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/gramine/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0},"https://phlip9.com/notes/crypto/acme protocol/":{"tf":1.0},"https://phlip9.com/notes/devops/azure CLI/":{"tf":2.449489742783178},"https://phlip9.com/notes/devops/k3s/":{"tf":1.0},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":2.23606797749979},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.4142135623730951},"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.4142135623730951},"https://phlip9.com/notes/nvim/universal-ctags Notes/":{"tf":1.0},"https://phlip9.com/notes/postgres/postgres performance tuning/":{"tf":2.0},"https://phlip9.com/notes/postgres/types of scans/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.0}},"df":14,"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"=":{"docs":{},"df":0,"w":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"u":{"docs":{"https://phlip9.com/notes/devops/azure CLI/":{"tf":1.0}},"df":1}}}}}},"d":{"docs":{"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.0}},"df":1}}}}}},"k":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/fastpay/":{"tf":1.4142135623730951},"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.7320508075688772},"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":1.0},"https://phlip9.com/notes/devops/secrets/ejson (Shopify)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.0}},"df":7}},"e":{"docs":{"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0}},"df":2},"g":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/btc utreexo - utxo accumulator/":{"tf":1.0},"https://phlip9.com/notes/b l o c k c h a i n/fastpay/":{"tf":1.4142135623730951},"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.7320508075688772},"https://phlip9.com/notes/crypto/(talk) authenticated data structures for stateless validation/":{"tf":2.6457513110645907},"https://phlip9.com/notes/devops/AKS - azure kubernetes service/":{"tf":1.0},"https://phlip9.com/notes/devops/docker compose/":{"tf":1.0},"https://phlip9.com/notes/devops/secrets/ejson-kms (AWS)/":{"tf":1.0},"https://phlip9.com/notes/misc/prepping RPI for embedded dev/":{"tf":1.0},"https://phlip9.com/notes/postgres/postgres performance tuning/":{"tf":1.4142135623730951},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/nix/nix debug broken package build/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":2.0},"https://phlip9.com/notes/statistics probability/G-test - multinomial goodness-of-fit/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/multinomial distribution/":{"tf":1.0}},"df":18,"(":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/btc utreexo - utxo accumulator/":{"tf":1.0}},"df":1}},"2":{"docs":{},"df":0,"(":{"docs":{},"df":0,"1":{"docs":{},"df":0,"6":{"docs":{"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.0}},"df":1}},"3":{"docs":{},"df":0,"2":{"docs":{"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.0}},"df":1}},"6":{"docs":{},"df":0,"4":{"docs":{"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.0}},"df":1}}}},"i":{"docs":{},"df":0,"c":{"docs":{"https://phlip9.com/notes/AI ML/Markov Decision Process (MDP)/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.4142135623730951},"https://phlip9.com/notes/crypto/biscuit authz/":{"tf":1.0},"https://phlip9.com/notes/crypto/dex - open-source OIDC & OAuth 2.0 provider/":{"tf":1.0},"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.0}},"df":6},"n":{"docs":{"https://phlip9.com/notes/devops/azure CLI/":{"tf":2.0},"https://phlip9.com/notes/misc/pop_OS! tweaks/":{"tf":1.4142135623730951},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":2.449489742783178},"https://phlip9.com/notes/router/lightning router/captive portal/arubanetworks captive portal/":{"tf":1.4142135623730951},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":3.7416573867739413}},"df":6}},"o":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1,"n":{"docs":{"https://phlip9.com/notes/router/lightning router/captive portal/arubanetworks captive portal/":{"tf":1.4142135623730951}},"df":1}}},"l":{"docs":{"https://phlip9.com/notes/android/root phone with magisk/":{"tf":1.0},"https://phlip9.com/notes/b l o c k c h a i n/btc utreexo - utxo accumulator/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/sycamore x futures/":{"tf":1.0}},"df":3},"n":{"docs":{},"df":0,"d":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/fuzzing/fuzzing/":{"tf":1.0}},"df":1}}},"g":{"docs":{"https://phlip9.com/notes/AI ML/Markov Decision Process (MDP)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/android/ADB over TCP inside WSL2/":{"tf":1.4142135623730951},"https://phlip9.com/notes/btc-ln/BOLT 11 - invoices/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/lightning network notes/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0},"https://phlip9.com/notes/crypto/acme protocol/":{"tf":1.0},"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/rr with rust/":{"tf":1.0},"https://phlip9.com/notes/misc/optimization solvers/":{"tf":1.0},"https://phlip9.com/notes/misc/prepping RPI for embedded dev/":{"tf":1.0},"https://phlip9.com/notes/networking/ipv6 address space/":{"tf":1.0},"https://phlip9.com/notes/postgres/snippets/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.4142135623730951}},"df":15,"e":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/AI ML/Expectimax Search/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/BOLT 4 - onion routing protocol/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/breez lightning service providers/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.0},"https://phlip9.com/notes/crypto/biscuit authz/":{"tf":1.0},"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":1.4142135623730951},"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":1.0},"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.0}},"df":9},"s":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.0}},"df":1}}}}},"o":{"docs":{},"df":0,"k":{"docs":{"https://phlip9.com/notes/AI ML/Markov Decision Process (MDP)/":{"tf":2.0},"https://phlip9.com/notes/android/ADB over TCP inside WSL2/":{"tf":1.4142135623730951},"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.4142135623730951},"https://phlip9.com/notes/btc-ln/hosted channels/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/lightning network notes/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/lightning rod/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/submarine swaps/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.7320508075688772},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":2.23606797749979},"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/secure time/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel TDX/":{"tf":1.0},"https://phlip9.com/notes/crypto/acme protocol/":{"tf":1.0},"https://phlip9.com/notes/design/form design/":{"tf":1.7320508075688772},"https://phlip9.com/notes/devops/azure CLI/":{"tf":1.0},"https://phlip9.com/notes/devops/nomad/":{"tf":1.0},"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":1.7320508075688772},"https://phlip9.com/notes/fuzzing/bolero - fuzzing + property testing/":{"tf":1.0},"https://phlip9.com/notes/fuzzing/fuzzcheck-rs/":{"tf":1.0},"https://phlip9.com/notes/keyboards/moergo glove80/":{"tf":1.0},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.7320508075688772},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.7320508075688772},"https://phlip9.com/notes/lang/rust/rr with rust/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/understanding sycamore reactivity/":{"tf":1.0},"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":2.0},"https://phlip9.com/notes/misc/kintsugi/":{"tf":2.0},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0},"https://phlip9.com/notes/misc/setting up a headless raspbian boot image/":{"tf":1.0},"https://phlip9.com/notes/networking/ipv6 address space/":{"tf":1.0},"https://phlip9.com/notes/networking/network interfaces/":{"tf":2.0},"https://phlip9.com/notes/postgres/types of scans/":{"tf":1.4142135623730951},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.0}},"df":35,"u":{"docs":{},"df":0,"p":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 7 - p2p node and channel discovery/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.0},"https://phlip9.com/notes/crypto/(talk) authenticated data structures for stateless validation/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.4142135623730951},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.0}},"df":6}}},"o":{"docs":{},"df":0,"o":{"docs":{},"df":0,"o":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0}},"df":1}}}},"p":{"docs":{"https://phlip9.com/notes/AI ML/Markov Decision Process (MDP)/":{"tf":1.0},"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":1.7320508075688772},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.7320508075688772},"https://phlip9.com/notes/lang/rust/rust verification tools/":{"tf":1.0},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":2.0},"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.0}},"df":7,"(":{"docs":{},"df":0,"x":{"docs":{},"df":0,"s":{"docs":{},"df":0,"1":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0}},"df":1}}}},"b":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"k":{"docs":{"https://phlip9.com/notes/networking/network interfaces/":{"tf":3.0}},"df":1}}}},"s":{"docs":{},"df":0,"=":{"docs":{},"df":0,"1":{"docs":{"https://phlip9.com/notes/postgres/types of scans/":{"tf":1.0}},"df":1}}}},"s":{"docs":{"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0}},"df":1,"e":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/AI ML/Expectimax Search/":{"tf":1.0}},"df":1}}}},"s":{"docs":{},"df":0,"e":{"docs":{"https://phlip9.com/notes/AI ML/Expectimax Search/":{"tf":1.4142135623730951},"https://phlip9.com/notes/android/root phone with magisk/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":1.0},"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":1.4142135623730951},"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":1.4142135623730951}},"df":5},"s":{"docs":{"https://phlip9.com/notes/btc-ln/zero-conf channels/":{"tf":1.0}},"df":1,"i":{"docs":{"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":1.0}},"df":1},"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"s":{"docs":{"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":1.0}},"df":1}}}}},"t":{"docs":{"https://phlip9.com/notes/design/form design/":{"tf":1.0},"https://phlip9.com/notes/devops/deployment strategies/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":2.0}},"df":4}},"t":{"docs":{"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0},"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.0},"https://phlip9.com/notes/design/form design/":{"tf":1.0},"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":1.0},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0},"https://phlip9.com/notes/misc/kintsugi/":{"tf":1.0},"https://phlip9.com/notes/misc/optimization solvers/":{"tf":1.0},"https://phlip9.com/notes/misc/prepping RPI for embedded dev/":{"tf":1.0},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.4142135623730951},"https://phlip9.com/notes/postgres/postgres performance tuning/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.0}},"df":13},"u":{"docs":{},"df":0,"n":{"docs":{},"df":0,"g":{"docs":{"https://phlip9.com/notes/reproducible builds/nix/links/":{"tf":1.0}},"df":1}}},"v":{"docs":{},"df":0,"e":{"docs":{"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.0}},"df":1}},"w":{"docs":{"https://phlip9.com/notes/btc-ln/breez lightning service providers/":{"tf":1.7320508075688772},"https://phlip9.com/notes/btc-ln/lightning rod/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/marblerun/":{"tf":1.0},"https://phlip9.com/notes/devops/deployment strategies/":{"tf":1.4142135623730951},"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":1.0},"https://phlip9.com/notes/networking/network interface card (NIC)/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.0}},"df":7,"e":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/AI ML/Expectimax Search/":{"tf":2.0},"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":1.0},"https://phlip9.com/notes/keyboards/moergo glove80/":{"tf":1.4142135623730951},"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.0},"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.0},"https://phlip9.com/notes/postgres/postgres performance tuning/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/testing whether a coin is fair/":{"tf":1.4142135623730951}},"df":8,"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"y":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"d":{"docs":{},"df":0,"o":{"docs":{},"df":0,"w":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.7320508075688772}},"df":1}}}}}}}}}},"s":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":1.0}},"df":3}}}}},"p":{"docs":{"https://phlip9.com/notes/misc/optimization solvers/":{"tf":1.0}},"df":1},"r":{"docs":{"https://phlip9.com/notes/btc-ln/atomic multipath payments (AMP)/":{"tf":1.7320508075688772},"https://phlip9.com/notes/btc-ln/lightning rod/":{"tf":1.0},"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":1.4142135623730951}},"df":3},"s":{"docs":{"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.7320508075688772},"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.0},"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":1.4142135623730951},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0},"https://phlip9.com/notes/misc/setting up a headless raspbian boot image/":{"tf":1.0}},"df":6,"b":{"docs":{"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0}},"df":1,"_":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.0}},"df":3}}}}}}}},"h":{"docs":{},"df":0,"i":{"docs":{},"df":0,"f":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/keyboards/moergo glove80/":{"tf":1.0}},"df":1}}}},"p":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 11 - invoices/":{"tf":1.4142135623730951},"https://phlip9.com/notes/btc-ln/breez lightning service providers/":{"tf":4.0},"https://phlip9.com/notes/btc-ln/submarine swaps/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.4142135623730951}},"df":4},"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"6":{"docs":{},"df":0,"4":{"docs":{"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.0}},"df":1}}}}}},"t":{"docs":{"https://phlip9.com/notes/AI ML/Markov Decision Process (MDP)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.4142135623730951},"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":2.23606797749979},"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":4.242640687119285},"https://phlip9.com/notes/btc-ln/lightning network notes/":{"tf":1.4142135623730951},"https://phlip9.com/notes/combinatorics/k-combinations of a multiset/":{"tf":1.7320508075688772},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/gramine/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.7320508075688772},"https://phlip9.com/notes/crypto/TLS self-signed pubkey-only certs/":{"tf":1.0},"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":1.0},"https://phlip9.com/notes/devops/azure CLI/":{"tf":1.0},"https://phlip9.com/notes/distributed systems/papers/(2021) Leaderless Consensus/":{"tf":1.0},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":2.0},"https://phlip9.com/notes/lang/flutter/flutter setup/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/gdb ref/":{"tf":1.0},"https://phlip9.com/notes/lang/operator fixity and precedence/":{"tf":3.3166247903554},"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/rr with rust/":{"tf":1.0},"https://phlip9.com/notes/misc/envsubst/":{"tf":1.4142135623730951},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":3.3166247903554},"https://phlip9.com/notes/networking/network interfaces/":{"tf":2.0},"https://phlip9.com/notes/performance/bit hacks/":{"tf":7.483314773547883},"https://phlip9.com/notes/performance/simdjson talk/":{"tf":2.6457513110645907},"https://phlip9.com/notes/statistics probability/G-test - multinomial goodness-of-fit/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/testing whether a coin is fair/":{"tf":1.7320508075688772},"https://phlip9.com/notes/statistics probability/winsorize/":{"tf":1.7320508075688772}},"df":28,";":{"docs":{},"df":0,"$":{"docs":{},"df":0,"&":{"docs":{},"df":0,"g":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/lang/operator fixity and precedence/":{"tf":1.4142135623730951}},"df":1}}}},"&":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{},"df":0,"p":{"docs":{},"df":0,";":{"docs":{},"df":0,"&":{"docs":{},"df":0,"g":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/lang/operator fixity and precedence/":{"tf":1.0}},"df":1}}}}}}},"l":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":2.0},"https://phlip9.com/notes/lang/operator fixity and precedence/":{"tf":1.0},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.4142135623730951},"https://phlip9.com/notes/performance/bit hacks/":{"tf":3.872983346207417},"https://phlip9.com/notes/performance/simdjson talk/":{"tf":2.0}},"df":5,";":{"docs":{},"df":0,"e":{"docs":{},"df":0,"o":{"docs":{},"df":0,"f":{"docs":{"https://phlip9.com/notes/misc/prepping RPI for embedded dev/":{"tf":1.0}},"df":1}}}}}}},"*":{"docs":{},"df":0,"&":{"docs":{},"df":0,"g":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/lang/operator fixity and precedence/":{"tf":2.8284271247461903}},"df":1}}}},"+":{"docs":{},"df":0,"&":{"docs":{},"df":0,"g":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/lang/operator fixity and precedence/":{"tf":1.0}},"df":1}}}},".":{"docs":{},"df":0,".":{"docs":{},"df":0,".":{"docs":{},"df":0,"&":{"docs":{},"df":0,"g":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0}},"df":1}}}}}},"/":{"docs":{},"df":0,"b":{"docs":{},"df":0,"o":{"docs":{},"df":0,"d":{"docs":{},"df":0,"y":{"docs":{},"df":0,"&":{"docs":{},"df":0,"g":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":2.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":2.0}},"df":2}}}}}}},"h":{"docs":{},"df":0,"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{},"df":0,"&":{"docs":{},"df":0,"g":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":2.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":2.0}},"df":2}}}}}},"t":{"docs":{},"df":0,"m":{"docs":{},"df":0,"l":{"docs":{},"df":0,"&":{"docs":{},"df":0,"g":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":2.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":2.0}},"df":2}}}}}}}},"1":{"docs":{},"df":0,"0":{"docs":{},"df":0,"2":{"docs":{},"df":0,"4":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 11 - invoices/":{"tf":1.0}},"df":1}}}},"5":{"docs":{},"df":0,"0":{"docs":{},"df":0,"m":{"docs":{},"df":0,"b":{"docs":{"https://phlip9.com/notes/devops/k3s/":{"tf":1.0}},"df":1}}}},"=":{"docs":{},"df":0,"&":{"docs":{},"df":0,"l":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/lang/operator fixity and precedence/":{"tf":1.0}},"df":1}}},"1":{"docs":{},"df":0,"2":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 11 - invoices/":{"tf":1.0}},"df":1}},"6":{"docs":{},"df":0,"3":{"docs":{},"df":0,"9":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 11 - invoices/":{"tf":1.0}},"df":1}}},"=":{"docs":{},"df":0,"&":{"docs":{},"df":0,"g":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/statistics probability/G-test - multinomial goodness-of-fit/":{"tf":1.0}},"df":1}}}}},"a":{"docs":{"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.0}},"df":2},"b":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.0}},"df":1}}}}}}},"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"c":{"docs":{},"df":0,"k":{"docs":{},"df":0,"&":{"docs":{},"df":0,"g":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/lang/lua/":{"tf":1.7320508075688772}},"df":1}}}}}}},"o":{"docs":{},"df":0,"d":{"docs":{},"df":0,"y":{"docs":{},"df":0,"&":{"docs":{},"df":0,"g":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/lang/lua/":{"tf":1.4142135623730951},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":2.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":2.0}},"df":3}}}}}},"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{},"df":0,"c":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,",":{"docs":{},"df":0,"m":{"docs":{},"df":0,"u":{"docs":{},"df":0,"l":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"&":{"docs":{},"df":0,"g":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.0}},"df":1}}},",":{"docs":{},"df":0,"u":{"docs":{},"df":0,"p":{"docs":{},"df":0,",":{"docs":{},"df":0,"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"w":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"_":{"docs":{},"df":0,"u":{"docs":{},"df":0,"p":{"docs":{},"df":0,"&":{"docs":{},"df":0,"g":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/networking/network interfaces/":{"tf":2.6457513110645907}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"c":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{},"df":0,"e":{"docs":{"https://phlip9.com/notes/lang/lua/":{"tf":1.7320508075688772}},"df":1}}},"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{},"df":0,"s":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1}}},"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"f":{"docs":{},"df":0,"1":{"docs":{},"df":0,"&":{"docs":{},"df":0,"g":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.4142135623730951}},"df":1}}}}}}}}},"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"p":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.0}},"df":1}}}}}},"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/lang/gdb ref/":{"tf":2.23606797749979},"https://phlip9.com/notes/lang/rust/rr with rust/":{"tf":1.0}},"df":2}}}},"d":{"docs":{},"df":0,"i":{"docs":{},"df":0,"v":{"docs":{},"df":0,"|":{"docs":{},"df":0,"e":{"docs":{},"df":0,"&":{"docs":{},"df":0,"g":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/lang/koka-lang/":{"tf":2.0}},"df":1}}}}}}},"n":{"docs":{"https://phlip9.com/notes/devops/azure CLI/":{"tf":1.0}},"df":1},"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"&":{"docs":{},"df":0,"g":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/crypto/acme protocol/":{"tf":2.0}},"df":1}}}}}}}}},"e":{"docs":{},"df":0,"x":{"docs":{},"df":0,"p":{"docs":{},"df":0,"r":{"docs":{},"df":0,"&":{"docs":{},"df":0,"g":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0}},"df":1}}}}}}},"f":{"docs":{},"df":0,"u":{"docs":{},"df":0,"n":{"docs":{},"df":0,"1":{"docs":{},"df":0,"&":{"docs":{},"df":0,"g":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0}},"df":1}}}},"c":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"&":{"docs":{},"df":0,"g":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":2.449489742783178}},"df":1}}}}}}}}}}},"h":{"docs":{},"df":0,"1":{"docs":{},"df":0,"&":{"docs":{},"df":0,"g":{"docs":{},"df":0,"t":{"docs":{},"df":0,";":{"docs":{},"df":0,"p":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.0}},"df":2}}}}}}}}},"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"q":{"docs":{},"df":0,"u":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.0}},"df":2}}}}}}},"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"o":{"docs":{"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.0}},"df":2}}}}}}}},"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{},"df":0,"&":{"docs":{},"df":0,"g":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":2.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":2.0}},"df":2}}}}}},"t":{"docs":{},"df":0,"m":{"docs":{},"df":0,"l":{"docs":{},"df":0,"&":{"docs":{},"df":0,"g":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":2.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":2.0}},"df":2}}}}},"t":{"docs":{},"df":0,"p":{"docs":{},"df":0,"s":{"docs":{},"df":0,":":{"docs":{},"df":0,"/":{"docs":{},"df":0,"/":{"docs":{},"df":0,"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"g":{"docs":{},"df":0,"s":{"docs":{},"df":0,".":{"docs":{},"df":0,"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{},"df":0,"/":{"docs":{},"df":0,"#":{"docs":{},"df":0,"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"x":{"docs":{},"df":0,"p":{"docs":{},"df":0,"o":{"docs":{},"df":0,"&":{"docs":{},"df":0,"g":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}},"x":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{},"df":0,"p":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,".":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"/":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"/":{"docs":{},"df":0,"d":{"docs":{},"df":0,"i":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"y":{"docs":{},"df":0,"&":{"docs":{},"df":0,"g":{"docs":{},"df":0,"t":{"docs":{},"df":0,";":{"docs":{},"df":0,";":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{},"df":0,"=":{"docs":{},"df":0,"\"":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"x":{"docs":{"https://phlip9.com/notes/crypto/acme protocol/":{"tf":1.4142135623730951}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"h":{"docs":{},"df":0,"w":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"l":{"docs":{},"df":0,"d":{"docs":{},"df":0,".":{"docs":{},"df":0,"w":{"docs":{},"df":0,"o":{"docs":{},"df":0,"l":{"docs":{},"df":0,"f":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{},"df":0,".":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"/":{"docs":{},"df":0,"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"c":{"docs":{},"df":0,"f":{"docs":{},"df":0,"u":{"docs":{},"df":0,"n":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,".":{"docs":{},"df":0,"h":{"docs":{},"df":0,"t":{"docs":{},"df":0,"m":{"docs":{},"df":0,"l":{"docs":{},"df":0,"&":{"docs":{},"df":0,"g":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"w":{"docs":{},"df":0,"w":{"docs":{},"df":0,"w":{"docs":{},"df":0,".":{"docs":{},"df":0,"g":{"docs":{},"df":0,"n":{"docs":{},"df":0,"u":{"docs":{},"df":0,".":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"g":{"docs":{},"df":0,"/":{"docs":{},"df":0,"s":{"docs":{},"df":0,"o":{"docs":{},"df":0,"f":{"docs":{},"df":0,"t":{"docs":{},"df":0,"w":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"/":{"docs":{},"df":0,"g":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"x":{"docs":{},"df":0,"t":{"docs":{},"df":0,"/":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"u":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"/":{"docs":{},"df":0,"h":{"docs":{},"df":0,"t":{"docs":{},"df":0,"m":{"docs":{},"df":0,"l":{"docs":{},"df":0,"_":{"docs":{},"df":0,"n":{"docs":{},"df":0,"o":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"/":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"v":{"docs":{},"df":0,"s":{"docs":{},"df":0,"u":{"docs":{},"df":0,"b":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/misc/envsubst/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"j":{"docs":{},"df":0,"w":{"docs":{},"df":0,"k":{"docs":{"https://phlip9.com/notes/crypto/acme protocol/":{"tf":1.0}},"df":1}}},"k":{"docs":{},"df":0,"e":{"docs":{},"df":0,"y":{"docs":{},"df":0,"p":{"docs":{},"df":0,"a":{"docs":{},"df":0,"i":{"docs":{},"df":0,"r":{"docs":{},"df":0,"&":{"docs":{},"df":0,"g":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/crypto/acme protocol/":{"tf":2.449489742783178}},"df":1}}}}}}}}}},"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"g":{"docs":{},"df":0,"&":{"docs":{},"df":0,"g":{"docs":{},"df":0,"t":{"docs":{},"df":0,";":{"docs":{},"df":0,"=":{"docs":{},"df":0,"/":{"docs":{},"df":0,"&":{"docs":{},"df":0,"l":{"docs":{},"df":0,"t":{"docs":{},"df":0,";":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/nvim/universal-ctags Notes/":{"tf":1.4142135623730951}},"df":1}}}}}}}}}}}}}}}},"d":{"docs":{},"df":0,"k":{"docs":{"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.0}},"df":1,"_":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"g":{"docs":{},"df":0,"e":{"docs":{},"df":0,"_":{"docs":{},"df":0,"d":{"docs":{},"df":0,"i":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"y":{"docs":{},"df":0,"_":{"docs":{},"df":0,"p":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"h":{"docs":{},"df":0,"&":{"docs":{},"df":0,"g":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}},"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"&":{"docs":{},"df":0,"g":{"docs":{},"df":0,"t":{"docs":{},"df":0,";":{"docs":{},"df":0,"f":{"docs":{"https://phlip9.com/notes/lang/flutter/flutter setup/":{"tf":1.0}},"df":1,"d":{"docs":{"https://phlip9.com/notes/lang/flutter/flutter setup/":{"tf":1.0}},"df":1},"l":{"docs":{"https://phlip9.com/notes/lang/flutter/flutter setup/":{"tf":1.0}},"df":1},"r":{"docs":{"https://phlip9.com/notes/lang/flutter/flutter setup/":{"tf":1.4142135623730951}},"df":1},"t":{"docs":{"https://phlip9.com/notes/lang/flutter/flutter setup/":{"tf":1.4142135623730951}},"df":1}}}}}}}}}}},"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,",":{"docs":{},"df":0,"p":{"docs":{},"df":0,"r":{"docs":{},"df":0,"f":{"docs":{},"df":0,"&":{"docs":{},"df":0,"g":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0}},"df":1}}}}}}}}},"o":{"docs":{},"df":0,"o":{"docs":{},"df":0,"p":{"docs":{},"df":0,"b":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"k":{"docs":{},"df":0,",":{"docs":{},"df":0,"u":{"docs":{},"df":0,"p":{"docs":{},"df":0,",":{"docs":{},"df":0,"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"w":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"_":{"docs":{},"df":0,"u":{"docs":{},"df":0,"p":{"docs":{},"df":0,"&":{"docs":{},"df":0,"g":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.4142135623730951}},"df":1}}}}}}}}}}}}}}}}}}}}}}},"m":{"docs":{},"df":0,"&":{"docs":{},"df":0,"g":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0}},"df":1}}},"e":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.0}},"df":2}}},"i":{"docs":{"https://phlip9.com/notes/fuzzing/fuzzcheck-rs/":{"tf":1.0}},"df":1},"o":{"docs":{},"df":0,"d":{"docs":{},"df":0,"u":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1}}}}},"n":{"docs":{},"df":0,"o":{"docs":{"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.7320508075688772}},"df":1,"n":{"docs":{},"df":0,"c":{"docs":{},"df":0,"e":{"docs":{},"df":0,"&":{"docs":{},"df":0,"g":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/crypto/acme protocol/":{"tf":2.0}},"df":1}}}}}},"r":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0}},"df":1}}}}}},"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"g":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":1.4142135623730951}},"df":1}}}}}},"p":{"docs":{},"df":0,"&":{"docs":{},"df":0,"g":{"docs":{},"df":0,"t":{"docs":{},"df":0,";":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.0}},"df":2},"t":{"docs":{},"df":0,"h":{"docs":{},"df":0,"e":{"docs":{"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.0}},"df":2},"i":{"docs":{"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.0}},"df":2}}},"y":{"docs":{},"df":0,"o":{"docs":{},"df":0,"u":{"docs":{"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.0}},"df":2}}}}}}},"k":{"docs":{},"df":0,"g":{"docs":{},"df":0,"&":{"docs":{},"df":0,"g":{"docs":{},"df":0,"t":{"docs":{},"df":0,";":{"docs":{},"df":0,".":{"docs":{},"df":0,"d":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0}},"df":1}}}}}}}}}},"u":{"docs":{},"df":0,"b":{"docs":{},"df":0,"k":{"docs":{},"df":0,"e":{"docs":{},"df":0,"y":{"docs":{},"df":0,"&":{"docs":{},"df":0,"g":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/crypto/acme protocol/":{"tf":1.4142135623730951}},"df":1}}}}}}},"r":{"docs":{},"df":0,"p":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/keyboards/moergo glove80/":{"tf":1.0}},"df":1}}}}},"q":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/misc/scanning QR codes on desktop/":{"tf":1.0}},"df":1}},"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"m":{"docs":{},"df":0,"o":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":1.7320508075688772}},"df":1}}}}},"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"&":{"docs":{},"df":0,"g":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/lang/flutter/flutter setup/":{"tf":2.23606797749979}},"df":1}}}}}}}},"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"g":{"docs":{},"df":0,"&":{"docs":{},"df":0,"g":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0}},"df":1}}}}}}}},"u":{"docs":{},"df":0,"b":{"docs":{},"df":0,"d":{"docs":{},"df":0,"i":{"docs":{},"df":0,"r":{"docs":{},"df":0,"&":{"docs":{},"df":0,"g":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":1.0}},"df":1}}}}}}}}},"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"&":{"docs":{},"df":0,"g":{"docs":{},"df":0,"t":{"docs":{},"df":0,";":{"docs":{},"df":0,"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{},"df":0,"w":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"k":{"docs":{"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.0}},"df":2}}}}}}},"p":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.0}},"df":2}}}}}}}}},"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"q":{"docs":{},"df":0,"u":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.0}},"df":2}}}}}}},"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"o":{"docs":{"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.0}},"df":2}}}}}}}}}}},"o":{"docs":{},"df":0,"k":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"&":{"docs":{},"df":0,"g":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/crypto/acme protocol/":{"tf":1.7320508075688772}},"df":1,";":{"docs":{},"df":0,".":{"docs":{},"df":0,"&":{"docs":{},"df":0,"l":{"docs":{},"df":0,"t":{"docs":{},"df":0,";":{"docs":{},"df":0,"j":{"docs":{},"df":0,"w":{"docs":{},"df":0,"k":{"docs":{"https://phlip9.com/notes/crypto/acme protocol/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}},"|":{"docs":{},"df":0,"&":{"docs":{},"df":0,"g":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/lang/operator fixity and precedence/":{"tf":1.0}},"df":1}}}}},"o":{"docs":{"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.0}},"df":1}},"u":{"docs":{},"df":0,"a":{"docs":{"https://phlip9.com/notes/lang/lua/":{"tf":2.6457513110645907}},"df":1,"_":{"docs":{},"df":0,"p":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"h":{"docs":{"https://phlip9.com/notes/lang/lua/":{"tf":1.0}},"df":1}}}}}},"c":{"docs":{},"df":0,"k":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/lang/rust/rr with rust/":{"tf":1.0}},"df":1}}}},"x":{"docs":{"https://phlip9.com/notes/postgres/snippets/":{"tf":2.449489742783178}},"df":1}},"m":{"docs":{"https://phlip9.com/notes/android/root phone with magisk/":{"tf":1.4142135623730951},"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/gramine/":{"tf":1.4142135623730951},"https://phlip9.com/notes/devops/algo wireguard VPN server/":{"tf":2.0},"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":2.449489742783178},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":4.358898943540674},"https://phlip9.com/notes/lang/rust/rr with rust/":{"tf":1.0},"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":1.4142135623730951},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0},"https://phlip9.com/notes/performance/bit hacks/":{"tf":5.196152422706632},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.7320508075688772},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":2.449489742783178}},"df":13,"*":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0}},"df":1}},"+":{"docs":{},"df":0,"1":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0}},"df":1},"n":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.4142135623730951}},"df":1}},"1":{"docs":{"https://phlip9.com/notes/lang/flutter/flutter setup/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.4142135623730951}},"df":2},"4":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.7320508075688772}},"df":1,"/":{"docs":{},"df":0,"o":{"docs":{},"df":0,"v":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"v":{"docs":{},"df":0,"i":{"docs":{},"df":0,"e":{"docs":{},"df":0,"w":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1}}}}}}}}}},"[":{"docs":{},"df":0,"s":{"docs":{},"df":0,"h":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":1.4142135623730951}},"df":1}}}}}},"a":{"docs":{},"df":0,"c":{"docs":{"https://phlip9.com/notes/android/android cli setup/":{"tf":1.0},"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.7320508075688772},"https://phlip9.com/notes/btc-ln/BOLT 8 - secure noise transport/":{"tf":1.7320508075688772},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":2.0},"https://phlip9.com/notes/confidential computing/intel TDX/":{"tf":1.0},"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":1.0},"https://phlip9.com/notes/ios/ios setup/":{"tf":1.0},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0},"https://phlip9.com/notes/networking/network interface card (NIC)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":3.1622776601683795},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.4142135623730951}},"df":14,"'":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/secure time/":{"tf":1.0}},"df":1}},"a":{"docs":{},"df":0,"d":{"docs":{},"df":0,"d":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"s":{"docs":{"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/gramine/":{"tf":1.0},"https://phlip9.com/notes/devops/azure CLI/":{"tf":1.0}},"df":3}}}}}}},"h":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.4142135623730951},"https://phlip9.com/notes/b l o c k c h a i n/fastpay/":{"tf":1.0},"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.7320508075688772},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/gramine/":{"tf":1.7320508075688772},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.7320508075688772},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":2.0},"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel SGX/secure time/":{"tf":2.0},"https://phlip9.com/notes/confidential computing/intel TDX/":{"tf":2.0},"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":1.4142135623730951},"https://phlip9.com/notes/devops/nomad/":{"tf":1.0},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/rust/rr with rust/":{"tf":1.0},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":2.23606797749979},"https://phlip9.com/notes/misc/setting up a headless raspbian boot image/":{"tf":1.0},"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.4142135623730951},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.4142135623730951},"https://phlip9.com/notes/reproducible builds/nix/links/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.0}},"df":22,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"/":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"u":{"docs":{},"df":0,"x":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0}},"df":1}}}}},"w":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{},"df":0,"o":{"docs":{},"df":0,"w":{"docs":{},"df":0,"s":{"docs":{},"df":0,"/":{"docs":{},"df":0,"p":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"f":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"m":{"docs":{"https://phlip9.com/notes/postgres/postgres performance tuning/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}},"o":{"docs":{"https://phlip9.com/notes/android/android cli setup/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0},"https://phlip9.com/notes/devops/algo wireguard VPN server/":{"tf":1.0},"https://phlip9.com/notes/devops/azure CLI/":{"tf":1.0},"https://phlip9.com/notes/ios/ios setup/":{"tf":1.7320508075688772},"https://phlip9.com/notes/lang/flutter/flutter setup/":{"tf":2.23606797749979},"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":1.4142135623730951},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.4142135623730951},"https://phlip9.com/notes/misc/setting up a headless raspbian boot image/":{"tf":1.0},"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.7320508075688772},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.0}},"df":11},"r":{"docs":{},"df":0,"o":{"docs":{"https://phlip9.com/notes/lang/rust/understanding sycamore reactivity/":{"tf":1.7320508075688772}},"df":1}}},"d":{"docs":{"https://phlip9.com/notes/statistics probability/MAD - median absolute deviation/":{"tf":2.23606797749979}},"df":1,"e":{"docs":{"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0},"https://phlip9.com/notes/b l o c k c h a i n/fastpay/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.0},"https://phlip9.com/notes/devops/secrets/ejson-kms (AWS)/":{"tf":1.0},"https://phlip9.com/notes/devops/secrets/sy - share secrets safely/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/reproducible-builds.org/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.4142135623730951}},"df":9}},"g":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{"https://phlip9.com/notes/devops/secrets/envkey/":{"tf":1.0},"https://phlip9.com/notes/keyboards/moergo glove80/":{"tf":2.449489742783178}},"df":2},"s":{"docs":{},"df":0,"k":{"docs":{"https://phlip9.com/notes/android/OTA updates for rooted android phone/":{"tf":3.1622776601683795},"https://phlip9.com/notes/android/root phone with magisk/":{"tf":3.3166247903554}},"df":2,"_":{"docs":{},"df":0,"p":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{"https://phlip9.com/notes/android/root phone with magisk/":{"tf":1.0}},"df":1}}}}}},"h":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/android/root phone with magisk/":{"tf":1.0}},"df":1}}}}}}},"i":{"docs":{},"df":0,"l":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,":":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{},"df":0,"m":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"@":{"docs":{},"df":0,"e":{"docs":{},"df":0,"x":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{},"df":0,"p":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,".":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"g":{"docs":{"https://phlip9.com/notes/crypto/acme protocol/":{"tf":1.4142135623730951}},"df":1}}}}}}}}}}}}}}}}},"c":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/crypto/acme protocol/":{"tf":1.4142135623730951}},"df":1}}}}}}}},"n":{"docs":{"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":2.23606797749979},"https://phlip9.com/notes/confidential computing/gramine/":{"tf":1.4142135623730951},"https://phlip9.com/notes/devops/azure CLI/":{"tf":1.0},"https://phlip9.com/notes/devops/secrets/ejson (Shopify)/":{"tf":1.0},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":2.23606797749979},"https://phlip9.com/notes/lang/gdb ref/":{"tf":1.4142135623730951},"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":1.4142135623730951},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.4142135623730951},"https://phlip9.com/notes/postgres/postgres performance tuning/":{"tf":1.4142135623730951},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.0}},"df":11,"(":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"&":{"docs":{},"df":0,"l":{"docs":{},"df":0,"t":{"docs":{},"df":0,";":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"g":{"docs":{},"df":0,"&":{"docs":{},"df":0,"g":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}},"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{"https://phlip9.com/notes/btc-ln/breez lightning service providers/":{"tf":1.0}},"df":1}}}}}},"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/foreign bank account report (FBAR)/":{"tf":1.7320508075688772},"https://phlip9.com/notes/btc-ln/breez lightning service providers/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":1.0},"https://phlip9.com/notes/devops/consul/":{"tf":1.7320508075688772},"https://phlip9.com/notes/fuzzing/fuzzcheck-rs/":{"tf":1.0},"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.0},"https://phlip9.com/notes/postgres/types of scans/":{"tf":1.0}},"df":8}}}}}},"j":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/fastpay/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":1.0},"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":1.0},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.4142135623730951}},"df":6}}},"k":{"docs":{},"df":0,"e":{"docs":{"https://phlip9.com/notes/AI ML/Expectimax Search/":{"tf":1.0},"https://phlip9.com/notes/WSL/WSL2 custom kernel/":{"tf":1.7320508075688772},"https://phlip9.com/notes/android/ADB over TCP inside WSL2/":{"tf":1.7320508075688772},"https://phlip9.com/notes/android/OTA updates for rooted android phone/":{"tf":1.7320508075688772},"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0},"https://phlip9.com/notes/android/linux ADB udev setup/":{"tf":1.0},"https://phlip9.com/notes/android/root phone with magisk/":{"tf":1.4142135623730951},"https://phlip9.com/notes/btc-ln/breez lightning service providers/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":2.0},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":2.0},"https://phlip9.com/notes/confidential computing/gramine/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/secure time/":{"tf":1.4142135623730951},"https://phlip9.com/notes/crypto/acme protocol/":{"tf":1.0},"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":1.4142135623730951},"https://phlip9.com/notes/design/form design/":{"tf":1.7320508075688772},"https://phlip9.com/notes/devops/algo wireguard VPN server/":{"tf":1.0},"https://phlip9.com/notes/devops/azure CLI/":{"tf":1.0},"https://phlip9.com/notes/devops/nomad/":{"tf":1.0},"https://phlip9.com/notes/fuzzing/fuzzing/":{"tf":1.0},"https://phlip9.com/notes/keyboards/moergo glove80/":{"tf":1.0},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0},"https://phlip9.com/notes/lang/ATS/Install ATS2/":{"tf":1.7320508075688772},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.7320508075688772},"https://phlip9.com/notes/lang/lua/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/rr with rust/":{"tf":1.0},"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":1.0},"https://phlip9.com/notes/misc/kintsugi/":{"tf":1.4142135623730951},"https://phlip9.com/notes/misc/prepping RPI for embedded dev/":{"tf":1.0},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":2.449489742783178},"https://phlip9.com/notes/misc/setting up a headless raspbian boot image/":{"tf":1.0},"https://phlip9.com/notes/networking/CIDR/":{"tf":1.0},"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.0},"https://phlip9.com/notes/postgres/types of scans/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/reproducible-builds.org/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/router/lightning router/captive portal/arubanetworks captive portal/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":2.6457513110645907},"https://phlip9.com/notes/router/lightning router/lightning router overview/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/multinomial distribution/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/testing whether a coin is fair/":{"tf":1.0}},"df":45,"_":{"docs":{},"df":0,"d":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"p":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"y":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1,"(":{"docs":{},"df":0,"b":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"_":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"p":{"docs":{},"df":0,"t":{"docs":{},"df":0,"h":{"docs":{},"df":0,"=":{"docs":{},"df":0,"6":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}},"a":{"docs":{},"df":0,"d":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"(":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0}},"df":1}}}}}}}}},"f":{"docs":{},"df":0,"i":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.0}},"df":1,"e":{"docs":{},"df":0,"+":{"docs":{},"df":0,"d":{"docs":{},"df":0,"o":{"docs":{},"df":0,"c":{"docs":{},"df":0,"k":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"f":{"docs":{},"df":0,"i":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.0}},"df":1}}}}}}}}}},"_":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"v":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/lang/ATS/Install ATS2/":{"tf":1.0}},"df":1}}}}}}}}}}},"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/reproducible-builds.org/":{"tf":1.0}},"df":3}}},"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"c":{"docs":{"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.4142135623730951}},"df":1}}},"w":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0}},"df":1}}}},"n":{"docs":{"https://phlip9.com/notes/WSL/WSL2 custom kernel/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.0}},"df":3,"a":{"docs":{},"df":0,"g":{"docs":{"https://phlip9.com/notes/android/ADB over TCP inside WSL2/":{"tf":1.0},"https://phlip9.com/notes/android/OTA updates for rooted android phone/":{"tf":1.7320508075688772},"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.4142135623730951},"https://phlip9.com/notes/android/root phone with magisk/":{"tf":2.449489742783178},"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.4142135623730951},"https://phlip9.com/notes/btc-ln/breez lightning service providers/":{"tf":1.4142135623730951},"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":2.0},"https://phlip9.com/notes/btc-ln/submarine swaps/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":2.23606797749979},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.7320508075688772},"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.7320508075688772},"https://phlip9.com/notes/confidential computing/intel SGX/secure time/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel TDX/":{"tf":1.0},"https://phlip9.com/notes/crypto/smallstep - private online CA & ACME server/":{"tf":1.0},"https://phlip9.com/notes/design/form design/":{"tf":1.4142135623730951},"https://phlip9.com/notes/devops/docker compose/":{"tf":1.0},"https://phlip9.com/notes/devops/nomad/":{"tf":1.4142135623730951},"https://phlip9.com/notes/devops/secrets/1password - secrets automation/":{"tf":1.0},"https://phlip9.com/notes/devops/secrets/ejson (Shopify)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/devops/secrets/ejson-kms (AWS)/":{"tf":1.0},"https://phlip9.com/notes/devops/secrets/fortanix DSM/":{"tf":1.0},"https://phlip9.com/notes/devops/secrets/mozilla SOPS/":{"tf":1.0},"https://phlip9.com/notes/devops/service mesh/":{"tf":1.0},"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":1.0},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0},"https://phlip9.com/notes/management/":{"tf":1.0},"https://phlip9.com/notes/management/relieve often - why generals were more successful in WWII/":{"tf":2.0},"https://phlip9.com/notes/reproducible builds/nix/links/":{"tf":1.0}},"df":31,"e":{"docs":{},"df":0,"d":{"docs":{},"df":0,"b":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/devops/azure CLI/":{"tf":1.0}},"df":1}}},"r":{"docs":{},"df":0,"/":{"docs":{},"df":0,"k":{"docs":{},"df":0,"e":{"docs":{},"df":0,"y":{"docs":{"https://phlip9.com/notes/devops/secrets/fortanix DSM/":{"tf":1.0}},"df":1}}}},"i":{"docs":{"https://phlip9.com/notes/management/relieve often - why generals were more successful in WWII/":{"tf":1.0}},"df":1},"’":{"docs":{"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.0}},"df":1}}}}},"d":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":1.0},"https://phlip9.com/notes/fuzzing/fuzzcheck-rs/":{"tf":1.0},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0},"https://phlip9.com/notes/networking/CIDR/":{"tf":1.0}},"df":4,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/devops/deployment strategies/":{"tf":1.0}},"df":1}}}}}},"g":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0},"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":1.0}},"df":2}},"i":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 4 - onion routing protocol/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/lightning libs/":{"tf":1.4142135623730951},"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.0},"https://phlip9.com/notes/combinatorics/k-combinations of a multiset/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.7320508075688772},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/marblerun/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":1.0},"https://phlip9.com/notes/crypto/(talk) authenticated data structures for stateless validation/":{"tf":1.0},"https://phlip9.com/notes/crypto/acme protocol/":{"tf":1.0},"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":2.23606797749979},"https://phlip9.com/notes/design/form design/":{"tf":1.4142135623730951},"https://phlip9.com/notes/devops/nomad/":{"tf":1.0},"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":1.0},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/lua/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/rr with rust/":{"tf":1.4142135623730951},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0},"https://phlip9.com/notes/networking/network interface card (NIC)/":{"tf":1.0},"https://phlip9.com/notes/performance/simdjson talk/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":3.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":4.242640687119285},"https://phlip9.com/notes/router/lightning router/lightning router overview/":{"tf":1.4142135623730951},"https://phlip9.com/notes/statistics probability/testing whether a coin is fair/":{"tf":2.0}},"df":26,"f":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":2.8284271247461903},"https://phlip9.com/notes/confidential computing/marblerun/":{"tf":1.4142135623730951},"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/rr with rust/":{"tf":1.0}},"df":4}}}},"p":{"docs":{},"df":0,"u":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0},"https://phlip9.com/notes/combinatorics/k-combinations of a multiset/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/sycamore x futures/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.0}},"df":6}}}},"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0}},"df":1}}},"u":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0},"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0},"https://phlip9.com/notes/crypto/acme protocol/":{"tf":1.0},"https://phlip9.com/notes/devops/secrets/mozilla SOPS/":{"tf":1.0},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/lua/":{"tf":1.0},"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":1.0},"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.0},"https://phlip9.com/notes/postgres/postgres performance tuning/":{"tf":1.0}},"df":9}}}},"p":{"docs":{"https://phlip9.com/notes/AI ML/Expectimax Search/":{"tf":1.0},"https://phlip9.com/notes/combinatorics/k-combinations of a multiset/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.7320508075688772},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0},"https://phlip9.com/notes/lang/lua/":{"tf":1.0},"https://phlip9.com/notes/networking/ipv6 address space/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/winsorize/":{"tf":1.0}},"df":7,"&":{"docs":{},"df":0,"l":{"docs":{},"df":0,"t":{"docs":{},"df":0,";":{"docs":{},"df":0,"k":{"docs":{"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0}},"df":1},"s":{"docs":{},"df":0,"y":{"docs":{},"df":0,"m":{"docs":{},"df":0,"b":{"docs":{},"df":0,"o":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0}},"df":1}}}}}}}}}},"(":{"docs":{},"df":0,"(":{"docs":{},"df":0,"n":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0}},"df":1}}}},"|":{"docs":{},"df":0,"(":{"docs":{},"df":0,"b":{"docs":{},"df":0,"x":{"docs":{"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.0}},"df":1}}},"i":{"docs":{},"df":0,"d":{"docs":{},"df":0,"x":{"docs":{"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.4142135623730951}},"df":1}}},"x":{"docs":{"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.0}},"df":1}}},"[":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"g":{"docs":{},"df":0,"]":{"docs":{},"df":0,"[":{"docs":{},"df":0,"]":{"docs":{},"df":0,"b":{"docs":{},"df":0,"y":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0}},"df":1}}}}},"h":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{},"df":0,"h":{"docs":{},"df":0,".":{"docs":{},"df":0,"h":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{},"df":0,"h":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0}},"df":1}}}}}}}}},"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"f":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}},"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{"https://phlip9.com/notes/AI ML/Expectimax Search/":{"tf":1.0},"https://phlip9.com/notes/AI ML/Markov Decision Process (MDP)/":{"tf":1.0}},"df":2}}}},"r":{"docs":{},"df":0,"b":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/confidential computing/marblerun/":{"tf":1.0}},"df":1,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"u":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/confidential computing/marblerun/":{"tf":2.6457513110645907}},"df":1}}}}}},"c":{"docs":{},"df":0,"h":{"docs":{"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":2.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":2.8284271247461903}},"df":2,"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.4142135623730951}},"df":2}}}}}},"g":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/statistics probability/testing whether a coin is fair/":{"tf":1.4142135623730951}},"df":1}}},"k":{"docs":{"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/foreign bank account report (FBAR)/":{"tf":2.0},"https://phlip9.com/notes/misc/kintsugi/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.4142135623730951},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.4142135623730951}},"df":5,"e":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.7320508075688772}},"df":3}},"o":{"docs":{},"df":0,"v":{"docs":{"https://phlip9.com/notes/AI ML/Markov Decision Process (MDP)/":{"tf":2.23606797749979},"https://phlip9.com/notes/statistics probability/standard error/":{"tf":1.0}},"df":2,"i":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/AI ML/Markov Decision Process (MDP)/":{"tf":1.0}},"df":1}}}}}},"s":{"docs":{},"df":0,"h":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/fuzzing/fuzzing/":{"tf":1.0},"https://phlip9.com/notes/management/relieve often - why generals were more successful in WWII/":{"tf":1.0}},"df":2}}}}},"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.4142135623730951}},"df":2}}},"k":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":2.0},"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.7320508075688772},"https://phlip9.com/notes/networking/CIDR/":{"tf":4.123105625617661},"https://phlip9.com/notes/networking/network interfaces/":{"tf":2.23606797749979},"https://phlip9.com/notes/performance/bit hacks/":{"tf":7.0},"https://phlip9.com/notes/performance/simdjson talk/":{"tf":3.7416573867739413}},"df":7,".":{"docs":{},"df":0,"w":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"p":{"docs":{},"df":0,"p":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"g":{"docs":{},"df":0,"_":{"docs":{},"df":0,"m":{"docs":{},"df":0,"u":{"docs":{},"df":0,"l":{"docs":{},"df":0,"(":{"docs":{},"df":0,"0":{"docs":{},"df":0,"x":{"docs":{},"df":0,"8":{"docs":{"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.4142135623730951}},"df":1}}}}}}}}}}}}}}}}},"1":{"docs":{},"df":0,"6":{"docs":{"https://phlip9.com/notes/performance/simdjson talk/":{"tf":1.0}},"df":1,".":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"_":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/performance/simdjson talk/":{"tf":1.0}},"df":1}}}}}}}}}}},"_":{"docs":{},"df":0,"0":{"docs":{},"df":0,"x":{"docs":{},"df":0,"8":{"docs":{},"df":0,"0":{"docs":{"https://phlip9.com/notes/performance/bit hacks/":{"tf":2.0}},"df":1}}}},"h":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/performance/bit hacks/":{"tf":2.0}},"df":1}},"i":{"docs":{},"df":0,"d":{"docs":{},"df":0,"x":{"docs":{"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.0}},"df":1}}},"w":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{},"df":0,"t":{"docs":{},"df":0,"h":{"docs":{"https://phlip9.com/notes/networking/CIDR/":{"tf":1.4142135623730951}},"df":1}}}}}},"e":{"docs":{},"df":0,"d":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"b":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0}},"df":1}}}}}}}}}}},"m":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"c":{"docs":{},"df":0,"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0}},"df":1}}}}}}}}}}}}}},"s":{"docs":{"https://phlip9.com/notes/statistics probability/testing whether a coin is fair/":{"tf":1.0}},"df":1,"a":{"docs":{},"df":0,"g":{"docs":{"https://phlip9.com/notes/performance/simdjson talk/":{"tf":1.0}},"df":1}}},"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/gramine/":{"tf":1.0},"https://phlip9.com/notes/crypto/tls exported keying material/":{"tf":1.0},"https://phlip9.com/notes/devops/AKS - azure kubernetes service/":{"tf":1.4142135623730951},"https://phlip9.com/notes/devops/secrets/ejson-kms (AWS)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":3.7416573867739413},"https://phlip9.com/notes/networking/network interfaces/":{"tf":2.449489742783178}},"df":7,"_":{"docs":{},"df":0,"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0}},"df":1}}}}}}}}}}},"t":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":2.449489742783178},"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/lightning libs/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.4142135623730951},"https://phlip9.com/notes/combinatorics/k-combinations of a multiset/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.7320508075688772},"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":2.0},"https://phlip9.com/notes/crypto/acme protocol/":{"tf":1.0},"https://phlip9.com/notes/devops/nomad/":{"tf":1.0},"https://phlip9.com/notes/keyboards/moergo glove80/":{"tf":1.0},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":3.0},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.4142135623730951},"https://phlip9.com/notes/nvim/universal-ctags Notes/":{"tf":1.0},"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.4142135623730951},"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.0},"https://phlip9.com/notes/postgres/types of scans/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/nix/nix debug spurrious rebuilds/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/reproducible-builds.org/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.0}},"df":19,"\"":{"docs":{},"df":0,".":{"docs":{},"df":0,"&":{"docs":{},"df":0,"l":{"docs":{},"df":0,"t":{"docs":{},"df":0,";":{"docs":{},"df":0,"/":{"docs":{},"df":0,"p":{"docs":{},"df":0,"&":{"docs":{},"df":0,"g":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.0}},"df":2}}}}}}}}}}}}},"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.7320508075688772},"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":2.0},"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":2.0},"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":2.23606797749979},"https://phlip9.com/notes/crypto/tls exported keying material/":{"tf":2.23606797749979},"https://phlip9.com/notes/fuzzing/fuzzing/":{"tf":1.4142135623730951},"https://phlip9.com/notes/postgres/types of scans/":{"tf":1.0}},"df":7}}},"h":{"docs":{"https://phlip9.com/notes/lang/lua/":{"tf":1.0},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.7320508075688772}},"df":2,".":{"docs":{},"df":0,"f":{"docs":{},"df":0,"a":{"docs":{},"df":0,"b":{"docs":{},"df":0,"s":{"docs":{},"df":0,"(":{"docs":{},"df":0,"2":{"docs":{},"df":0,".":{"docs":{},"df":0,"0":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1}}}}}}},"m":{"docs":{},"df":0,"o":{"docs":{},"df":0,"d":{"docs":{},"df":0,"(":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.4142135623730951}},"df":1}}}}}},"p":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1},"o":{"docs":{},"df":0,"w":{"docs":{},"df":0,"(":{"docs":{},"df":0,"2":{"docs":{},"df":0,".":{"docs":{},"df":0,"0":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.4142135623730951}},"df":1}}},"4":{"docs":{},"df":0,".":{"docs":{},"df":0,"0":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1}}},"l":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1}}}}},"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"(":{"docs":{},"df":0,"1":{"docs":{},"df":0,"0":{"docs":{"https://phlip9.com/notes/lang/lua/":{"tf":1.0}},"df":1}}}}}}}}},"s":{"docs":{},"df":0,"q":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{},"df":0,"(":{"docs":{},"df":0,"c":{"docs":{},"df":0,".":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/lang/lua/":{"tf":1.0}},"df":1}}}}}},"l":{"docs":{},"df":0,"_":{"docs":{},"df":0,"s":{"docs":{},"df":0,"q":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1}}}},"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{},"df":0,"f":{"docs":{},"df":0,".":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/lang/lua/":{"tf":1.0}},"df":1},"x":{"docs":{"https://phlip9.com/notes/lang/lua/":{"tf":1.0}},"df":1}}}}}}}}}}}},"e":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/statistics probability/multinomial distribution/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/standard error/":{"tf":1.0}},"df":2}}}},"i":{"docs":{},"df":0,"e":{"docs":{},"df":0,"u":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/fastpay/":{"tf":1.0}},"df":1}}}},"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0}},"df":1},"x":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":3.4641016151377544}},"df":1,".":{"docs":{},"df":0,"d":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"p":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"y":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1}}}}}}}},"b":{"docs":{},"df":0,"o":{"docs":{},"df":0,"o":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1}}}},"p":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":2.0}},"df":1,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"_":{"docs":{},"df":0,"m":{"docs":{},"df":0,"4":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.4142135623730951}},"df":1}}}}}}}},"t":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0}},"df":1}}},"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"f":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0}},"df":1}}}}}},"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/reproducible-builds.org/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.0}},"df":3}}},"u":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.0}},"df":1}}},"x":{"docs":{"https://phlip9.com/notes/AI ML/Expectimax Search/":{"tf":1.4142135623730951},"https://phlip9.com/notes/AI ML/Markov Decision Process (MDP)/":{"tf":1.7320508075688772},"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/foreign bank account report (FBAR)/":{"tf":1.0},"https://phlip9.com/notes/b l o c k c h a i n/aptos/":{"tf":1.0},"https://phlip9.com/notes/b l o c k c h a i n/btc utreexo - utxo accumulator/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.7320508075688772},"https://phlip9.com/notes/btc-ln/BOLT 8 - secure noise transport/":{"tf":1.4142135623730951},"https://phlip9.com/notes/combinatorics/k-combinations of a multiset/":{"tf":1.0},"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":1.0},"https://phlip9.com/notes/distributed systems/papers/(2021) Leaderless Consensus/":{"tf":1.4142135623730951},"https://phlip9.com/notes/fuzzing/fuzzcheck-rs/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/lua/":{"tf":1.0},"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":1.4142135623730951},"https://phlip9.com/notes/statistics probability/winsorize/":{"tf":2.6457513110645907}},"df":14,"(":{"docs":{},"df":0,"&":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{},"df":0,"p":{"docs":{},"df":0,";":{"docs":{},"df":0,"[":{"docs":{},"df":0,"u":{"docs":{},"df":0,"3":{"docs":{},"df":0,"2":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0}},"df":1}}}}}}}}},"0":{"docs":{},"df":0,".":{"docs":{},"df":0,"0":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.4142135623730951}},"df":1}}},"x":{"docs":{},"df":0,"_":{"docs":{},"df":0,"1":{"docs":{"https://phlip9.com/notes/distributed systems/papers/(2021) Leaderless Consensus/":{"tf":1.0}},"df":1},"i":{"docs":{"https://phlip9.com/notes/distributed systems/papers/(2021) Leaderless Consensus/":{"tf":1.0}},"df":1},"m":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1}}}}}},"_":{"docs":{},"df":0,"a":{"docs":{"https://phlip9.com/notes/AI ML/Markov Decision Process (MDP)/":{"tf":1.4142135623730951}},"df":1,"c":{"docs":{},"df":0,"c":{"docs":{},"df":0,"e":{"docs":{},"df":0,"p":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"d":{"docs":{},"df":0,"_":{"docs":{},"df":0,"h":{"docs":{},"df":0,"t":{"docs":{},"df":0,"l":{"docs":{},"df":0,"c":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.4142135623730951}},"df":1}}}}}}}}}}}}},"f":{"docs":{},"df":0,"e":{"docs":{},"df":0,"e":{"docs":{},"df":0,"_":{"docs":{},"df":0,"s":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"s":{"docs":{},"df":0,"h":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.0}},"df":1}}}}}}}}}}},"h":{"docs":{},"df":0,"t":{"docs":{},"df":0,"l":{"docs":{},"df":0,"c":{"docs":{},"df":0,"_":{"docs":{},"df":0,"v":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"u":{"docs":{},"df":0,"e":{"docs":{},"df":0,"_":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"_":{"docs":{},"df":0,"f":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"g":{"docs":{},"df":0,"h":{"docs":{},"df":0,"t":{"docs":{},"df":0,"_":{"docs":{},"df":0,"m":{"docs":{},"df":0,"s":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.4142135623730951}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}},"{":{"docs":{},"df":0,"a":{"docs":{"https://phlip9.com/notes/AI ML/Markov Decision Process (MDP)/":{"tf":1.7320508075688772}},"df":1}}},"i":{"docs":{},"df":0,"m":{"docs":{"https://phlip9.com/notes/AI ML/Markov Decision Process (MDP)/":{"tf":1.0}},"df":1,"i":{"docs":{},"df":0,"s":{"docs":{"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.0}},"df":1}},"u":{"docs":{},"df":0,"m":{"docs":{"https://phlip9.com/notes/AI ML/Markov Decision Process (MDP)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/foreign bank account report (FBAR)/":{"tf":1.7320508075688772},"https://phlip9.com/notes/btc-ln/BOLT 11 - invoices/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":2.6457513110645907},"https://phlip9.com/notes/crypto/acme protocol/":{"tf":1.0},"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":1.0},"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":1.0},"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/testing whether a coin is fair/":{"tf":2.23606797749979}},"df":9}}}}},"y":{"docs":{},"df":0,"b":{"docs":{"https://phlip9.com/notes/AI ML/Expectimax Search/":{"tf":1.0},"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0},"https://phlip9.com/notes/android/root phone with magisk/":{"tf":1.0},"https://phlip9.com/notes/b l o c k c h a i n/fastpay/":{"tf":1.0},"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":2.0},"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.0},"https://phlip9.com/notes/crypto/(talk) authenticated data structures for stateless validation/":{"tf":1.0},"https://phlip9.com/notes/devops/nomad/":{"tf":1.0},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0},"https://phlip9.com/notes/lang/flutter/flutter setup/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.7320508075688772},"https://phlip9.com/notes/management/relieve often - why generals were more successful in WWII/":{"tf":1.0},"https://phlip9.com/notes/misc/kintsugi/":{"tf":1.4142135623730951},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":16,"e":{"docs":{},"df":0,"_":{"docs":{},"df":0,"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"x":{"docs":{},"df":0,"t":{"docs":{},"df":0,"_":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{},"df":0,"x":{"docs":{"https://phlip9.com/notes/combinatorics/k-combinations of a multiset/":{"tf":1.4142135623730951}},"df":1}}}}}}}},"s":{"docs":{},"df":0,"u":{"docs":{},"df":0,"c":{"docs":{},"df":0,"c":{"docs":{},"df":0,"_":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{},"df":0,"x":{"docs":{"https://phlip9.com/notes/combinatorics/k-combinations of a multiset/":{"tf":1.4142135623730951}},"df":1}}}}}}}}}}}}},"b":{"docs":{},"df":0,"/":{"docs":{"https://phlip9.com/notes/performance/simdjson talk/":{"tf":1.4142135623730951}},"df":1},"e":{"docs":{},"df":0,"d":{"docs":{},"df":0,"t":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":1.0}},"df":1,"s":{"docs":{},"df":0,":":{"docs":{},"df":0,":":{"docs":{},"df":0,"s":{"docs":{},"df":0,"s":{"docs":{},"df":0,"l":{"docs":{},"df":0,":":{"docs":{},"df":0,":":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"f":{"docs":{},"df":0,"i":{"docs":{},"df":0,"g":{"docs":{},"df":0,":":{"docs":{},"df":0,":":{"docs":{},"df":0,"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{},"df":0,"_":{"docs":{},"df":0,"v":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"f":{"docs":{},"df":0,"y":{"docs":{},"df":0,"_":{"docs":{},"df":0,"c":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"l":{"docs":{},"df":0,"b":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"k":{"docs":{"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"p":{"docs":{"https://phlip9.com/notes/lang/flutter/flutter setup/":{"tf":1.0},"https://phlip9.com/notes/misc/prepping RPI for embedded dev/":{"tf":1.0},"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.4142135623730951},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.0}},"df":4}},"c":{"docs":{},"df":0,"d":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"d":{"docs":{},"df":0,"'":{"docs":{"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.0}},"df":1}}}}}}},"t":{"docs":{"https://phlip9.com/notes/AI ML/Markov Decision Process (MDP)/":{"tf":1.4142135623730951}},"df":1}},"d":{"docs":{"https://phlip9.com/notes/confidential computing/gramine/":{"tf":1.0},"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.0}},"df":2,"p":{"docs":{"https://phlip9.com/notes/AI ML/Markov Decision Process (MDP)/":{"tf":2.449489742783178}},"df":1,"(":{"docs":{},"df":0,"x":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":2.0}},"df":1}}},"w":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"k":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"_":{"docs":{},"df":0,"s":{"docs":{},"df":0,"h":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.0}},"df":1}}}}}}}}}}}},"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0}},"df":1},"n":{"docs":{"https://phlip9.com/notes/AI ML/Expectimax Search/":{"tf":2.23606797749979},"https://phlip9.com/notes/AI ML/Markov Decision Process (MDP)/":{"tf":1.7320508075688772},"https://phlip9.com/notes/android/ADB over TCP inside WSL2/":{"tf":1.0},"https://phlip9.com/notes/android/OTA updates for rooted android phone/":{"tf":1.0},"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0},"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/money services business (MSB)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/BOLT 8 - secure noise transport/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/lightning network notes/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":2.23606797749979},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":1.4142135623730951},"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":1.7320508075688772},"https://phlip9.com/notes/fuzzing/fuzzcheck-rs/":{"tf":1.0},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":2.449489742783178},"https://phlip9.com/notes/lang/koka-lang/":{"tf":1.0},"https://phlip9.com/notes/lang/lua/":{"tf":1.7320508075688772},"https://phlip9.com/notes/lang/operator fixity and precedence/":{"tf":1.7320508075688772},"https://phlip9.com/notes/lang/rust/rr with rust/":{"tf":1.7320508075688772},"https://phlip9.com/notes/misc/setting up a headless raspbian boot image/":{"tf":1.0},"https://phlip9.com/notes/misc/uptime to downtime conversion/":{"tf":1.0},"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.4142135623730951},"https://phlip9.com/notes/postgres/postgres performance tuning/":{"tf":1.4142135623730951},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.4142135623730951},"https://phlip9.com/notes/statistics probability/standard error/":{"tf":4.123105625617661},"https://phlip9.com/notes/statistics probability/testing whether a coin is fair/":{"tf":3.605551275463989}},"df":30,"$":{"docs":{},"df":0,"\\":{"docs":{},"df":0,"e":{"docs":{},"df":0,"[":{"docs":{},"df":0,"x":{"docs":{},"df":0,"_":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/statistics probability/multinomial distribution/":{"tf":1.0}},"df":1}}}}}}},"t":{"docs":{"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.0},"https://phlip9.com/notes/crypto/acme protocol/":{"tf":1.0}},"df":2},"w":{"docs":{},"df":0,"h":{"docs":{},"df":0,"i":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.4142135623730951}},"df":2}}}}},"s":{"docs":{},"df":0,"u":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":2.8284271247461903},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":4.58257569495584},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.7320508075688772},"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/secure time/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/MAD - median absolute deviation/":{"tf":1.0}},"df":9}}}},"c":{"docs":{},"df":0,"h":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0},"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.0}},"df":4}}}},"d":{"docs":{},"df":0,"i":{"docs":{},"df":0,"a":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.4142135623730951}},"df":3,"/":{"docs":{},"df":0,"p":{"docs":{},"df":0,"h":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"p":{"docs":{},"df":0,"9":{"docs":{},"df":0,"/":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"x":{"docs":{},"df":0,"b":{"docs":{},"df":0,"o":{"docs":{},"df":0,"o":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.4142135623730951}},"df":1}}}}}}}}}}}}}}}}}},"n":{"docs":{"https://phlip9.com/notes/statistics probability/CDF confidence bands - DKW inequality/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/MAD - median absolute deviation/":{"tf":1.4142135623730951}},"df":2,"(":{"docs":{},"df":0,"a":{"docs":{},"df":0,"b":{"docs":{},"df":0,"s":{"docs":{},"df":0,"(":{"docs":{},"df":0,"x":{"docs":{"https://phlip9.com/notes/statistics probability/MAD - median absolute deviation/":{"tf":1.0}},"df":1}}}}},"x":{"docs":{"https://phlip9.com/notes/statistics probability/MAD - median absolute deviation/":{"tf":1.0}},"df":1}}},"t":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0}},"df":1}}}},"e":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.7320508075688772}},"df":2}},"i":{"docs":{"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0}},"df":1,"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{},"df":0,"u":{"docs":{},"df":0,"p":{"docs":{},"df":0,".":{"docs":{},"df":0,"e":{"docs":{},"df":0,"x":{"docs":{"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0}},"df":1}}}}}}}}},"m":{"docs":{},"df":0,"[":{"docs":{},"df":0,"e":{"docs":{},"df":0,"x":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"n":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.4142135623730951}},"df":1}}}}}}}},"b":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/fastpay/":{"tf":2.23606797749979},"https://phlip9.com/notes/devops/secrets/sy - share secrets safely/":{"tf":1.0},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0}},"df":3}}},"c":{"docs":{},"df":0,"p":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/performance/simdjson talk/":{"tf":1.0}},"df":1},"y":{"docs":{},"df":0,"(":{"docs":{},"df":0,"&":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{},"df":0,"p":{"docs":{},"df":0,";":{"docs":{},"df":0,"(":{"docs":{},"df":0,"p":{"docs":{},"df":0,"_":{"docs":{},"df":0,"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"d":{"docs":{},"df":0,"_":{"docs":{},"df":0,"d":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.0}},"df":1}}}}}}}}}}}}},"t":{"docs":{},"df":0,"m":{"docs":{},"df":0,"p":{"docs":{},"df":0,"_":{"docs":{},"df":0,"k":{"docs":{},"df":0,"e":{"docs":{},"df":0,"y":{"docs":{},"df":0,"_":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"q":{"docs":{},"df":0,"u":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,".":{"docs":{},"df":0,"c":{"docs":{},"df":0,"p":{"docs":{},"df":0,"u":{"docs":{},"df":0,"_":{"docs":{},"df":0,"s":{"docs":{},"df":0,"v":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.0}},"df":1}}}}}}},"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"v":{"docs":{},"df":0,"_":{"docs":{},"df":0,"s":{"docs":{},"df":0,"v":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.0}},"df":1}}}}}}},"k":{"docs":{},"df":0,"e":{"docs":{},"df":0,"y":{"docs":{},"df":0,"_":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"n":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/networking/CIDR/":{"tf":1.0}},"df":1}}},"o":{"docs":{"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.4142135623730951}},"df":2,"r":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":2.8284271247461903},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":3.0},"https://phlip9.com/notes/confidential computing/intel SGX/secure time/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel TDX/":{"tf":2.23606797749979},"https://phlip9.com/notes/confidential computing/marblerun/":{"tf":1.0},"https://phlip9.com/notes/devops/consul/":{"tf":1.0},"https://phlip9.com/notes/lang/gdb ref/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/rust/sycamore x futures/":{"tf":1.0},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0},"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.4142135623730951},"https://phlip9.com/notes/performance/simdjson talk/":{"tf":1.4142135623730951}},"df":15},"y":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"s":{"docs":{"https://phlip9.com/notes/AI ML/Markov Decision Process (MDP)/":{"tf":1.4142135623730951}},"df":1}}}}}}},"p":{"docs":{},"df":0,"o":{"docs":{},"df":0,"o":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/btc-ln/zero-conf channels/":{"tf":1.0},"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":1.7320508075688772}},"df":2}}}},"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{},"df":0,"(":{"docs":{},"df":0,"&":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{},"df":0,"p":{"docs":{},"df":0,";":{"docs":{},"df":0,"k":{"docs":{},"df":0,"e":{"docs":{},"df":0,"y":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.0}},"df":1}}}}},"p":{"docs":{},"df":0,"a":{"docs":{},"df":0,"y":{"docs":{},"df":0,"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{},"df":0,"_":{"docs":{},"df":0,"i":{"docs":{},"df":0,"v":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.0}},"df":1}}}}}}}}}},"t":{"docs":{},"df":0,"m":{"docs":{},"df":0,"p":{"docs":{},"df":0,"_":{"docs":{},"df":0,"k":{"docs":{},"df":0,"e":{"docs":{},"df":0,"y":{"docs":{},"df":0,"_":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"q":{"docs":{},"df":0,"u":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}},"p":{"docs":{},"df":0,"_":{"docs":{},"df":0,"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"d":{"docs":{},"df":0,"_":{"docs":{},"df":0,"d":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.0}},"df":1}}}}}}}}}}}}}},"_":{"docs":{},"df":0,"s":{"docs":{},"df":0,"(":{"docs":{},"df":0,"&":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{},"df":0,"p":{"docs":{},"df":0,";":{"docs":{},"df":0,"k":{"docs":{},"df":0,"e":{"docs":{},"df":0,"y":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}},"n":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/misc/kintsugi/":{"tf":1.0}},"df":1},"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/networking/network interface card (NIC)/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.0}},"df":2}},"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/devops/nomad/":{"tf":1.0}},"df":1}}}},"u":{"docs":{"https://phlip9.com/notes/android/ADB over TCP inside WSL2/":{"tf":1.0},"https://phlip9.com/notes/misc/pop_OS! tweaks/":{"tf":1.0}},"df":2}},"r":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/financial instituion/":{"tf":1.0}},"df":1}}}}},"g":{"docs":{"https://phlip9.com/notes/btc-ln/breez lightning service providers/":{"tf":1.0},"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":4.123105625617661}},"df":2},"k":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/btc utreexo - utxo accumulator/":{"tf":2.0},"https://phlip9.com/notes/crypto/(talk) authenticated data structures for stateless validation/":{"tf":1.4142135623730951}},"df":2}}},"s":{"docs":{},"df":0,"h":{"docs":{"https://phlip9.com/notes/confidential computing/marblerun/":{"tf":2.0},"https://phlip9.com/notes/devops/consul/":{"tf":1.0},"https://phlip9.com/notes/devops/linkerd/":{"tf":1.0},"https://phlip9.com/notes/devops/service mesh/":{"tf":2.6457513110645907}},"df":4,"'":{"docs":{"https://phlip9.com/notes/devops/service mesh/":{"tf":1.0}},"df":1}},"o":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/confidential computing/gramine/":{"tf":1.0}},"df":1,"&":{"docs":{},"df":0,"g":{"docs":{},"df":0,"t":{"docs":{},"df":0,";":{"docs":{},"df":0,"=":{"docs":{},"df":0,"0":{"docs":{},"df":0,".":{"docs":{},"df":0,"5":{"docs":{},"df":0,"5":{"docs":{"https://phlip9.com/notes/confidential computing/gramine/":{"tf":1.0}},"df":1}}}}}}}}}}},"s":{"docs":{"https://phlip9.com/notes/misc/kintsugi/":{"tf":1.0}},"df":1,"a":{"docs":{},"df":0,"g":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/fastpay/":{"tf":1.4142135623730951},"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":2.23606797749979},"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":5.291502622129181},"https://phlip9.com/notes/btc-ln/BOLT 7 - p2p node and channel discovery/":{"tf":2.23606797749979},"https://phlip9.com/notes/btc-ln/BOLT 8 - secure noise transport/":{"tf":2.0},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":2.23606797749979},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0},"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":1.4142135623730951},"https://phlip9.com/notes/design/form design/":{"tf":1.0},"https://phlip9.com/notes/devops/secrets/ejson-kms (AWS)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/distributed systems/papers/(2020) Semi-Fast Byzantine-tolerant Shared Register without Reliable Broadcast/":{"tf":1.7320508075688772},"https://phlip9.com/notes/distributed systems/papers/(2021) Leaderless Consensus/":{"tf":1.0},"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":3.7416573867739413},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0},"https://phlip9.com/notes/lang/lua/":{"tf":1.7320508075688772},"https://phlip9.com/notes/lang/rust/rr with rust/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/rust verification tools/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/sycamore x futures/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/understanding sycamore reactivity/":{"tf":1.4142135623730951},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.7320508075688772}},"df":22,"e":{"docs":{},"df":0,"_":{"docs":{},"df":0,"f":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"g":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 7 - p2p node and channel discovery/":{"tf":1.0}},"df":1}}}}},"h":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.4142135623730951}},"df":1}}}}}}}},"i":{"docs":{"https://phlip9.com/notes/misc/kintsugi/":{"tf":1.0}},"df":1}}},"t":{"docs":{},"df":0,"a":{"docs":{"https://phlip9.com/notes/WSL/WSL2 custom kernel/":{"tf":1.0},"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.7320508075688772}},"df":4,"_":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{},"df":0,"k":{"docs":{"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.7320508075688772}},"df":1,".":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"_":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.0}},"df":1}}}}}}}}}}}}}},"d":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.4142135623730951},"https://phlip9.com/notes/btc-ln/BOLT 4 - onion routing protocol/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel TDX/":{"tf":1.0}},"df":4,".":{"docs":{},"df":0,"j":{"docs":{},"df":0,"s":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0}},"df":1}}}}}}}}},"l":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":2.23606797749979}},"df":1},"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{},"df":0,"h":{"docs":{},"df":0,"o":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/lang/lua/":{"tf":1.4142135623730951}},"df":1}}}}}},"t":{"docs":{"https://phlip9.com/notes/lang/lua/":{"tf":1.7320508075688772}},"df":1}},"h":{"docs":{},"df":0,"o":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/android/OTA updates for rooted android phone/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.7320508075688772},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":2.449489742783178},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.7320508075688772},"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":1.0},"https://phlip9.com/notes/devops/azure CLI/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":3.7416573867739413},"https://phlip9.com/notes/lang/lua/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/understanding sycamore reactivity/":{"tf":1.4142135623730951},"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":1.4142135623730951},"https://phlip9.com/notes/networking/CIDR/":{"tf":1.0},"https://phlip9.com/notes/postgres/snippets/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/reproducible-builds.org/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/arubanetworks captive portal/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/testing whether a coin is fair/":{"tf":1.7320508075688772}},"df":17,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"g":{"docs":{},"df":0,"s":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{},"df":0,"u":{"docs":{},"df":0,"r":{"docs":{},"df":0,"n":{"docs":{},"df":0,"s":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"c":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"p":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/lang/rust/understanding sycamore reactivity/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}},"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":1.0},"https://phlip9.com/notes/devops/AKS - azure kubernetes service/":{"tf":1.0},"https://phlip9.com/notes/devops/algo wireguard VPN server/":{"tf":1.0},"https://phlip9.com/notes/devops/consul/":{"tf":1.0},"https://phlip9.com/notes/devops/deployment strategies/":{"tf":1.0},"https://phlip9.com/notes/devops/linkerd/":{"tf":1.0},"https://phlip9.com/notes/devops/service mesh/":{"tf":1.7320508075688772},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":2.0},"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.0}},"df":9}}}}},"g":{"docs":{},"df":0,"m":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/devops/secrets/envkey/":{"tf":1.0}},"df":1}},"r":{"docs":{"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.7320508075688772}},"df":1,"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"p":{"docs":{},"df":0,"=":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/nvim/universal-ctags Notes/":{"tf":1.0}},"df":1}}}}}}},"i":{"docs":{},"df":0,"b":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/lightning router overview/":{"tf":1.4142135623730951}},"df":3,"/":{"docs":{"https://phlip9.com/notes/router/lightning router/lightning router overview/":{"tf":1.0}},"df":1}},"c":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{"https://phlip9.com/notes/confidential computing/mystikos/":{"tf":1.0},"https://phlip9.com/notes/devops/linkerd/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/lightning router overview/":{"tf":1.0}},"df":3,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.4142135623730951}},"df":1},"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.4142135623730951}},"df":1}}}}}}},"k":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.0}},"df":1}}}}}},"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"a":{"docs":{},"df":0,"g":{"docs":{"https://phlip9.com/notes/management/relieve often - why generals were more successful in WWII/":{"tf":1.0}},"df":1}}}}},"p":{"docs":{},"df":0,"y":{"docs":{},"df":0,"t":{"docs":{},"df":0,"h":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1}}}}}},"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"v":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{"https://phlip9.com/notes/confidential computing/marblerun/":{"tf":1.0},"https://phlip9.com/notes/devops/docker compose/":{"tf":1.0}},"df":2}}}}},"o":{"docs":{},"df":0,"f":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/WSL/WSL2 custom kernel/":{"tf":2.0},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0}},"df":3,".":{"docs":{},"df":0,"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{},"df":0,"w":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"k":{"docs":{},"df":0,"/":{"docs":{},"df":0,"p":{"docs":{},"df":0,"u":{"docs":{},"df":0,"b":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"i":{"docs":{},"df":0,"p":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{},"df":0,"d":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"s":{"docs":{"https://phlip9.com/notes/devops/azure CLI/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}},"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"r":{"docs":{},"df":0,"c":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"/":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"r":{"docs":{},"df":0,"c":{"docs":{},"df":0,"e":{"docs":{},"df":0,"g":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"p":{"docs":{"https://phlip9.com/notes/devops/azure CLI/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"d":{"docs":{"https://phlip9.com/notes/lang/rust/rust verification tools/":{"tf":1.0}},"df":1,"d":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":1.0},"https://phlip9.com/notes/misc/kintsugi/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.0}},"df":3,"e":{"docs":{},"df":0,"w":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":2.23606797749979}},"df":2}}}}}}},"g":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":3.3166247903554},"https://phlip9.com/notes/confidential computing/marblerun/":{"tf":1.4142135623730951},"https://phlip9.com/notes/devops/nomad/":{"tf":1.0},"https://phlip9.com/notes/devops/service mesh/":{"tf":1.0},"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":3.0},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.7320508075688772}},"df":6,"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"p":{"docs":{},"df":0,"h":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{"https://phlip9.com/notes/devops/azure CLI/":{"tf":1.0}},"df":1}}}}}}}}}}},"i":{"docs":{},"df":0,"f":{"docs":{},"df":0,"s":{"docs":{},"df":0,"z":{"docs":{},"df":0,"c":{"docs":{},"df":0,"c":{"docs":{},"df":0,"a":{"docs":{},"df":0,"7":{"docs":{},"df":0,"o":{"docs":{},"df":0,"g":{"docs":{},"df":0,"a":{"docs":{},"df":0,"w":{"docs":{},"df":0,"i":{"docs":{},"df":0,"b":{"docs":{},"df":0,"a":{"docs":{},"df":0,"g":{"docs":{},"df":0,"i":{"docs":{},"df":0,"j":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"h":{"docs":{},"df":0,"d":{"docs":{},"df":0,"l":{"docs":{},"df":0,"0":{"docs":{},"df":0,"y":{"docs":{},"df":0,"o":{"docs":{},"df":0,"7":{"docs":{},"df":0,"c":{"docs":{},"df":0,"u":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"0":{"docs":{},"df":0,"g":{"docs":{},"df":0,"c":{"docs":{},"df":0,"s":{"docs":{},"df":0,"q":{"docs":{},"df":0,"g":{"docs":{},"df":0,"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"b":{"docs":{},"df":0,"3":{"docs":{},"df":0,"d":{"docs":{},"df":0,"q":{"docs":{},"df":0,"e":{"docs":{},"df":0,"b":{"docs":{},"df":0,"c":{"docs":{},"df":0,"w":{"docs":{},"df":0,"u":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{},"df":0,"h":{"docs":{},"df":0,"4":{"docs":{},"df":0,"x":{"docs":{},"df":0,"c":{"docs":{},"df":0,"z":{"docs":{},"df":0,"a":{"docs":{},"df":0,"j":{"docs":{},"df":0,"b":{"docs":{},"df":0,"g":{"docs":{},"df":0,"n":{"docs":{},"df":0,"v":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"l":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":2.449489742783178}},"df":1}},"p":{"docs":{"https://phlip9.com/notes/misc/optimization solvers/":{"tf":1.0}},"df":1}},"n":{"docs":{"https://phlip9.com/notes/AI ML/Expectimax Search/":{"tf":1.4142135623730951},"https://phlip9.com/notes/b l o c k c h a i n/btc utreexo - utxo accumulator/":{"tf":1.0},"https://phlip9.com/notes/b l o c k c h a i n/fastpay/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.4142135623730951},"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":1.0},"https://phlip9.com/notes/misc/kintsugi/":{"tf":1.0},"https://phlip9.com/notes/misc/setting up a headless raspbian boot image/":{"tf":1.0},"https://phlip9.com/notes/misc/uptime to downtime conversion/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/winsorize/":{"tf":2.6457513110645907}},"df":9,"(":{"docs":{},"df":0,"x":{"docs":{},"df":0,"_":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"x":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1}}}}}},"_":{"docs":{},"df":0,"f":{"docs":{},"df":0,"e":{"docs":{},"df":0,"e":{"docs":{},"df":0,"_":{"docs":{},"df":0,"s":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"s":{"docs":{},"df":0,"h":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.0}},"df":1}}}}}}}}}}}},"a":{"docs":{},"df":0,"p":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"l":{"docs":{},"df":0,"/":{"docs":{},"df":0,"m":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"a":{"docs":{"https://phlip9.com/notes/reproducible builds/nix/links/":{"tf":1.0}},"df":1}}}}}}}}}}}}}},"d":{"docs":{"https://phlip9.com/notes/android/ADB over TCP inside WSL2/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0}},"df":2},"f":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"c":{"docs":{},"df":0,"l":{"docs":{},"df":0,"t":{"docs":{},"df":0,"v":{"docs":{},"df":0,"e":{"docs":{},"df":0,"x":{"docs":{},"df":0,"p":{"docs":{},"df":0,"i":{"docs":{},"df":0,"r":{"docs":{},"df":0,"y":{"docs":{},"df":0,"(":{"docs":{},"df":0,"m":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"f":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"c":{"docs":{},"df":0,"l":{"docs":{},"df":0,"t":{"docs":{},"df":0,"v":{"docs":{},"df":0,"e":{"docs":{},"df":0,"x":{"docs":{},"df":0,"p":{"docs":{},"df":0,"i":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 11 - invoices/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"w":{"docs":{"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.0}},"df":1}},"i":{"docs":{"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":1.4142135623730951}},"df":1,"f":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/fuzzing/fuzzcheck-rs/":{"tf":1.4142135623730951},"https://phlip9.com/notes/performance/simdjson talk/":{"tf":1.0}},"df":2}},"k":{"docs":{},"df":0,"u":{"docs":{},"df":0,"b":{"docs":{"https://phlip9.com/notes/devops/minikube/":{"tf":1.4142135623730951}},"df":1}}},"m":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 8 - secure noise transport/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/breez lightning service providers/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/lightning libs/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/submarine swaps/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":2.0},"https://phlip9.com/notes/confidential computing/intel SGX/secure time/":{"tf":1.0},"https://phlip9.com/notes/design/form design/":{"tf":1.0},"https://phlip9.com/notes/devops/k3s/":{"tf":1.0}},"df":8,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/devops/linkerd/":{"tf":1.0}},"df":1}}}},"x":{"docs":{"https://phlip9.com/notes/AI ML/Expectimax Search/":{"tf":1.4142135623730951}},"df":1}},"u":{"docs":{},"df":0,"m":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 11 - invoices/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":3.0},"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/lightning router overview/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/testing whether a coin is fair/":{"tf":1.0}},"df":6,"_":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"p":{"docs":{},"df":0,"t":{"docs":{},"df":0,"h":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.0}},"df":1}}}}}}}}},"z":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"c":{"docs":{"https://phlip9.com/notes/misc/optimization solvers/":{"tf":1.0}},"df":1}}}}},"o":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.0},"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.0}},"df":2}},"t":{"docs":{"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":1.0}},"df":1},"u":{"docs":{"https://phlip9.com/notes/devops/AKS - azure kubernetes service/":{"tf":1.0}},"df":1,"t":{"docs":{"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.7320508075688772},"https://phlip9.com/notes/devops/algo wireguard VPN server/":{"tf":1.0},"https://phlip9.com/notes/devops/nomad/":{"tf":1.0},"https://phlip9.com/notes/ios/ios setup/":{"tf":1.0},"https://phlip9.com/notes/misc/setting up a headless raspbian boot image/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/nix/links/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/lightning router overview/":{"tf":1.4142135623730951}},"df":7}}},"o":{"docs":{},"df":0,"p":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{"https://phlip9.com/notes/AI ML/Markov Decision Process (MDP)/":{"tf":1.0}},"df":1}}}},"r":{"docs":{"https://phlip9.com/notes/lang/rust/rust verification tools/":{"tf":1.0}},"df":1,"a":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/lang/rust/rust verification tools/":{"tf":1.4142135623730951}},"df":1}}},"s":{"docs":{},"df":0,"c":{"docs":{"https://phlip9.com/notes/btc-ln/submarine swaps/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/rr with rust/":{"tf":1.0},"https://phlip9.com/notes/misc/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.0}},"df":5,"_":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{},"df":0,"k":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.4142135623730951}},"df":1}}}}},"e":{"docs":{},"df":0,"l":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.0}},"df":1}}}}},"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{},"df":0,"k":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.4142135623730951}},"df":1}}}},"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":3.3166247903554},"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":2.0},"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.0}},"df":3,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{},"df":0,"k":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.7320508075688772}},"df":1}}}}}}}}}}},"d":{"docs":{},"df":0,"i":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/btc-ln/breez lightning service providers/":{"tf":1.0}},"df":1}}}}}},"s":{"docs":{"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0},"https://phlip9.com/notes/crypto/(talk) authenticated data structures for stateless validation/":{"tf":1.0},"https://phlip9.com/notes/performance/simdjson talk/":{"tf":1.0},"https://phlip9.com/notes/postgres/postgres performance tuning/":{"tf":1.0}},"df":5},"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"k":{"docs":{"https://phlip9.com/notes/design/form design/":{"tf":1.0}},"df":1}}}},"t":{"docs":{"https://phlip9.com/notes/distributed systems/papers/(2020) Semi-Fast Byzantine-tolerant Shared Register without Reliable Broadcast/":{"tf":1.0}},"df":1,"i":{"docs":{},"df":0,"g":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 8 - secure noise transport/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/lightning rod/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":2.0}},"df":5}},"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/misc/optimization solvers/":{"tf":1.0}},"df":1}}}}}}}},"x":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 4 - onion routing protocol/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/lightning libs/":{"tf":1.0},"https://phlip9.com/notes/misc/kintsugi/":{"tf":3.1622776601683795},"https://phlip9.com/notes/misc/optimization solvers/":{"tf":1.0}},"df":4,"i":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":2.449489742783178}},"df":1}}}},"k":{"docs":{},"df":0,"1":{"docs":{},"df":0,".":{"docs":{},"df":0,"u":{"docs":{},"df":0,"f":{"docs":{},"df":0,"2":{"docs":{"https://phlip9.com/notes/keyboards/moergo glove80/":{"tf":1.0}},"df":1}}}}},"d":{"docs":{},"df":0,"i":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/android/android cli setup/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/gramine/":{"tf":1.7320508075688772},"https://phlip9.com/notes/lang/ATS/Install ATS2/":{"tf":1.0},"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.0}},"df":5}}},"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"m":{"docs":{},"df":0,"p":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0}},"df":1}}},"i":{"docs":{},"df":0,"m":{"docs":{},"df":0,"e":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1}}},"m":{"docs":{},"df":0,"e":{"docs":{"https://phlip9.com/notes/confidential computing/intel TDX/":{"tf":1.0}},"df":1}}},"v":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"v":{"docs":{"https://phlip9.com/notes/confidential computing/gramine/":{"tf":1.0}},"df":1}}}}},"l":{"docs":{"https://phlip9.com/notes/AI ML/":{"tf":1.0}},"df":1,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"0":{"docs":{"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.0}},"df":1}}},"e":{"docs":{"https://phlip9.com/notes/statistics probability/testing whether a coin is fair/":{"tf":1.0}},"df":1},"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"e":{"docs":{"https://phlip9.com/notes/nvim/universal-ctags Notes/":{"tf":1.4142135623730951}},"df":1}}}},"m":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/btc utreexo - utxo accumulator/":{"tf":1.0}},"df":1},"u":{"docs":{},"df":0,"u":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/confidential computing/intel TDX/":{"tf":1.0}},"df":1}}}}}}},"n":{"docs":{},"df":0,"o":{"docs":{},"df":0,"t":{"docs":{},"df":0,"@":{"docs":{},"df":0,"m":{"docs":{},"df":0,"n":{"docs":{},"df":0,"o":{"docs":{},"df":0,"t":{"docs":{},"df":0,".":{"docs":{},"df":0,"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.4142135623730951}},"df":2}}}}}}}}}}},"t":{"docs":{},"df":0,"/":{"docs":{},"df":0,"c":{"docs":{},"df":0,"/":{"docs":{},"df":0,"u":{"docs":{},"df":0,"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"s":{"docs":{},"df":0,"/":{"docs":{},"df":0,"p":{"docs":{},"df":0,"h":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"p":{"docs":{},"df":0,"9":{"docs":{},"df":0,"/":{"docs":{},"df":0,".":{"docs":{},"df":0,"w":{"docs":{},"df":0,"s":{"docs":{},"df":0,"l":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"f":{"docs":{},"df":0,"i":{"docs":{},"df":0,"g":{"docs":{"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0}},"df":1}}}}}}}}}},"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"u":{"docs":{},"df":0,"x":{"docs":{"https://phlip9.com/notes/WSL/WSL2 custom kernel/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}},"w":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{},"df":0,"o":{"docs":{},"df":0,"w":{"docs":{},"df":0,"s":{"docs":{},"df":0,"/":{"docs":{},"df":0,"s":{"docs":{},"df":0,"y":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"m":{"docs":{},"df":0,"3":{"docs":{},"df":0,"2":{"docs":{"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}},"o":{"docs":{"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0}},"df":1,"b":{"docs":{},"df":0,"i":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/btc-ln/lightning libs/":{"tf":1.4142135623730951},"https://phlip9.com/notes/btc-ln/lightning rod/":{"tf":1.0},"https://phlip9.com/notes/ios/ios setup/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/flutter/flutter setup/":{"tf":2.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.0}},"df":5,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0}},"df":1}}}}}}}},"c":{"docs":{},"df":0,"k":{"docs":{"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.7320508075688772}},"df":1}},"d":{"docs":{"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":1.7320508075688772},"https://phlip9.com/notes/lang/koka-lang/":{"tf":1.0},"https://phlip9.com/notes/lang/operator fixity and precedence/":{"tf":1.0},"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.7320508075688772},"https://phlip9.com/notes/performance/simdjson talk/":{"tf":1.0}},"df":5,"a":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/android/android cli setup/":{"tf":1.0}},"df":1}},"e":{"docs":{"https://phlip9.com/notes/android/ADB over TCP inside WSL2/":{"tf":1.0},"https://phlip9.com/notes/android/root phone with magisk/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":3.605551275463989},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel TDX/":{"tf":1.4142135623730951},"https://phlip9.com/notes/fuzzing/fuzzcheck-rs/":{"tf":1.0},"https://phlip9.com/notes/keyboards/moergo glove80/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/gdb ref/":{"tf":3.1622776601683795},"https://phlip9.com/notes/lang/rust/rr with rust/":{"tf":1.0},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.4142135623730951},"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.4142135623730951},"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.4142135623730951}},"df":13,"6":{"docs":{},"df":0,"4":{"docs":{},"df":0,"b":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.4142135623730951}},"df":1}}}}},"l":{"docs":{"https://phlip9.com/notes/AI ML/Markov Decision Process (MDP)/":{"tf":2.449489742783178},"https://phlip9.com/notes/WSL/WSL2 custom kernel/":{"tf":1.0},"https://phlip9.com/notes/b l o c k c h a i n/fastpay/":{"tf":1.0},"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0},"https://phlip9.com/notes/combinatorics/k-combinations of a multiset/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":2.23606797749979},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/secure time/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/marblerun/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":1.0},"https://phlip9.com/notes/devops/nomad/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/rr with rust/":{"tf":1.0},"https://phlip9.com/notes/misc/optimization solvers/":{"tf":1.0},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0},"https://phlip9.com/notes/networking/network interface card (NIC)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.4142135623730951}},"df":18},"m":{"docs":{"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.0}},"df":1},"r":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":1.0},"https://phlip9.com/notes/fuzzing/fuzzing/":{"tf":1.0},"https://phlip9.com/notes/performance/simdjson talk/":{"tf":1.7320508075688772},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.0}},"df":6}}},"i":{"docs":{},"df":0,"f":{"docs":{"https://phlip9.com/notes/confidential computing/mystikos/":{"tf":1.0}},"df":1,"i":{"docs":{"https://phlip9.com/notes/combinatorics/k-combinations of a multiset/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/secure time/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":1.7320508075688772},"https://phlip9.com/notes/fuzzing/fuzzing/":{"tf":1.0},"https://phlip9.com/notes/keyboards/moergo glove80/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":2.449489742783178},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0},"https://phlip9.com/notes/lang/lua/":{"tf":1.4142135623730951},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0},"https://phlip9.com/notes/misc/setting up a headless raspbian boot image/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/reproducible-builds.org/":{"tf":1.4142135623730951},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":2.0}},"df":14}}},"u":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.7320508075688772},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.7320508075688772},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel TDX/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":2.0},"https://phlip9.com/notes/lang/lua/":{"tf":3.0},"https://phlip9.com/notes/lang/operator fixity and precedence/":{"tf":1.0},"https://phlip9.com/notes/misc/pop_OS! tweaks/":{"tf":1.0},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":3.0},"https://phlip9.com/notes/misc/setting up a headless raspbian boot image/":{"tf":1.0}},"df":11,"a":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/btc-ln/lightning libs/":{"tf":1.4142135623730951}},"df":1}},"o":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0}},"df":1},"u":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":2.0}},"df":1,"s":{"docs":{},"df":0,".":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"v":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"s":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0}},"df":1}}}}}}},"_":{"docs":{},"df":0,"b":{"docs":{},"df":0,"u":{"docs":{},"df":0,"f":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0}},"df":1,"[":{"docs":{},"df":0,".":{"docs":{},"df":0,".":{"docs":{},"df":0,"m":{"docs":{},"df":0,"o":{"docs":{},"df":0,"d":{"docs":{},"df":0,"u":{"docs":{},"df":0,"l":{"docs":{},"df":0,"u":{"docs":{},"df":0,"s":{"docs":{},"df":0,".":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"(":{"docs":{},"df":0,")":{"docs":{},"df":0,"]":{"docs":{},"df":0,".":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"p":{"docs":{},"df":0,"y":{"docs":{},"df":0,"_":{"docs":{},"df":0,"f":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"_":{"docs":{},"df":0,"s":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"e":{"docs":{},"df":0,"(":{"docs":{},"df":0,"&":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{},"df":0,"p":{"docs":{},"df":0,";":{"docs":{},"df":0,"m":{"docs":{},"df":0,"o":{"docs":{},"df":0,"d":{"docs":{},"df":0,"u":{"docs":{},"df":0,"l":{"docs":{},"df":0,"u":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"g":{"docs":{},"df":0,"o":{"docs":{"https://phlip9.com/notes/keyboards/moergo glove80/":{"tf":1.4142135623730951}},"df":1}}}},"g":{"docs":{},"df":0,"u":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.4142135623730951}},"df":2}}},"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/combinatorics/k-combinations of a multiset/":{"tf":1.0},"https://phlip9.com/notes/networking/CIDR/":{"tf":1.4142135623730951},"https://phlip9.com/notes/router/lightning router/captive portal/arubanetworks captive portal/":{"tf":1.0}},"df":3,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/keyboards/moergo glove80/":{"tf":1.0}},"df":1}}}}}}},"n":{"docs":{"https://phlip9.com/notes/WSL/WSL2 custom kernel/":{"tf":1.0},"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.7320508075688772}},"df":3,"e":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/monetary instruments/":{"tf":1.4142135623730951},"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/money services business (MSB)/":{"tf":3.0}},"df":2}}}},"y":{"docs":{"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/financial instituion/":{"tf":1.0},"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/foreign bank account report (FBAR)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/monetary instruments/":{"tf":1.4142135623730951},"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/money services business (MSB)/":{"tf":4.123105625617661},"https://phlip9.com/notes/b l o c k c h a i n/fastpay/":{"tf":1.4142135623730951},"https://phlip9.com/notes/btc-ln/atomic multipath payments (AMP)/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/breez lightning service providers/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/hosted channels/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.0}},"df":9}},"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":2.23606797749979},"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.4142135623730951},"https://phlip9.com/notes/crypto/(talk) authenticated data structures for stateless validation/":{"tf":1.0},"https://phlip9.com/notes/devops/service mesh/":{"tf":1.0},"https://phlip9.com/notes/misc/setting up a headless raspbian boot image/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/rebuilderd/":{"tf":1.0}},"df":6}}}},"o":{"docs":{"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":7.0}},"df":1,"+":{"docs":{},"df":0,"p":{"docs":{},"df":0,"u":{"docs":{},"df":0,"b":{"docs":{"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":1.7320508075688772}},"df":1}}}},"/":{"docs":{},"df":0,"p":{"docs":{},"df":0,"u":{"docs":{},"df":0,"b":{"docs":{"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":1.4142135623730951}},"df":1}}}},"m":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"p":{"docs":{},"df":0,"h":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.4142135623730951}},"df":1}}}}},"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"p":{"docs":{},"df":0,"o":{"docs":{"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.0},"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":3.605551275463989}},"df":2}}}},"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.7320508075688772},"https://phlip9.com/notes/confidential computing/intel SGX/secure time/":{"tf":1.0},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":3,"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"_":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1}}}}}}}},"t":{"docs":{"https://phlip9.com/notes/AI ML/Markov Decision Process (MDP)/":{"tf":1.0}},"df":1,"h":{"docs":{"https://phlip9.com/notes/crypto/acme protocol/":{"tf":1.0},"https://phlip9.com/notes/devops/secrets/1password - secrets automation/":{"tf":1.0}},"df":2,"l":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/devops/secrets/1password - secrets automation/":{"tf":1.0}},"df":1}}}}},"r":{"docs":{},"df":0,"e":{"docs":{"https://phlip9.com/notes/AI ML/Expectimax Search/":{"tf":2.0},"https://phlip9.com/notes/AI ML/Markov Decision Process (MDP)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/WSL/WSL2 custom kernel/":{"tf":1.0},"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.4142135623730951},"https://phlip9.com/notes/android/root phone with magisk/":{"tf":1.4142135623730951},"https://phlip9.com/notes/b l o c k c h a i n/bip158 - compact block filters/":{"tf":1.0},"https://phlip9.com/notes/b l o c k c h a i n/btc utreexo - utxo accumulator/":{"tf":1.0},"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/BOLT 8 - secure noise transport/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/breez lightning service providers/":{"tf":1.4142135623730951},"https://phlip9.com/notes/btc-ln/hosted channels/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/lightning rod/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.7320508075688772},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":2.449489742783178},"https://phlip9.com/notes/confidential computing/gramine/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":2.449489742783178},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.7320508075688772},"https://phlip9.com/notes/confidential computing/intel SGX/secure time/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":1.0},"https://phlip9.com/notes/crypto/(talk) authenticated data structures for stateless validation/":{"tf":1.0},"https://phlip9.com/notes/crypto/acme protocol/":{"tf":1.0},"https://phlip9.com/notes/design/form design/":{"tf":1.0},"https://phlip9.com/notes/devops/AKS - azure kubernetes service/":{"tf":1.0},"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":2.0},"https://phlip9.com/notes/fuzzing/fuzzing/":{"tf":1.7320508075688772},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.7320508075688772},"https://phlip9.com/notes/lang/lua/":{"tf":1.0},"https://phlip9.com/notes/lang/operator fixity and precedence/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/rr with rust/":{"tf":1.4142135623730951},"https://phlip9.com/notes/management/relieve often - why generals were more successful in WWII/":{"tf":1.7320508075688772},"https://phlip9.com/notes/misc/envsubst/":{"tf":1.0},"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":1.4142135623730951},"https://phlip9.com/notes/misc/kintsugi/":{"tf":3.0},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":2.0},"https://phlip9.com/notes/misc/setting up a headless raspbian boot image/":{"tf":1.0},"https://phlip9.com/notes/networking/CIDR/":{"tf":1.4142135623730951},"https://phlip9.com/notes/networking/network interface card (NIC)/":{"tf":1.0},"https://phlip9.com/notes/networking/network interfaces/":{"tf":2.0},"https://phlip9.com/notes/postgres/postgres performance tuning/":{"tf":1.4142135623730951},"https://phlip9.com/notes/postgres/snippets/":{"tf":1.0},"https://phlip9.com/notes/postgres/types of scans/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.7320508075688772},"https://phlip9.com/notes/reproducible builds/rebuilderd/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/reproducible-builds.org/":{"tf":1.4142135623730951},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.7320508075688772},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":2.449489742783178},"https://phlip9.com/notes/statistics probability/CDF confidence bands - DKW inequality/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/MAD - median absolute deviation/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/herbie - float error fixer/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/multinomial distribution/":{"tf":1.4142135623730951},"https://phlip9.com/notes/statistics probability/p-value/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/standard error/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/testing whether a coin is fair/":{"tf":2.0}},"df":54},"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"z":{"docs":{"https://phlip9.com/notes/confidential computing/marblerun/":{"tf":1.0}},"df":1}}}},"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/btc-ln/lightning libs/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/marblerun/":{"tf":1.0},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.4142135623730951},"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":1.0},"https://phlip9.com/notes/misc/kintsugi/":{"tf":1.0},"https://phlip9.com/notes/networking/CIDR/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.0}},"df":9}}}},"t":{"docs":{},"df":0,"h":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"b":{"docs":{},"df":0,"o":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.0},"https://phlip9.com/notes/networking/network interface card (NIC)/":{"tf":1.0}},"df":3}}}}}}}},"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1,"]":{"docs":{},"df":0,"(":{"docs":{},"df":0,"h":{"docs":{},"df":0,"t":{"docs":{},"df":0,"t":{"docs":{},"df":0,"p":{"docs":{},"df":0,"s":{"docs":{},"df":0,":":{"docs":{},"df":0,"/":{"docs":{},"df":0,"/":{"docs":{},"df":0,"w":{"docs":{},"df":0,"w":{"docs":{},"df":0,"w":{"docs":{},"df":0,".":{"docs":{},"df":0,"w":{"docs":{},"df":0,"i":{"docs":{},"df":0,"k":{"docs":{},"df":0,"i":{"docs":{},"df":0,"w":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{},"df":0,".":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"/":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"/":{"docs":{},"df":0,"f":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"_":{"docs":{},"df":0,"b":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"w":{"docs":{},"df":0,"n":{"docs":{},"df":0,"i":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"_":{"docs":{},"df":0,"m":{"docs":{},"df":0,"o":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"v":{"docs":{"https://phlip9.com/notes/reproducible builds/reproducible-builds.org/":{"tf":1.0}},"df":1}}},"u":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":2.8284271247461903},"https://phlip9.com/notes/keyboards/moergo glove80/":{"tf":1.4142135623730951},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.7320508075688772},"https://phlip9.com/notes/misc/setting up a headless raspbian boot image/":{"tf":1.7320508075688772},"https://phlip9.com/notes/misc/water distillation setup/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.0}},"df":6,"a":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/btc utreexo - utxo accumulator/":{"tf":1.0}},"df":1}}}}}},"v":{"docs":{},"df":0,"e":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/sui/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/BOLT 8 - secure noise transport/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/submarine swaps/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":1.0},"https://phlip9.com/notes/design/form design/":{"tf":1.7320508075688772},"https://phlip9.com/notes/devops/service mesh/":{"tf":1.0},"https://phlip9.com/notes/keyboards/moergo glove80/":{"tf":1.4142135623730951},"https://phlip9.com/notes/management/relieve often - why generals were more successful in WWII/":{"tf":1.4142135623730951},"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":2.6457513110645907},"https://phlip9.com/notes/postgres/postgres performance tuning/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/arubanetworks captive portal/":{"tf":1.4142135623730951}},"df":14,"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/management/relieve often - why generals were more successful in WWII/":{"tf":1.0}},"df":1}}}}}},"z":{"docs":{},"df":0,"i":{"docs":{},"df":0,"l":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{"https://phlip9.com/notes/devops/secrets/ejson (Shopify)/":{"tf":1.0},"https://phlip9.com/notes/devops/secrets/ejson-kms (AWS)/":{"tf":1.0},"https://phlip9.com/notes/devops/secrets/mozilla SOPS/":{"tf":1.4142135623730951},"https://phlip9.com/notes/devops/secrets/sops-nix/":{"tf":1.0},"https://phlip9.com/notes/devops/secrets/sy - share secrets safely/":{"tf":1.0}},"df":5}}}}}},"p":{"docs":{},"df":0,"p":{"docs":{"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.4142135623730951}},"df":1},"s":{"docs":{},"df":0,"c":{"docs":{"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":1.0}},"df":1,":":{"docs":{},"df":0,":":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"e":{"docs":{},"df":0,"i":{"docs":{},"df":0,"v":{"docs":{"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":1.0}},"df":1}}}}}},"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":1.0}},"df":1}}}}}}}}}},"x":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0}},"df":1}},"q":{"docs":{"https://phlip9.com/notes/networking/network interfaces/":{"tf":2.0}},"df":1},"r":{"docs":{},"df":0,"_":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"c":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"v":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0}},"df":1}}}}}},"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"g":{"docs":{},"df":0,"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0}},"df":1}}}}}}},"a":{"docs":{},"df":0,"e":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0}},"df":1}},"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"c":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"v":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":2.6457513110645907},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":3.605551275463989},"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":1.0}},"df":5,"e":{"docs":{},"df":0,"/":{"docs":{},"df":0,"m":{"docs":{},"df":0,"r":{"docs":{},"df":0,"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"g":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0}},"df":1}}}}}}},"|":{"docs":{},"df":0,"m":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"c":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"v":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}},"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"g":{"docs":{},"df":0,"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":2.449489742783178},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":2.8284271247461903},"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":2.23606797749979},"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":1.0}},"df":5,"|":{"docs":{},"df":0,"m":{"docs":{},"df":0,"r":{"docs":{},"df":0,"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"g":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0}},"df":1}}}}}}}}}}}}}},"s":{"docs":{"https://phlip9.com/notes/keyboards/moergo glove80/":{"tf":1.0},"https://phlip9.com/notes/postgres/types of scans/":{"tf":1.4142135623730951}},"df":2,"a":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 11 - invoices/":{"tf":1.4142135623730951},"https://phlip9.com/notes/btc-ln/BOLT 4 - onion routing protocol/":{"tf":1.0}},"df":2}},"b":{"docs":{"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/financial instituion/":{"tf":1.0},"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/money services business (MSB)/":{"tf":3.4641016151377544},"https://phlip9.com/notes/networking/CIDR/":{"tf":1.0},"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.7320508075688772}},"df":4},"e":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/combinatorics/k-combinations of a multiset/":{"tf":2.6457513110645907}},"df":1,".":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"_":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"(":{"docs":{},"df":0,")":{"docs":{},"df":0,".":{"docs":{},"df":0,"p":{"docs":{},"df":0,"o":{"docs":{},"df":0,"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"(":{"docs":{},"df":0,"|":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/combinatorics/k-combinations of a multiset/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}},"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/combinatorics/k-combinations of a multiset/":{"tf":1.4142135623730951}},"df":1}}}},"[":{"docs":{},"df":0,"0":{"docs":{},"df":0,".":{"docs":{},"df":0,".":{"docs":{},"df":0,"k":{"docs":{"https://phlip9.com/notes/combinatorics/k-combinations of a multiset/":{"tf":1.4142135623730951}},"df":1,"]":{"docs":{},"df":0,".":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"_":{"docs":{},"df":0,"v":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{"https://phlip9.com/notes/combinatorics/k-combinations of a multiset/":{"tf":1.0}},"df":1}}}}}}}}}}}},"n":{"docs":{"https://phlip9.com/notes/combinatorics/k-combinations of a multiset/":{"tf":1.4142135623730951}},"df":1}}}},"g":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":3.1622776601683795},"https://phlip9.com/notes/btc-ln/BOLT 8 - secure noise transport/":{"tf":2.0},"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/gramine/":{"tf":1.7320508075688772},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/understanding sycamore reactivity/":{"tf":1.0}},"df":6,"$":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"i":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0}},"df":1}}}}},":":{"docs":{},"df":0,":":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"n":{"docs":{},"df":0,"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"n":{"docs":{},"df":0,"c":{"docs":{},"df":0,"e":{"docs":{},"df":0,"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"g":{"docs":{},"df":0,"n":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"u":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}},"p":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"k":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1}}}},"s":{"docs":{},"df":0,":":{"docs":{},"df":0,":":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"g":{"docs":{},"df":0,"n":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"u":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}},"f":{"docs":{},"df":0,"u":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"g":{"docs":{},"df":0,"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"c":{"docs":{},"df":0,"k":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.0}},"df":1}}}}}}}}}}},"o":{"docs":{},"df":0,"p":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}},"i":{"docs":{"https://phlip9.com/notes/android/ADB over TCP inside WSL2/":{"tf":1.7320508075688772},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0}},"df":2,"n":{"docs":{},"df":0,"f":{"docs":{},"df":0,"o":{"docs":{},"df":0,"3":{"docs":{},"df":0,"2":{"docs":{"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.4142135623730951}},"df":1}}}}}},"r":{"docs":{"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0}},"df":1},"y":{"docs":{},"df":0,"s":{"docs":{},"df":0,"2":{"docs":{"https://phlip9.com/notes/android/ADB over TCP inside WSL2/":{"tf":1.7320508075688772}},"df":1}}}},"t":{"docs":{"https://phlip9.com/notes/lang/lua/":{"tf":1.7320508075688772}},"df":1,".":{"docs":{},"df":0,"_":{"docs":{},"df":0,"_":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/lang/lua/":{"tf":1.0}},"df":1}}},"e":{"docs":{},"df":0,"q":{"docs":{"https://phlip9.com/notes/lang/lua/":{"tf":1.0}},"df":1}},"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/lang/lua/":{"tf":1.0}},"df":1}}},"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/lang/lua/":{"tf":1.0}},"df":1}}}}}}}},"l":{"docs":{"https://phlip9.com/notes/confidential computing/marblerun/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":1.0},"https://phlip9.com/notes/crypto/TLS self-signed pubkey-only certs/":{"tf":1.0},"https://phlip9.com/notes/devops/consul/":{"tf":1.4142135623730951},"https://phlip9.com/notes/devops/service mesh/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.0}},"df":6},"r":{"docs":{},"df":0,"x":{"docs":{},"df":0,"s":{"docs":{},"df":0,"z":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"f":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0}},"df":1,"_":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"k":{"docs":{},"df":0,"e":{"docs":{},"df":0,"_":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{},"df":0,"t":{"docs":{},"df":0,"(":{"docs":{},"df":0,"1":{"docs":{},"df":0,"0":{"docs":{},"df":0,"s":{"docs":{},"df":0,"z":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}},"u":{"docs":{"https://phlip9.com/notes/android/ADB over TCP inside WSL2/":{"tf":1.0},"https://phlip9.com/notes/networking/network interfaces/":{"tf":3.605551275463989}},"df":2}},"u":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":2.0},"https://phlip9.com/notes/statistics probability/testing whether a coin is fair/":{"tf":2.6457513110645907}},"df":2,"+":{"docs":{},"df":0,"c":{"docs":{},"df":0,"i":{"docs":{},"df":0,"r":{"docs":{},"df":0,"c":{"docs":{},"df":0,"u":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"p":{"docs":{},"df":0,"y":{"docs":{},"df":0,"t":{"docs":{},"df":0,"h":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1}}}}}}}}}}}}}},"_":{"docs":{},"df":0,"x":{"docs":{"https://phlip9.com/notes/statistics probability/standard error/":{"tf":2.0},"https://phlip9.com/notes/statistics probability/testing whether a coin is fair/":{"tf":2.23606797749979}},"df":2}},"c":{"docs":{},"df":0,"h":{"docs":{"https://phlip9.com/notes/AI ML/Markov Decision Process (MDP)/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/marblerun/":{"tf":1.4142135623730951},"https://phlip9.com/notes/design/form design/":{"tf":1.0},"https://phlip9.com/notes/misc/kintsugi/":{"tf":1.7320508075688772},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0},"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.0},"https://phlip9.com/notes/nvim/universal-ctags Notes/":{"tf":1.0},"https://phlip9.com/notes/postgres/postgres performance tuning/":{"tf":1.4142135623730951},"https://phlip9.com/notes/router/lightning router/lightning router overview/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/testing whether a coin is fair/":{"tf":1.0}},"df":11}},"l":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.4142135623730951}},"df":1,"(":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0}},"df":1}}},"m":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":2.0}},"df":1}},"_":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"_":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0}},"df":1}}}}}},"n":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"_":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"_":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0}},"df":1,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"{":{"docs":{},"df":0,"m":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}},"b":{"docs":{},"df":0,"a":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0}},"df":1,"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"(":{"docs":{},"df":0,"0":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0}},"df":1}}}}}},"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{},"df":0,"(":{"docs":{},"df":0,"m":{"docs":{},"df":0,"+":{"docs":{},"df":0,"1":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0}},"df":1}},"u":{"docs":{},"df":0,"l":{"docs":{},"df":0,"_":{"docs":{},"df":0,"n":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"_":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"_":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"{":{"docs":{},"df":0,"m":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}},"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"g":{"docs":{},"df":0,"(":{"docs":{},"df":0,"m":{"docs":{},"df":0,"u":{"docs":{},"df":0,"l":{"docs":{},"df":0,"_":{"docs":{},"df":0,"n":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"_":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"_":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"{":{"docs":{},"df":0,"~":{"docs":{},"df":0,"m":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}},"~":{"docs":{},"df":0,"(":{"docs":{},"df":0,"m":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0}},"df":1}}}}}}},"t":{"docs":{"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":2.0}},"df":1,"i":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel TDX/":{"tf":1.0},"https://phlip9.com/notes/crypto/acme protocol/":{"tf":1.0},"https://phlip9.com/notes/design/form design/":{"tf":1.0},"https://phlip9.com/notes/devops/consul/":{"tf":1.0},"https://phlip9.com/notes/devops/docker compose/":{"tf":1.0},"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":1.4142135623730951},"https://phlip9.com/notes/nvim/universal-ctags Notes/":{"tf":1.4142135623730951},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/nix/links/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/nix/nix auto-allocate-uids -> nixbld users/":{"tf":1.0}},"df":11,"c":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/networking/ipv6 address space/":{"tf":1.0}},"df":1}}}},"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/lang/lua/":{"tf":1.0}},"df":1}}},"n":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/statistics probability/G-test - multinomial goodness-of-fit/":{"tf":2.23606797749979},"https://phlip9.com/notes/statistics probability/multinomial distribution/":{"tf":3.1622776601683795}},"df":2,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"_":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/statistics probability/multinomial distribution/":{"tf":1.0}},"df":1,"(":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/statistics probability/multinomial distribution/":{"tf":1.0}},"df":1}}}}}}}}}}}}},"p":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"h":{"docs":{"https://phlip9.com/notes/btc-ln/atomic multipath payments (AMP)/":{"tf":1.7320508075688772}},"df":1}}},"l":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/fastpay/":{"tf":1.4142135623730951},"https://phlip9.com/notes/btc-ln/breez lightning service providers/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.0},"https://phlip9.com/notes/combinatorics/k-combinations of a multiset/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/mystikos/":{"tf":1.0},"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":2.8284271247461903},"https://phlip9.com/notes/devops/consul/":{"tf":1.0},"https://phlip9.com/notes/devops/deployment strategies/":{"tf":1.4142135623730951},"https://phlip9.com/notes/devops/docker compose/":{"tf":1.0},"https://phlip9.com/notes/devops/secrets/1password - secrets automation/":{"tf":1.4142135623730951},"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":1.0},"https://phlip9.com/notes/ios/ios setup/":{"tf":1.0},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0},"https://phlip9.com/notes/lang/lua/":{"tf":1.0},"https://phlip9.com/notes/lang/operator fixity and precedence/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/sycamore x futures/":{"tf":1.0},"https://phlip9.com/notes/networking/network interfaces/":{"tf":2.449489742783178},"https://phlip9.com/notes/reproducible builds/rebuilderd/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/reproducible-builds.org/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/standard error/":{"tf":1.4142135623730951}},"df":22,"i":{"docs":{"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.4142135623730951}},"df":1}}},"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"p":{"docs":{},"df":0,"o":{"docs":{"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":1.4142135623730951}},"df":1}}}},"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/combinatorics/k-combinations of a multiset/":{"tf":4.69041575982343}},"df":1,".":{"docs":{},"df":0,"h":{"docs":{},"df":0,"t":{"docs":{},"df":0,"m":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/combinatorics/k-combinations of a multiset/":{"tf":1.0}},"df":1}}}}}}}},"v":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/statistics probability/CDF confidence bands - DKW inequality/":{"tf":1.4142135623730951}},"df":1}}}}}}},"n":{"docs":{},"df":0,"g":{"docs":{"https://phlip9.com/notes/reproducible builds/nix/nix debug broken package build/":{"tf":1.0}},"df":1}},"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.4142135623730951}},"df":2}},"l":{"docs":{"https://phlip9.com/notes/confidential computing/mystikos/":{"tf":1.0}},"df":1},"t":{"docs":{},"df":0,"_":{"docs":{},"df":0,"u":{"docs":{},"df":0,"s":{"docs":{"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0}},"df":1}}}}},"t":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":3.4641016151377544},"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.4142135623730951},"https://phlip9.com/notes/crypto/TLS self-signed pubkey-only certs/":{"tf":1.0},"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":3.3166247903554},"https://phlip9.com/notes/lang/gdb ref/":{"tf":1.0},"https://phlip9.com/notes/performance/simdjson talk/":{"tf":1.7320508075688772}},"df":7,"a":{"docs":{},"df":0,"b":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0}},"df":1}},"t":{"docs":{"https://phlip9.com/notes/fuzzing/bolero - fuzzing + property testing/":{"tf":1.0},"https://phlip9.com/notes/fuzzing/fuzzcheck-rs/":{"tf":1.4142135623730951},"https://phlip9.com/notes/fuzzing/fuzzing/":{"tf":1.0},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0}},"df":4}},"e":{"docs":{},"df":0,"x":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.7320508075688772}},"df":1}},"u":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/financial instituion/":{"tf":1.0},"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/foreign bank account report (FBAR)/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":1.4142135623730951},"https://phlip9.com/notes/devops/service mesh/":{"tf":1.0},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.4142135623730951}},"df":5}}}},"}":{"docs":{},"df":0,"{":{"docs":{},"df":0,"\\":{"docs":{},"df":0,"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"g":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"_":{"docs":{},"df":0,"{":{"docs":{},"df":0,"\\":{"docs":{},"df":0,"m":{"docs":{},"df":0,"u":{"docs":{},"df":0,"_":{"docs":{},"df":0,"x":{"docs":{"https://phlip9.com/notes/statistics probability/testing whether a coin is fair/":{"tf":1.4142135623730951}},"df":1}}}}}}}}}}}}}}}},"v":{"docs":{"https://phlip9.com/notes/android/android cli setup/":{"tf":1.0},"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":1.7320508075688772}},"df":2},"y":{"docs":{},"df":0,"_":{"docs":{},"df":0,"a":{"docs":{},"df":0,"b":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{},"df":0,"_":{"docs":{},"df":0,"t":{"docs":{},"df":0,"y":{"docs":{},"df":0,"p":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0}},"df":1}}}}}}}}}}},"p":{"docs":{},"df":0,"p":{"docs":{"https://phlip9.com/notes/lang/flutter/flutter setup/":{"tf":1.4142135623730951}},"df":1}}},"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"c":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"_":{"docs":{},"df":0,"t":{"docs":{},"df":0,"y":{"docs":{},"df":0,"p":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0}},"df":1}}}}}}}}}}}},"f":{"docs":{},"df":0,"a":{"docs":{},"df":0,"i":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"g":{"docs":{},"df":0,"_":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/lang/rust/rr with rust/":{"tf":1.0}},"df":1}}}}}}}}}}}}},"g":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"p":{"docs":{"https://phlip9.com/notes/devops/azure CLI/":{"tf":2.23606797749979}},"df":1}}}}},"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,".":{"docs":{},"df":0,"d":{"docs":{},"df":0,"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"b":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/lang/koka-lang/":{"tf":1.0}},"df":1}}}}}}}}},"m":{"docs":{},"df":0,"o":{"docs":{},"df":0,"d":{"docs":{},"df":0,"u":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/lang/lua/":{"tf":1.4142135623730951}},"df":1}}}}},"s":{"docs":{},"df":0,"q":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/devops/consul/":{"tf":1.0}},"df":1}},"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/crypto/TLS self-signed pubkey-only certs/":{"tf":1.0}},"df":1}},"i":{"docs":{},"df":0,"k":{"docs":{},"df":0,"o":{"docs":{"https://phlip9.com/notes/confidential computing/gramine/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/mystikos/":{"tf":1.7320508075688772}},"df":2}}}}},"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{},"df":0,"h":{"docs":{},"df":0,"o":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0}},"df":1}}}}}}}}}},"v":{"docs":{},"df":0,"m":{"docs":{"https://phlip9.com/notes/devops/azure CLI/":{"tf":1.0}},"df":1}}}},"n":{"docs":{"https://phlip9.com/notes/android/root phone with magisk/":{"tf":1.0},"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/":{"tf":1.4142135623730951},"https://phlip9.com/notes/b l o c k c h a i n/":{"tf":1.0},"https://phlip9.com/notes/b l o c k c h a i n/btc utreexo - utxo accumulator/":{"tf":1.4142135623730951},"https://phlip9.com/notes/b l o c k c h a i n/fastpay/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/atomic multipath payments (AMP)/":{"tf":2.449489742783178},"https://phlip9.com/notes/combinatorics/k-combinations of a multiset/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/mystikos/":{"tf":1.0},"https://phlip9.com/notes/crypto/(talk) authenticated data structures for stateless validation/":{"tf":1.4142135623730951},"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":2.449489742783178},"https://phlip9.com/notes/devops/algo wireguard VPN server/":{"tf":1.7320508075688772},"https://phlip9.com/notes/devops/deployment strategies/":{"tf":1.4142135623730951},"https://phlip9.com/notes/distributed systems/papers/(2020) Semi-Fast Byzantine-tolerant Shared Register without Reliable Broadcast/":{"tf":1.7320508075688772},"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":2.449489742783178},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":6.708203932499369},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/lua/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":3.1622776601683795},"https://phlip9.com/notes/lang/rust/rr with rust/":{"tf":2.449489742783178},"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":1.0},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0},"https://phlip9.com/notes/performance/bit hacks/":{"tf":5.656854249492381},"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":4.47213595499958},"https://phlip9.com/notes/reproducible builds/nix/nix auto-allocate-uids -> nixbld users/":{"tf":1.7320508075688772},"https://phlip9.com/notes/statistics probability/CDF confidence bands - DKW inequality/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/G-test - multinomial goodness-of-fit/":{"tf":2.8284271247461903},"https://phlip9.com/notes/statistics probability/kelly criterion + ELO/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/multinomial distribution/":{"tf":3.1622776601683795},"https://phlip9.com/notes/statistics probability/standard error/":{"tf":2.449489742783178},"https://phlip9.com/notes/statistics probability/testing whether a coin is fair/":{"tf":2.0},"https://phlip9.com/notes/statistics probability/winsorize/":{"tf":1.4142135623730951}},"df":31,"$":{"docs":{},"df":0,"$":{"docs":{},"df":0,"\\":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"p":{"docs":{},"df":0,"h":{"docs":{},"df":0,"a":{"docs":{},"df":0,"$":{"docs":{},"df":0,"$":{"docs":{},"df":0,"\\":{"docs":{},"df":0,"e":{"docs":{},"df":0,"p":{"docs":{"https://phlip9.com/notes/statistics probability/CDF confidence bands - DKW inequality/":{"tf":1.0}},"df":1}}}}}}}}}}}}},"(":{"docs":{},"df":0,"\\":{"docs":{},"df":0,"m":{"docs":{},"df":0,"u":{"docs":{"https://phlip9.com/notes/statistics probability/testing whether a coin is fair/":{"tf":1.0}},"df":1}}}},"0":{"docs":{"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.4142135623730951}},"df":1},"1":{"docs":{"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.4142135623730951}},"df":1},"2":{"docs":{"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.4142135623730951}},"df":1},"3":{"docs":{"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.4142135623730951}},"df":1},"4":{"docs":{"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.4142135623730951}},"df":1},"5":{"docs":{"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.4142135623730951}},"df":1},"6":{"docs":{"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.4142135623730951}},"df":1},"7":{"docs":{"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.4142135623730951}},"df":1},"[":{"docs":{},"df":0,"p":{"docs":{},"df":0,"e":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":1.0}},"df":1}}}}},"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/devops/secrets/ejson-kms (AWS)/":{"tf":1.7320508075688772}},"df":1}},"i":{"docs":{},"df":0,"v":{"docs":{"https://phlip9.com/notes/AI ML/Expectimax Search/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/atomic multipath payments (AMP)/":{"tf":1.0}},"df":2}},"m":{"docs":{},"df":0,"e":{"docs":{"https://phlip9.com/notes/AI ML/Markov Decision Process (MDP)/":{"tf":1.0},"https://phlip9.com/notes/android/root phone with magisk/":{"tf":1.0},"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/foreign bank account report (FBAR)/":{"tf":1.0},"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/monetary instruments/":{"tf":1.0},"https://phlip9.com/notes/b l o c k c h a i n/fastpay/":{"tf":1.0},"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":2.449489742783178},"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":2.6457513110645907},"https://phlip9.com/notes/confidential computing/gramine/":{"tf":2.23606797749979},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0},"https://phlip9.com/notes/crypto/acme protocol/":{"tf":1.0},"https://phlip9.com/notes/design/form design/":{"tf":1.0},"https://phlip9.com/notes/devops/algo wireguard VPN server/":{"tf":1.7320508075688772},"https://phlip9.com/notes/devops/azure CLI/":{"tf":4.47213595499958},"https://phlip9.com/notes/devops/secrets/ejson-kms (AWS)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":1.0},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":2.6457513110645907},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":4.69041575982343},"https://phlip9.com/notes/lang/lua/":{"tf":1.7320508075688772},"https://phlip9.com/notes/lang/operator fixity and precedence/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":3.1622776601683795},"https://phlip9.com/notes/misc/envsubst/":{"tf":1.7320508075688772},"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":1.0},"https://phlip9.com/notes/networking/network interfaces/":{"tf":2.0},"https://phlip9.com/notes/nvim/universal-ctags Notes/":{"tf":1.4142135623730951},"https://phlip9.com/notes/postgres/snippets/":{"tf":1.4142135623730951},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.4142135623730951},"https://phlip9.com/notes/reproducible builds/nix/nix debug spurrious rebuilds/":{"tf":1.7320508075688772},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/arubanetworks captive portal/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.4142135623730951}},"df":31,"&":{"docs":{},"df":0,"g":{"docs":{},"df":0,"t":{"docs":{},"df":0,";":{"docs":{},"df":0,".":{"docs":{},"df":0,"&":{"docs":{},"df":0,"l":{"docs":{},"df":0,"t":{"docs":{},"df":0,";":{"docs":{},"df":0,"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"c":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"&":{"docs":{},"df":0,"g":{"docs":{},"df":0,"t":{"docs":{},"df":0,";":{"docs":{},"df":0,".":{"docs":{},"df":0,"c":{"docs":{},"df":0,"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"d":{"docs":{},"df":0,"a":{"docs":{},"df":0,"p":{"docs":{},"df":0,"p":{"docs":{},"df":0,".":{"docs":{},"df":0,"a":{"docs":{},"df":0,"z":{"docs":{},"df":0,"u":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,".":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{"https://phlip9.com/notes/devops/azure CLI/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"'":{"docs":{"https://phlip9.com/notes/":{"tf":1.0}},"df":1},".":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"p":{"docs":{},"df":0,"p":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"c":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0}},"df":1}}}}}}}}}},"w":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"u":{"docs":{},"df":0,"s":{"docs":{},"df":0,".":{"docs":{},"df":0,"c":{"docs":{},"df":0,"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"d":{"docs":{},"df":0,"a":{"docs":{},"df":0,"p":{"docs":{},"df":0,"p":{"docs":{},"df":0,".":{"docs":{},"df":0,"a":{"docs":{},"df":0,"z":{"docs":{},"df":0,"u":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,".":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{"https://phlip9.com/notes/devops/azure CLI/":{"tf":2.23606797749979}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}},"d":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"g":{"docs":{},"df":0,"u":{"docs":{"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0}},"df":1}}}}},"p":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"k":{"docs":{"https://phlip9.com/notes/misc/water distillation setup/":{"tf":1.0}},"df":1}}}}}}},"o":{"docs":{},"df":0,"c":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"s":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"#":{"docs":{},"df":0,"p":{"docs":{},"df":0,"o":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0}},"df":1}}}}}}}}}}}}}},"s":{"docs":{},"df":0,".":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{},"df":0,"d":{"docs":{},"df":0,"(":{"docs":{},"df":0,"\"":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0}},"df":1}}}}}},"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"l":{"docs":{},"df":0,"(":{"docs":{},"df":0,"{":{"docs":{},"df":0,"\"":{"docs":{},"df":0,"b":{"docs":{},"df":0,"o":{"docs":{},"df":0,"b":{"docs":{"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0}},"df":1}}}}}}}}}}}}},"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"v":{"docs":{"https://phlip9.com/notes/devops/algo wireguard VPN server/":{"tf":1.4142135623730951}},"df":1}}},"p":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/lua/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/nix/nix auto-allocate-uids -> nixbld users/":{"tf":1.0}},"df":5}}}}}},"p":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.4142135623730951}},"df":1}},"t":{"docs":{"https://phlip9.com/notes/android/ADB over TCP inside WSL2/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":3.0},"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/winsorize/":{"tf":1.0}},"df":4,"g":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"w":{"docs":{},"df":0,"a":{"docs":{},"df":0,"y":{"docs":{"https://phlip9.com/notes/devops/azure CLI/":{"tf":1.0}},"df":1}}}}}}},"i":{"docs":{},"df":0,"v":{"docs":{"https://phlip9.com/notes/confidential computing/marblerun/":{"tf":1.0},"https://phlip9.com/notes/devops/service mesh/":{"tf":1.0},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.4142135623730951},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/nix/links/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/arubanetworks captive portal/":{"tf":1.0}},"df":6,"e":{"docs":{},"df":0,"b":{"docs":{},"df":0,"u":{"docs":{},"df":0,"i":{"docs":{},"df":0,"l":{"docs":{},"df":0,"d":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"p":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/reproducible builds/nix/nix debug broken package build/":{"tf":1.4142135623730951}},"df":1}}}}}}}}}}}}},"s":{"docs":{},"df":0,"r":{"docs":{},"df":0,"f":{"docs":{},"df":0,"c":{"docs":{},"df":0,"4":{"docs":{},"df":0,"3":{"docs":{},"df":0,"8":{"docs":{},"df":0,"0":{"docs":{"https://phlip9.com/notes/networking/ipv6 address space/":{"tf":1.0}},"df":1}}}}}}}},"u":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/combinatorics/k-combinations of a multiset/":{"tf":1.0},"https://phlip9.com/notes/crypto/biscuit authz/":{"tf":1.0},"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":1.4142135623730951},"https://phlip9.com/notes/reproducible builds/reproducible-builds.org/":{"tf":1.0}},"df":4}},"}":{"docs":{},"df":0,"{":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0}},"df":1}}}},"v":{"docs":{"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0}},"df":1,"i":{"docs":{},"df":0,"g":{"docs":{"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":2,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,".":{"docs":{},"df":0,"p":{"docs":{},"df":0,"o":{"docs":{},"df":0,"p":{"docs":{},"df":0,"(":{"docs":{},"df":0,")":{"docs":{"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0}},"df":1}}}},"u":{"docs":{},"df":0,"s":{"docs":{},"df":0,"h":{"docs":{"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0}},"df":1,"(":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"x":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}},"x":{"docs":{},"df":0,"i":{"docs":{},"df":0,"m":{"docs":{},"df":0,"u":{"docs":{},"df":0,"m":{"docs":{"https://phlip9.com/notes/statistics probability/testing whether a coin is fair/":{"tf":1.0}},"df":1}}}}}},"b":{"docs":{"https://phlip9.com/notes/performance/bit hacks/":{"tf":2.8284271247461903}},"df":1,"0":{"docs":{"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.0}},"df":1},"1":{"docs":{"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.0}},"df":1},"2":{"docs":{"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.0}},"df":1},"3":{"docs":{"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.0}},"df":1},"4":{"docs":{"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.0}},"df":1},"5":{"docs":{"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.0}},"df":1},"6":{"docs":{"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.0}},"df":1},"7":{"docs":{"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.0}},"df":1},"_":{"docs":{},"df":0,"h":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.0}},"df":1}},"l":{"docs":{},"df":0,"o":{"docs":{"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.0}},"df":1}},"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{},"df":0,"k":{"docs":{"https://phlip9.com/notes/performance/bit hacks/":{"tf":2.0}},"df":1}}}},"x":{"docs":{"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.7320508075688772}},"df":1}},"s":{"docs":{},"df":0,"p":{"docs":{},"df":0,";":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/router/lightning router/captive portal/arubanetworks captive portal/":{"tf":1.0}},"df":1}}}}}},"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0}},"df":1}},"u":{"docs":{},"df":0,"r":{"docs":{},"df":0,"s":{"docs":{"https://phlip9.com/notes/devops/kubernetes/":{"tf":1.0}},"df":1}}}},"d":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.4142135623730951}},"df":1,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"y":{"docs":{"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.0}},"df":1,":":{"docs":{},"df":0,":":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"y":{"docs":{},"df":0,"v":{"docs":{},"df":0,"i":{"docs":{},"df":0,"e":{"docs":{},"df":0,"w":{"docs":{},"df":0,"1":{"docs":{"https://phlip9.com/notes/statistics probability/multinomial distribution/":{"tf":1.0}},"df":1}}}}}}}}}},"{":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"y":{"docs":{},"df":0,"v":{"docs":{},"df":0,"i":{"docs":{},"df":0,"e":{"docs":{},"df":0,"w":{"docs":{},"df":0,"1":{"docs":{"https://phlip9.com/notes/statistics probability/G-test - multinomial goodness-of-fit/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}},"i":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"/":{"docs":{},"df":0,"u":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"m":{"docs":{"https://phlip9.com/notes/crypto/acme protocol/":{"tf":1.0}},"df":1}}}}}}}}}}},"k":{"docs":{"https://phlip9.com/notes/android/android cli setup/":{"tf":1.0}},"df":1,";":{"docs":{},"df":0,"2":{"docs":{},"df":0,"5":{"docs":{},"df":0,".":{"docs":{},"df":0,"1":{"docs":{},"df":0,".":{"docs":{},"df":0,"8":{"docs":{},"df":0,"9":{"docs":{},"df":0,"3":{"docs":{},"df":0,"7":{"docs":{},"df":0,"3":{"docs":{},"df":0,"9":{"docs":{},"df":0,"3":{"docs":{"https://phlip9.com/notes/android/android cli setup/":{"tf":1.4142135623730951}},"df":1}}}}}}}}}}}}}},"s":{"docs":{},"df":0,"s":{"docs":{"https://phlip9.com/notes/fuzzing/fuzzing/":{"tf":1.0}},"df":1}}},"e":{"docs":{"https://phlip9.com/notes/statistics probability/multinomial distribution/":{"tf":1.0}},"df":1,"a":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/performance/simdjson talk/":{"tf":1.0}},"df":1,"l":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/AI ML/Markov Decision Process (MDP)/":{"tf":1.0}},"df":1}}}},"c":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"s":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/android/linux ADB udev setup/":{"tf":1.0},"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/foreign bank account report (FBAR)/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.7320508075688772},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.4142135623730951},"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.0},"https://phlip9.com/notes/nvim/universal-ctags Notes/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.0}},"df":10,"l":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.0}},"df":1}}}}}}}}},"e":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/AI ML/Markov Decision Process (MDP)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/WSL/WSL2 custom kernel/":{"tf":1.7320508075688772},"https://phlip9.com/notes/android/ADB over TCP inside WSL2/":{"tf":1.0},"https://phlip9.com/notes/android/OTA updates for rooted android phone/":{"tf":1.4142135623730951},"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":3.0},"https://phlip9.com/notes/android/root phone with magisk/":{"tf":2.6457513110645907},"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/foreign bank account report (FBAR)/":{"tf":1.7320508075688772},"https://phlip9.com/notes/b l o c k c h a i n/btc utreexo - utxo accumulator/":{"tf":1.4142135623730951},"https://phlip9.com/notes/b l o c k c h a i n/fastpay/":{"tf":2.23606797749979},"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.4142135623730951},"https://phlip9.com/notes/btc-ln/BOLT 8 - secure noise transport/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/atomic multipath payments (AMP)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/btc-ln/breez lightning service providers/":{"tf":2.0},"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.7320508075688772},"https://phlip9.com/notes/btc-ln/submarine swaps/":{"tf":1.7320508075688772},"https://phlip9.com/notes/combinatorics/k-combinations of a multiset/":{"tf":1.7320508075688772},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":3.3166247903554},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":2.8284271247461903},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":3.872983346207417},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":2.0},"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":2.0},"https://phlip9.com/notes/confidential computing/intel SGX/secure time/":{"tf":2.0},"https://phlip9.com/notes/confidential computing/marblerun/":{"tf":2.23606797749979},"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":2.0},"https://phlip9.com/notes/crypto/(talk) authenticated data structures for stateless validation/":{"tf":1.0},"https://phlip9.com/notes/crypto/acme protocol/":{"tf":1.4142135623730951},"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":2.0},"https://phlip9.com/notes/design/form design/":{"tf":1.4142135623730951},"https://phlip9.com/notes/devops/azure CLI/":{"tf":1.0},"https://phlip9.com/notes/devops/deployment strategies/":{"tf":2.6457513110645907},"https://phlip9.com/notes/devops/nomad/":{"tf":1.4142135623730951},"https://phlip9.com/notes/devops/secrets/1password - secrets automation/":{"tf":1.0},"https://phlip9.com/notes/devops/service mesh/":{"tf":1.4142135623730951},"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":1.4142135623730951},"https://phlip9.com/notes/fuzzing/fuzzcheck-rs/":{"tf":1.0},"https://phlip9.com/notes/fuzzing/fuzzing/":{"tf":1.0},"https://phlip9.com/notes/ios/ios setup/":{"tf":1.0},"https://phlip9.com/notes/keyboards/moergo glove80/":{"tf":1.0},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":3.1622776601683795},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.7320508075688772},"https://phlip9.com/notes/lang/flutter/flutter setup/":{"tf":1.0},"https://phlip9.com/notes/lang/lua/":{"tf":1.7320508075688772},"https://phlip9.com/notes/lang/operator fixity and precedence/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/rr with rust/":{"tf":1.7320508075688772},"https://phlip9.com/notes/lang/rust/understanding sycamore reactivity/":{"tf":1.4142135623730951},"https://phlip9.com/notes/management/relieve often - why generals were more successful in WWII/":{"tf":1.0},"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":1.4142135623730951},"https://phlip9.com/notes/misc/kintsugi/":{"tf":2.0},"https://phlip9.com/notes/misc/optimization solvers/":{"tf":1.0},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0},"https://phlip9.com/notes/misc/setting up a headless raspbian boot image/":{"tf":1.0},"https://phlip9.com/notes/networking/network interface card (NIC)/":{"tf":1.0},"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.7320508075688772},"https://phlip9.com/notes/postgres/types of scans/":{"tf":2.23606797749979},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.7320508075688772},"https://phlip9.com/notes/reproducible builds/nix/nix auto-allocate-uids -> nixbld users/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/reproducible-builds.org/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/router/lightning router/captive portal/arubanetworks captive portal/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":2.449489742783178},"https://phlip9.com/notes/router/lightning router/lightning router overview/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/multinomial distribution/":{"tf":1.4142135623730951},"https://phlip9.com/notes/statistics probability/standard error/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/testing whether a coin is fair/":{"tf":1.0}},"df":66}},"g":{"docs":{"https://phlip9.com/notes/statistics probability/winsorize/":{"tf":2.0}},"df":1,"a":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/lang/operator fixity and precedence/":{"tf":1.0}},"df":1}},"o":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/monetary instruments/":{"tf":1.0},"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":2.449489742783178},"https://phlip9.com/notes/btc-ln/BOLT 8 - secure noise transport/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":1.4142135623730951},"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":1.0}},"df":6}}}},"h":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"m":{"docs":{"https://phlip9.com/notes/lang/rust/rr with rust/":{"tf":1.0}},"df":1}}}}},"i":{"docs":{},"df":0,"g":{"docs":{},"df":0,"h":{"docs":{},"df":0,"b":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.7320508075688772},"https://phlip9.com/notes/router/lightning router/lightning router overview/":{"tf":1.0}},"df":2}}}}}},"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.0}},"df":1}}}},"o":{"docs":{},"df":0,"p":{"docs":{},"df":0,"i":{"docs":{},"df":0,"x":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{},"df":0,"_":{"docs":{},"df":0,"w":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1}}}}}}}}}}},"r":{"docs":{},"df":0,"v":{"docs":{},"df":0,"o":{"docs":{},"df":0,"u":{"docs":{"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0}},"df":1}}}},"s":{"docs":{},"df":0,"s":{"docs":{"https://phlip9.com/notes/AI ML/Expectimax Search/":{"tf":1.7320508075688772}},"df":1},"t":{"docs":{"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.4142135623730951}},"df":1,"e":{"docs":{},"df":0,"d":{"docs":{},"df":0,"v":{"docs":{},"df":0,"i":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{},"df":0,"u":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"z":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"=":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"u":{"docs":{"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}},"t":{"docs":{"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.7320508075688772}},"df":1,"f":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"x":{"docs":{"https://phlip9.com/notes/router/lightning router/lightning router overview/":{"tf":1.0}},"df":1}}}},"g":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"p":{"docs":{},"df":0,"h":{"docs":{},"df":0,"m":{"docs":{},"df":0,"s":{"docs":{},"df":0,"g":{"docs":{},"df":0,"h":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.0}},"df":1}}}}}}}}}}}}},"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{},"df":0,"k":{"docs":{"https://phlip9.com/notes/android/ADB over TCP inside WSL2/":{"tf":1.0}},"df":1}}}},"s":{"docs":{},"df":0,"h":{"docs":{"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.0}},"df":1}},"w":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"k":{"docs":{"https://phlip9.com/notes/":{"tf":1.0},"https://phlip9.com/notes/android/ADB over TCP inside WSL2/":{"tf":2.0},"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/money services business (MSB)/":{"tf":1.7320508075688772},"https://phlip9.com/notes/b l o c k c h a i n/fastpay/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/BOLT 8 - secure noise transport/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/breez lightning service providers/":{"tf":1.4142135623730951},"https://phlip9.com/notes/btc-ln/lightning libs/":{"tf":1.4142135623730951},"https://phlip9.com/notes/btc-ln/lightning network notes/":{"tf":1.4142135623730951},"https://phlip9.com/notes/btc-ln/lightning rod/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":2.6457513110645907},"https://phlip9.com/notes/btc-ln/submarine swaps/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":2.449489742783178},"https://phlip9.com/notes/confidential computing/intel SGX/secure time/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/marblerun/":{"tf":1.0},"https://phlip9.com/notes/devops/AKS - azure kubernetes service/":{"tf":1.0},"https://phlip9.com/notes/devops/azure CLI/":{"tf":1.7320508075688772},"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":1.4142135623730951},"https://phlip9.com/notes/networking/":{"tf":1.0},"https://phlip9.com/notes/networking/CIDR/":{"tf":2.449489742783178},"https://phlip9.com/notes/networking/ipv6 address space/":{"tf":1.0},"https://phlip9.com/notes/networking/network interface card (NIC)/":{"tf":2.6457513110645907},"https://phlip9.com/notes/networking/network interfaces/":{"tf":5.656854249492381},"https://phlip9.com/notes/performance/simdjson talk/":{"tf":1.4142135623730951},"https://phlip9.com/notes/reproducible builds/nix/links/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":3.0},"https://phlip9.com/notes/router/lightning router/captive portal/arubanetworks captive portal/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":2.8284271247461903},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":5.0}},"df":28,"&":{"docs":{},"df":0,"l":{"docs":{},"df":0,"t":{"docs":{},"df":0,";":{"docs":{},"df":0,"/":{"docs":{},"df":0,"a":{"docs":{},"df":0,"&":{"docs":{},"df":0,"g":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.0}},"df":2}}}}}}}}},"'":{"docs":{"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.0}},"df":1},"_":{"docs":{},"df":0,"p":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"f":{"docs":{},"df":0,"i":{"docs":{},"df":0,"x":{"docs":{"https://phlip9.com/notes/networking/CIDR/":{"tf":1.4142135623730951}},"df":1}}}}}}}}}}}},"v":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/btc-ln/lightning network notes/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0},"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":1.7320508075688772},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0},"https://phlip9.com/notes/management/relieve often - why generals were more successful in WWII/":{"tf":1.4142135623730951},"https://phlip9.com/notes/postgres/types of scans/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/arubanetworks captive portal/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.0}},"df":8}}},"w":{"docs":{"https://phlip9.com/notes/AI ML/Markov Decision Process (MDP)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/WSL/WSL2 custom kernel/":{"tf":1.0},"https://phlip9.com/notes/android/ADB over TCP inside WSL2/":{"tf":1.0},"https://phlip9.com/notes/b l o c k c h a i n/btc utreexo - utxo accumulator/":{"tf":1.0},"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.4142135623730951},"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":2.8284271247461903},"https://phlip9.com/notes/btc-ln/BOLT 4 - onion routing protocol/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/BOLT 7 - p2p node and channel discovery/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/breez lightning service providers/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/hosted channels/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":2.23606797749979},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":2.449489742783178},"https://phlip9.com/notes/confidential computing/intel TDX/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/marblerun/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":2.23606797749979},"https://phlip9.com/notes/crypto/(talk) authenticated data structures for stateless validation/":{"tf":1.7320508075688772},"https://phlip9.com/notes/crypto/acme protocol/":{"tf":1.4142135623730951},"https://phlip9.com/notes/crypto/biscuit authz/":{"tf":1.4142135623730951},"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":2.0},"https://phlip9.com/notes/devops/algo wireguard VPN server/":{"tf":2.449489742783178},"https://phlip9.com/notes/devops/deployment strategies/":{"tf":1.4142135623730951},"https://phlip9.com/notes/devops/nomad/":{"tf":1.0},"https://phlip9.com/notes/devops/secrets/ejson (Shopify)/":{"tf":1.0},"https://phlip9.com/notes/devops/service mesh/":{"tf":1.0},"https://phlip9.com/notes/distributed systems/papers/(2020) Semi-Fast Byzantine-tolerant Shared Register without Reliable Broadcast/":{"tf":1.0},"https://phlip9.com/notes/distributed systems/papers/(2021) Leaderless Consensus/":{"tf":1.0},"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":1.0},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/lua/":{"tf":2.23606797749979},"https://phlip9.com/notes/management/relieve often - why generals were more successful in WWII/":{"tf":1.0},"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":3.0},"https://phlip9.com/notes/misc/kintsugi/":{"tf":1.0},"https://phlip9.com/notes/misc/pop_OS! tweaks/":{"tf":1.4142135623730951},"https://phlip9.com/notes/misc/prepping RPI for embedded dev/":{"tf":1.4142135623730951},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":2.23606797749979},"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.0},"https://phlip9.com/notes/postgres/postgres performance tuning/":{"tf":1.0},"https://phlip9.com/notes/postgres/snippets/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/nix/nix auto-allocate-uids -> nixbld users/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.4142135623730951}},"df":45,"&":{"docs":{},"df":0,"l":{"docs":{},"df":0,"t":{"docs":{},"df":0,";":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"c":{"docs":{},"df":0,":":{"docs":{},"df":0,":":{"docs":{},"df":0,"b":{"docs":{},"df":0,"o":{"docs":{},"df":0,"x":{"docs":{},"df":0,"e":{"docs":{},"df":0,"d":{"docs":{},"df":0,":":{"docs":{},"df":0,":":{"docs":{},"df":0,"b":{"docs":{},"df":0,"o":{"docs":{},"df":0,"x":{"docs":{},"df":0,"&":{"docs":{},"df":0,"l":{"docs":{},"df":0,"t":{"docs":{},"df":0,";":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"c":{"docs":{},"df":0,":":{"docs":{},"df":0,":":{"docs":{},"df":0,"s":{"docs":{},"df":0,"y":{"docs":{},"df":0,"n":{"docs":{},"df":0,"c":{"docs":{},"df":0,":":{"docs":{},"df":0,":":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"c":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"&":{"docs":{},"df":0,"l":{"docs":{},"df":0,"t":{"docs":{},"df":0,";":{"docs":{},"df":0,"w":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"p":{"docs":{},"df":0,":":{"docs":{},"df":0,":":{"docs":{},"df":0,"f":{"docs":{},"df":0,"i":{"docs":{},"df":0,"l":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"(":{"docs":{},"df":0,"k":{"docs":{},"df":0,"e":{"docs":{},"df":0,"y":{"docs":{"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":1.0}},"df":1}}},"m":{"docs":{},"df":0,"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/combinatorics/k-combinations of a multiset/":{"tf":1.0}},"df":1}}}},"s":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"t":{"docs":{},"df":0,"_":{"docs":{},"df":0,"v":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"u":{"docs":{"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":1.0}},"df":1}}}}}}}}}},"_":{"docs":{},"df":0,"d":{"docs":{},"df":0,"2":{"docs":{},"df":0,"(":{"docs":{},"df":0,"k":{"docs":{},"df":0,"e":{"docs":{},"df":0,"y":{"docs":{},"df":0,"_":{"docs":{},"df":0,"p":{"docs":{},"df":0,"o":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.7320508075688772}},"df":1}}}}}}}}}}}}},"p":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"s":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.4142135623730951}},"df":1,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"(":{"docs":{},"df":0,"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{},"df":0,"f":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1}}}}}}}}}}}},"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.7320508075688772}},"df":1}}},"u":{"docs":{},"df":0,"n":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"k":{"docs":{},"df":0,"e":{"docs":{},"df":0,"d":{"docs":{},"df":0,"&":{"docs":{},"df":0,"l":{"docs":{},"df":0,"t":{"docs":{},"df":0,";":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"c":{"docs":{},"df":0,":":{"docs":{},"df":0,":":{"docs":{},"df":0,"b":{"docs":{},"df":0,"o":{"docs":{},"df":0,"x":{"docs":{},"df":0,"e":{"docs":{},"df":0,"d":{"docs":{},"df":0,":":{"docs":{},"df":0,":":{"docs":{},"df":0,"b":{"docs":{},"df":0,"o":{"docs":{},"df":0,"x":{"docs":{},"df":0,"&":{"docs":{},"df":0,"l":{"docs":{},"df":0,"t":{"docs":{},"df":0,";":{"docs":{},"df":0,"f":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{},"df":0,"u":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"_":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"l":{"docs":{},"df":0,":":{"docs":{},"df":0,":":{"docs":{},"df":0,"f":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{},"df":0,"u":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,":":{"docs":{},"df":0,":":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0}},"df":1}}},"e":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":2.0},"https://phlip9.com/notes/devops/deployment strategies/":{"tf":1.0}},"df":3}},"g":{"docs":{},"df":0,"r":{"docs":{},"df":0,"p":{"docs":{"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.0}},"df":1}}},"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.4142135623730951}},"df":1}},"i":{"docs":{"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0},"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.0}},"df":3,"n":{"docs":{"https://phlip9.com/notes/lang/lua/":{"tf":1.4142135623730951},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0},"https://phlip9.com/notes/nvim/universal-ctags Notes/":{"tf":1.0}},"df":3}}},"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"/":{"docs":{},"df":0,"g":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":1.0}},"df":1}}}}}}}},"x":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/AI ML/Expectimax Search/":{"tf":1.0},"https://phlip9.com/notes/AI ML/Markov Decision Process (MDP)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/android/OTA updates for rooted android phone/":{"tf":1.4142135623730951},"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/BOLT 11 - invoices/":{"tf":1.4142135623730951},"https://phlip9.com/notes/combinatorics/k-combinations of a multiset/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/secure time/":{"tf":1.0},"https://phlip9.com/notes/crypto/acme protocol/":{"tf":1.0},"https://phlip9.com/notes/crypto/biscuit authz/":{"tf":1.0},"https://phlip9.com/notes/design/form design/":{"tf":1.4142135623730951},"https://phlip9.com/notes/devops/deployment strategies/":{"tf":1.0},"https://phlip9.com/notes/distributed systems/papers/(2020) Semi-Fast Byzantine-tolerant Shared Register without Reliable Broadcast/":{"tf":1.0},"https://phlip9.com/notes/lang/lua/":{"tf":1.0},"https://phlip9.com/notes/lang/operator fixity and precedence/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/rr with rust/":{"tf":1.7320508075688772},"https://phlip9.com/notes/misc/kintsugi/":{"tf":2.23606797749979},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":3.3166247903554},"https://phlip9.com/notes/misc/setting up a headless raspbian boot image/":{"tf":1.0},"https://phlip9.com/notes/performance/bit hacks/":{"tf":2.23606797749979},"https://phlip9.com/notes/performance/simdjson talk/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/nix/nix auto-allocate-uids -> nixbld users/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/standard error/":{"tf":1.0}},"df":26,"(":{"docs":{},"df":0,"&":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{},"df":0,"p":{"docs":{},"df":0,";":{"docs":{},"df":0,"m":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/combinatorics/k-combinations of a multiset/":{"tf":1.0}},"df":1}}}}}}}},"x":{"docs":{"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.0}},"df":1,")":{"docs":{},"df":0,".":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"_":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.0}},"df":1}}}}}}}}}}}},"[":{"docs":{},"df":0,"x":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":2.0}},"df":1}},"_":{"docs":{},"df":0,"k":{"docs":{},"df":0,"b":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"_":{"docs":{},"df":0,"p":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"m":{"docs":{"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.0}},"df":1,"(":{"docs":{},"df":0,"x":{"docs":{"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.0}},"df":1}}}}}}}}}}},"m":{"docs":{},"df":0,"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{},"df":0,"_":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"b":{"docs":{},"df":0,"&":{"docs":{},"df":0,"l":{"docs":{},"df":0,"t":{"docs":{},"df":0,";":{"docs":{},"df":0,"t":{"docs":{},"df":0,"&":{"docs":{},"df":0,"g":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/combinatorics/k-combinations of a multiset/":{"tf":1.0}},"df":1}}}}}}}},"(":{"docs":{},"df":0,"&":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{},"df":0,"p":{"docs":{},"df":0,";":{"docs":{},"df":0,"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{},"df":0,"f":{"docs":{},"df":0,".":{"docs":{},"df":0,"m":{"docs":{},"df":0,"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/combinatorics/k-combinations of a multiset/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}},"p":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"_":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"m":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"_":{"docs":{},"df":0,"p":{"docs":{},"df":0,"o":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}},"i":{"docs":{"https://phlip9.com/notes/lang/rust/rr with rust/":{"tf":1.0}},"df":1},"u":{"docs":{},"df":0,"p":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.0}},"df":1,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"\"":{"docs":{},"df":0,":":{"docs":{},"df":0,"\"":{"docs":{},"df":0,"2":{"docs":{},"df":0,"0":{"docs":{},"df":0,"1":{"docs":{},"df":0,"9":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}},"h":{"docs":{},"df":0,"6":{"docs":{},"df":0,"x":{"docs":{},"df":0,"1":{"docs":{},"df":0,"q":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"f":{"docs":{},"df":0,"p":{"docs":{},"df":0,"b":{"docs":{},"df":0,"5":{"docs":{},"df":0,"1":{"docs":{},"df":0,"9":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/crypto/acme protocol/":{"tf":1.0}},"df":1}}}}}}}}}}}}}},"i":{"docs":{},"df":0,"b":{"docs":{},"df":0,"b":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/performance/bit hacks/":{"tf":4.898979485566356}},"df":1}},"s":{"docs":{},"df":0,"_":{"docs":{},"df":0,"0":{"docs":{},"df":0,"1":{"docs":{},"df":0,"2":{"docs":{},"df":0,"3":{"docs":{"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.7320508075688772}},"df":1}},"4":{"docs":{},"df":0,"5":{"docs":{"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.7320508075688772}},"df":1}}},"2":{"docs":{},"df":0,"4":{"docs":{},"df":0,"6":{"docs":{"https://phlip9.com/notes/performance/bit hacks/":{"tf":2.449489742783178}},"df":1}}}}}}},"c":{"docs":{"https://phlip9.com/notes/networking/network interface card (NIC)/":{"tf":3.605551275463989},"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.4142135623730951}},"df":2,"e":{"docs":{"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0},"https://phlip9.com/notes/b l o c k c h a i n/fastpay/":{"tf":1.0},"https://phlip9.com/notes/combinatorics/k-combinations of a multiset/":{"tf":1.0},"https://phlip9.com/notes/lang/koka-lang/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.0},"https://phlip9.com/notes/misc/kintsugi/":{"tf":1.0},"https://phlip9.com/notes/misc/optimization solvers/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.4142135623730951}},"df":8,"r":{"docs":{"https://phlip9.com/notes/design/form design/":{"tf":1.0}},"df":1}}},"g":{"docs":{},"df":0,"h":{"docs":{},"df":0,"t":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":2.449489742783178},"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.7320508075688772}},"df":3}}}}},"l":{"docs":{"https://phlip9.com/notes/lang/lua/":{"tf":3.0}},"df":1,"_":{"docs":{},"df":0,"v":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":2.6457513110645907}},"df":1}}}},"n":{"docs":{},"df":0,"e":{"docs":{"https://phlip9.com/notes/statistics probability/testing whether a coin is fair/":{"tf":1.4142135623730951}},"df":1},"j":{"docs":{},"df":0,"a":{"docs":{"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/gramine/":{"tf":1.7320508075688772}},"df":2}},"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{},"df":0,"o":{"docs":{"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":2.0}},"df":1}}}}}},"x":{"docs":{"https://phlip9.com/notes/devops/secrets/sops-nix/":{"tf":1.7320508075688772},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.4142135623730951},"https://phlip9.com/notes/reproducible builds/nix/links/":{"tf":4.47213595499958},"https://phlip9.com/notes/reproducible builds/nix/nix auto-allocate-uids -> nixbld users/":{"tf":3.3166247903554},"https://phlip9.com/notes/reproducible builds/nix/nix debug broken package build/":{"tf":2.0},"https://phlip9.com/notes/reproducible builds/nix/nix debug spurrious rebuilds/":{"tf":3.1622776601683795}},"df":6,".":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"v":{"docs":{"https://phlip9.com/notes/reproducible builds/nix/links/":{"tf":1.0}},"df":1}}}},"/":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"/":{"docs":{},"df":0,"5":{"docs":{},"df":0,"g":{"docs":{},"df":0,"c":{"docs":{},"df":0,"g":{"docs":{},"df":0,"2":{"docs":{},"df":0,"l":{"docs":{},"df":0,"4":{"docs":{},"df":0,"b":{"docs":{},"df":0,"n":{"docs":{},"df":0,"m":{"docs":{},"df":0,"i":{"docs":{},"df":0,"3":{"docs":{},"df":0,"p":{"docs":{},"df":0,"l":{"docs":{},"df":0,"s":{"docs":{},"df":0,"z":{"docs":{},"df":0,"w":{"docs":{},"df":0,"r":{"docs":{},"df":0,"c":{"docs":{},"df":0,"i":{"docs":{},"df":0,"h":{"docs":{},"df":0,"y":{"docs":{},"df":0,"s":{"docs":{},"df":0,"h":{"docs":{},"df":0,"b":{"docs":{},"df":0,"z":{"docs":{},"df":0,"b":{"docs":{},"df":0,"d":{"docs":{},"df":0,"4":{"docs":{},"df":0,"k":{"docs":{},"df":0,"z":{"docs":{},"df":0,"1":{"docs":{"https://phlip9.com/notes/reproducible builds/nix/nix debug spurrious rebuilds/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"h":{"docs":{},"df":0,"i":{"docs":{},"df":0,"w":{"docs":{},"df":0,"c":{"docs":{},"df":0,"8":{"docs":{},"df":0,"m":{"docs":{},"df":0,"0":{"docs":{},"df":0,"4":{"docs":{},"df":0,"z":{"docs":{},"df":0,"d":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"m":{"docs":{},"df":0,"b":{"docs":{},"df":0,"3":{"docs":{},"df":0,"g":{"docs":{},"df":0,"h":{"docs":{},"df":0,"f":{"docs":{},"df":0,"v":{"docs":{},"df":0,"9":{"docs":{},"df":0,"m":{"docs":{},"df":0,"w":{"docs":{},"df":0,"j":{"docs":{},"df":0,"m":{"docs":{},"df":0,"q":{"docs":{},"df":0,"v":{"docs":{},"df":0,"3":{"docs":{},"df":0,"q":{"docs":{},"df":0,"a":{"docs":{},"df":0,"j":{"docs":{},"df":0,"v":{"docs":{"https://phlip9.com/notes/reproducible builds/nix/nix debug broken package build/":{"tf":1.4142135623730951}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"9":{"docs":{},"df":0,"a":{"docs":{},"df":0,"5":{"docs":{},"df":0,"0":{"docs":{},"df":0,"4":{"docs":{},"df":0,"4":{"docs":{},"df":0,"x":{"docs":{},"df":0,"6":{"docs":{},"df":0,"5":{"docs":{},"df":0,"f":{"docs":{},"df":0,"f":{"docs":{},"df":0,"0":{"docs":{},"df":0,"j":{"docs":{},"df":0,"y":{"docs":{},"df":0,"d":{"docs":{},"df":0,"d":{"docs":{},"df":0,"p":{"docs":{},"df":0,"z":{"docs":{},"df":0,"w":{"docs":{},"df":0,"x":{"docs":{},"df":0,"9":{"docs":{},"df":0,"g":{"docs":{},"df":0,"b":{"docs":{},"df":0,"a":{"docs":{},"df":0,"g":{"docs":{},"df":0,"n":{"docs":{},"df":0,"s":{"docs":{},"df":0,"4":{"docs":{},"df":0,"k":{"docs":{},"df":0,"l":{"docs":{},"df":0,"f":{"docs":{},"df":0,"a":{"docs":{"https://phlip9.com/notes/reproducible builds/nix/nix debug spurrious rebuilds/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"c":{"docs":{},"df":0,"7":{"docs":{},"df":0,"h":{"docs":{},"df":0,"6":{"docs":{},"df":0,"f":{"docs":{},"df":0,"3":{"docs":{},"df":0,"i":{"docs":{},"df":0,"b":{"docs":{},"df":0,"k":{"docs":{},"df":0,"d":{"docs":{},"df":0,"4":{"docs":{},"df":0,"p":{"docs":{},"df":0,"5":{"docs":{},"df":0,"2":{"docs":{},"df":0,"8":{"docs":{},"df":0,"z":{"docs":{},"df":0,"3":{"docs":{},"df":0,"f":{"docs":{},"df":0,"1":{"docs":{},"df":0,"y":{"docs":{},"df":0,"d":{"docs":{},"df":0,"b":{"docs":{},"df":0,"m":{"docs":{},"df":0,"6":{"docs":{},"df":0,"l":{"docs":{},"df":0,"r":{"docs":{},"df":0,"4":{"docs":{},"df":0,"z":{"docs":{},"df":0,"n":{"docs":{},"df":0,"p":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/reproducible builds/nix/nix debug spurrious rebuilds/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"h":{"docs":{},"df":0,"f":{"docs":{},"df":0,"4":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"h":{"docs":{},"df":0,"z":{"docs":{},"df":0,"c":{"docs":{},"df":0,"g":{"docs":{},"df":0,"3":{"docs":{},"df":0,"g":{"docs":{},"df":0,"5":{"docs":{},"df":0,"1":{"docs":{},"df":0,"1":{"docs":{},"df":0,"y":{"docs":{},"df":0,"z":{"docs":{},"df":0,"l":{"docs":{},"df":0,"q":{"docs":{},"df":0,"9":{"docs":{},"df":0,"l":{"docs":{},"df":0,"s":{"docs":{},"df":0,"p":{"docs":{},"df":0,"g":{"docs":{},"df":0,"i":{"docs":{},"df":0,"9":{"docs":{},"df":0,"s":{"docs":{},"df":0,"5":{"docs":{},"df":0,"1":{"docs":{},"df":0,"k":{"docs":{},"df":0,"5":{"docs":{},"df":0,"m":{"docs":{"https://phlip9.com/notes/reproducible builds/nix/nix debug spurrious rebuilds/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"l":{"docs":{},"df":0,"m":{"docs":{},"df":0,"1":{"docs":{},"df":0,"p":{"docs":{},"df":0,"6":{"docs":{},"df":0,"9":{"docs":{},"df":0,"6":{"docs":{},"df":0,"b":{"docs":{},"df":0,"w":{"docs":{},"df":0,"r":{"docs":{},"df":0,"k":{"docs":{},"df":0,"p":{"docs":{},"df":0,"p":{"docs":{},"df":0,"i":{"docs":{},"df":0,"7":{"docs":{},"df":0,"4":{"docs":{},"df":0,"6":{"docs":{},"df":0,"w":{"docs":{},"df":0,"c":{"docs":{},"df":0,"4":{"docs":{},"df":0,"h":{"docs":{},"df":0,"m":{"docs":{},"df":0,"q":{"docs":{},"df":0,"v":{"docs":{},"df":0,"f":{"docs":{},"df":0,"1":{"docs":{},"df":0,"1":{"docs":{},"df":0,"7":{"docs":{},"df":0,"z":{"docs":{},"df":0,"q":{"docs":{},"df":0,"s":{"docs":{},"df":0,"a":{"docs":{"https://phlip9.com/notes/reproducible builds/nix/nix debug spurrious rebuilds/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"r":{"docs":{},"df":0,"y":{"docs":{},"df":0,"b":{"docs":{},"df":0,"d":{"docs":{},"df":0,"v":{"docs":{},"df":0,"g":{"docs":{},"df":0,"q":{"docs":{},"df":0,"w":{"docs":{},"df":0,"r":{"docs":{},"df":0,"b":{"docs":{},"df":0,"6":{"docs":{},"df":0,"h":{"docs":{},"df":0,"j":{"docs":{},"df":0,"w":{"docs":{},"df":0,"y":{"docs":{},"df":0,"s":{"docs":{},"df":0,"1":{"docs":{},"df":0,"8":{"docs":{},"df":0,"y":{"docs":{},"df":0,"i":{"docs":{},"df":0,"r":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{},"df":0,"q":{"docs":{},"df":0,"1":{"docs":{},"df":0,"d":{"docs":{},"df":0,"2":{"docs":{},"df":0,"0":{"docs":{},"df":0,"c":{"docs":{},"df":0,"8":{"docs":{},"df":0,"r":{"docs":{},"df":0,"p":{"docs":{"https://phlip9.com/notes/reproducible builds/nix/nix debug spurrious rebuilds/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"v":{"docs":{},"df":0,"5":{"docs":{},"df":0,"2":{"docs":{},"df":0,"3":{"docs":{},"df":0,"h":{"docs":{},"df":0,"p":{"docs":{},"df":0,"x":{"docs":{},"df":0,"d":{"docs":{},"df":0,"b":{"docs":{},"df":0,"z":{"docs":{},"df":0,"x":{"docs":{},"df":0,"w":{"docs":{},"df":0,"w":{"docs":{},"df":0,"l":{"docs":{},"df":0,"k":{"docs":{},"df":0,"g":{"docs":{},"df":0,"z":{"docs":{},"df":0,"b":{"docs":{},"df":0,"3":{"docs":{},"df":0,"h":{"docs":{},"df":0,"d":{"docs":{},"df":0,"h":{"docs":{},"df":0,"b":{"docs":{},"df":0,"c":{"docs":{},"df":0,"l":{"docs":{},"df":0,"x":{"docs":{},"df":0,"q":{"docs":{},"df":0,"h":{"docs":{},"df":0,"7":{"docs":{},"df":0,"b":{"docs":{},"df":0,"m":{"docs":{},"df":0,"4":{"docs":{"https://phlip9.com/notes/reproducible builds/nix/nix debug spurrious rebuilds/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},":":{"docs":{},"df":0,"$":{"docs":{},"df":0,"n":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,")":{"docs":{},"df":0,"\\":{"docs":{},"df":0,"0":{"docs":{},"df":0,"4":{"docs":{},"df":0,"0":{"docs":{"https://phlip9.com/notes/reproducible builds/nix/nix auto-allocate-uids -> nixbld users/":{"tf":1.0}},"df":1}}}}}}}}}}},"b":{"docs":{},"df":0,"l":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/reproducible builds/nix/nix auto-allocate-uids -> nixbld users/":{"tf":2.0}},"df":1,"$":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/reproducible builds/nix/nix auto-allocate-uids -> nixbld users/":{"tf":1.0}},"df":1}},",":{"docs":{},"df":0,"k":{"docs":{},"df":0,"v":{"docs":{},"df":0,"m":{"docs":{"https://phlip9.com/notes/reproducible builds/nix/nix auto-allocate-uids -> nixbld users/":{"tf":1.0}},"df":1}}}},"@":{"docs":{},"df":0,"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"c":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"h":{"docs":{},"df":0,"o":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,":":{"docs":{},"df":0,"/":{"docs":{},"df":0,"v":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"/":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"b":{"docs":{},"df":0,"/":{"docs":{},"df":0,"c":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/reproducible builds/nix/nix debug broken package build/":{"tf":1.4142135623730951}},"df":1}}}}}}}}}}}}}}}}}}}}}}}},"x":{"docs":{"https://phlip9.com/notes/reproducible builds/nix/nix auto-allocate-uids -> nixbld users/":{"tf":1.7320508075688772}},"df":1}}},"u":{"docs":{},"df":0,"i":{"docs":{},"df":0,"l":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/reproducible builds/nix/links/":{"tf":1.0}},"df":1}}}}},"c":{"docs":{},"df":0,"f":{"docs":{},"df":0,"g":{"docs":{"https://phlip9.com/notes/reproducible builds/nix/links/":{"tf":1.0}},"df":1}},"o":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/reproducible builds/nix/links/":{"tf":1.0}},"df":1}}},"o":{"docs":{"https://phlip9.com/notes/devops/secrets/sops-nix/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/nix/links/":{"tf":2.8284271247461903},"https://phlip9.com/notes/reproducible builds/nix/nix auto-allocate-uids -> nixbld users/":{"tf":1.0}},"df":3,"p":{"docs":{"https://phlip9.com/notes/reproducible builds/nix/links/":{"tf":1.0}},"df":1}},"p":{"docs":{},"df":0,"k":{"docs":{},"df":0,"g":{"docs":{"https://phlip9.com/notes/reproducible builds/nix/nix debug broken package build/":{"tf":1.0}},"df":1,"s":{"docs":{},"df":0,"#":{"docs":{},"df":0,"c":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/reproducible builds/nix/nix debug broken package build/":{"tf":1.0}},"df":1}}}},"j":{"docs":{},"df":0,"q":{"docs":{"https://phlip9.com/notes/reproducible builds/nix/nix debug spurrious rebuilds/":{"tf":1.0}},"df":1}},"n":{"docs":{},"df":0,"i":{"docs":{},"df":0,"x":{"docs":{"https://phlip9.com/notes/reproducible builds/nix/nix debug spurrious rebuilds/":{"tf":1.0}},"df":1}}}},"/":{"docs":{},"df":0,".":{"docs":{},"df":0,".":{"docs":{},"df":0,".":{"docs":{},"df":0,"/":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"u":{"docs":{},"df":0,"x":{"docs":{},"df":0,"/":{"docs":{},"df":0,"s":{"docs":{},"df":0,"g":{"docs":{},"df":0,"x":{"docs":{"https://phlip9.com/notes/reproducible builds/nix/links/":{"tf":1.0}},"df":1}}}}}}}}}}}}}},"=":{"docs":{},"df":0,"f":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"k":{"docs":{},"df":0,"e":{"docs":{},"df":0,":":{"docs":{},"df":0,"n":{"docs":{},"df":0,"i":{"docs":{},"df":0,"x":{"docs":{},"df":0,"p":{"docs":{},"df":0,"k":{"docs":{},"df":0,"g":{"docs":{"https://phlip9.com/notes/reproducible builds/nix/nix auto-allocate-uids -> nixbld users/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}},"l":{"docs":{"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.0}},"df":1,"o":{"docs":{},"df":0,"h":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/performance/simdjson talk/":{"tf":1.0}},"df":1}}}}}}},"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{},"df":0,"k":{"docs":{"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.0}},"df":1}}}},"n":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"p":{"docs":{"https://phlip9.com/notes/lang/flutter/flutter setup/":{"tf":2.23606797749979}},"df":1}}}}}},"z":{"docs":{"https://phlip9.com/notes/statistics probability/multinomial distribution/":{"tf":2.23606797749979}},"df":1}},"o":{"docs":{},"df":0,"_":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"v":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"g":{"docs":{"https://phlip9.com/notes/fuzzing/fuzzcheck-rs/":{"tf":1.0}},"df":1}}}}}}}},"b":{"docs":{},"df":0,"o":{"docs":{},"df":0,"d":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0}},"df":1}}}},"c":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{},"df":0,"s":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"f":{"docs":{},"df":0,"f":{"docs":{},"df":0,"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}},"m":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/devops/algo wireguard VPN server/":{"tf":1.7320508075688772}},"df":1}},"o":{"docs":{},"df":0,"m":{"docs":{"https://phlip9.com/notes/devops/algo wireguard VPN server/":{"tf":1.7320508075688772}},"df":1}}},"d":{"docs":{},"df":0,"e":{"docs":{"https://phlip9.com/notes/AI ML/Expectimax Search/":{"tf":2.8284271247461903},"https://phlip9.com/notes/b l o c k c h a i n/bip158 - compact block filters/":{"tf":1.4142135623730951},"https://phlip9.com/notes/b l o c k c h a i n/btc utreexo - utxo accumulator/":{"tf":2.23606797749979},"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":3.1622776601683795},"https://phlip9.com/notes/btc-ln/BOLT 11 - invoices/":{"tf":2.6457513110645907},"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":3.0},"https://phlip9.com/notes/btc-ln/BOLT 4 - onion routing protocol/":{"tf":3.872983346207417},"https://phlip9.com/notes/btc-ln/BOLT 7 - p2p node and channel discovery/":{"tf":4.123105625617661},"https://phlip9.com/notes/btc-ln/hosted channels/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/lightning libs/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/lightning network notes/":{"tf":1.4142135623730951},"https://phlip9.com/notes/btc-ln/lightning rod/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":3.0},"https://phlip9.com/notes/btc-ln/submarine swaps/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/marblerun/":{"tf":1.4142135623730951},"https://phlip9.com/notes/devops/AKS - azure kubernetes service/":{"tf":1.4142135623730951},"https://phlip9.com/notes/devops/consul/":{"tf":1.0},"https://phlip9.com/notes/devops/deployment strategies/":{"tf":3.1622776601683795},"https://phlip9.com/notes/devops/kind (kubernetes in docker)/":{"tf":1.0},"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.4142135623730951}},"df":21,"_":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"n":{"docs":{},"df":0,"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"n":{"docs":{},"df":0,"c":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 7 - p2p node and channel discovery/":{"tf":1.7320508075688772},"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.0}},"df":2}}}}}}},"i":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 11 - invoices/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/BOLT 7 - p2p node and channel discovery/":{"tf":1.0}},"df":2,"_":{"docs":{},"df":0,"1":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 7 - p2p node and channel discovery/":{"tf":1.0}},"df":1},"2":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 7 - p2p node and channel discovery/":{"tf":1.0}},"df":1}}}},"p":{"docs":{},"df":0,"k":{"docs":{"https://phlip9.com/notes/postgres/snippets/":{"tf":1.7320508075688772}},"df":1}},"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"g":{"docs":{},"df":0,"_":{"docs":{},"df":0,"1":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 7 - p2p node and channel discovery/":{"tf":1.4142135623730951}},"df":1},"2":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 7 - p2p node and channel discovery/":{"tf":1.4142135623730951}},"df":1}}}}}}}},"i":{"docs":{},"df":0,"s":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 8 - secure noise transport/":{"tf":1.7320508075688772}},"df":1,"e":{"docs":{},"df":0,"(":{"docs":{},"df":0,"u":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1},"x":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":2.0}},"df":1}},"_":{"docs":{},"df":0,"i":{"docs":{},"df":0,"k":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 8 - secure noise transport/":{"tf":1.0}},"df":1}},"x":{"docs":{},"df":0,"k":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 8 - secure noise transport/":{"tf":1.0}},"df":1},"x":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 8 - secure noise transport/":{"tf":1.0}},"df":1}}},"i":{"docs":{},"df":0,"x":{"docs":{"https://phlip9.com/notes/crypto/TLS self-signed pubkey-only certs/":{"tf":1.0}},"df":1}}}}},"m":{"docs":{"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.4142135623730951}},"df":1,":":{"docs":{},"df":0,":":{"docs":{},"df":0,"b":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{},"df":0,":":{"docs":{},"df":0,":":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"t":{"docs":{},"df":0,":":{"docs":{},"df":0,":":{"docs":{},"df":0,"{":{"docs":{},"df":0,"c":{"docs":{},"df":0,"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"s":{"docs":{},"df":0,"u":{"docs":{"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}},"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,":":{"docs":{},"df":0,":":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"&":{"docs":{},"df":0,"l":{"docs":{},"df":0,"t":{"docs":{},"df":0,";":{"docs":{},"df":0,"&":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{},"df":0,"p":{"docs":{},"df":0,";":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"&":{"docs":{},"df":0,"g":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}},"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"q":{"docs":{},"df":0,"u":{"docs":{"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.0}},"df":1,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"c":{"docs":{},"df":0,"e":{"docs":{},"df":0,":":{"docs":{},"df":0,":":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"m":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":2.0}},"df":1,"a":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.4142135623730951}},"df":1}}}}}}}}}}}}}}}}}}}},"a":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/devops/nomad/":{"tf":3.3166247903554}},"df":1}},"i":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":1.0}},"df":1}}},"n":{"docs":{"https://phlip9.com/notes/AI ML/Expectimax Search/":{"tf":1.4142135623730951},"https://phlip9.com/notes/AI ML/Markov Decision Process (MDP)/":{"tf":1.0},"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0},"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/foreign bank account report (FBAR)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/b l o c k c h a i n/btc utreexo - utxo accumulator/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/BOLT 11 - invoices/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/atomic multipath payments (AMP)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/btc-ln/breez lightning service providers/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel TDX/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/mystikos/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":1.4142135623730951},"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":1.0},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":3.1622776601683795},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":2.23606797749979},"https://phlip9.com/notes/lang/koka-lang/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/operator fixity and precedence/":{"tf":1.0},"https://phlip9.com/notes/networking/CIDR/":{"tf":1.0},"https://phlip9.com/notes/performance/simdjson talk/":{"tf":1.4142135623730951},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.7320508075688772},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":2.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":3.0},"https://phlip9.com/notes/statistics probability/CDF confidence bands - DKW inequality/":{"tf":1.4142135623730951},"https://phlip9.com/notes/statistics probability/multinomial distribution/":{"tf":1.4142135623730951}},"df":26,"c":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":4.242640687119285},"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":2.0},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/secure time/":{"tf":1.0},"https://phlip9.com/notes/crypto/acme protocol/":{"tf":2.23606797749979},"https://phlip9.com/notes/devops/secrets/ejson-kms (AWS)/":{"tf":2.0}},"df":8,"e":{"docs":{},"df":0,".":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"p":{"docs":{},"df":0,"y":{"docs":{},"df":0,"_":{"docs":{},"df":0,"f":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"_":{"docs":{},"df":0,"s":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"e":{"docs":{},"df":0,"(":{"docs":{},"df":0,"&":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{},"df":0,"p":{"docs":{},"df":0,";":{"docs":{},"df":0,"c":{"docs":{},"df":0,"i":{"docs":{},"df":0,"p":{"docs":{},"df":0,"h":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"x":{"docs":{},"df":0,"t":{"docs":{},"df":0,"[":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{},"df":0,"_":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"_":{"docs":{},"df":0,"s":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":2.0}},"df":1}}}},"e":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.4142135623730951},"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.4142135623730951},"https://phlip9.com/notes/btc-ln/BOLT 8 - secure noise transport/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.4142135623730951},"https://phlip9.com/notes/combinatorics/k-combinations of a multiset/":{"tf":1.7320508075688772},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/gramine/":{"tf":1.0},"https://phlip9.com/notes/misc/arm target triples/":{"tf":1.4142135623730951},"https://phlip9.com/notes/networking/network interfaces/":{"tf":2.449489742783178},"https://phlip9.com/notes/performance/bit hacks/":{"tf":2.0},"https://phlip9.com/notes/postgres/postgres performance tuning/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/nix/nix debug spurrious rebuilds/":{"tf":1.0}},"df":12,"t":{"docs":{},"df":0,"h":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"s":{"docs":{"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.0}},"df":1}}}}}}}},"n":{"docs":{},"df":0,"u":{"docs":{},"df":0,"l":{"docs":{},"df":0,"l":{"docs":{},"df":0,"&":{"docs":{},"df":0,"l":{"docs":{},"df":0,"t":{"docs":{},"df":0,";":{"docs":{},"df":0,"u":{"docs":{},"df":0,"8":{"docs":{},"df":0,"&":{"docs":{},"df":0,"g":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.0}},"df":1}}}}}}}}}}}}}},"o":{"docs":{},"df":0,"p":{"docs":{"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.0}},"df":1}},"p":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"f":{"docs":{},"df":0,"i":{"docs":{},"df":0,"x":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.7320508075688772}},"df":1}}}}}}}}}},"q":{"docs":{},"df":0,"u":{"docs":{},"df":0,"e":{"docs":{},"df":0,"u":{"docs":{"https://phlip9.com/notes/networking/network interfaces/":{"tf":2.8284271247461903}},"df":1}}}},"r":{"docs":{},"df":0,"_":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":3.7416573867739413}},"df":1},"x":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":3.3166247903554}},"df":1},"z":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":3.7416573867739413}},"df":1}},"m":{"docs":{"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.4142135623730951}},"df":2,"(":{"docs":{},"df":0,"x":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.4142135623730951}},"df":1}},"_":{"docs":{},"df":0,"s":{"docs":{},"df":0,"q":{"docs":{},"df":0,"(":{"docs":{},"df":0,"d":{"docs":{},"df":0,"i":{"docs":{},"df":0,"_":{"docs":{},"df":0,"x":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1}}}},"o":{"docs":{},"df":0,"c":{"docs":{},"df":0,"_":{"docs":{},"df":0,"x":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.4142135623730951}},"df":1}}}},"x":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1}}}}},"a":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/AI ML/Expectimax Search/":{"tf":1.0},"https://phlip9.com/notes/android/root phone with magisk/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":2.0},"https://phlip9.com/notes/btc-ln/breez lightning service providers/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":2.23606797749979},"https://phlip9.com/notes/crypto/(talk) authenticated data structures for stateless validation/":{"tf":1.0},"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":1.0},"https://phlip9.com/notes/fuzzing/fuzzcheck-rs/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0},"https://phlip9.com/notes/lang/gdb ref/":{"tf":1.0},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.4142135623730951},"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/MAD - median absolute deviation/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/testing whether a coin is fair/":{"tf":2.6457513110645907}},"df":17,"i":{"docs":{},"df":0,"z":{"docs":{},"df":0,"e":{"docs":{},"df":0,"(":{"docs":{},"df":0,"0":{"docs":{},"df":0,".":{"docs":{},"df":0,"6":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1}}},"m":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1},"n":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"_":{"docs":{},"df":0,"x":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.4142135623730951}},"df":1}}}}},"p":{"docs":{},"df":0,"_":{"docs":{},"df":0,"x":{"docs":{},"df":0,"*":{"docs":{},"df":0,"u":{"docs":{},"df":0,"u":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1}}}}},"o":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.4142135623730951}},"df":1}},"r":{"docs":{},"df":0,"d":{"docs":{},"df":0,"_":{"docs":{},"df":0,"x":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1}}}},"u":{"docs":{},"df":0,"u":{"docs":{},"df":0,"_":{"docs":{},"df":0,"x":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1}}}},"v":{"docs":{},"df":0,"v":{"docs":{},"df":0,"_":{"docs":{},"df":0,"x":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1}}}},"w":{"docs":{},"df":0,"w":{"docs":{},"df":0,"_":{"docs":{},"df":0,"x":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1}}}},"x":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1}}}}}}}},"t":{"docs":{},"df":0,"h":{"docs":{},"df":0,"b":{"docs":{},"df":0,"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/devops/nomad/":{"tf":1.0}},"df":1}}}}}}}},"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"b":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/lang/rust/understanding sycamore reactivity/":{"tf":1.0}},"df":1}},"t":{"docs":{"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/lua/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/operator fixity and precedence/":{"tf":1.0},"https://phlip9.com/notes/networking/CIDR/":{"tf":2.8284271247461903}},"df":4}},"e":{"docs":{"https://phlip9.com/notes/":{"tf":1.0},"https://phlip9.com/notes/WSL/WSL2 custom kernel/":{"tf":1.0},"https://phlip9.com/notes/android/ADB over TCP inside WSL2/":{"tf":1.0},"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0},"https://phlip9.com/notes/android/root phone with magisk/":{"tf":1.0},"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/monetary instruments/":{"tf":1.0},"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/money services business (MSB)/":{"tf":1.0},"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.4142135623730951},"https://phlip9.com/notes/btc-ln/lightning network notes/":{"tf":1.4142135623730951},"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.7320508075688772},"https://phlip9.com/notes/btc-ln/submarine swaps/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":2.0},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":2.0},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/secure time/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":1.4142135623730951},"https://phlip9.com/notes/crypto/biscuit authz/":{"tf":1.0},"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":1.0},"https://phlip9.com/notes/devops/azure CLI/":{"tf":1.4142135623730951},"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":1.0},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":3.1622776601683795},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0},"https://phlip9.com/notes/lang/koka-lang/":{"tf":1.0},"https://phlip9.com/notes/lang/lua/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/rust/rr with rust/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/understanding sycamore reactivity/":{"tf":1.0},"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":2.23606797749979},"https://phlip9.com/notes/misc/kintsugi/":{"tf":1.0},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.4142135623730951},"https://phlip9.com/notes/misc/setting up a headless raspbian boot image/":{"tf":1.0},"https://phlip9.com/notes/networking/CIDR/":{"tf":1.0},"https://phlip9.com/notes/nvim/universal-ctags Notes/":{"tf":1.4142135623730951},"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.4142135623730951},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/rebuilderd/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":2.23606797749979},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":3.1622776601683795},"https://phlip9.com/notes/statistics probability/CDF confidence bands - DKW inequality/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/G-test - multinomial goodness-of-fit/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/standard error/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/testing whether a coin is fair/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/winsorize/":{"tf":1.0}},"df":43,".":{"docs":{},"df":0,"a":{"docs":{},"df":0,"b":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.0}},"df":1}}},"g":{"docs":{},"df":0,"n":{"docs":{},"df":0,"u":{"docs":{},"df":0,".":{"docs":{},"df":0,"b":{"docs":{},"df":0,"u":{"docs":{},"df":0,"i":{"docs":{},"df":0,"l":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.0}},"df":1}}}}},"p":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"p":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.0}},"df":1}}}}}}}}}}}}}},"h":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0},"https://phlip9.com/notes/postgres/snippets/":{"tf":1.0}},"df":2},"i":{"docs":{},"df":0,"c":{"docs":{"https://phlip9.com/notes/AI ML/Expectimax Search/":{"tf":1.0},"https://phlip9.com/notes/AI ML/Markov Decision Process (MDP)/":{"tf":1.0},"https://phlip9.com/notes/combinatorics/k-combinations of a multiset/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0},"https://phlip9.com/notes/crypto/biscuit authz/":{"tf":1.0},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0},"https://phlip9.com/notes/lang/lua/":{"tf":1.0},"https://phlip9.com/notes/management/relieve often - why generals were more successful in WWII/":{"tf":1.0},"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/reproducible-builds.org/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.4142135623730951},"https://phlip9.com/notes/statistics probability/testing whether a coin is fair/":{"tf":1.0}},"df":13},"f":{"docs":{"https://phlip9.com/notes/btc-ln/lightning rod/":{"tf":1.7320508075688772}},"df":1,"i":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/fastpay/":{"tf":2.0},"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/understanding sycamore reactivity/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/lightning router overview/":{"tf":1.0}},"df":5}}},"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"g":{"docs":{},"df":0,"h":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.7320508075688772},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":2.449489742783178}},"df":2}}}}}}}},"v":{"docs":{"https://phlip9.com/notes/misc/setting up a headless raspbian boot image/":{"tf":2.0}},"df":1,"i":{"docs":{},"df":0,"f":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"c":{"docs":{},"df":0,"i":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"/":{"docs":{},"df":0,"f":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"p":{"docs":{},"df":0,"a":{"docs":{},"df":0,"y":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/fastpay/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}},"w":{"docs":{"https://phlip9.com/notes/android/OTA updates for rooted android phone/":{"tf":1.0},"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.7320508075688772},"https://phlip9.com/notes/android/root phone with magisk/":{"tf":2.23606797749979},"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/foreign bank account report (FBAR)/":{"tf":1.0},"https://phlip9.com/notes/b l o c k c h a i n/fastpay/":{"tf":1.4142135623730951},"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.7320508075688772},"https://phlip9.com/notes/btc-ln/lightning rod/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.7320508075688772},"https://phlip9.com/notes/confidential computing/gramine/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel TDX/":{"tf":1.0},"https://phlip9.com/notes/crypto/acme protocol/":{"tf":1.0},"https://phlip9.com/notes/crypto/biscuit authz/":{"tf":1.0},"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":1.0},"https://phlip9.com/notes/devops/deployment strategies/":{"tf":1.0},"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":1.0},"https://phlip9.com/notes/keyboards/moergo glove80/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/flutter/flutter setup/":{"tf":1.0},"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":1.4142135623730951},"https://phlip9.com/notes/misc/kintsugi/":{"tf":1.4142135623730951},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0},"https://phlip9.com/notes/networking/CIDR/":{"tf":1.0}},"df":27,"'":{"docs":{"https://phlip9.com/notes/misc/kintsugi/":{"tf":1.0}},"df":1},"a":{"docs":{},"df":0,"d":{"docs":{},"df":0,"a":{"docs":{},"df":0,"y":{"docs":{"https://phlip9.com/notes/networking/CIDR/":{"tf":1.0}},"df":1}}}},"h":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/performance/simdjson talk/":{"tf":1.0}},"df":1}}}}},"p":{"docs":{},"df":0,"m":{"docs":{"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.0}},"df":1}},"q":{"docs":{},"df":0,"o":{"docs":{},"df":0,"8":{"docs":{"https://phlip9.com/notes/misc/kintsugi/":{"tf":1.0}},"df":1}}},"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"w":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0}},"df":1}}},"s":{"docs":{"https://phlip9.com/notes/devops/algo wireguard VPN server/":{"tf":3.1622776601683795}},"df":1,"1":{"docs":{},"df":0,".":{"docs":{},"df":0,"d":{"docs":{},"df":0,"i":{"docs":{},"df":0,"g":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"c":{"docs":{},"df":0,"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,".":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{"https://phlip9.com/notes/devops/algo wireguard VPN server/":{"tf":1.4142135623730951}},"df":1}}}}}}}}}}}}}}}}}},"2":{"docs":{},"df":0,".":{"docs":{},"df":0,"d":{"docs":{},"df":0,"i":{"docs":{},"df":0,"g":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"c":{"docs":{},"df":0,"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,".":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{"https://phlip9.com/notes/devops/algo wireguard VPN server/":{"tf":1.4142135623730951}},"df":1}}}}}}}}}}}}}}}}}},"3":{"docs":{},"df":0,".":{"docs":{},"df":0,"d":{"docs":{},"df":0,"i":{"docs":{},"df":0,"g":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"c":{"docs":{},"df":0,"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,".":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{"https://phlip9.com/notes/devops/algo wireguard VPN server/":{"tf":1.4142135623730951}},"df":1}}}}}}}}}}}}}}}}}},"a":{"docs":{"https://phlip9.com/notes/devops/kubernetes/":{"tf":1.0}},"df":1}},"t":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/secure time/":{"tf":2.6457513110645907}},"df":1,"h":{"docs":{"https://phlip9.com/notes/lang/rust/rr with rust/":{"tf":1.0}},"df":1},"p":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/secure time/":{"tf":1.7320508075688772}},"df":1,"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/secure time/":{"tf":1.0}},"df":1}}}}},"u":{"docs":{},"df":0,"l":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":4.0},"https://phlip9.com/notes/devops/azure CLI/":{"tf":3.872983346207417},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":4.47213595499958},"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/p-value/":{"tf":2.23606797749979}},"df":5,"a":{"docs":{},"df":0,"b":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0}},"df":1}},"r":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/lang/operator fixity and precedence/":{"tf":1.0}},"df":1}}}}},"m":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.0},"https://phlip9.com/notes/design/form design/":{"tf":1.0},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":2.0},"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/winsorize/":{"tf":1.4142135623730951}},"df":5,"[":{"docs":{},"df":0,"c":{"docs":{},"df":0,"p":{"docs":{},"df":0,"u":{"docs":{"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.0}},"df":1}}},"e":{"docs":{},"df":0,"x":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"n":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.0}},"df":1}}}}}}},"p":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{},"df":0,",":{"docs":{},"df":0,"e":{"docs":{},"df":0,"x":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"n":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.0}},"df":1}}}}}}}}}},"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"b":{"docs":{},"df":0,"e":{"docs":{},"df":0,"f":{"docs":{},"df":0,"u":{"docs":{},"df":0,"n":{"docs":{},"df":0,"c":{"docs":{"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.0}},"df":1}}}}}}}}}},"_":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":5.5677643628300215}},"df":1}}}}}},"a":{"docs":{"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.0}},"df":1},"b":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0},"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/foreign bank account report (FBAR)/":{"tf":1.0},"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/money services business (MSB)/":{"tf":1.0},"https://phlip9.com/notes/b l o c k c h a i n/fastpay/":{"tf":1.7320508075688772},"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":2.0},"https://phlip9.com/notes/btc-ln/lightning rod/":{"tf":1.0},"https://phlip9.com/notes/combinatorics/k-combinations of a multiset/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/gramine/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":2.0},"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.0},"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":1.0},"https://phlip9.com/notes/design/form design/":{"tf":1.0},"https://phlip9.com/notes/devops/nomad/":{"tf":1.0},"https://phlip9.com/notes/keyboards/moergo glove80/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0},"https://phlip9.com/notes/lang/lua/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/operator fixity and precedence/":{"tf":2.0},"https://phlip9.com/notes/lang/rust/rr with rust/":{"tf":1.0},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.7320508075688772},"https://phlip9.com/notes/networking/CIDR/":{"tf":1.4142135623730951},"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.4142135623730951},"https://phlip9.com/notes/performance/simdjson talk/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/reproducible-builds.org/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.7320508075688772},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":2.449489742783178},"https://phlip9.com/notes/statistics probability/G-test - multinomial goodness-of-fit/":{"tf":1.4142135623730951},"https://phlip9.com/notes/statistics probability/multinomial distribution/":{"tf":1.4142135623730951},"https://phlip9.com/notes/statistics probability/standard error/":{"tf":2.0},"https://phlip9.com/notes/statistics probability/testing whether a coin is fair/":{"tf":2.0},"https://phlip9.com/notes/statistics probability/winsorize/":{"tf":2.6457513110645907}},"df":32,"p":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"s":{"docs":{"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.7320508075688772}},"df":1,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"g":{"docs":{},"df":0,"(":{"docs":{},"df":0,"\"":{"docs":{},"df":0,"4":{"docs":{},"df":0,"2":{"docs":{},"df":0,"\"":{"docs":{},"df":0,")":{"docs":{},"df":0,".":{"docs":{},"df":0,"p":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}},"2":{"docs":{"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0}},"df":1}}}}}}}}}}},"e":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/lang/operator fixity and precedence/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.7320508075688772}},"df":2}},"f":{"docs":{},"df":0,"m":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":3.3166247903554}},"df":1}}},"p":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1}}}},"v":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{},"df":0,"i":{"docs":{},"df":0,"a":{"docs":{"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0},"https://phlip9.com/notes/misc/pop_OS! tweaks/":{"tf":1.7320508075688772}},"df":2,"/":{"docs":{},"df":0,"5":{"docs":{},"df":0,"1":{"docs":{},"df":0,"0":{"docs":{"https://phlip9.com/notes/misc/pop_OS! tweaks/":{"tf":1.0}},"df":1}}}}}}},"m":{"docs":{"https://phlip9.com/notes/lang/flutter/flutter setup/":{"tf":1.4142135623730951},"https://phlip9.com/notes/nvim/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/nix/nix debug broken package build/":{"tf":1.0}},"df":3}},"m":{"docs":{"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0}},"df":1}},"}":{"docs":{},"df":0,"{":{"docs":{},"df":0,"p":{"docs":{},"df":0,"_":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/statistics probability/G-test - multinomial goodness-of-fit/":{"tf":1.0}},"df":1}}}}}},"o":{"docs":{"https://phlip9.com/notes/android/android cli setup/":{"tf":1.4142135623730951},"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/":{"tf":1.4142135623730951},"https://phlip9.com/notes/b l o c k c h a i n/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.0},"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":2.0},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.0}},"df":6,"(":{"docs":{},"df":0,"1":{"docs":{"https://phlip9.com/notes/crypto/(talk) authenticated data structures for stateless validation/":{"tf":1.0}},"df":1},"n":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/fastpay/":{"tf":1.0},"https://phlip9.com/notes/distributed systems/papers/(2021) Leaderless Consensus/":{"tf":1.0}},"df":2,"^":{"docs":{},"df":0,"4":{"docs":{"https://phlip9.com/notes/distributed systems/papers/(2021) Leaderless Consensus/":{"tf":1.4142135623730951}},"df":1}}}},"/":{"docs":{},"df":0,"w":{"docs":{"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0}},"df":1}},"[":{"docs":{},"df":0,"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{},"df":0,"b":{"docs":{},"df":0,"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":1.0}},"df":1}}}}}}}},"s":{"docs":{},"df":0,"o":{"docs":{},"df":0,"c":{"docs":{},"df":0,"k":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":1.0}},"df":1}}}}}}},"_":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/statistics probability/G-test - multinomial goodness-of-fit/":{"tf":1.4142135623730951}},"df":1},"o":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0}},"df":1}},"a":{"docs":{},"df":0,"k":{"docs":{"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":1.0}},"df":1,"/":{"docs":{},"df":0,"o":{"docs":{},"df":0,"a":{"docs":{},"df":0,"k":{"docs":{"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":1.0}},"df":1}}}}},"s":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":3.7416573867739413},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":2.449489742783178},"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":1.0}},"df":4}},"u":{"docs":{},"df":0,"t":{"docs":{},"df":0,"h":{"docs":{"https://phlip9.com/notes/crypto/dex - open-source OIDC & OAuth 2.0 provider/":{"tf":1.7320508075688772},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.4142135623730951}},"df":3,"2":{"docs":{},"df":0,".":{"docs":{},"df":0,"0":{"docs":{"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":2.0}},"df":2}}}}}}},"b":{"docs":{},"df":0,"j":{"docs":{},"df":0,".":{"docs":{},"df":0,"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{},"df":0,"h":{"docs":{},"df":0,"o":{"docs":{},"df":0,"d":{"docs":{},"df":0,"(":{"docs":{},"df":0,"o":{"docs":{},"df":0,"b":{"docs":{},"df":0,"j":{"docs":{"https://phlip9.com/notes/lang/lua/":{"tf":1.0}},"df":1}}}}}}}}}}},":":{"docs":{},"df":0,"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{},"df":0,"h":{"docs":{},"df":0,"o":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/lang/lua/":{"tf":1.0}},"df":1,"(":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"g":{"docs":{"https://phlip9.com/notes/lang/lua/":{"tf":1.0}},"df":1}}}}}}}}}}},"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/AI ML/Markov Decision Process (MDP)/":{"tf":1.0},"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/foreign bank account report (FBAR)/":{"tf":1.0},"https://phlip9.com/notes/b l o c k c h a i n/sui/":{"tf":1.0},"https://phlip9.com/notes/combinatorics/k-combinations of a multiset/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.0},"https://phlip9.com/notes/devops/azure CLI/":{"tf":1.0},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":3.3166247903554},"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":1.0},"https://phlip9.com/notes/misc/kintsugi/":{"tf":1.0},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.7320508075688772},"https://phlip9.com/notes/misc/setting up a headless raspbian boot image/":{"tf":1.0}},"df":13}}}},"n":{"docs":{},"df":0,"o":{"docs":{},"df":0,"x":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1}}}},"s":{"docs":{},"df":0,"c":{"docs":{},"df":0,"u":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/reproducible builds/nix/nix auto-allocate-uids -> nixbld users/":{"tf":1.0}},"df":1}}},"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"v":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/fastpay/":{"tf":1.4142135623730951},"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/secure time/":{"tf":1.0},"https://phlip9.com/notes/devops/linkerd/":{"tf":1.0},"https://phlip9.com/notes/devops/service mesh/":{"tf":1.0},"https://phlip9.com/notes/distributed systems/papers/(2021) Leaderless Consensus/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/rust/understanding sycamore reactivity/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.4142135623730951},"https://phlip9.com/notes/statistics probability/G-test - multinomial goodness-of-fit/":{"tf":2.0},"https://phlip9.com/notes/statistics probability/multinomial distribution/":{"tf":1.7320508075688772},"https://phlip9.com/notes/statistics probability/p-value/":{"tf":2.23606797749979},"https://phlip9.com/notes/statistics probability/standard error/":{"tf":1.4142135623730951}},"df":16}}},"i":{"docs":{},"df":0,"d":{"docs":{},"df":0,"i":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.0}},"df":1}}}}},"o":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.0}},"df":1}}}}},"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/fastpay/":{"tf":1.0},"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.4142135623730951},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/arubanetworks captive portal/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.4142135623730951},"https://phlip9.com/notes/statistics probability/p-value/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/testing whether a coin is fair/":{"tf":2.23606797749979}},"df":9}}}},"v":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/fastpay/":{"tf":1.0},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0}},"df":2,"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"u":{"docs":{"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":1.0},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0}},"df":2}}}}},"c":{"docs":{},"df":0,"3":{"docs":{"https://phlip9.com/notes/confidential computing/marblerun/":{"tf":1.0}},"df":1},"_":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":2.449489742783178}},"df":1},"x":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.4142135623730951}},"df":1},"z":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":2.449489742783178}},"df":1}},"a":{"docs":{"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.4142135623730951}},"df":1,"l":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.7320508075688772}},"df":1},"m":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/nix/links/":{"tf":1.0}},"df":2}}},"c":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":2.449489742783178}},"df":1,"_":{"docs":{},"df":0,"s":{"docs":{},"df":0,"p":{"docs":{},"df":0,"h":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"(":{"docs":{},"df":0,"p":{"docs":{},"df":0,"o":{"docs":{},"df":0,"s":{"docs":{},"df":0,"_":{"docs":{},"df":0,"x":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.7320508075688772}},"df":1}}}}}}}}}}}}},"a":{"docs":{},"df":0,"s":{"docs":{"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0}},"df":1,"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/lang/rust/rr with rust/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.0}},"df":2}}}}},"l":{"docs":{},"df":0,"u":{"docs":{},"df":0,"m":{"docs":{"https://phlip9.com/notes/confidential computing/marblerun/":{"tf":1.0}},"df":1},"s":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.7320508075688772}},"df":1}}},"u":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/combinatorics/k-combinations of a multiset/":{"tf":1.0},"https://phlip9.com/notes/devops/secrets/1password - secrets automation/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/reproducible-builds.org/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/arubanetworks captive portal/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.0}},"df":5}}},"t":{"docs":{"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0}},"df":1,"a":{"docs":{},"df":0,"v":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1}},"o":{"docs":{},"df":0,"b":{"docs":{"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/foreign bank account report (FBAR)/":{"tf":1.0}},"df":1}}}},"d":{"docs":{"https://phlip9.com/notes/misc/water distillation setup/":{"tf":1.0}},"df":1},"e":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.0}},"df":1,"_":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"k":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.0}},"df":1,"(":{"docs":{},"df":0,"_":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"_":{"docs":{},"df":0,"k":{"docs":{},"df":0,"e":{"docs":{},"df":0,"y":{"docs":{},"df":0,"_":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"q":{"docs":{},"df":0,"u":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"(":{"docs":{},"df":0,"&":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{},"df":0,"p":{"docs":{},"df":0,";":{"docs":{},"df":0,"h":{"docs":{},"df":0,"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}},"o":{"docs":{},"df":0,"e":{"docs":{},"df":0,"_":{"docs":{},"df":0,"a":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"_":{"docs":{},"df":0,"g":{"docs":{},"df":0,"c":{"docs":{},"df":0,"m":{"docs":{},"df":0,"_":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"c":{"docs":{},"df":0,"r":{"docs":{},"df":0,"y":{"docs":{},"df":0,"p":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}},"g":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{},"df":0,"_":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"p":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.0}},"df":1},"y":{"docs":{},"df":0,"(":{"docs":{},"df":0,"h":{"docs":{},"df":0,"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.0}},"df":1}}}}}}}}}}}},"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"_":{"docs":{},"df":0,"k":{"docs":{},"df":0,"e":{"docs":{},"df":0,"y":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.0}},"df":1}}}}}}}}}}}},"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"m":{"docs":{},"df":0,"c":{"docs":{},"df":0,"p":{"docs":{},"df":0,"y":{"docs":{},"df":0,"_":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.7320508075688772}},"df":1}}}}}}}}}},"s":{"docs":{},"df":0,"g":{"docs":{},"df":0,"x":{"docs":{},"df":0,"_":{"docs":{},"df":0,"c":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"_":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"p":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{},"df":0,"(":{"docs":{},"df":0,"n":{"docs":{},"df":0,"u":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}},"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"p":{"docs":{},"df":0,"y":{"docs":{},"df":0,"_":{"docs":{},"df":0,"k":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{},"df":0,"_":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.0}},"df":1}}}}}}}}}}}}}},"f":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"e":{"docs":{},"df":0,"(":{"docs":{},"df":0,"*":{"docs":{},"df":0,"b":{"docs":{},"df":0,"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"b":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.0}},"df":1}}}}}},"_":{"docs":{},"df":0,"k":{"docs":{},"df":0,"e":{"docs":{},"df":0,"y":{"docs":{},"df":0,"(":{"docs":{},"df":0,"k":{"docs":{},"df":0,"e":{"docs":{},"df":0,"y":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.0}},"df":1}}}}}}}}}}}},"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"g":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"_":{"docs":{},"df":0,"o":{"docs":{},"df":0,"v":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"f":{"docs":{},"df":0,"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"w":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.4142135623730951}},"df":1}}}}}}}}}}}}}},"v":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{},"df":0,"_":{"docs":{},"df":0,"p":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":2.0}},"df":1}}}}}}}}}}}}}},"s":{"docs":{},"df":0,"_":{"docs":{},"df":0,"w":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"h":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"_":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"c":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"v":{"docs":{},"df":0,"e":{"docs":{},"df":0,"(":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{},"df":0,"d":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"_":{"docs":{},"df":0,"d":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}},"p":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"x":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.0}},"df":1}}}}}}}}},"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.0}},"df":1,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"g":{"docs":{},"df":0,"s":{"docs":{},"df":0,"[":{"docs":{},"df":0,"i":{"docs":{},"df":0,"]":{"docs":{},"df":0,".":{"docs":{},"df":0,"v":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"u":{"docs":{},"df":0,"e":{"docs":{},"df":0,".":{"docs":{},"df":0,"p":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"m":{"docs":{},"df":0,"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{},"df":0,"_":{"docs":{},"df":0,"s":{"docs":{},"df":0,"(":{"docs":{},"df":0,"k":{"docs":{},"df":0,"e":{"docs":{},"df":0,"y":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"q":{"docs":{},"df":0,"u":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}},"u":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"x":{"docs":{},"df":0,"_":{"docs":{},"df":0,"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"c":{"docs":{},"df":0,"k":{"docs":{},"df":0,"(":{"docs":{},"df":0,"&":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{},"df":0,"p":{"docs":{},"df":0,";":{"docs":{},"df":0,"_":{"docs":{},"df":0,"p":{"docs":{},"df":0,"l":{"docs":{},"df":0,"u":{"docs":{},"df":0,"g":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"s":{"docs":{},"df":0,"_":{"docs":{},"df":0,"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"c":{"docs":{},"df":0,"k":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}},"u":{"docs":{},"df":0,"n":{"docs":{},"df":0,"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"c":{"docs":{},"df":0,"k":{"docs":{},"df":0,"(":{"docs":{},"df":0,"&":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{},"df":0,"p":{"docs":{},"df":0,";":{"docs":{},"df":0,"_":{"docs":{},"df":0,"p":{"docs":{},"df":0,"l":{"docs":{},"df":0,"u":{"docs":{},"df":0,"g":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"s":{"docs":{},"df":0,"_":{"docs":{},"df":0,"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"c":{"docs":{},"df":0,"k":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"o":{"docs":{},"df":0,"k":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":2.0}},"df":1},"u":{"docs":{},"df":0,"t":{"docs":{},"df":0,"_":{"docs":{},"df":0,"o":{"docs":{},"df":0,"f":{"docs":{},"df":0,"_":{"docs":{},"df":0,"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"m":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.0}},"df":1}}}}}}}}}}}}},"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"(":{"docs":{},"df":0,"o":{"docs":{},"df":0,"e":{"docs":{},"df":0,"_":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"v":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{},"df":0,"_":{"docs":{},"df":0,"p":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.7320508075688772}},"df":1}}}}}}}}}}}}}}},"n":{"docs":{},"df":0,"o":{"docs":{},"df":0,"t":{"docs":{},"df":0,"_":{"docs":{},"df":0,"f":{"docs":{},"df":0,"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.0}},"df":1}}}}}}}}},"u":{"docs":{},"df":0,"n":{"docs":{},"df":0,"s":{"docs":{},"df":0,"u":{"docs":{},"df":0,"p":{"docs":{},"df":0,"p":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}},"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"u":{"docs":{},"df":0,"l":{"docs":{},"df":0,"t":{"docs":{},"df":0,"_":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":2.449489742783178}},"df":1}}}}}}}},"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.0}},"df":1,"_":{"docs":{},"df":0,"p":{"docs":{},"df":0,"l":{"docs":{},"df":0,"u":{"docs":{},"df":0,"g":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"_":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"f":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"_":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}},"o":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"y":{"docs":{},"df":0,"_":{"docs":{},"df":0,"p":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"d":{"docs":{},"df":0,"u":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.0}},"df":1}}}}}}},"u":{"docs":{},"df":0,"n":{"docs":{},"df":0,"i":{"docs":{},"df":0,"q":{"docs":{},"df":0,"u":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.0}},"df":1}}}}}}}}}}}},"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"g":{"docs":{},"df":0,"_":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{},"df":0,"d":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"_":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"x":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.4142135623730951}},"df":1}}}}}}}}}}}}}}}}}},"i":{"docs":{},"df":0,"v":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.0}},"df":1}},"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"x":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.0}},"df":1}}},"p":{"docs":{},"df":0,"o":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.0}},"df":1}}}}}},"s":{"docs":{},"df":0,"g":{"docs":{},"df":0,"x":{"docs":{},"df":0,"_":{"docs":{},"df":0,"c":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{},"df":0,"_":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"b":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"_":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{},"df":0,"k":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.4142135623730951}},"df":1}}}}}}}}}}}}}}}}}},"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"f":{"docs":{},"df":0,"i":{"docs":{},"df":0,"g":{"docs":{},"df":0,"s":{"docs":{},"df":0,"v":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.0}},"df":1}}}}}}}},"p":{"docs":{},"df":0,"u":{"docs":{},"df":0,"s":{"docs":{},"df":0,"v":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.0}},"df":1}}}}}},"f":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"g":{"docs":{},"df":0,"s":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{},"df":0,"k":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.0}},"df":1}}}}}}}}},"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"v":{"docs":{},"df":0,"s":{"docs":{},"df":0,"v":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.0}},"df":1}}}}}},"k":{"docs":{},"df":0,"e":{"docs":{},"df":0,"y":{"docs":{},"df":0,"n":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.0}},"df":1}}}}}},"m":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"c":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{},"df":0,"k":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.0}},"df":1}}}}}}}},"x":{"docs":{},"df":0,"f":{"docs":{},"df":0,"r":{"docs":{},"df":0,"m":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{},"df":0,"k":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.0}},"df":1}}}}}}}}}}}},"t":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.4142135623730951}},"df":1}}}}}}}}}},"k":{"docs":{},"df":0,"e":{"docs":{},"df":0,"y":{"docs":{},"df":0,"_":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"f":{"docs":{},"df":0,"a":{"docs":{},"df":0,"u":{"docs":{},"df":0,"l":{"docs":{},"df":0,"t":{"docs":{},"df":0,"_":{"docs":{},"df":0,"f":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"g":{"docs":{},"df":0,"s":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{},"df":0,"k":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.4142135623730951}},"df":1}}}}}}}}},"m":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"c":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{},"df":0,"k":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.4142135623730951}},"df":1}}}}}}}},"x":{"docs":{},"df":0,"f":{"docs":{},"df":0,"r":{"docs":{},"df":0,"m":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{},"df":0,"k":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.4142135623730951}},"df":1}}}}}}}}}}}}}}}}}}}}}}},"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"_":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{},"df":0,"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{},"df":0,"(":{"docs":{},"df":0,"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"z":{"docs":{},"df":0,"e":{"docs":{},"df":0,"o":{"docs":{},"df":0,"f":{"docs":{},"df":0,"(":{"docs":{},"df":0,"h":{"docs":{},"df":0,"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}},"u":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"3":{"docs":{},"df":0,"2":{"docs":{},"df":0,"_":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"x":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.4142135623730951}},"df":1}}}}}}}}},"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"x":{"docs":{},"df":0,"p":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.0}},"df":1}}}}}}},"u":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{},"df":0,"_":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.0}},"df":1}}}}}}}},"f":{"docs":{},"df":0,"c":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0}},"df":1},"f":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/lang/rust/rr with rust/":{"tf":1.0}},"df":1}},"r":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.0}},"df":5}},"h":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/btc-ln/lightning network notes/":{"tf":1.0}},"df":1}}}},"i":{"docs":{},"df":0,"c":{"docs":{"https://phlip9.com/notes/management/relieve often - why generals were more successful in WWII/":{"tf":1.0}},"df":1,"i":{"docs":{"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/monetary instruments/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.0},"https://phlip9.com/notes/postgres/postgres performance tuning/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/rebuilderd/":{"tf":1.0}},"df":4}}},"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/btc-ln/lightning rod/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":2.0},"https://phlip9.com/notes/crypto/biscuit authz/":{"tf":1.4142135623730951}},"df":3}}},"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":2.0}},"df":1}}}},"v":{"docs":{},"df":0,"n":{"docs":{},"df":0,"l":{"docs":{},"df":0,"f":{"docs":{},"df":0,"p":{"docs":{},"df":0,"1":{"docs":{},"df":0,"w":{"docs":{},"df":0,"i":{"docs":{},"df":0,"h":{"docs":{},"df":0,"r":{"docs":{},"df":0,"l":{"docs":{},"df":0,"y":{"docs":{},"df":0,"s":{"docs":{},"df":0,"2":{"docs":{},"df":0,"j":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"x":{"docs":{},"df":0,"b":{"docs":{},"df":0,"a":{"docs":{"https://phlip9.com/notes/crypto/acme protocol/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}},"i":{"docs":{},"df":0,"d":{"docs":{},"df":0,"c":{"docs":{"https://phlip9.com/notes/crypto/dex - open-source OIDC & OAuth 2.0 provider/":{"tf":1.7320508075688772}},"df":1}}},"k":{"docs":{"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0},"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.7320508075688772},"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":1.0},"https://phlip9.com/notes/crypto/TLS self-signed pubkey-only certs/":{"tf":1.0},"https://phlip9.com/notes/crypto/acme protocol/":{"tf":1.0},"https://phlip9.com/notes/devops/consul/":{"tf":1.0},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":2.6457513110645907},"https://phlip9.com/notes/lang/lua/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.7320508075688772},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.0}},"df":12,"&":{"docs":{},"df":0,"l":{"docs":{},"df":0,"t":{"docs":{},"df":0,";":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0}},"df":1}}}}},"(":{"docs":{},"df":0,"1":{"docs":{},"df":0,"2":{"docs":{},"df":0,"3":{"docs":{"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0}},"df":1}}},":":{"docs":{},"df":0,"f":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.4142135623730951}},"df":1}}}},"k":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0}},"df":1},"o":{"docs":{},"df":0,"s":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"g":{"docs":{},"df":0,":":{"docs":{},"df":0,":":{"docs":{},"df":0,"f":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"_":{"docs":{},"df":0,"v":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"(":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.4142135623730951}},"df":1}}}}}}}}}}}}}}}}}}}}}},"r":{"docs":{},"df":0,"u":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"l":{"docs":{},"df":0,"s":{"docs":{},"df":0,":":{"docs":{},"df":0,":":{"docs":{},"df":0,"c":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"f":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"(":{"docs":{},"df":0,"c":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{},"df":0,"_":{"docs":{},"df":0,"b":{"docs":{},"df":0,"y":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/crypto/TLS self-signed pubkey-only certs/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}},"t":{"docs":{"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0}},"df":1,"h":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,".":{"docs":{},"df":0,"o":{"docs":{},"df":0,"k":{"docs":{"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0}},"df":1}}}}}}}},":":{"docs":{},"df":0,":":{"docs":{},"df":0,"&":{"docs":{},"df":0,"l":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/crypto/TLS self-signed pubkey-only certs/":{"tf":1.0}},"df":1}}}}},"a":{"docs":{},"df":0,"y":{"docs":{"https://phlip9.com/notes/android/root phone with magisk/":{"tf":1.4142135623730951}},"df":1}},"e":{"docs":{},"df":0,"y":{"docs":{"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":1.4142135623730951}},"df":1,".":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"_":{"docs":{},"df":0,"m":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{},"df":0,"(":{"docs":{},"df":0,")":{"docs":{},"df":0,".":{"docs":{},"df":0,"z":{"docs":{},"df":0,"i":{"docs":{},"df":0,"p":{"docs":{},"df":0,"(":{"docs":{},"df":0,"&":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{},"df":0,"p":{"docs":{},"df":0,";":{"docs":{},"df":0,"p":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"d":{"docs":{},"df":0,"_":{"docs":{},"df":0,"k":{"docs":{},"df":0,"e":{"docs":{},"df":0,"y":{"docs":{"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"_":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":1.4142135623730951}},"df":1}}}}},"l":{"docs":{"https://phlip9.com/notes/android/root phone with magisk/":{"tf":1.0}},"df":1,"d":{"docs":{"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0},"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.4142135623730951},"https://phlip9.com/notes/btc-ln/BOLT 4 - onion routing protocol/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/breez lightning service providers/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.0},"https://phlip9.com/notes/crypto/TLS self-signed pubkey-only certs/":{"tf":1.0},"https://phlip9.com/notes/lang/lua/":{"tf":1.0},"https://phlip9.com/notes/management/relieve often - why generals were more successful in WWII/":{"tf":1.4142135623730951},"https://phlip9.com/notes/misc/pop_OS! tweaks/":{"tf":1.4142135623730951},"https://phlip9.com/notes/networking/network interface card (NIC)/":{"tf":1.0}},"df":13,"e":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/gramine/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.7320508075688772},"https://phlip9.com/notes/devops/deployment strategies/":{"tf":1.0},"https://phlip9.com/notes/misc/pop_OS! tweaks/":{"tf":1.0}},"df":6}}}},"m":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/monetary instruments/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0}},"df":3}}},"n":{"docs":{"https://phlip9.com/notes/AI ML/Markov Decision Process (MDP)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/android/OTA updates for rooted android phone/":{"tf":1.0},"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/foreign bank account report (FBAR)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/money services business (MSB)/":{"tf":1.7320508075688772},"https://phlip9.com/notes/b l o c k c h a i n/btc utreexo - utxo accumulator/":{"tf":1.0},"https://phlip9.com/notes/b l o c k c h a i n/fastpay/":{"tf":1.4142135623730951},"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":2.449489742783178},"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.4142135623730951},"https://phlip9.com/notes/btc-ln/BOLT 7 - p2p node and channel discovery/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/breez lightning service providers/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/submarine swaps/":{"tf":1.0},"https://phlip9.com/notes/combinatorics/k-combinations of a multiset/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":2.0},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/secure time/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/marblerun/":{"tf":2.0},"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":1.0},"https://phlip9.com/notes/crypto/(talk) authenticated data structures for stateless validation/":{"tf":1.0},"https://phlip9.com/notes/crypto/acme protocol/":{"tf":1.4142135623730951},"https://phlip9.com/notes/crypto/biscuit authz/":{"tf":1.0},"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":2.23606797749979},"https://phlip9.com/notes/design/form design/":{"tf":1.0},"https://phlip9.com/notes/devops/secrets/ejson-kms (AWS)/":{"tf":1.0},"https://phlip9.com/notes/devops/service mesh/":{"tf":1.0},"https://phlip9.com/notes/distributed systems/papers/(2020) Semi-Fast Byzantine-tolerant Shared Register without Reliable Broadcast/":{"tf":1.0},"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":1.0},"https://phlip9.com/notes/fuzzing/fuzzcheck-rs/":{"tf":1.0},"https://phlip9.com/notes/ios/ios setup/":{"tf":1.0},"https://phlip9.com/notes/keyboards/moergo glove80/":{"tf":1.0},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":2.0},"https://phlip9.com/notes/lang/operator fixity and precedence/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/rust/rr with rust/":{"tf":1.7320508075688772},"https://phlip9.com/notes/lang/rust/sycamore x futures/":{"tf":1.0},"https://phlip9.com/notes/management/relieve often - why generals were more successful in WWII/":{"tf":1.0},"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":2.449489742783178},"https://phlip9.com/notes/misc/kintsugi/":{"tf":2.23606797749979},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":2.23606797749979},"https://phlip9.com/notes/networking/CIDR/":{"tf":1.4142135623730951},"https://phlip9.com/notes/networking/ipv6 address space/":{"tf":1.0},"https://phlip9.com/notes/networking/network interfaces/":{"tf":3.0},"https://phlip9.com/notes/performance/bit hacks/":{"tf":2.6457513110645907},"https://phlip9.com/notes/performance/simdjson talk/":{"tf":1.0},"https://phlip9.com/notes/postgres/types of scans/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/nix/links/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.4142135623730951},"https://phlip9.com/notes/router/lightning router/lightning router overview/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/testing whether a coin is fair/":{"tf":1.4142135623730951}},"df":55,"/":{"docs":{},"df":0,"o":{"docs":{},"df":0,"f":{"docs":{},"df":0,"f":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1}}}},"b":{"docs":{},"df":0,"o":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/btc-ln/breez lightning service providers/":{"tf":1.7320508075688772}},"df":1}}}}},"c":{"docs":{"https://phlip9.com/notes/android/root phone with magisk/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":2.8284271247461903},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/secure time/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":2.8284271247461903},"https://phlip9.com/notes/crypto/dex - open-source OIDC & OAuth 2.0 provider/":{"tf":1.0},"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":1.7320508075688772},"https://phlip9.com/notes/design/form design/":{"tf":1.0},"https://phlip9.com/notes/ios/ios setup/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0},"https://phlip9.com/notes/lang/flutter/flutter setup/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/understanding sycamore reactivity/":{"tf":1.0},"https://phlip9.com/notes/management/relieve often - why generals were more successful in WWII/":{"tf":1.0},"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":1.0},"https://phlip9.com/notes/misc/kintsugi/":{"tf":1.4142135623730951},"https://phlip9.com/notes/networking/network interface card (NIC)/":{"tf":1.0},"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.0},"https://phlip9.com/notes/performance/simdjson talk/":{"tf":1.4142135623730951},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/nix/nix debug broken package build/":{"tf":1.4142135623730951},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/router/lightning router/lightning router overview/":{"tf":1.0}},"df":25,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"k":{"docs":{},"df":0,".":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"(":{"docs":{},"df":0,"(":{"docs":{"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0}},"df":1}}}}}}}}}}}}}},"e":{"docs":{},"df":0,"'":{"docs":{"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.0}},"df":1},"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.0}},"df":1}}},"o":{"docs":{},"df":0,"f":{"docs":{"https://phlip9.com/notes/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/BOLT 7 - p2p node and channel discovery/":{"tf":1.0}},"df":2}},"w":{"docs":{},"df":0,"i":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1}}}}}}},"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 4 - onion routing protocol/":{"tf":1.7320508075688772}},"df":1,"_":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"g":{"docs":{},"df":0,"_":{"docs":{},"df":0,"p":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"k":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}},"p":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"k":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.0}},"df":1}}}}}}}}},"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/btc-ln/breez lightning service providers/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":2.23606797749979},"https://phlip9.com/notes/crypto/smallstep - private online CA & ACME server/":{"tf":1.4142135623730951}},"df":3}},"y":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{},"df":0,"u":{"docs":{},"df":0,"r":{"docs":{},"df":0,"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"x":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/crypto/acme protocol/":{"tf":1.0}},"df":1}}}}}}}}}}}}},"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{},"df":0,"p":{"docs":{"https://phlip9.com/notes/btc-ln/breez lightning service providers/":{"tf":1.0}},"df":1}}}},"s":{"docs":{},"df":0,";":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{},"df":0,"d":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/android/android cli setup/":{"tf":1.0}},"df":1}}}}}}},"t":{"docs":{},"df":0,"o":{"docs":{"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0},"https://phlip9.com/notes/android/root phone with magisk/":{"tf":1.7320508075688772},"https://phlip9.com/notes/btc-ln/lightning rod/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.0},"https://phlip9.com/notes/keyboards/moergo glove80/":{"tf":1.0},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0},"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.0}},"df":8,"=":{"docs":{},"df":0,"$":{"docs":{},"df":0,"(":{"docs":{},"df":0,"g":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":1.0}},"df":1}}}}},"&":{"docs":{},"df":0,"l":{"docs":{},"df":0,"t":{"docs":{},"df":0,";":{"docs":{},"df":0,"p":{"docs":{},"df":0,"u":{"docs":{},"df":0,"b":{"docs":{"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":1.0}},"df":1}}}}}}}}}}},"o":{"docs":{"https://phlip9.com/notes/lang/lua/":{"tf":1.7320508075688772}},"df":1,"m":{"docs":{"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":1.4142135623730951}},"df":1}},"p":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/btc utreexo - utxo accumulator/":{"tf":1.0},"https://phlip9.com/notes/b l o c k c h a i n/fastpay/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/BOLT 8 - secure noise transport/":{"tf":1.0},"https://phlip9.com/notes/devops/nomad/":{"tf":1.0},"https://phlip9.com/notes/devops/secrets/mozilla SOPS/":{"tf":1.0},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.4142135623730951},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.4142135623730951}},"df":7,"+":{"docs":{},"df":0,"(":{"docs":{},"df":0,"1":{"docs":{},"df":0,",":{"docs":{},"df":0,"2":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0}},"df":1}}}}},"a":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":1.4142135623730951}},"df":1},"q":{"docs":{},"df":0,"u":{"docs":{"https://phlip9.com/notes/lang/lua/":{"tf":1.0}},"df":1}}},"e":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/WSL/WSL2 custom kernel/":{"tf":1.0},"https://phlip9.com/notes/android/OTA updates for rooted android phone/":{"tf":1.0},"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":2.0},"https://phlip9.com/notes/android/root phone with magisk/":{"tf":1.4142135623730951},"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.4142135623730951},"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.7320508075688772},"https://phlip9.com/notes/btc-ln/BOLT 7 - p2p node and channel discovery/":{"tf":1.4142135623730951},"https://phlip9.com/notes/btc-ln/atomic multipath payments (AMP)/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/breez lightning service providers/":{"tf":1.4142135623730951},"https://phlip9.com/notes/btc-ln/submarine swaps/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":2.23606797749979},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/mystikos/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":1.0},"https://phlip9.com/notes/crypto/dex - open-source OIDC & OAuth 2.0 provider/":{"tf":1.4142135623730951},"https://phlip9.com/notes/devops/azure CLI/":{"tf":1.4142135623730951},"https://phlip9.com/notes/devops/secrets/envkey/":{"tf":1.0},"https://phlip9.com/notes/ios/ios setup/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/gdb ref/":{"tf":1.0},"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":1.4142135623730951},"https://phlip9.com/notes/misc/optimization solvers/":{"tf":1.4142135623730951},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":2.449489742783178},"https://phlip9.com/notes/misc/setting up a headless raspbian boot image/":{"tf":1.0},"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.4142135623730951},"https://phlip9.com/notes/reproducible builds/reproducible-builds.org/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/arubanetworks captive portal/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":2.449489742783178},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.4142135623730951}},"df":32,"(":{"docs":{},"df":0,"&":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{},"df":0,"p":{"docs":{},"df":0,";":{"docs":{},"df":0,"n":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"c":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0}},"df":1}}}}}}}}}},"_":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":2.0}},"df":1}}}}}}},"n":{"docs":{},"df":0,"o":{"docs":{},"df":0,"c":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"c":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.4142135623730951}},"df":1}}}}}}}}},"a":{"docs":{},"df":0,"b":{"docs":{},"df":0,"o":{"docs":{},"df":0,"v":{"docs":{"https://phlip9.com/notes/statistics probability/winsorize/":{"tf":2.0}},"df":1}}}},"b":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"w":{"docs":{"https://phlip9.com/notes/statistics probability/winsorize/":{"tf":2.0}},"df":1}}}}},"c":{"docs":{},"df":0,"h":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.0}},"df":1,":":{"docs":{},"df":0,":":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{},"df":0,"_":{"docs":{},"df":0,"t":{"docs":{},"df":0,"y":{"docs":{},"df":0,"p":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}},"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"c":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"v":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/marblerun/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":1.0}},"df":3}}}}}},"i":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/crypto/dex - open-source OIDC & OAuth 2.0 provider/":{"tf":1.0}},"df":1}},"n":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/router/lightning router/lightning router overview/":{"tf":1.7320508075688772}},"df":1}},"s":{"docs":{},"df":0,"s":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.7320508075688772},"https://phlip9.com/notes/confidential computing/gramine/":{"tf":1.7320508075688772},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0}},"df":3,":":{"docs":{},"df":0,":":{"docs":{},"df":0,"b":{"docs":{},"df":0,"n":{"docs":{},"df":0,":":{"docs":{},"df":0,":":{"docs":{},"df":0,"b":{"docs":{},"df":0,"i":{"docs":{},"df":0,"g":{"docs":{},"df":0,"n":{"docs":{},"df":0,"u":{"docs":{},"df":0,"m":{"docs":{},"df":0,":":{"docs":{},"df":0,":":{"docs":{},"df":0,"f":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"_":{"docs":{},"df":0,"u":{"docs":{},"df":0,"3":{"docs":{},"df":0,"2":{"docs":{},"df":0,"(":{"docs":{},"df":0,"3":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}},"r":{"docs":{},"df":0,"s":{"docs":{},"df":0,"a":{"docs":{},"df":0,":":{"docs":{},"df":0,":":{"docs":{},"df":0,"r":{"docs":{},"df":0,"s":{"docs":{},"df":0,"a":{"docs":{},"df":0,":":{"docs":{},"df":0,":":{"docs":{},"df":0,"g":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"_":{"docs":{},"df":0,"w":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"h":{"docs":{},"df":0,"_":{"docs":{},"df":0,"e":{"docs":{},"df":0,"(":{"docs":{},"df":0,"3":{"docs":{},"df":0,"0":{"docs":{},"df":0,"7":{"docs":{},"df":0,"2":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"v":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"o":{"docs":{"https://phlip9.com/notes/confidential computing/gramine/":{"tf":2.449489742783178}},"df":1,".":{"docs":{},"df":0,"d":{"docs":{},"df":0,"o":{"docs":{},"df":0,"c":{"docs":{},"df":0,"k":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"f":{"docs":{},"df":0,"i":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/confidential computing/gramine/":{"tf":1.0}},"df":1}}}}}}}}},"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"i":{"docs":{},"df":0,"f":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/confidential computing/gramine/":{"tf":1.0}},"df":1}}}}}}}}}}}}},"w":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/networking/network interfaces/":{"tf":2.0}},"df":1}}}},"r":{"docs":{"https://phlip9.com/notes/AI ML/Expectimax Search/":{"tf":2.449489742783178},"https://phlip9.com/notes/android/ADB over TCP inside WSL2/":{"tf":1.0},"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/money services business (MSB)/":{"tf":1.0},"https://phlip9.com/notes/b l o c k c h a i n/fastpay/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":2.23606797749979},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":2.0},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.7320508075688772},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel SGX/secure time/":{"tf":2.0},"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":2.0},"https://phlip9.com/notes/crypto/acme protocol/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":3.4641016151377544},"https://phlip9.com/notes/lang/operator fixity and precedence/":{"tf":5.5677643628300215},"https://phlip9.com/notes/misc/optimization solvers/":{"tf":1.0},"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.0},"https://phlip9.com/notes/performance/simdjson talk/":{"tf":1.0},"https://phlip9.com/notes/postgres/postgres performance tuning/":{"tf":1.4142135623730951},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.7320508075688772},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.4142135623730951}},"df":21,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"'":{"docs":{"https://phlip9.com/notes/lang/operator fixity and precedence/":{"tf":1.0}},"df":1}}}}}}},"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/btc-ln/lightning libs/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/nix/links/":{"tf":1.0}},"df":2}}}}},"p":{"docs":{},"df":0,"o":{"docs":{},"df":0,"s":{"docs":{"https://phlip9.com/notes/AI ML/Markov Decision Process (MDP)/":{"tf":1.0},"https://phlip9.com/notes/devops/secrets/ejson (Shopify)/":{"tf":1.0},"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.0}},"df":3,"i":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.0}},"df":1}}}}},"t":{"docs":{"https://phlip9.com/notes/btc-ln/zero-conf channels/":{"tf":1.0},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.7320508075688772}},"df":3,"(":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.4142135623730951}},"df":1}},"/":{"docs":{},"df":0,"h":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"b":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"w":{"docs":{},"df":0,"/":{"docs":{},"df":0,"o":{"docs":{},"df":0,"p":{"docs":{},"df":0,"t":{"docs":{},"df":0,"/":{"docs":{},"df":0,"p":{"docs":{},"df":0,"o":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"g":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"q":{"docs":{},"df":0,"l":{"docs":{},"df":0,"@":{"docs":{},"df":0,"1":{"docs":{},"df":0,"4":{"docs":{},"df":0,"/":{"docs":{},"df":0,"b":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"/":{"docs":{},"df":0,"p":{"docs":{},"df":0,"o":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"g":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.7320508075688772}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"i":{"docs":{},"df":0,"c":{"docs":{"https://phlip9.com/notes/btc-ln/breez lightning service providers/":{"tf":1.0}},"df":1},"m":{"docs":{"https://phlip9.com/notes/AI ML/Expectimax Search/":{"tf":1.0},"https://phlip9.com/notes/AI ML/Markov Decision Process (MDP)/":{"tf":2.6457513110645907},"https://phlip9.com/notes/b l o c k c h a i n/btc utreexo - utxo accumulator/":{"tf":1.0},"https://phlip9.com/notes/combinatorics/k-combinations of a multiset/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.7320508075688772},"https://phlip9.com/notes/distributed systems/papers/(2021) Leaderless Consensus/":{"tf":1.7320508075688772},"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":1.0},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":2.0},"https://phlip9.com/notes/misc/optimization solvers/":{"tf":2.449489742783178}},"df":10,"i":{"docs":{},"df":0,"s":{"docs":{"https://phlip9.com/notes/reproducible builds/nix/nix auto-allocate-uids -> nixbld users/":{"tf":1.0}},"df":1,"t":{"docs":{"https://phlip9.com/notes/distributed systems/papers/(2021) Leaderless Consensus/":{"tf":1.0}},"df":1}}}},"o":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/AI ML/Markov Decision Process (MDP)/":{"tf":1.0},"https://phlip9.com/notes/WSL/WSL2 custom kernel/":{"tf":1.4142135623730951},"https://phlip9.com/notes/android/ADB over TCP inside WSL2/":{"tf":1.0},"https://phlip9.com/notes/android/OTA updates for rooted android phone/":{"tf":1.0},"https://phlip9.com/notes/android/android cli setup/":{"tf":2.0},"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.7320508075688772},"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/foreign bank account report (FBAR)/":{"tf":1.0},"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.4142135623730951},"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.7320508075688772},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":2.0},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.7320508075688772},"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":1.0},"https://phlip9.com/notes/crypto/acme protocol/":{"tf":1.0},"https://phlip9.com/notes/design/form design/":{"tf":1.4142135623730951},"https://phlip9.com/notes/devops/algo wireguard VPN server/":{"tf":1.4142135623730951},"https://phlip9.com/notes/devops/azure CLI/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.7320508075688772},"https://phlip9.com/notes/lang/flutter/flutter setup/":{"tf":1.7320508075688772},"https://phlip9.com/notes/lang/lua/":{"tf":1.0},"https://phlip9.com/notes/misc/prepping RPI for embedded dev/":{"tf":2.6457513110645907},"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.7320508075688772},"https://phlip9.com/notes/reproducible builds/rebuilderd/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.7320508075688772},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":2.449489742783178}},"df":26,"&":{"docs":{},"df":0,"l":{"docs":{},"df":0,"t":{"docs":{},"df":0,";":{"docs":{},"df":0,"&":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{},"df":0,"p":{"docs":{},"df":0,";":{"docs":{},"df":0,"[":{"docs":{},"df":0,"u":{"docs":{},"df":0,"8":{"docs":{},"df":0,"]":{"docs":{},"df":0,"&":{"docs":{},"df":0,"g":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/crypto/tls exported keying material/":{"tf":1.0}},"df":1}}}}}}},"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"&":{"docs":{},"df":0,"g":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0}},"df":1}}}}}}}}}}},"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"c":{"docs":{},"df":0,"&":{"docs":{},"df":0,"l":{"docs":{},"df":0,"t":{"docs":{},"df":0,";":{"docs":{},"df":0,"a":{"docs":{},"df":0,"v":{"docs":{},"df":0,"r":{"docs":{},"df":0,":":{"docs":{},"df":0,":":{"docs":{},"df":0,"a":{"docs":{},"df":0,"v":{"docs":{},"df":0,"r":{"docs":{},"df":0,"&":{"docs":{},"df":0,"g":{"docs":{},"df":0,"t":{"docs":{},"df":0,";":{"docs":{},"df":0,"&":{"docs":{},"df":0,"g":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}},"v":{"docs":{},"df":0,"r":{"docs":{},"df":0,":":{"docs":{},"df":0,":":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"c":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"v":{"docs":{},"df":0,"e":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"y":{"docs":{},"df":0,"&":{"docs":{},"df":0,"g":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}},"c":{"docs":{},"df":0,"h":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{},"df":0,"t":{"docs":{},"df":0,"y":{"docs":{},"df":0,"p":{"docs":{},"df":0,"e":{"docs":{},"df":0,"f":{"docs":{},"df":0,"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"u":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"&":{"docs":{},"df":0,"g":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.4142135623730951}},"df":1}}}}}}}}}}}}}}}}}}}}},"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"g":{"docs":{},"df":0,"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"g":{"docs":{},"df":0,"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"d":{"docs":{},"df":0,"f":{"docs":{},"df":0,"e":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"g":{"docs":{},"df":0,"e":{"docs":{},"df":0,"&":{"docs":{},"df":0,"g":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}},"i":{"docs":{},"df":0,"6":{"docs":{},"df":0,"4":{"docs":{},"df":0,"&":{"docs":{},"df":0,"g":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0}},"df":1}}}}}},"p":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"v":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"k":{"docs":{},"df":0,"e":{"docs":{},"df":0,"y":{"docs":{},"df":0,"&":{"docs":{},"df":0,"g":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0}},"df":1}}}}}}}}}}}}},"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{},"df":0,"f":{"docs":{},"df":0,":":{"docs":{},"df":0,":":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"m":{"docs":{},"df":0,"&":{"docs":{},"df":0,"g":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/combinatorics/k-combinations of a multiset/":{"tf":1.0}},"df":1}}}}}}}}}}}},"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"g":{"docs":{},"df":0,"&":{"docs":{},"df":0,"g":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0}},"df":1}}}}}}}}},"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"g":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"f":{"docs":{},"df":0,"o":{"docs":{},"df":0,"&":{"docs":{},"df":0,"g":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0}},"df":1}}}}}}}}}}}}},"u":{"docs":{},"df":0,"6":{"docs":{},"df":0,"4":{"docs":{},"df":0,"&":{"docs":{},"df":0,"g":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 11 - invoices/":{"tf":1.4142135623730951},"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.0}},"df":2}}}}},"8":{"docs":{},"df":0,"&":{"docs":{},"df":0,"g":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/performance/bit hacks/":{"tf":2.0}},"df":1}}}}},"v":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"&":{"docs":{},"df":0,"l":{"docs":{},"df":0,"t":{"docs":{},"df":0,";":{"docs":{},"df":0,"u":{"docs":{},"df":0,"8":{"docs":{},"df":0,"&":{"docs":{},"df":0,"g":{"docs":{},"df":0,"t":{"docs":{},"df":0,";":{"docs":{},"df":0,"&":{"docs":{},"df":0,"g":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}},"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"f":{"docs":{},"df":0,"i":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{},"df":0,"d":{"docs":{},"df":0,"&":{"docs":{},"df":0,"l":{"docs":{},"df":0,"t":{"docs":{},"df":0,";":{"docs":{},"df":0,"s":{"docs":{},"df":0,"c":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"p":{"docs":{},"df":0,"t":{"docs":{},"df":0,"&":{"docs":{},"df":0,"g":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.4142135623730951}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}},"r":{"docs":{},"df":0,"_":{"docs":{"https://phlip9.com/notes/postgres/snippets/":{"tf":1.4142135623730951}},"df":1,"5":{"docs":{},"df":0,"7":{"docs":{},"df":0,"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"7":{"docs":{},"df":0,"6":{"docs":{"https://phlip9.com/notes/postgres/snippets/":{"tf":1.0}},"df":1}}}}}}},"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/fuzzing/bolero - fuzzing + property testing/":{"tf":1.0},"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.0}},"df":2}}},"c":{"docs":{},"df":0,"h":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/devops/nomad/":{"tf":1.0},"https://phlip9.com/notes/devops/secrets/1password - secrets automation/":{"tf":1.0}},"df":3}}}},"i":{"docs":{},"df":0,"d":{"docs":{},"df":0,"v":{"docs":{},"df":0,"2":{"docs":{},"df":0,")":{"docs":{},"df":0,"r":{"docs":{},"df":0,"f":{"docs":{},"df":0,"c":{"docs":{},"df":0,"7":{"docs":{},"df":0,"3":{"docs":{},"df":0,"4":{"docs":{},"df":0,"3":{"docs":{"https://phlip9.com/notes/networking/ipv6 address space/":{"tf":1.0}},"df":1}}}}}}}}}}}}}},"d":{"docs":{"https://phlip9.com/notes/combinatorics/k-combinations of a multiset/":{"tf":1.4142135623730951},"https://phlip9.com/notes/statistics probability/winsorize/":{"tf":1.4142135623730951}},"df":2,"&":{"docs":{},"df":0,"l":{"docs":{},"df":0,"t":{"docs":{},"df":0,";":{"docs":{},"df":0,"b":{"docs":{},"df":0,"i":{"docs":{},"df":0,"g":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"&":{"docs":{},"df":0,"g":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0}},"df":1}}}}}}}}},"t":{"docs":{},"df":0,"&":{"docs":{},"df":0,"g":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0}},"df":1}}}}}}}},"e":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/AI ML/Expectimax Search/":{"tf":1.0},"https://phlip9.com/notes/AI ML/Markov Decision Process (MDP)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/android/OTA updates for rooted android phone/":{"tf":1.0},"https://phlip9.com/notes/android/root phone with magisk/":{"tf":1.0},"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/monetary instruments/":{"tf":1.0},"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/money services business (MSB)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/b l o c k c h a i n/fastpay/":{"tf":3.0},"https://phlip9.com/notes/btc-ln/atomic multipath payments (AMP)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/btc-ln/breez lightning service providers/":{"tf":1.0},"https://phlip9.com/notes/combinatorics/k-combinations of a multiset/":{"tf":2.0},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.7320508075688772},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":2.0},"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":1.0},"https://phlip9.com/notes/crypto/(talk) authenticated data structures for stateless validation/":{"tf":1.4142135623730951},"https://phlip9.com/notes/crypto/acme protocol/":{"tf":3.0},"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":1.0},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":2.23606797749979},"https://phlip9.com/notes/lang/lua/":{"tf":1.0},"https://phlip9.com/notes/lang/operator fixity and precedence/":{"tf":1.0},"https://phlip9.com/notes/misc/kintsugi/":{"tf":1.0},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0},"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.0},"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.0},"https://phlip9.com/notes/performance/profiling/":{"tf":2.0},"https://phlip9.com/notes/postgres/types of scans/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/reproducible-builds.org/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.7320508075688772},"https://phlip9.com/notes/statistics probability/standard error/":{"tf":1.0}},"df":32,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"g":{"docs":{},"df":0,".":{"docs":{},"df":0,"e":{"docs":{},"df":0,"q":{"docs":{},"df":0,"u":{"docs":{"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0}},"df":1}}},"g":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.4142135623730951}},"df":1}}}}},"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"s":{"docs":{"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.4142135623730951}},"df":1}}}}}}}}}}},"g":{"docs":{"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/money services business (MSB)/":{"tf":1.0}},"df":1,".":{"docs":{},"df":0,"t":{"docs":{},"df":0,"h":{"docs":{},"df":0,"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"g":{"docs":{},"df":0,"h":{"docs":{},"df":0,"t":{"docs":{},"df":0,"c":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,".":{"docs":{},"df":0,"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"u":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"m":{"docs":{},"df":0,"s":{"docs":{},"df":0,".":{"docs":{},"df":0,"d":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"b":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,".":{"docs":{},"df":0,"m":{"docs":{},"df":0,"o":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{},"df":0,".":{"docs":{},"df":0,"g":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"p":{"docs":{},"df":0,"s":{"docs":{},"df":0,"v":{"docs":{},"df":0,"2":{"docs":{},"df":0,"u":{"docs":{},"df":0,"p":{"docs":{},"df":0,"d":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"s":{"docs":{},"df":0,"a":{"docs":{},"df":0,"g":{"docs":{},"df":0,"e":{"docs":{},"df":0,"p":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"d":{"docs":{},"df":0,"u":{"docs":{},"df":0,"c":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"a":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/foreign bank account report (FBAR)/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":1.0}},"df":3}}},"i":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":1.0}},"df":1}}},"g":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/AI ML/Markov Decision Process (MDP)/":{"tf":1.0},"https://phlip9.com/notes/b l o c k c h a i n/fastpay/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/BOLT 4 - onion routing protocol/":{"tf":2.449489742783178},"https://phlip9.com/notes/combinatorics/k-combinations of a multiset/":{"tf":1.4142135623730951},"https://phlip9.com/notes/crypto/acme protocol/":{"tf":1.0},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.7320508075688772},"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":2.8284271247461903},"https://phlip9.com/notes/networking/CIDR/":{"tf":1.0},"https://phlip9.com/notes/postgres/postgres performance tuning/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/reproducible-builds.org/":{"tf":1.4142135623730951},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":3.1622776601683795},"https://phlip9.com/notes/router/lightning router/captive portal/arubanetworks captive portal/":{"tf":1.4142135623730951},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":4.58257569495584}},"df":14,".":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0}},"df":1},"x":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0}},"df":1}},"/":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":1.0}},"df":1}}}}}}}}}},"s":{"docs":{"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":3.0},"https://phlip9.com/notes/confidential computing/gramine/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/secure time/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/lua/":{"tf":1.4142135623730951},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.4142135623730951}},"df":8,".":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"(":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"g":{"docs":{},"df":0,"s":{"docs":{},"df":0,".":{"docs":{},"df":0,"o":{"docs":{},"df":0,"l":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/lang/lua/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}},":":{"docs":{},"df":0,":":{"docs":{},"df":0,"u":{"docs":{},"df":0,"n":{"docs":{},"df":0,"i":{"docs":{},"df":0,"x":{"docs":{},"df":0,":":{"docs":{},"df":0,":":{"docs":{},"df":0,"f":{"docs":{},"df":0,"f":{"docs":{},"df":0,"i":{"docs":{},"df":0,":":{"docs":{},"df":0,":":{"docs":{},"df":0,"o":{"docs":{},"df":0,"s":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"x":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0}},"df":1}}},"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"g":{"docs":{},"df":0,"e":{"docs":{},"df":0,"x":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.4142135623730951}},"df":1}}}}}}}}}}}}}}}}}}}}}}}},"_":{"docs":{"https://phlip9.com/notes/postgres/snippets/":{"tf":1.0}},"df":1,"5":{"docs":{},"df":0,"7":{"docs":{},"df":0,"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"7":{"docs":{},"df":0,"6":{"docs":{"https://phlip9.com/notes/postgres/snippets/":{"tf":1.0}},"df":1}}}}}}},"i":{"docs":{"https://phlip9.com/notes/networking/network interface card (NIC)/":{"tf":1.0}},"df":1},"q":{"docs":{},"df":0,"p":{"docs":{"https://phlip9.com/notes/misc/optimization solvers/":{"tf":1.4142135623730951}},"df":1,".":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/misc/optimization solvers/":{"tf":1.0}},"df":1}}}},"r":{"docs":{},"df":0,"n":{"docs":{},"df":0,"g":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0}},"df":1}}},"s":{"docs":{"https://phlip9.com/notes/devops/o11y/jaeger oss e2e tracing/":{"tf":1.4142135623730951}},"df":1,"t":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":2.0}},"df":1}}},"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"v":{"docs":{},"df":0,"s":{"docs":{},"df":0,"k":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/statistics probability/multinomial distribution/":{"tf":1.0}},"df":1}}}}}}}},"t":{"docs":{},"df":0,"a":{"docs":{"https://phlip9.com/notes/android/OTA updates for rooted android phone/":{"tf":2.6457513110645907},"https://phlip9.com/notes/android/root phone with magisk/":{"tf":1.7320508075688772}},"df":2,".":{"docs":{},"df":0,"z":{"docs":{},"df":0,"i":{"docs":{},"df":0,"p":{"docs":{"https://phlip9.com/notes/android/OTA updates for rooted android phone/":{"tf":1.0}},"df":1}}}}},"h":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 7 - p2p node and channel discovery/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/secure time/":{"tf":1.0},"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":1.4142135623730951},"https://phlip9.com/notes/keyboards/moergo glove80/":{"tf":1.0},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0},"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/CDF confidence bands - DKW inequality/":{"tf":1.0}},"df":7,"'":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":1.0}},"df":3},".":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"m":{"docs":{},"df":0,"b":{"docs":{},"df":0,"s":{"docs":{},"df":0,".":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"g":{"docs":{},"df":0,"t":{"docs":{},"df":0,"h":{"docs":{"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0}},"df":1}}}}}}},"[":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0}},"df":1}}}}}}}},"w":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{"https://phlip9.com/notes/AI ML/Markov Decision Process (MDP)/":{"tf":1.0},"https://phlip9.com/notes/android/root phone with magisk/":{"tf":1.0},"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/money services business (MSB)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/btc-ln/BOLT 11 - invoices/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.7320508075688772},"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":1.0},"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":1.0},"https://phlip9.com/notes/distributed systems/papers/(2021) Leaderless Consensus/":{"tf":1.0},"https://phlip9.com/notes/fuzzing/fuzzcheck-rs/":{"tf":1.0},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.4142135623730951},"https://phlip9.com/notes/misc/kintsugi/":{"tf":1.0},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.4142135623730951},"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.0}},"df":16}}}}}}},"u":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"b":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{"https://phlip9.com/notes/lang/rust/self-referencing structs/":{"tf":1.0}},"df":1}}}}},"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{},"df":0,"v":{"docs":{"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":1.0}},"df":1}}}}},"t":{"docs":{"https://phlip9.com/notes/AI ML/Markov Decision Process (MDP)/":{"tf":1.0},"https://phlip9.com/notes/android/android cli setup/":{"tf":1.0},"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0},"https://phlip9.com/notes/android/root phone with magisk/":{"tf":1.0},"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/breez lightning service providers/":{"tf":1.0},"https://phlip9.com/notes/combinatorics/k-combinations of a multiset/":{"tf":1.7320508075688772},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.7320508075688772},"https://phlip9.com/notes/confidential computing/gramine/":{"tf":2.0},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":4.69041575982343},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel SGX/secure time/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":2.0},"https://phlip9.com/notes/crypto/acme protocol/":{"tf":1.0},"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":1.7320508075688772},"https://phlip9.com/notes/design/form design/":{"tf":2.23606797749979},"https://phlip9.com/notes/devops/azure CLI/":{"tf":1.0},"https://phlip9.com/notes/devops/deployment strategies/":{"tf":1.0},"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":1.0},"https://phlip9.com/notes/fuzzing/fuzzcheck-rs/":{"tf":1.4142135623730951},"https://phlip9.com/notes/fuzzing/fuzzing/":{"tf":1.0},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/flutter/flutter setup/":{"tf":1.0},"https://phlip9.com/notes/lang/lua/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/operator fixity and precedence/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/sycamore x futures/":{"tf":1.0},"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":1.4142135623730951},"https://phlip9.com/notes/misc/kintsugi/":{"tf":2.0},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.7320508075688772},"https://phlip9.com/notes/misc/setting up a headless raspbian boot image/":{"tf":1.0},"https://phlip9.com/notes/networking/CIDR/":{"tf":1.4142135623730951},"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.0},"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.0},"https://phlip9.com/notes/postgres/postgres performance tuning/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/nix/nix debug broken package build/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.4142135623730951}},"df":38,".":{"docs":{},"df":0,"e":{"docs":{},"df":0,"x":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{},"df":0,"_":{"docs":{},"df":0,"f":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"_":{"docs":{},"df":0,"s":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"e":{"docs":{},"df":0,"(":{"docs":{},"df":0,"&":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{},"df":0,"p":{"docs":{},"df":0,";":{"docs":{},"df":0,"t":{"docs":{},"df":0,"_":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":1.0}},"df":1,"[":{"docs":{},"df":0,".":{"docs":{},"df":0,".":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"]":{"docs":{},"df":0,"p":{"docs":{},"df":0,"c":{"docs":{},"df":0,"e":{"docs":{},"df":0,"_":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"f":{"docs":{},"df":0,"o":{"docs":{},"df":0,"_":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.4142135623730951}},"df":1}}}}}}}}}},"u":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"3":{"docs":{},"df":0,"2":{"docs":{},"df":0,"_":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.4142135623730951}},"df":1}}}}}}}}},"_":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":2.8284271247461903}},"df":1,".":{"docs":{},"df":0,"s":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"u":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"g":{"docs":{},"df":0,"_":{"docs":{},"df":0,"s":{"docs":{},"df":0,"u":{"docs":{},"df":0,"b":{"docs":{},"df":0,"(":{"docs":{},"df":0,"1":{"docs":{"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":1.4142135623730951}},"df":1}}}}}}}}}}}}}}}}}}}},"s":{"docs":{},"df":0,"c":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"p":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.0}},"df":1}}}}}}},"a":{"docs":{},"df":0,"g":{"docs":{"https://phlip9.com/notes/crypto/acme protocol/":{"tf":1.0},"https://phlip9.com/notes/devops/deployment strategies/":{"tf":2.0}},"df":2}},"b":{"docs":{},"df":0,"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/btc-ln/atomic multipath payments (AMP)/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/breez lightning service providers/":{"tf":1.4142135623730951},"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":2.0},"https://phlip9.com/notes/devops/consul/":{"tf":1.0},"https://phlip9.com/notes/devops/linkerd/":{"tf":1.0},"https://phlip9.com/notes/devops/service mesh/":{"tf":1.4142135623730951},"https://phlip9.com/notes/networking/network interface card (NIC)/":{"tf":1.0}},"df":7,"_":{"docs":{},"df":0,"p":{"docs":{},"df":0,"a":{"docs":{},"df":0,"y":{"docs":{"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.0}},"df":1}}}}}}}}},"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{"https://phlip9.com/notes/AI ML/Expectimax Search/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.4142135623730951},"https://phlip9.com/notes/misc/kintsugi/":{"tf":1.0}},"df":3}}},"d":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0}},"df":1}}},"e":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/lua/":{"tf":1.0},"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.0}},"df":4,"(":{"docs":{},"df":0,"x":{"docs":{"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":1.0}},"df":1}},"/":{"docs":{},"df":0,"d":{"docs":{},"df":0,"p":{"docs":{},"df":0,"/":{"docs":{},"df":0,"b":{"docs":{},"df":0,"0":{"docs":{},"df":0,"9":{"docs":{},"df":0,"f":{"docs":{},"df":0,"f":{"docs":{},"df":0,"5":{"docs":{},"df":0,"k":{"docs":{},"df":0,"1":{"docs":{},"df":0,"j":{"docs":{},"df":0,"8":{"docs":{"https://phlip9.com/notes/misc/water distillation setup/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}},"g":{"docs":{},"df":0,"o":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 4 - onion routing protocol/":{"tf":1.0}},"df":1}},"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0}},"df":1}},"i":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/statistics probability/MAD - median absolute deviation/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/winsorize/":{"tf":2.0}},"df":2}},"n":{"docs":{"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.4142135623730951}},"df":1}}},"o":{"docs":{},"df":0,"f":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":2.0}},"df":1},"l":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"x":{"docs":{},"df":0,"c":{"docs":{},"df":0,"e":{"docs":{},"df":0,"p":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0}},"df":1}}}}}}}}}}}}}},"p":{"docs":{},"df":0,"o":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.4142135623730951}},"df":1}}}},"u":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/AI ML/Markov Decision Process (MDP)/":{"tf":1.0},"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.7320508075688772},"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.7320508075688772},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0},"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":2.0},"https://phlip9.com/notes/crypto/tls exported keying material/":{"tf":1.4142135623730951},"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/gdb ref/":{"tf":1.0},"https://phlip9.com/notes/lang/lua/":{"tf":2.449489742783178},"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.0},"https://phlip9.com/notes/misc/envsubst/":{"tf":1.7320508075688772},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":2.0},"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.0},"https://phlip9.com/notes/performance/simdjson talk/":{"tf":1.0},"https://phlip9.com/notes/postgres/postgres performance tuning/":{"tf":1.0},"https://phlip9.com/notes/postgres/types of scans/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.7320508075688772},"https://phlip9.com/notes/reproducible builds/reproducible-builds.org/":{"tf":1.4142135623730951}},"df":19,"'":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.4142135623730951}},"df":1},".":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/crypto/tls exported keying material/":{"tf":1.0}},"df":1}}}},"_":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"a":{"docs":{},"df":0,"b":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"_":{"docs":{},"df":0,"p":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"=":{"docs":{},"df":0,"b":{"docs":{},"df":0,"o":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"d":{"docs":{},"df":0,".":{"docs":{},"df":0,"m":{"docs":{},"df":0,"t":{"docs":{},"df":0,"x":{"docs":{},"df":0,"_":{"docs":{},"df":0,"o":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}},"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{},"df":0,"_":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":1.4142135623730951}},"df":1}}}}}}}}}}}}}},"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":2.0},"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/secure time/":{"tf":1.7320508075688772},"https://phlip9.com/notes/confidential computing/marblerun/":{"tf":1.0},"https://phlip9.com/notes/design/form design/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/rust/understanding sycamore reactivity/":{"tf":1.0},"https://phlip9.com/notes/networking/CIDR/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/CDF confidence bands - DKW inequality/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/testing whether a coin is fair/":{"tf":1.0}},"df":11}}}}},"v":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/AI ML/Markov Decision Process (MDP)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/android/ADB over TCP inside WSL2/":{"tf":2.449489742783178},"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0},"https://phlip9.com/notes/android/linux ADB udev setup/":{"tf":1.0},"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/foreign bank account report (FBAR)/":{"tf":1.7320508075688772},"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/money services business (MSB)/":{"tf":1.0},"https://phlip9.com/notes/b l o c k c h a i n/bip158 - compact block filters/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/BOLT 7 - p2p node and channel discovery/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/atomic multipath payments (AMP)/":{"tf":1.0},"https://phlip9.com/notes/combinatorics/k-combinations of a multiset/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/gramine/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.7320508075688772},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":2.0},"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":2.0},"https://phlip9.com/notes/crypto/acme protocol/":{"tf":1.0},"https://phlip9.com/notes/devops/deployment strategies/":{"tf":1.0},"https://phlip9.com/notes/keyboards/moergo glove80/":{"tf":1.0},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0},"https://phlip9.com/notes/lang/lua/":{"tf":1.4142135623730951},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":2.0},"https://phlip9.com/notes/networking/ipv6 address space/":{"tf":1.4142135623730951},"https://phlip9.com/notes/networking/network interface card (NIC)/":{"tf":1.0},"https://phlip9.com/notes/networking/network interfaces/":{"tf":2.6457513110645907},"https://phlip9.com/notes/performance/profiling/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.4142135623730951},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.4142135623730951},"https://phlip9.com/notes/statistics probability/testing whether a coin is fair/":{"tf":1.0}},"df":33,"a":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/btc-ln/atomic multipath payments (AMP)/":{"tf":1.7320508075688772},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0},"https://phlip9.com/notes/devops/service mesh/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/nix/nix auto-allocate-uids -> nixbld users/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/standard error/":{"tf":1.0}},"df":6}},"f":{"docs":{},"df":0,"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"w":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/rust verification tools/":{"tf":1.4142135623730951},"https://phlip9.com/notes/performance/bit hacks/":{"tf":2.0}},"df":3}}}},"h":{"docs":{},"df":0,"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0},"https://phlip9.com/notes/devops/AKS - azure kubernetes service/":{"tf":1.0},"https://phlip9.com/notes/devops/service mesh/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.0}},"df":5}}}},"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":2.8284271247461903},"https://phlip9.com/notes/lang/lua/":{"tf":1.0}},"df":2,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/lang/koka-lang/":{"tf":1.0}},"df":1}}}}}},"s":{"docs":{},"df":0,"u":{"docs":{},"df":0,"b":{"docs":{"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.4142135623730951}},"df":1}}},"v":{"docs":{},"df":0,"i":{"docs":{},"df":0,"e":{"docs":{},"df":0,"w":{"docs":{"https://phlip9.com/notes/AI ML/Markov Decision Process (MDP)/":{"tf":1.0},"https://phlip9.com/notes/android/ADB over TCP inside WSL2/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/BOLT 4 - onion routing protocol/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/BOLT 7 - p2p node and channel discovery/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":1.0},"https://phlip9.com/notes/crypto/biscuit authz/":{"tf":1.0},"https://phlip9.com/notes/devops/secrets/mozilla SOPS/":{"tf":1.0},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/lightning router overview/":{"tf":1.4142135623730951},"https://phlip9.com/notes/statistics probability/CDF confidence bands - DKW inequality/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/G-test - multinomial goodness-of-fit/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/multinomial distribution/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/p-value/":{"tf":1.0}},"df":16}}}},"w":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":1.0},"https://phlip9.com/notes/networking/network interface card (NIC)/":{"tf":1.0}},"df":2}}}}}},"h":{"docs":{},"df":0,"c":{"docs":{},"df":0,"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"d":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"f":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"u":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{},"df":0,"u":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}},"m":{"docs":{},"df":0,"f":{"docs":{"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.0}},"df":1}}},"w":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/foreign bank account report (FBAR)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/btc-ln/BOLT 7 - p2p node and channel discovery/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0}},"df":4,"e":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/foreign bank account report (FBAR)/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":3.3166247903554},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0},"https://phlip9.com/notes/lang/operator fixity and precedence/":{"tf":1.0},"https://phlip9.com/notes/postgres/snippets/":{"tf":1.4142135623730951}},"df":5,"'":{"docs":{"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/foreign bank account report (FBAR)/":{"tf":1.4142135623730951}},"df":1},"e":{"docs":{},"df":0,"p":{"docs":{},"df":0,"o":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0}},"df":1}}}}},"s":{"docs":{},"df":0,"/":{"docs":{},"df":0,"p":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"v":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"s":{"docs":{},"df":0,"/":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{},"df":0,"m":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/confidential computing/marblerun/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}},"h":{"docs":{},"df":0,"i":{"docs":{},"df":0,"p":{"docs":{"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/foreign bank account report (FBAR)/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel TDX/":{"tf":1.0},"https://phlip9.com/notes/crypto/acme protocol/":{"tf":2.0},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0}},"df":4}}}}}}}},"x":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"a":{"docs":{},"df":0,"/":{"docs":{},"df":0,"n":{"docs":{},"df":0,"i":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/reproducible builds/nix/links/":{"tf":1.0}},"df":1}}}}}}}}}}},"p":{"docs":{"https://phlip9.com/notes/android/android cli setup/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/breez lightning service providers/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/gramine/":{"tf":1.4142135623730951},"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":4.58257569495584},"https://phlip9.com/notes/lang/gdb ref/":{"tf":1.0},"https://phlip9.com/notes/lang/lua/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/understanding sycamore reactivity/":{"tf":1.0},"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":1.4142135623730951},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":2.449489742783178},"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.4142135623730951},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.4142135623730951},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.4142135623730951},"https://phlip9.com/notes/statistics probability/G-test - multinomial goodness-of-fit/":{"tf":2.8284271247461903},"https://phlip9.com/notes/statistics probability/kelly criterion + ELO/":{"tf":2.449489742783178},"https://phlip9.com/notes/statistics probability/multinomial distribution/":{"tf":3.3166247903554},"https://phlip9.com/notes/statistics probability/p-value/":{"tf":3.0},"https://phlip9.com/notes/statistics probability/testing whether a coin is fair/":{"tf":2.6457513110645907}},"df":21,"'":{"docs":{"https://phlip9.com/notes/statistics probability/G-test - multinomial goodness-of-fit/":{"tf":1.0}},"df":1},"(":{"docs":{"https://phlip9.com/notes/AI ML/Markov Decision Process (MDP)/":{"tf":3.0}},"df":1},")":{"docs":{},"df":0,"}":{"docs":{},"df":0,"{":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/statistics probability/testing whether a coin is fair/":{"tf":1.0}},"df":1}}}},"+":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0}},"df":1}},".":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0}},"df":1}}}}},"d":{"docs":{},"df":0,"i":{"docs":{},"df":0,"m":{"docs":{"https://phlip9.com/notes/statistics probability/multinomial distribution/":{"tf":1.4142135623730951}},"df":1}}},"f":{"docs":{},"df":0,"o":{"docs":{},"df":0,"l":{"docs":{},"df":0,"d":{"docs":{},"df":0,"(":{"docs":{},"df":0,"0":{"docs":{},"df":0,".":{"docs":{},"df":0,"0":{"docs":{"https://phlip9.com/notes/statistics probability/multinomial distribution/":{"tf":1.0}},"df":1}}}}}}}},"i":{"docs":{"https://phlip9.com/notes/lang/lua/":{"tf":1.0}},"df":1}},"1":{"docs":{"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0}},"df":1},"2":{"docs":{"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0}},"df":1,"5":{"docs":{},"df":0,"6":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.0}},"df":1}},"p":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/BOLT 7 - p2p node and channel discovery/":{"tf":1.4142135623730951}},"df":2,"k":{"docs":{},"df":0,"h":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.0}},"df":1}}},"s":{"docs":{},"df":0,"h":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.0}},"df":1}},"w":{"docs":{},"df":0,"p":{"docs":{},"df":0,"k":{"docs":{},"df":0,"h":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.0}},"df":1}}},"s":{"docs":{},"df":0,"h":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.0}},"df":1}}}},"3":{"docs":{},"df":0,"8":{"docs":{},"df":0,"4":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.0}},"df":1}},"p":{"docs":{"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.7320508075688772},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":2.449489742783178}},"df":2,".":{"docs":{},"df":0,"x":{"docs":{},"df":0,"m":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.4142135623730951}},"df":2}}}},"1":{"docs":{},"df":0,".":{"docs":{},"df":0,"0":{"docs":{"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.4142135623730951}},"df":2}}}}},"6":{"docs":{"https://phlip9.com/notes/WSL/WSL2 custom kernel/":{"tf":1.0}},"df":1},":":{"docs":{},"df":0,"m":{"docs":{},"df":0,"o":{"docs":{},"df":0,"v":{"docs":{},"df":0,"e":{"docs":{"https://phlip9.com/notes/lang/lua/":{"tf":1.0}},"df":1}}}}},"[":{"docs":{},"df":0,"p":{"docs":{},"df":0,"e":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":1.0}},"df":1}}}}},"_":{"docs":{},"df":0,"1":{"docs":{"https://phlip9.com/notes/statistics probability/multinomial distribution/":{"tf":1.0}},"df":1,"^":{"docs":{},"df":0,"{":{"docs":{},"df":0,"x":{"docs":{},"df":0,"_":{"docs":{},"df":0,"1":{"docs":{"https://phlip9.com/notes/statistics probability/multinomial distribution/":{"tf":1.0}},"df":1}}}}}},"a":{"docs":{"https://phlip9.com/notes/AI ML/Markov Decision Process (MDP)/":{"tf":1.0}},"df":1,"d":{"docs":{},"df":0,"d":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"_":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"x":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.7320508075688772}},"df":1}}}}}}}}}}}}}}}}},"p":{"docs":{},"df":0,"p":{"docs":{},"df":0,"_":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"c":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"v":{"docs":{},"df":0,"e":{"docs":{},"df":0,"_":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"g":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{},"df":0,"_":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"f":{"docs":{},"df":0,"o":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}},"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"p":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0}},"df":1}}}}}}}}},"u":{"docs":{},"df":0,"t":{"docs":{},"df":0,"h":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"_":{"docs":{},"df":0,"d":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}},"b":{"docs":{},"df":0,"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"b":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":2.449489742783178}},"df":1}}}},"c":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{},"df":0,"_":{"docs":{},"df":0,"d":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0}},"df":1}}}}}}}},"p":{"docs":{},"df":0,"u":{"docs":{},"df":0,"s":{"docs":{},"df":0,"v":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0}},"df":1}}}}}},"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"c":{"docs":{},"df":0,"r":{"docs":{},"df":0,"y":{"docs":{},"df":0,"p":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"d":{"docs":{},"df":0,"_":{"docs":{},"df":0,"p":{"docs":{},"df":0,"p":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0}},"df":1}}}}}}}}}}}}}},"f":{"docs":{"https://phlip9.com/notes/statistics probability/testing whether a coin is fair/":{"tf":2.0}},"df":1,"a":{"docs":{},"df":0,"i":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/statistics probability/testing whether a coin is fair/":{"tf":1.0}},"df":1}}}},"h":{"docs":{"https://phlip9.com/notes/statistics probability/testing whether a coin is fair/":{"tf":1.0}},"df":1,"a":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/statistics probability/G-test - multinomial goodness-of-fit/":{"tf":1.4142135623730951},"https://phlip9.com/notes/statistics probability/multinomial distribution/":{"tf":2.23606797749979}},"df":2}}},"i":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":2.0},"https://phlip9.com/notes/statistics probability/G-test - multinomial goodness-of-fit/":{"tf":3.0},"https://phlip9.com/notes/statistics probability/multinomial distribution/":{"tf":2.449489742783178}},"df":3,"s":{"docs":{},"df":0,"_":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.4142135623730951}},"df":1}}}}}},"j":{"docs":{"https://phlip9.com/notes/statistics probability/multinomial distribution/":{"tf":1.0}},"df":1},"k":{"docs":{"https://phlip9.com/notes/statistics probability/multinomial distribution/":{"tf":1.0}},"df":1,"^":{"docs":{},"df":0,"{":{"docs":{},"df":0,"x":{"docs":{},"df":0,"_":{"docs":{},"df":0,"k":{"docs":{"https://phlip9.com/notes/statistics probability/multinomial distribution/":{"tf":1.0}},"df":1}}}}}},"l":{"docs":{"https://phlip9.com/notes/AI ML/Expectimax Search/":{"tf":2.23606797749979}},"df":1},"n":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"c":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.4142135623730951}},"df":1}}}},"p":{"docs":{},"df":0,"c":{"docs":{},"df":0,"e":{"docs":{},"df":0,"_":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"g":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{},"df":0,"_":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"f":{"docs":{},"df":0,"o":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0}},"df":1}}}}}}}}}}}}}},"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"x":{"docs":{},"df":0,"t":{"docs":{},"df":0,"_":{"docs":{},"df":0,"d":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0}},"df":1}}}}}}}}}}}}},"u":{"docs":{},"df":0,"b":{"docs":{},"df":0,"_":{"docs":{},"df":0,"k":{"docs":{},"df":0,"e":{"docs":{},"df":0,"y":{"docs":{},"df":0,"_":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0}},"df":1}}}}}}},"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"_":{"docs":{},"df":0,"k":{"docs":{},"df":0,"e":{"docs":{},"df":0,"y":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0}},"df":1}}}}}}}}}},"q":{"docs":{},"df":0,"e":{"docs":{},"df":0,"_":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"p":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.4142135623730951}},"df":1}}}}}}}},"u":{"docs":{},"df":0,"o":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.4142135623730951}},"df":1}}}},"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"p":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.4142135623730951}},"df":1}}}}}},"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"d":{"docs":{},"df":0,"_":{"docs":{},"df":0,"d":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.7320508075688772}},"df":1}}}}}}}}}},"i":{"docs":{},"df":0,"g":{"docs":{},"df":0,"_":{"docs":{},"df":0,"r":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0}},"df":1}}}}},"p":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0}},"df":1}}}},"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"x":{"docs":{},"df":0,"t":{"docs":{},"df":0,"2":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"c":{"docs":{},"df":0,"r":{"docs":{},"df":0,"y":{"docs":{},"df":0,"p":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.7320508075688772}},"df":1}}}}}}}}}}}},"w":{"docs":{"https://phlip9.com/notes/AI ML/Expectimax Search/":{"tf":2.8284271247461903}},"df":1},"x":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":2.0}},"df":1,"*":{"docs":{},"df":0,"u":{"docs":{},"df":0,"u":{"docs":{},"df":0,"_":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1},"x":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1},"z":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1}}}}}},"y":{"docs":{},"df":0,"*":{"docs":{},"df":0,"v":{"docs":{},"df":0,"v":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1,"_":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1},"x":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1},"z":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1}}}}}},"{":{"docs":{},"df":0,"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"g":{"docs":{},"df":0,"n":{"docs":{},"df":0,"i":{"docs":{},"df":0,"f":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{"https://phlip9.com/notes/statistics probability/multinomial distribution/":{"tf":1.4142135623730951}},"df":1}}}}}}}}}},"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"k":{"docs":{"https://phlip9.com/notes/combinatorics/k-combinations of a multiset/":{"tf":1.4142135623730951},"https://phlip9.com/notes/performance/simdjson talk/":{"tf":1.0}},"df":2,"a":{"docs":{},"df":0,"g":{"docs":{"https://phlip9.com/notes/android/android cli setup/":{"tf":1.4142135623730951},"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.7320508075688772},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/marblerun/":{"tf":1.0},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":2.0},"https://phlip9.com/notes/lang/lua/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/rust/rust verification tools/":{"tf":1.4142135623730951},"https://phlip9.com/notes/reproducible builds/nix/links/":{"tf":1.7320508075688772},"https://phlip9.com/notes/reproducible builds/nix/nix debug broken package build/":{"tf":2.0},"https://phlip9.com/notes/reproducible builds/nix/nix debug spurrious rebuilds/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/rebuilderd/":{"tf":2.23606797749979},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.4142135623730951}},"df":16,"e":{"docs":{},"df":0,".":{"docs":{},"df":0,"p":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"h":{"docs":{"https://phlip9.com/notes/lang/lua/":{"tf":1.0}},"df":1}}}}},":":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"b":{"docs":{},"df":0,"1":{"docs":{},"df":0,"/":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"b":{"docs":{},"df":0,"1":{"docs":{},"df":0,".":{"docs":{},"df":0,"d":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}},"e":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 8 - secure noise transport/":{"tf":1.0},"https://phlip9.com/notes/networking/CIDR/":{"tf":1.0},"https://phlip9.com/notes/networking/ipv6 address space/":{"tf":1.4142135623730951},"https://phlip9.com/notes/networking/network interface card (NIC)/":{"tf":1.0},"https://phlip9.com/notes/networking/network interfaces/":{"tf":2.449489742783178},"https://phlip9.com/notes/router/lightning router/captive portal/arubanetworks captive portal/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.0}},"df":8,".":{"docs":{},"df":0,"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0}},"df":1,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"v":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0}},"df":1}}}}}}}}}}}}},"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/android/ADB over TCP inside WSL2/":{"tf":1.0}},"df":1}}}},"d":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.4142135623730951},"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":1.0}},"df":2,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"d":{"docs":{},"df":0,"_":{"docs":{},"df":0,"k":{"docs":{},"df":0,"e":{"docs":{},"df":0,"y":{"docs":{"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":1.0}},"df":1,"[":{"docs":{},"df":0,".":{"docs":{},"df":0,".":{"docs":{},"df":0,"k":{"docs":{},"df":0,"e":{"docs":{},"df":0,"y":{"docs":{},"df":0,".":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"(":{"docs":{},"df":0,")":{"docs":{},"df":0,"]":{"docs":{},"df":0,".":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"p":{"docs":{},"df":0,"y":{"docs":{},"df":0,"_":{"docs":{},"df":0,"f":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"_":{"docs":{},"df":0,"s":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"e":{"docs":{},"df":0,"(":{"docs":{},"df":0,"k":{"docs":{},"df":0,"e":{"docs":{},"df":0,"y":{"docs":{"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"g":{"docs":{},"df":0,"+":{"docs":{},"df":0,"x":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":1.0}},"df":1}}}}}}}}},"g":{"docs":{},"df":0,"e":{"docs":{"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":2.8284271247461903},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.7320508075688772},"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel TDX/":{"tf":1.4142135623730951},"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":1.0},"https://phlip9.com/notes/design/form design/":{"tf":1.0},"https://phlip9.com/notes/devops/algo wireguard VPN server/":{"tf":1.0},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0},"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.0},"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.7320508075688772},"https://phlip9.com/notes/performance/simdjson talk/":{"tf":1.4142135623730951},"https://phlip9.com/notes/postgres/postgres performance tuning/":{"tf":1.4142135623730951},"https://phlip9.com/notes/postgres/types of scans/":{"tf":3.1622776601683795},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/arubanetworks captive portal/":{"tf":2.6457513110645907},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":2.6457513110645907},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.4142135623730951}},"df":19,"_":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{},"df":0,"x":{"docs":{"https://phlip9.com/notes/postgres/types of scans/":{"tf":1.0}},"df":1}}}},"r":{"docs":{"https://phlip9.com/notes/reproducible builds/nix/links/":{"tf":1.0}},"df":1}}},"i":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/money services business (MSB)/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/BOLT 11 - invoices/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/submarine swaps/":{"tf":1.4142135623730951},"https://phlip9.com/notes/misc/optimization solvers/":{"tf":1.0}},"df":5},"n":{"docs":{"https://phlip9.com/notes/fuzzing/fuzzcheck-rs/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.0}},"df":2,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"s":{"docs":{"https://phlip9.com/notes/lang/rust/rr with rust/":{"tf":1.0},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":2}}}},"t":{"docs":{"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.7320508075688772},"https://phlip9.com/notes/misc/kintsugi/":{"tf":1.0}},"df":2,"!":{"docs":{},"df":0,".":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0}},"df":1}}}}}}},".":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"p":{"docs":{},"df":0,"(":{"docs":{},"df":0,"|":{"docs":{},"df":0,"p":{"docs":{"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0}},"df":1}}}}}},"u":{"docs":{},"df":0,"n":{"docs":{},"df":0,"w":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"p":{"docs":{"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0}},"df":1,"(":{"docs":{},"df":0,")":{"docs":{},"df":0,".":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}},"?":{"docs":{},"df":0,".":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0}},"df":1}}}}}}}}},"r":{"docs":{"https://phlip9.com/notes/android/ADB over TCP inside WSL2/":{"tf":2.449489742783178},"https://phlip9.com/notes/android/android cli setup/":{"tf":3.1622776601683795},"https://phlip9.com/notes/confidential computing/gramine/":{"tf":1.0},"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":1.0},"https://phlip9.com/notes/keyboards/moergo glove80/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/operator fixity and precedence/":{"tf":1.4142135623730951},"https://phlip9.com/notes/misc/kintsugi/":{"tf":1.0}},"df":7}},"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/btc-ln/zero-conf channels/":{"tf":1.0},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":3.0}},"df":2,"e":{"docs":{},"df":0,"[":{"docs":{},"df":0,"0":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1},"1":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1},"i":{"docs":{},"df":0,"d":{"docs":{},"df":0,"x":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":2.8284271247461903}},"df":1}}}}}}}}},"m":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/confidential computing/intel TDX/":{"tf":1.0}},"df":1}},"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.4142135623730951}},"df":1}},"i":{"docs":{},"df":0,"c":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.7320508075688772},"https://phlip9.com/notes/lang/rust/rust verification tools/":{"tf":1.4142135623730951}},"df":4,"!":{"docs":{},"df":0,"(":{"docs":{},"df":0,"\"":{"docs":{},"df":0,"e":{"docs":{},"df":0,"g":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{},"df":0,"k":{"docs":{},"df":0,"e":{"docs":{},"df":0,"y":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0}},"df":1}}}}}}}}}},"_":{"docs":{},"df":0,"a":{"docs":{},"df":0,"b":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.0}},"df":1}}}}}},"k":{"docs":{"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0}},"df":1}}}},"p":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/money services business (MSB)/":{"tf":1.0},"https://phlip9.com/notes/b l o c k c h a i n/btc utreexo - utxo accumulator/":{"tf":1.0},"https://phlip9.com/notes/b l o c k c h a i n/fastpay/":{"tf":1.0},"https://phlip9.com/notes/b l o c k c h a i n/sui/":{"tf":1.0},"https://phlip9.com/notes/distributed systems/papers/(2020) Semi-Fast Byzantine-tolerant Shared Register without Reliable Broadcast/":{"tf":1.0},"https://phlip9.com/notes/distributed systems/papers/(2021) Leaderless Consensus/":{"tf":1.0},"https://phlip9.com/notes/fuzzing/fuzzing/":{"tf":1.0},"https://phlip9.com/notes/misc/kintsugi/":{"tf":1.0}},"df":8}}},"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"b":{"docs":{},"df":0,"o":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"(":{"docs":{},"df":0,"0":{"docs":{},"df":0,".":{"docs":{},"df":0,"3":{"docs":{},"df":0,"3":{"docs":{},"df":0,"3":{"docs":{},"df":0,"3":{"docs":{},"df":0,"3":{"docs":{},"df":0,"3":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1}}}}}}}},"x":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1}}}}}},"l":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.0}},"df":1}}}},"m":{"docs":{"https://phlip9.com/notes/crypto/(talk) authenticated data structures for stateless validation/":{"tf":1.0},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.7320508075688772}},"df":3,"1":{"docs":{"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.4142135623730951}},"df":1},"e":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.7320508075688772},"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.0},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":2.8284271247461903},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":2.6457513110645907},"https://phlip9.com/notes/lang/lua/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/CDF confidence bands - DKW inequality/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/testing whether a coin is fair/":{"tf":1.4142135623730951},"https://phlip9.com/notes/statistics probability/winsorize/":{"tf":1.4142135623730951}},"df":8,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"s":{"docs":{},"df":0,"$":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/statistics probability/multinomial distribution/":{"tf":1.0}},"df":1}}}}},"r":{"docs":{"https://phlip9.com/notes/statistics probability/CDF confidence bands - DKW inequality/":{"tf":1.4142135623730951}},"df":1}}},"s":{"docs":{},"df":0,".":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"g":{"docs":{},"df":0,"o":{"docs":{"https://phlip9.com/notes/crypto/TLS self-signed pubkey-only certs/":{"tf":1.0}},"df":1}}}}}},"t":{"docs":{"https://phlip9.com/notes/statistics probability/testing whether a coin is fair/":{"tf":1.0}},"df":1}},"n":{"docs":{},"df":0,"o":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/WSL/WSL2 custom kernel/":{"tf":1.0}},"df":1}}}}},"e":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/lang/lua/":{"tf":1.0}},"df":1,"t":{"docs":{"https://phlip9.com/notes/AI ML/Expectimax Search/":{"tf":1.0},"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":1.0}},"df":2,"h":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{"https://phlip9.com/notes/lang/operator fixity and precedence/":{"tf":1.7320508075688772}},"df":1}}},"s":{"docs":{},"df":0,"=":{"docs":{},"df":0,"0":{"docs":{"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":1.4142135623730951}},"df":1}}}}}},"i":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/btc-ln/atomic multipath payments (AMP)/":{"tf":1.0}},"df":1}},"k":{"docs":{"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.4142135623730951}},"df":2},"s":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":1.0},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0},"https://phlip9.com/notes/lang/operator fixity and precedence/":{"tf":3.605551275463989},"https://phlip9.com/notes/performance/simdjson talk/":{"tf":1.0}},"df":5,"e":{"docs":{},"df":0,"_":{"docs":{},"df":0,"8":{"docs":{},"df":0,"_":{"docs":{},"df":0,"d":{"docs":{},"df":0,"i":{"docs":{},"df":0,"g":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"s":{"docs":{},"df":0,"_":{"docs":{},"df":0,"u":{"docs":{},"df":0,"n":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"l":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"d":{"docs":{},"df":0,"(":{"docs":{},"df":0,"b":{"docs":{},"df":0,"u":{"docs":{},"df":0,"f":{"docs":{"https://phlip9.com/notes/performance/simdjson talk/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}},"x":{"docs":{},"df":0,"5":{"docs":{},"df":0,"0":{"docs":{},"df":0,"9":{"docs":{},"df":0,"_":{"docs":{},"df":0,"p":{"docs":{},"df":0,"e":{"docs":{},"df":0,"m":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0}},"df":1}}}}}}}}},"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.4142135623730951}},"df":1,"(":{"docs":{},"df":0,"\"":{"docs":{},"df":0,"1":{"docs":{},"df":0,"2":{"docs":{},"df":0,"3":{"docs":{"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0}},"df":1}}}},"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0}},"df":1}}}}}}},"j":{"docs":{},"df":0,"s":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/lang/operator fixity and precedence/":{"tf":1.0}},"df":1}}}},"r":{"docs":{"https://phlip9.com/notes/nvim/universal-ctags Notes/":{"tf":1.0}},"df":1}}},"t":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":1.7320508075688772},"https://phlip9.com/notes/devops/service mesh/":{"tf":1.0},"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":1.0},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0},"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":1.0},"https://phlip9.com/notes/misc/kintsugi/":{"tf":2.23606797749979},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0},"https://phlip9.com/notes/networking/CIDR/":{"tf":1.4142135623730951},"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/nix/links/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/arubanetworks captive portal/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/winsorize/":{"tf":1.4142135623730951}},"df":18,"i":{"docs":{"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/monetary instruments/":{"tf":1.0},"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/zero-conf channels/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/marblerun/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":1.4142135623730951},"https://phlip9.com/notes/reproducible builds/reproducible-builds.org/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":2.0}},"df":12,"a":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0},"https://phlip9.com/notes/b l o c k c h a i n/btc utreexo - utxo accumulator/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/atomic multipath payments (AMP)/":{"tf":2.8284271247461903},"https://phlip9.com/notes/lang/lua/":{"tf":1.0}},"df":4,"c":{"docs":{},"df":0,"m":{"docs":{},"df":0,"p":{"docs":{},"df":0,"(":{"docs":{},"df":0,"b":{"docs":{},"df":0,"i":{"docs":{},"df":0,"g":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0}},"df":1}}}}}},"t":{"docs":{"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0}},"df":1}}}}},"e":{"docs":{},"df":0,"q":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/understanding sycamore reactivity/":{"tf":1.0}},"df":2}},"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/combinatorics/k-combinations of a multiset/":{"tf":1.7320508075688772}},"df":1,"&":{"docs":{},"df":0,"l":{"docs":{},"df":0,"t":{"docs":{},"df":0,";":{"docs":{},"df":0,"b":{"docs":{},"df":0,"i":{"docs":{},"df":0,"g":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"&":{"docs":{},"df":0,"g":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0}},"df":1}}}}}}}}},"t":{"docs":{},"df":0,"&":{"docs":{},"df":0,"g":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.4142135623730951}},"df":1}}}}}}}}}}}}},"c":{"docs":{},"df":0,"u":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.0},"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":1.0},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0}},"df":5,"l":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/reproducible-builds.org/":{"tf":1.4142135623730951}},"df":2}}}}}}},"t":{"docs":{"https://phlip9.com/notes/android/root phone with magisk/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/atomic multipath payments (AMP)/":{"tf":1.0},"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.0}},"df":3}},"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.0}},"df":1,"s":{"docs":{},"df":0,"h":{"docs":{},"df":0,"i":{"docs":{},"df":0,"p":{"docs":{"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/foreign bank account report (FBAR)/":{"tf":1.0}},"df":1}}}}}}}}},"s":{"docs":{},"df":0,"s":{"docs":{"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0},"https://phlip9.com/notes/android/root phone with magisk/":{"tf":2.0},"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/monetary instruments/":{"tf":1.0},"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/lightning network notes/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":2.6457513110645907},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.0},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":2.0},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/operator fixity and precedence/":{"tf":2.0},"https://phlip9.com/notes/lang/rust/sycamore x futures/":{"tf":1.0},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.4142135623730951},"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/lightning router overview/":{"tf":1.4142135623730951}},"df":16,":":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0}},"df":1}}}}}}}},"i":{"docs":{},"df":0,"v":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.4142135623730951}},"df":1}},"p":{"docs":{},"df":0,"o":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.0}},"df":1}}}}},"w":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/nix/nix auto-allocate-uids -> nixbld users/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/arubanetworks captive portal/":{"tf":1.0}},"df":3,"&":{"docs":{},"df":0,"g":{"docs":{},"df":0,"t":{"docs":{},"df":0,";":{"docs":{},"df":0,"@":{"docs":{},"df":0,"&":{"docs":{},"df":0,"l":{"docs":{},"df":0,"t":{"docs":{},"df":0,";":{"docs":{},"df":0,"b":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}},"t":{"docs":{"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.4142135623730951},"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.0}},"df":3,"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"b":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/fuzzing/fuzzcheck-rs/":{"tf":1.0}},"df":1}}}}}},"t":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{"https://phlip9.com/notes/android/OTA updates for rooted android phone/":{"tf":1.0},"https://phlip9.com/notes/android/root phone with magisk/":{"tf":2.8284271247461903},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":1.0}},"df":4,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,";":{"docs":{},"df":0,"v":{"docs":{},"df":0,"4":{"docs":{"https://phlip9.com/notes/android/android cli setup/":{"tf":1.0}},"df":1}}}}}}},"h":{"docs":{"https://phlip9.com/notes/AI ML/Expectimax Search/":{"tf":1.4142135623730951},"https://phlip9.com/notes/android/android cli setup/":{"tf":1.0},"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.7320508075688772},"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.4142135623730951},"https://phlip9.com/notes/btc-ln/BOLT 11 - invoices/":{"tf":1.4142135623730951},"https://phlip9.com/notes/btc-ln/atomic multipath payments (AMP)/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/lightning network notes/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":2.0},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":2.0},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":2.0},"https://phlip9.com/notes/lang/lua/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/operator fixity and precedence/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/nix/nix auto-allocate-uids -> nixbld users/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/nix/nix debug spurrious rebuilds/":{"tf":1.0}},"df":17,"/":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"/":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"p":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{},"df":0,"_":{"docs":{},"df":0,"f":{"docs":{},"df":0,"i":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/misc/envsubst/":{"tf":1.7320508075688772}},"df":1}}}}}}}}}}}}},"=":{"docs":{},"df":0,"$":{"docs":{},"df":0,"p":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"h":{"docs":{},"df":0,":":{"docs":{},"df":0,"$":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{},"df":0,"_":{"docs":{},"df":0,"p":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"h":{"docs":{"https://phlip9.com/notes/android/android cli setup/":{"tf":1.0},"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0}},"df":2}}}}}}}}}}}},"f":{"docs":{},"df":0,"l":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"_":{"docs":{},"df":0,"h":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"/":{"docs":{},"df":0,"b":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/lang/flutter/flutter setup/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}},"g":{"docs":{},"df":0,"e":{"docs":{},"df":0,"m":{"docs":{},"df":0,"_":{"docs":{},"df":0,"b":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/ios/ios setup/":{"tf":1.0}},"df":1}}}}}}}}}}}}}},"\\":{"docs":{},"df":0,"$":{"docs":{},"df":0,"p":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"h":{"docs":{},"df":0,":":{"docs":{},"df":0,"\\":{"docs":{},"df":0,"$":{"docs":{},"df":0,"p":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"s":{"docs":{},"df":0,"h":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"/":{"docs":{},"df":0,"b":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/lang/ATS/Install ATS2/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}},"s":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"b":{"docs":{},"df":0,"=":{"docs":{},"df":0,"\\":{"docs":{},"df":0,"$":{"docs":{},"df":0,"h":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"/":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"v":{"docs":{},"df":0,"/":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"s":{"docs":{},"df":0,"2":{"docs":{"https://phlip9.com/notes/lang/ATS/Install ATS2/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}},"h":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"/":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"b":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0}},"df":1}}}}},"p":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{},"df":0,"u":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0}},"df":1}}}}}}},"=":{"docs":{},"df":0,"\\":{"docs":{},"df":0,"$":{"docs":{},"df":0,"h":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"/":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"v":{"docs":{},"df":0,"/":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"s":{"docs":{},"df":0,"2":{"docs":{"https://phlip9.com/notes/lang/ATS/Install ATS2/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}},"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.0},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":3.605551275463989},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.4142135623730951},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.4142135623730951},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.0}},"df":5,"&":{"docs":{},"df":0,"g":{"docs":{},"df":0,"t":{"docs":{},"df":0,";":{"docs":{},"df":0,"/":{"docs":{},"df":0,"&":{"docs":{},"df":0,"l":{"docs":{},"df":0,"t":{"docs":{},"df":0,";":{"docs":{},"df":0,"k":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{},"df":0,"&":{"docs":{},"df":0,"g":{"docs":{},"df":0,"t":{"docs":{},"df":0,";":{"docs":{},"df":0,"/":{"docs":{},"df":0,"[":{"docs":{},"df":0,"&":{"docs":{},"df":0,"l":{"docs":{},"df":0,"t":{"docs":{},"df":0,";":{"docs":{},"df":0,"f":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"g":{"docs":{},"df":0,"s":{"docs":{},"df":0,"&":{"docs":{},"df":0,"g":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/nvim/universal-ctags Notes/":{"tf":1.0}},"df":1}}}}}}}},"m":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/nvim/universal-ctags Notes/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}},"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"g":{"docs":{"https://phlip9.com/notes/nvim/universal-ctags Notes/":{"tf":1.4142135623730951}},"df":1}}}}}}}}}}}}}}}}},"y":{"docs":{"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/foreign bank account report (FBAR)/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/BOLT 4 - onion routing protocol/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/BOLT 7 - p2p node and channel discovery/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/atomic multipath payments (AMP)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/btc-ln/breez lightning service providers/":{"tf":1.4142135623730951},"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/submarine swaps/":{"tf":1.0},"https://phlip9.com/notes/devops/AKS - azure kubernetes service/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/lightning router overview/":{"tf":1.7320508075688772}},"df":9,"e":{"docs":{},"df":0,"e":{"docs":{},"df":0,"'":{"docs":{"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/monetary instruments/":{"tf":1.0}},"df":1},"p":{"docs":{},"df":0,"u":{"docs":{},"df":0,"b":{"docs":{},"df":0,"k":{"docs":{},"df":0,"e":{"docs":{},"df":0,"y":{"docs":{},"df":0,"(":{"docs":{},"df":0,"p":{"docs":{},"df":0,"a":{"docs":{},"df":0,"y":{"docs":{},"df":0,"e":{"docs":{},"df":0,"e":{"docs":{},"df":0,"p":{"docs":{},"df":0,"u":{"docs":{},"df":0,"b":{"docs":{},"df":0,"k":{"docs":{},"df":0,"e":{"docs":{},"df":0,"y":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 11 - invoices/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}},"r":{"docs":{"https://phlip9.com/notes/btc-ln/lightning rod/":{"tf":1.0}},"df":1}},"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 4 - onion routing protocol/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":1.4142135623730951},"https://phlip9.com/notes/crypto/acme protocol/":{"tf":1.4142135623730951}},"df":4,"_":{"docs":{},"df":0,"i":{"docs":{},"df":0,"v":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.0}},"df":1,"[":{"docs":{},"df":0,"s":{"docs":{},"df":0,"g":{"docs":{},"df":0,"x":{"docs":{},"df":0,"_":{"docs":{},"df":0,"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"_":{"docs":{},"df":0,"i":{"docs":{},"df":0,"v":{"docs":{},"df":0,"_":{"docs":{},"df":0,"s":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}},"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/money services business (MSB)/":{"tf":1.0},"https://phlip9.com/notes/b l o c k c h a i n/fastpay/":{"tf":1.7320508075688772},"https://phlip9.com/notes/btc-ln/BOLT 11 - invoices/":{"tf":1.7320508075688772},"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":3.1622776601683795},"https://phlip9.com/notes/btc-ln/BOLT 4 - onion routing protocol/":{"tf":2.0},"https://phlip9.com/notes/btc-ln/atomic multipath payments (AMP)/":{"tf":5.5677643628300215},"https://phlip9.com/notes/btc-ln/breez lightning service providers/":{"tf":1.4142135623730951},"https://phlip9.com/notes/btc-ln/lightning libs/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/lightning rod/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":3.3166247903554},"https://phlip9.com/notes/btc-ln/submarine swaps/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/zero-conf channels/":{"tf":1.7320508075688772},"https://phlip9.com/notes/postgres/snippets/":{"tf":2.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/lightning router overview/":{"tf":1.0}},"df":15,"'":{"docs":{"https://phlip9.com/notes/btc-ln/atomic multipath payments (AMP)/":{"tf":1.0}},"df":1},".":{"docs":{},"df":0,"p":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"i":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"g":{"docs":{"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.0}},"df":1}}}}}}},"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"u":{"docs":{"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.4142135623730951}},"df":1}}}}}},":":{"docs":{},"df":0,":":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"v":{"docs":{},"df":0,"o":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"e":{"docs":{},"df":0,"p":{"docs":{},"df":0,"a":{"docs":{},"df":0,"y":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"&":{"docs":{},"df":0,"l":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}},"_":{"docs":{},"df":0,"h":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{},"df":0,"h":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.4142135623730951}},"df":2}}}},"p":{"docs":{},"df":0,"o":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.4142135623730951}},"df":1}}}}}},"f":{"docs":{},"df":0,"a":{"docs":{},"df":0,"i":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.0}},"df":1}}},"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"w":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.0}},"df":1}}}}}}},"h":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{},"df":0,"h":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.0}},"df":1,"(":{"docs":{},"df":0,"s":{"docs":{},"df":0,"h":{"docs":{},"df":0,"a":{"docs":{},"df":0,"2":{"docs":{},"df":0,"5":{"docs":{},"df":0,"6":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 11 - invoices/":{"tf":1.0}},"df":1}}}}}}}}}}},"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"f":{"docs":{},"df":0,"o":{"docs":{},"df":0,"&":{"docs":{},"df":0,"g":{"docs":{},"df":0,"t":{"docs":{},"df":0,";":{"docs":{},"df":0,"&":{"docs":{},"df":0,"g":{"docs":{},"df":0,"t":{"docs":{},"df":0,";":{"docs":{},"df":0,"&":{"docs":{},"df":0,"g":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.0}},"df":1}}}}}}}}}}},"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"g":{"docs":{"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.7320508075688772}},"df":1}}}}}}}}}},"p":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"h":{"docs":{},"df":0,"f":{"docs":{},"df":0,"a":{"docs":{},"df":0,"i":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.4142135623730951}},"df":1}}}},"s":{"docs":{},"df":0,"u":{"docs":{},"df":0,"c":{"docs":{},"df":0,"c":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"s":{"docs":{"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.0}},"df":1}}}}}}}}}},"u":{"docs":{},"df":0,"r":{"docs":{},"df":0,"p":{"docs":{},"df":0,"o":{"docs":{},"df":0,"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,":":{"docs":{},"df":0,":":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"v":{"docs":{},"df":0,"o":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.0}},"df":1}}}}}},"s":{"docs":{},"df":0,"p":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"s":{"docs":{},"df":0,"(":{"docs":{},"df":0,"p":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"i":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"g":{"docs":{"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}},"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"e":{"docs":{},"df":0,"i":{"docs":{},"df":0,"v":{"docs":{"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.0}},"df":1}}}}}},"s":{"docs":{"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.0}},"df":1,".":{"docs":{},"df":0,"f":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{},"df":0,"_":{"docs":{},"df":0,"m":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{},"df":0,"(":{"docs":{},"df":0,"p":{"docs":{},"df":0,"a":{"docs":{},"df":0,"y":{"docs":{},"df":0,"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"_":{"docs":{},"df":0,"h":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{},"df":0,"h":{"docs":{"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}},"u":{"docs":{},"df":0,"p":{"docs":{},"df":0,"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{},"df":0,"(":{"docs":{},"df":0,"p":{"docs":{},"df":0,"a":{"docs":{},"df":0,"y":{"docs":{},"df":0,"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"_":{"docs":{},"df":0,"h":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{},"df":0,"h":{"docs":{"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}},"/":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/btc-ln/atomic multipath payments (AMP)/":{"tf":1.0}},"df":1}}}}},"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{},"df":0,"(":{"docs":{},"df":0,"p":{"docs":{},"df":0,"a":{"docs":{},"df":0,"y":{"docs":{},"df":0,"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 11 - invoices/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}},"b":{"docs":{},"df":0,"f":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/distributed systems/papers/(2021) Leaderless Consensus/":{"tf":1.0}},"df":1}}},"c":{"docs":{"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.0}},"df":2,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"l":{"docs":{},"df":0,"(":{"docs":{},"df":0,"f":{"docs":{},"df":0,"u":{"docs":{},"df":0,"n":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/lang/lua/":{"tf":1.0}},"df":1}}}}}}}}},"c":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.0}},"df":1},"e":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":3.7416573867739413},"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.4142135623730951}},"df":2,"'":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.7320508075688772}},"df":1},"_":{"docs":{},"df":0,"c":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{},"df":0,".":{"docs":{},"df":0,"h":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0}},"df":1}}}}}},"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"f":{"docs":{},"df":0,"o":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.4142135623730951}},"df":1}}},"s":{"docs":{},"df":0,"v":{"docs":{},"df":0,"n":{"docs":{},"df":0,"s":{"docs":{},"df":0,"v":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0}},"df":1}}}}}}},"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"g":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{},"df":0,"_":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"f":{"docs":{},"df":0,"o":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0}},"df":1}}}}}}}}}}}},"i":{"docs":{},"df":0,"d":{"docs":{},"df":0,"\"":{"docs":{},"df":0,":":{"docs":{},"df":0,"\"":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.0}},"df":1}}}}}}}}},"s":{"docs":{},"df":0,"v":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.0}},"df":1,"\"":{"docs":{},"df":0,":":{"docs":{},"df":0,"0":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.0}},"df":1}}}}}}},"i":{"docs":{"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.0},"https://phlip9.com/notes/networking/network interface card (NIC)/":{"tf":1.0}},"df":2,"e":{"docs":{"https://phlip9.com/notes/performance/simdjson talk/":{"tf":1.0}},"df":1}},"k":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":3.7416573867739413},"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":2.449489742783178}},"df":2,"i":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0}},"df":1}}},"p":{"docs":{"https://phlip9.com/notes/networking/ipv6 address space/":{"tf":1.0}},"df":1},"r":{"docs":{"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.0}},"df":1}},"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"p":{"docs":{"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.0},"https://phlip9.com/notes/performance/simdjson talk/":{"tf":1.0}},"df":2,"3":{"docs":{},"df":0,"2":{"docs":{},"df":0,"(":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{},"df":0,"k":{"docs":{},"df":0,"_":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{},"df":0,"x":{"docs":{"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.0}},"df":1}}}}}}}}}}}}},"f":{"docs":{"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/testing whether a coin is fair/":{"tf":1.7320508075688772}},"df":2},"h":{"docs":{"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.7320508075688772}},"df":1},"t":{"docs":{},"df":0,"p":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{},"df":0,"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"s":{"docs":{},"df":0,"/":{"docs":{},"df":0,"n":{"docs":{},"df":0,"i":{"docs":{},"df":0,"x":{"docs":{"https://phlip9.com/notes/reproducible builds/nix/links/":{"tf":1.0}},"df":1}}}}}}}}}}}}}},"e":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.4142135623730951}},"df":1,"a":{"docs":{},"df":0,"k":{"docs":{"https://phlip9.com/notes/devops/nomad/":{"tf":1.0}},"df":1},"r":{"docs":{},"df":0,"s":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"'":{"docs":{"https://phlip9.com/notes/statistics probability/multinomial distribution/":{"tf":1.0}},"df":1}}}}}},"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.0}},"df":1}}}}}}}},"e":{"docs":{},"df":0,"p":{"docs":{"https://phlip9.com/notes/lang/flutter/flutter setup/":{"tf":1.0}},"df":1},"r":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":4.242640687119285},"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":2.0},"https://phlip9.com/notes/crypto/TLS self-signed pubkey-only certs/":{"tf":1.0},"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":2.449489742783178},"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.7320508075688772}},"df":5,"'":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.4142135623730951},"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":1.0}},"df":2},"i":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":1.0}},"df":1}},"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"a":{"docs":{},"df":0,"g":{"docs":{"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.0}},"df":1}}}},"g":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.0}},"df":1}}}}},"f":{"docs":{"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.4142135623730951}},"df":1},"k":{"docs":{"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.4142135623730951}},"df":1},"m":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.4142135623730951}},"df":1,"_":{"docs":{},"df":0,"c":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"f":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"_":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"b":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}},"n":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/foreign bank account report (FBAR)/":{"tf":1.4142135623730951}},"df":1}}}},"d":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":2.449489742783178},"https://phlip9.com/notes/btc-ln/lightning network notes/":{"tf":1.4142135623730951},"https://phlip9.com/notes/crypto/acme protocol/":{"tf":1.0}},"df":3,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"g":{"docs":{},"df":0,"h":{"docs":{},"df":0,"t":{"docs":{},"df":0,"l":{"docs":{},"df":0,"c":{"docs":{},"df":0,"s":{"docs":{},"df":0,"f":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"w":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}},"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/foreign bank account report (FBAR)/":{"tf":1.0}},"df":1}}}}},"o":{"docs":{},"df":0,"p":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/aptos/":{"tf":1.0},"https://phlip9.com/notes/b l o c k c h a i n/sui/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0},"https://phlip9.com/notes/design/form design/":{"tf":1.0},"https://phlip9.com/notes/fuzzing/fuzzcheck-rs/":{"tf":1.7320508075688772},"https://phlip9.com/notes/keyboards/moergo glove80/":{"tf":1.0},"https://phlip9.com/notes/management/relieve often - why generals were more successful in WWII/":{"tf":1.0},"https://phlip9.com/notes/networking/ipv6 address space/":{"tf":1.0},"https://phlip9.com/notes/networking/network interface card (NIC)/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/rebuilderd/":{"tf":1.0}},"df":10,"e":{"docs":{},"df":0,"'":{"docs":{"https://phlip9.com/notes/design/form design/":{"tf":1.0}},"df":1}}}}},"r":{"docs":{"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/foreign bank account report (FBAR)/":{"tf":1.0},"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/money services business (MSB)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/b l o c k c h a i n/bip158 - compact block filters/":{"tf":1.0},"https://phlip9.com/notes/b l o c k c h a i n/btc utreexo - utxo accumulator/":{"tf":1.0},"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":2.0},"https://phlip9.com/notes/btc-ln/BOLT 4 - onion routing protocol/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/BOLT 7 - p2p node and channel discovery/":{"tf":1.4142135623730951},"https://phlip9.com/notes/btc-ln/breez lightning service providers/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":1.7320508075688772},"https://phlip9.com/notes/devops/secrets/mozilla SOPS/":{"tf":1.4142135623730951},"https://phlip9.com/notes/distributed systems/papers/(2020) Semi-Fast Byzantine-tolerant Shared Register without Reliable Broadcast/":{"tf":1.0},"https://phlip9.com/notes/misc/uptime to downtime conversion/":{"tf":1.4142135623730951},"https://phlip9.com/notes/networking/network interface card (NIC)/":{"tf":1.0},"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.0},"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.7320508075688772},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":2.449489742783178}},"df":19,"c":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"_":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"_":{"docs":{},"df":0,"b":{"docs":{},"df":0,"y":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"(":{"docs":{},"df":0,"h":{"docs":{},"df":0,"u":{"docs":{},"df":0,"e":{"docs":{},"df":0,"_":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"_":{"docs":{},"df":0,"r":{"docs":{},"df":0,"g":{"docs":{},"df":0,"b":{"docs":{},"df":0,"_":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"(":{"docs":{},"df":0,"p":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.7320508075688772}},"df":1}}}}}}}}}}}}}}}}}},"l":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1},"t":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1}}}}}}}}}}}}}},"f":{"docs":{"https://phlip9.com/notes/WSL/WSL2 custom kernel/":{"tf":3.7416573867739413},"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.4142135623730951},"https://phlip9.com/notes/combinatorics/k-combinations of a multiset/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0},"https://phlip9.com/notes/crypto/(talk) authenticated data structures for stateless validation/":{"tf":1.4142135623730951},"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":1.7320508075688772},"https://phlip9.com/notes/lang/rust/rr with rust/":{"tf":1.0},"https://phlip9.com/notes/performance/profiling/":{"tf":2.0}},"df":8,".":{"docs":{},"df":0,"d":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{"https://phlip9.com/notes/performance/profiling/":{"tf":1.0}},"df":1,".":{"docs":{},"df":0,"p":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"f":{"docs":{"https://phlip9.com/notes/WSL/WSL2 custom kernel/":{"tf":1.0}},"df":1}}}}}}}}}},"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/btc utreexo - utxo accumulator/":{"tf":1.0},"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":1.0}},"df":2}}},"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"m":{"docs":{"https://phlip9.com/notes/WSL/WSL2 custom kernel/":{"tf":2.23606797749979},"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":2.23606797749979},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":2.23606797749979},"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.0},"https://phlip9.com/notes/crypto/acme protocol/":{"tf":1.0},"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":1.0},"https://phlip9.com/notes/lang/koka-lang/":{"tf":1.0},"https://phlip9.com/notes/misc/optimization solvers/":{"tf":1.0},"https://phlip9.com/notes/networking/network interface card (NIC)/":{"tf":1.0},"https://phlip9.com/notes/performance/":{"tf":1.0},"https://phlip9.com/notes/postgres/postgres performance tuning/":{"tf":2.0},"https://phlip9.com/notes/postgres/types of scans/":{"tf":1.7320508075688772},"https://phlip9.com/notes/reproducible builds/reproducible-builds.org/":{"tf":1.4142135623730951},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.7320508075688772},"https://phlip9.com/notes/statistics probability/testing whether a coin is fair/":{"tf":1.0}},"df":17}}}},"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.4142135623730951},"https://phlip9.com/notes/devops/deployment strategies/":{"tf":1.7320508075688772},"https://phlip9.com/notes/devops/nomad/":{"tf":1.4142135623730951},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.4142135623730951},"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.0}},"df":5}},"p":{"docs":{},"df":0,"h":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1}}}}},"m":{"docs":{},"df":0,".":{"docs":{},"df":0,"l":{"docs":{},"df":0,"u":{"docs":{},"df":0,"a":{"docs":{"https://phlip9.com/notes/lang/lua/":{"tf":1.0}},"df":1}}}},"a":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/postgres/snippets/":{"tf":1.7320508075688772},"https://phlip9.com/notes/router/lightning router/captive portal/arubanetworks captive portal/":{"tf":1.0}},"df":2}},"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"s":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/aptos/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0},"https://phlip9.com/notes/crypto/biscuit authz/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/nix/nix debug broken package build/":{"tf":1.0}},"df":5}},"t":{"docs":{"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/arubanetworks captive portal/":{"tf":1.0}},"df":2}},"u":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/combinatorics/k-combinations of a multiset/":{"tf":1.4142135623730951},"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.7320508075688772}},"df":2}}},"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/btc utreexo - utxo accumulator/":{"tf":1.0},"https://phlip9.com/notes/b l o c k c h a i n/fastpay/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":3.0},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/secure time/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/marblerun/":{"tf":1.0},"https://phlip9.com/notes/devops/AKS - azure kubernetes service/":{"tf":1.0},"https://phlip9.com/notes/postgres/snippets/":{"tf":1.0}},"df":9}}},"o":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/foreign bank account report (FBAR)/":{"tf":1.7320508075688772},"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/monetary instruments/":{"tf":1.0},"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/money services business (MSB)/":{"tf":3.1622776601683795},"https://phlip9.com/notes/b l o c k c h a i n/bip158 - compact block filters/":{"tf":1.0},"https://phlip9.com/notes/devops/algo wireguard VPN server/":{"tf":1.0},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":2.0},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.4142135623730951}},"df":9,"(":{"docs":{},"df":0,"t":{"docs":{},"df":0,"h":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,".":{"docs":{},"df":0,"_":{"docs":{},"df":0,"n":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0}},"df":1}}}}}}}}}}}},"p":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/btc-ln/breez lightning service providers/":{"tf":1.4142135623730951},"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.0}},"df":2}}}}}},"s":{"docs":{},"df":0,"k":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/AI ML/Markov Decision Process (MDP)/":{"tf":1.0},"https://phlip9.com/notes/lang/flutter/flutter setup/":{"tf":1.0}},"df":2}}},"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/management/relieve often - why generals were more successful in WWII/":{"tf":1.0}},"df":1}}}},"f":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":2.449489742783178}},"df":1,"z":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.4142135623730951}},"df":1}},"g":{"docs":{},"df":0,"[":{"docs":{},"df":0,"e":{"docs":{},"df":0,"x":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"n":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.0}},"df":1}}}}}}}},"_":{"docs":{},"df":0,"w":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/postgres/postgres performance tuning/":{"tf":1.0}},"df":1}}}},"m":{"docs":{},"df":0,"u":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/postgres/postgres performance tuning/":{"tf":1.7320508075688772}},"df":1}}}}}}}},"h":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{},"df":0,"e":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.0}},"df":1}}},"i":{"docs":{"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.4142135623730951},"https://phlip9.com/notes/statistics probability/standard error/":{"tf":1.4142135623730951},"https://phlip9.com/notes/statistics probability/testing whether a coin is fair/":{"tf":1.7320508075688772}},"df":3,"\\":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"f":{"docs":{},"df":0,"t":{"docs":{},"df":0,"(":{"docs":{},"df":0,"\\":{"docs":{},"df":0,"f":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{"https://phlip9.com/notes/statistics probability/testing whether a coin is fair/":{"tf":1.4142135623730951}},"df":1,"{":{"docs":{},"df":0,"(":{"docs":{},"df":0,"\\":{"docs":{},"df":0,"m":{"docs":{},"df":0,"u":{"docs":{"https://phlip9.com/notes/statistics probability/testing whether a coin is fair/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}},"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"p":{"docs":{"https://phlip9.com/notes/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/lightning rod/":{"tf":1.0},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.4142135623730951}},"df":3,"'":{"docs":{"https://phlip9.com/notes/misc/kintsugi/":{"tf":1.0}},"df":1},"h":{"docs":{},"df":0,"a":{"docs":{},"df":0,"y":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"9":{"docs":{},"df":0,"@":{"docs":{},"df":0,"g":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"i":{"docs":{},"df":0,"l":{"docs":{},"df":0,".":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{"https://phlip9.com/notes/misc/setting up a headless raspbian boot image/":{"tf":1.0}},"df":1}}}}}}}}}}},"@":{"docs":{},"df":0,"p":{"docs":{},"df":0,"h":{"docs":{},"df":0,"i":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"p":{"docs":{},"df":0,"h":{"docs":{},"df":0,"a":{"docs":{},"df":0,"y":{"docs":{"https://phlip9.com/notes/misc/prepping RPI for embedded dev/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}},"o":{"docs":{},"df":0,"s":{"docs":{},"df":0,"o":{"docs":{},"df":0,"p":{"docs":{},"df":0,"h":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/misc/kintsugi/":{"tf":1.0}},"df":1}}}}}}}},"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"p":{"docs":{},"df":0,"9":{"docs":{"https://phlip9.com/notes/android/linux ADB udev setup/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/gramine/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.4142135623730951},"https://phlip9.com/notes/misc/envsubst/":{"tf":1.4142135623730951},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.4142135623730951},"https://phlip9.com/notes/misc/setting up a headless raspbian boot image/":{"tf":2.8284271247461903}},"df":6,".":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{"https://phlip9.com/notes/devops/algo wireguard VPN server/":{"tf":1.0}},"df":1}}}},"/":{"docs":{},"df":0,"k":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{},"df":0,"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"y":{"docs":{"https://phlip9.com/notes/misc/optimization solvers/":{"tf":1.0}},"df":1}}}}}}},"@":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{},"df":0,"p":{"docs":{},"df":0,"b":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"r":{"docs":{},"df":0,"y":{"docs":{},"df":0,"p":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/misc/setting up a headless raspbian boot image/":{"tf":1.0}},"df":1}}}}}}}}}}},"s":{"docs":{},"df":0,"g":{"docs":{},"df":0,"x":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"v":{"docs":{},"df":0,".":{"docs":{},"df":0,"p":{"docs":{},"df":0,"h":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"p":{"docs":{},"df":0,"9":{"docs":{},"df":0,".":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}},"x":{"docs":{},"df":0,"x":{"docs":{},"df":0,".":{"docs":{},"df":0,"x":{"docs":{},"df":0,"x":{"docs":{},"df":0,".":{"docs":{},"df":0,"x":{"docs":{},"df":0,"x":{"docs":{},"df":0,".":{"docs":{},"df":0,"x":{"docs":{},"df":0,"x":{"docs":{"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.4142135623730951}},"df":1}}}}}}}}}}}}},"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"k":{"docs":{"https://phlip9.com/notes/WSL/WSL2 custom kernel/":{"tf":1.4142135623730951},"https://phlip9.com/notes/devops/algo wireguard VPN server/":{"tf":1.0}},"df":2}}}},"p":{"docs":{},"df":0,"h":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/devops/algo wireguard VPN server/":{"tf":1.0}},"df":1,"e":{"docs":{},"df":0,".":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,":":{"docs":{},"df":0,"4":{"docs":{},"df":0,"2":{"docs":{},"df":0,"8":{"docs":{},"df":0,"3":{"docs":{},"df":0,"5":{"docs":{"https://phlip9.com/notes/android/android cli setup/":{"tf":1.7320508075688772}},"df":1}}}}}}}}}}}}}}},"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"p":{"docs":{"https://phlip9.com/notes/devops/algo wireguard VPN server/":{"tf":1.0}},"df":1}}}}}},"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"e":{"docs":{"https://phlip9.com/notes/android/ADB over TCP inside WSL2/":{"tf":1.7320508075688772},"https://phlip9.com/notes/android/OTA updates for rooted android phone/":{"tf":2.0},"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.4142135623730951},"https://phlip9.com/notes/android/root phone with magisk/":{"tf":2.6457513110645907},"https://phlip9.com/notes/btc-ln/breez lightning service providers/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/lightning libs/":{"tf":1.0},"https://phlip9.com/notes/lang/flutter/flutter setup/":{"tf":1.0},"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.0}},"df":9}}},"p":{"docs":{"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":1.0}},"df":1},"y":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"c":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":1.0},"https://phlip9.com/notes/networking/network interface card (NIC)/":{"tf":1.7320508075688772},"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.0}},"df":3}}}}},"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/money services business (MSB)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel TDX/":{"tf":1.0},"https://phlip9.com/notes/networking/network interface card (NIC)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/networking/network interfaces/":{"tf":2.8284271247461903},"https://phlip9.com/notes/performance/simdjson talk/":{"tf":1.0}},"df":6}}}}},"i":{"docs":{"https://phlip9.com/notes/AI ML/Markov Decision Process (MDP)/":{"tf":2.449489742783178},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":2.449489742783178},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.7320508075688772},"https://phlip9.com/notes/misc/setting up a headless raspbian boot image/":{"tf":3.3166247903554}},"df":4,"(":{"docs":{"https://phlip9.com/notes/AI ML/Markov Decision Process (MDP)/":{"tf":2.23606797749979}},"df":1},"^":{"docs":{},"df":0,"*":{"docs":{},"df":0,"(":{"docs":{},"df":0,"s":{"docs":{},"df":0,"_":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/AI ML/Markov Decision Process (MDP)/":{"tf":1.0}},"df":1}}}}}},"_":{"docs":{},"df":0,"{":{"docs":{},"df":0,"k":{"docs":{},"df":0,"+":{"docs":{},"df":0,"1":{"docs":{},"df":0,"}":{"docs":{},"df":0,"(":{"docs":{"https://phlip9.com/notes/AI ML/Markov Decision Process (MDP)/":{"tf":1.7320508075688772}},"df":1}}}}}}},"c":{"docs":{},"df":0,"k":{"docs":{"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0},"https://phlip9.com/notes/lang/flutter/flutter setup/":{"tf":1.0},"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":1.0}},"df":3},"t":{"docs":{},"df":0,"u":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/crypto/biscuit authz/":{"tf":1.0}},"df":1}}}},"d":{"docs":{"https://phlip9.com/notes/WSL/WSL2 custom kernel/":{"tf":1.0},"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":3.1622776601683795}},"df":2,"$":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"g":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{},"df":0,":":{"docs":{},"df":0,":":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"c":{"docs":{},"df":0,":":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.4142135623730951}},"df":1}}}}}}}}}}}}}}}}}}}}}},"e":{"docs":{},"df":0,"c":{"docs":{"https://phlip9.com/notes/btc-ln/atomic multipath payments (AMP)/":{"tf":2.23606797749979},"https://phlip9.com/notes/btc-ln/lightning libs/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.0},"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":1.0},"https://phlip9.com/notes/misc/kintsugi/":{"tf":4.242640687119285},"https://phlip9.com/notes/networking/CIDR/":{"tf":1.0}},"df":7}},"n":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 8 - secure noise transport/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":1.0},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":5,"&":{"docs":{},"df":0,"l":{"docs":{},"df":0,"t":{"docs":{},"df":0,";":{"docs":{},"df":0,"f":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{},"df":0,"u":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"_":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"l":{"docs":{},"df":0,":":{"docs":{},"df":0,":":{"docs":{},"df":0,"f":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{},"df":0,"u":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,":":{"docs":{},"df":0,":":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"y":{"docs":{},"df":0,"_":{"docs":{},"df":0,"f":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{},"df":0,"u":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,":":{"docs":{},"df":0,":":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"_":{"docs":{},"df":0,"f":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{},"df":0,"u":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,":":{"docs":{},"df":0,":":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"f":{"docs":{},"df":0,"u":{"docs":{"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"=":{"docs":{},"df":0,"b":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"_":{"docs":{},"df":0,"p":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1}}}}}}}}}}}},"p":{"docs":{"https://phlip9.com/notes/confidential computing/gramine/":{"tf":1.7320508075688772},"https://phlip9.com/notes/devops/algo wireguard VPN server/":{"tf":2.0}},"df":2,"3":{"docs":{"https://phlip9.com/notes/confidential computing/gramine/":{"tf":1.4142135623730951}},"df":1},"e":{"docs":{"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":2.6457513110645907},"https://phlip9.com/notes/router/lightning router/lightning router overview/":{"tf":1.0}},"df":2,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.0}},"df":1}}}}},"x":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/android/root phone with magisk/":{"tf":1.4142135623730951},"https://phlip9.com/notes/ios/ios setup/":{"tf":1.0},"https://phlip9.com/notes/lang/flutter/flutter setup/":{"tf":1.7320508075688772},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.4142135623730951}},"df":4,"_":{"docs":{},"df":0,"2":{"docs":{},"df":0,"_":{"docs":{},"df":0,"a":{"docs":{},"df":0,"p":{"docs":{},"df":0,"i":{"docs":{},"df":0,"_":{"docs":{},"df":0,"3":{"docs":{},"df":0,"1":{"docs":{"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0}},"df":1}}}}}}}},"s":{"docs":{},"df":0,"h":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"=":{"docs":{},"df":0,"p":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":3.3166247903554}},"df":1}}}}}}}}}}}}}}}}}},"k":{"docs":{},"df":0,"c":{"docs":{},"df":0,"s":{"docs":{},"df":0,"#":{"docs":{},"df":0,"1":{"docs":{},"df":0,"1":{"docs":{"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.0}},"df":1}}},"1":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0}},"df":1,"v":{"docs":{},"df":0,"1":{"docs":{},"df":0,"5":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0}},"df":1}}}}}},"g":{"docs":{"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/gramine/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/nix/nix debug spurrious rebuilds/":{"tf":2.6457513110645907}},"df":3},"i":{"docs":{"https://phlip9.com/notes/crypto/TLS self-signed pubkey-only certs/":{"tf":1.0},"https://phlip9.com/notes/crypto/acme protocol/":{"tf":1.4142135623730951}},"df":2},"r":{"docs":{},"df":0,"u":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0}},"df":1}}},"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"e":{"docs":{"https://phlip9.com/notes/AI ML/Expectimax Search/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.7320508075688772},"https://phlip9.com/notes/combinatorics/k-combinations of a multiset/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.0},"https://phlip9.com/notes/crypto/biscuit authz/":{"tf":1.0},"https://phlip9.com/notes/design/form design/":{"tf":1.0},"https://phlip9.com/notes/fuzzing/fuzzing/":{"tf":1.0},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":2.449489742783178},"https://phlip9.com/notes/lang/operator fixity and precedence/":{"tf":1.7320508075688772},"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":1.0},"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.0},"https://phlip9.com/notes/performance/simdjson talk/":{"tf":1.4142135623730951},"https://phlip9.com/notes/reproducible builds/reproducible-builds.org/":{"tf":1.0}},"df":15,"h":{"docs":{},"df":0,"o":{"docs":{},"df":0,"l":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/design/form design/":{"tf":2.449489742783178}},"df":1}}}}}},"i":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/secure time/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.7320508075688772},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":3,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"x":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":2.449489742783178},"https://phlip9.com/notes/devops/secrets/ejson-kms (AWS)/":{"tf":1.4142135623730951}},"df":3,"_":{"docs":{},"df":0,"s":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":3.0}},"df":1}}}}}}}},"n":{"docs":{"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":2.0},"https://phlip9.com/notes/misc/kintsugi/":{"tf":1.0},"https://phlip9.com/notes/postgres/postgres performance tuning/":{"tf":1.4142135623730951},"https://phlip9.com/notes/postgres/types of scans/":{"tf":2.23606797749979}},"df":4,"e":{"docs":{"https://phlip9.com/notes/confidential computing/marblerun/":{"tf":2.0},"https://phlip9.com/notes/devops/service mesh/":{"tf":1.4142135623730951},"https://phlip9.com/notes/networking/network interface card (NIC)/":{"tf":1.0}},"df":3},"t":{"docs":{"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0}},"df":1}},"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{"https://phlip9.com/notes/misc/kintsugi/":{"tf":1.0},"https://phlip9.com/notes/misc/water distillation setup/":{"tf":1.4142135623730951}},"df":2}}}},"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"u":{"docs":{"https://phlip9.com/notes/management/relieve often - why generals were more successful in WWII/":{"tf":1.4142135623730951}},"df":1}}},"f":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"m":{"docs":{"https://phlip9.com/notes/android/android cli setup/":{"tf":1.4142135623730951},"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0},"https://phlip9.com/notes/android/root phone with magisk/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/lightning libs/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":2.8284271247461903},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":2.0},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":4.242640687119285},"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":2.449489742783178},"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":2.0},"https://phlip9.com/notes/confidential computing/intel SGX/secure time/":{"tf":2.6457513110645907},"https://phlip9.com/notes/confidential computing/intel TDX/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":1.7320508075688772},"https://phlip9.com/notes/devops/consul/":{"tf":1.0},"https://phlip9.com/notes/devops/service mesh/":{"tf":1.0},"https://phlip9.com/notes/lang/flutter/flutter setup/":{"tf":1.0},"https://phlip9.com/notes/lang/lua/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":2.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":2.0}},"df":20,"'":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.4142135623730951}},"df":1},"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"f":{"docs":{},"df":0,"o":{"docs":{},"df":0,"b":{"docs":{},"df":0,"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"b":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0}},"df":1}}}}}}}},"s":{"docs":{},"df":0,";":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/android/android cli setup/":{"tf":1.7320508075688772}},"df":1}}}}}}}}}}}}},"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"u":{"docs":{},"df":0,"m":{"docs":{"https://phlip9.com/notes/misc/kintsugi/":{"tf":1.0}},"df":1}}}}},"y":{"docs":{"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":3.4641016151377544},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0},"https://phlip9.com/notes/misc/kintsugi/":{"tf":1.0},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0},"https://phlip9.com/notes/networking/CIDR/":{"tf":1.0}},"df":5,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"1":{"docs":{"https://phlip9.com/notes/AI ML/Expectimax Search/":{"tf":1.0}},"df":1},"2":{"docs":{"https://phlip9.com/notes/AI ML/Expectimax Search/":{"tf":1.0}},"df":1}}},"g":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/combinatorics/k-combinations of a multiset/":{"tf":1.0}},"df":1}}}}}},"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"g":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"g":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"b":{"docs":{},"df":0,"u":{"docs":{},"df":0,"g":{"docs":{"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.4142135623730951}},"df":1}}}}}}}}}}}}}},"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/rr with rust/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.4142135623730951}},"df":6}}},"o":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.0}},"df":1}},"t":{"docs":{"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.0}},"df":1,".":{"docs":{},"df":0,"g":{"docs":{},"df":0,"o":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.0}},"df":1}}}}},"u":{"docs":{"https://phlip9.com/notes/AI ML/Expectimax Search/":{"tf":1.7320508075688772},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0},"https://phlip9.com/notes/crypto/biscuit authz/":{"tf":1.0},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0},"https://phlip9.com/notes/lang/operator fixity and precedence/":{"tf":1.0},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0},"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.0}},"df":7,"g":{"docs":{"https://phlip9.com/notes/android/OTA updates for rooted android phone/":{"tf":1.0},"https://phlip9.com/notes/keyboards/moergo glove80/":{"tf":1.4142135623730951},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.4142135623730951},"https://phlip9.com/notes/misc/setting up a headless raspbian boot image/":{"tf":1.0}},"df":4,"g":{"docs":{},"df":0,"a":{"docs":{},"df":0,"b":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/crypto/dex - open-source OIDC & OAuth 2.0 provider/":{"tf":1.0}},"df":1}}}},"i":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":2.0},"https://phlip9.com/notes/devops/nomad/":{"tf":1.4142135623730951},"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.0}},"df":5,"_":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.0}},"df":1}}}}}},"m":{"docs":{},"df":0,"b":{"docs":{"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":1.0}},"df":1}}}},"m":{"docs":{},"df":0,"f":{"docs":{"https://phlip9.com/notes/statistics probability/G-test - multinomial goodness-of-fit/":{"tf":2.0},"https://phlip9.com/notes/statistics probability/multinomial distribution/":{"tf":1.4142135623730951}},"df":2,"$":{"docs":{},"df":0,"\\":{"docs":{},"df":0,"p":{"docs":{},"df":0,"r":{"docs":{},"df":0,"{":{"docs":{},"df":0,"x":{"docs":{"https://phlip9.com/notes/statistics probability/multinomial distribution/":{"tf":1.0}},"df":1}}}}}},"}":{"docs":{},"df":0,"(":{"docs":{},"df":0,"x":{"docs":{"https://phlip9.com/notes/statistics probability/multinomial distribution/":{"tf":1.0}},"df":1}}}},"u":{"docs":{"https://phlip9.com/notes/WSL/WSL2 custom kernel/":{"tf":1.4142135623730951}},"df":1}},"o":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/aptos/":{"tf":1.0},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.7320508075688772},"https://phlip9.com/notes/performance/simdjson talk/":{"tf":1.4142135623730951}},"df":3,"a":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/aptos/":{"tf":1.0}},"df":1},"d":{"docs":{"https://phlip9.com/notes/confidential computing/marblerun/":{"tf":1.7320508075688772},"https://phlip9.com/notes/devops/linkerd/":{"tf":1.4142135623730951},"https://phlip9.com/notes/devops/service mesh/":{"tf":1.0},"https://phlip9.com/notes/ios/ios setup/":{"tf":1.0}},"df":4},"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/WSL/WSL2 custom kernel/":{"tf":1.0},"https://phlip9.com/notes/android/ADB over TCP inside WSL2/":{"tf":2.0},"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":2.0},"https://phlip9.com/notes/btc-ln/BOLT 7 - p2p node and channel discovery/":{"tf":1.0},"https://phlip9.com/notes/combinatorics/k-combinations of a multiset/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":2.0},"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.0},"https://phlip9.com/notes/devops/algo wireguard VPN server/":{"tf":1.0},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.7320508075688772},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":2.6457513110645907},"https://phlip9.com/notes/lang/lua/":{"tf":2.6457513110645907},"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/nix/nix debug spurrious rebuilds/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/herbie - float error fixer/":{"tf":1.0}},"df":15,"(":{"docs":{},"df":0,"0":{"docs":{"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0}},"df":1},"t":{"docs":{},"df":0,"h":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,".":{"docs":{},"df":0,"x":{"docs":{"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0}},"df":1}}}}}},"x":{"docs":{"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0}},"df":1},"{":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"q":{"docs":{},"df":0,"u":{"docs":{},"df":0,"i":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0}},"df":1}}}}}}}},".":{"docs":{},"df":0,"_":{"docs":{},"df":0,"_":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"x":{"docs":{"https://phlip9.com/notes/lang/lua/":{"tf":1.0}},"df":1}}}}}}},"f":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"p":{"docs":{},"df":0,"o":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"(":{"docs":{},"df":0,"{":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"q":{"docs":{},"df":0,"u":{"docs":{},"df":0,"i":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0}},"df":1}}}}}}}},"2":{"docs":{},"df":0,"(":{"docs":{},"df":0,"{":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"q":{"docs":{},"df":0,"u":{"docs":{},"df":0,"i":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0}},"df":1}}}}}}}}},"3":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0}},"df":1}}}}}}}}}}},"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"g":{"docs":{},"df":0,"t":{"docs":{},"df":0,"h":{"docs":{"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0}},"df":1}}}}}}},"2":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.7320508075688772}},"df":1}},":":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"a":{"docs":{"https://phlip9.com/notes/lang/lua/":{"tf":1.0}},"df":1}}}},"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"w":{"docs":{},"df":0,"(":{"docs":{},"df":0,"5":{"docs":{"https://phlip9.com/notes/lang/lua/":{"tf":1.0}},"df":1}}}},"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"m":{"docs":{"https://phlip9.com/notes/lang/lua/":{"tf":1.0}},"df":1}}}}},"a":{"docs":{},"df":0,"b":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/misc/arm target triples/":{"tf":1.0}},"df":1}}},"e":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":3.0},"https://phlip9.com/notes/misc/optimization solvers/":{"tf":1.0},"https://phlip9.com/notes/performance/simdjson talk/":{"tf":1.0},"https://phlip9.com/notes/postgres/types of scans/":{"tf":1.0}},"df":4}},"w":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{"https://phlip9.com/notes/statistics probability/CDF confidence bands - DKW inequality/":{"tf":1.0}},"df":1}}}}},"s":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.0}},"df":2}}}},"k":{"docs":{},"df":0,"e":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.0}},"df":1}},"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/AI ML/Markov Decision Process (MDP)/":{"tf":4.242640687119285},"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/foreign bank account report (FBAR)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":2.0},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.7320508075688772},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.7320508075688772},"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":2.0},"https://phlip9.com/notes/crypto/biscuit authz/":{"tf":1.4142135623730951},"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":1.0},"https://phlip9.com/notes/management/relieve often - why generals were more successful in WWII/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/arubanetworks captive portal/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.4142135623730951}},"df":14},"y":{"docs":{},"df":0,"_":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.0}},"df":1}}}}}},"s":{"docs":{},"df":0,"h":{"docs":{"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0},"https://phlip9.com/notes/lang/operator fixity and precedence/":{"tf":1.0},"https://phlip9.com/notes/misc/kintsugi/":{"tf":1.0}},"df":3}},"t":{"docs":{"https://phlip9.com/notes/reproducible builds/reproducible-builds.org/":{"tf":1.4142135623730951}},"df":1}},"l":{"docs":{"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.0}},"df":1},"y":{"docs":{},"df":0,"1":{"docs":{},"df":0,"3":{"docs":{},"df":0,"0":{"docs":{},"df":0,"5":{"docs":{"https://phlip9.com/notes/devops/secrets/ejson-kms (AWS)/":{"tf":1.4142135623730951}},"df":1}}}},"m":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"p":{"docs":{},"df":0,"h":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":2.0},"https://phlip9.com/notes/lang/koka-lang/":{"tf":1.0}},"df":2}}}}},"n":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/crypto/(talk) authenticated data structures for stateless validation/":{"tf":1.0}},"df":1}}}}}},"o":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.7320508075688772},"https://phlip9.com/notes/devops/service mesh/":{"tf":1.0}},"df":2},"r":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/reproducible builds/nix/nix auto-allocate-uids -> nixbld users/":{"tf":1.0}},"df":1}}}},"p":{"docs":{"https://phlip9.com/notes/android/android cli setup/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0},"https://phlip9.com/notes/ios/ios setup/":{"tf":1.0},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.4142135623730951},"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/standard error/":{"tf":1.0}},"df":7,"!":{"docs":{},"df":0,"_":{"docs":{},"df":0,"o":{"docs":{"https://phlip9.com/notes/lang/flutter/flutter setup/":{"tf":1.4142135623730951},"https://phlip9.com/notes/reproducible builds/nix/nix auto-allocate-uids -> nixbld users/":{"tf":1.0}},"df":2}}},"_":{"docs":{},"df":0,"o":{"docs":{"https://phlip9.com/notes/lang/flutter/flutter setup/":{"tf":1.0},"https://phlip9.com/notes/misc/pop_OS! tweaks/":{"tf":1.4142135623730951}},"df":2}},"c":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"/":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"_":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.0}},"df":1}}}}}}}}}}}},"u":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/CDF confidence bands - DKW inequality/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/standard error/":{"tf":2.23606797749979},"https://phlip9.com/notes/statistics probability/testing whether a coin is fair/":{"tf":2.0}},"df":4,"a":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/AI ML/Markov Decision Process (MDP)/":{"tf":1.0}},"df":1}}}}},"r":{"docs":{},"df":0,"c":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":1.0}},"df":1}}}}}},"t":{"docs":{"https://phlip9.com/notes/android/ADB over TCP inside WSL2/":{"tf":2.23606797749979},"https://phlip9.com/notes/android/android cli setup/":{"tf":1.7320508075688772},"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/BOLT 7 - p2p node and channel discovery/":{"tf":2.0},"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.4142135623730951},"https://phlip9.com/notes/crypto/acme protocol/":{"tf":1.0},"https://phlip9.com/notes/devops/nomad/":{"tf":1.0},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":2.0},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.7320508075688772},"https://phlip9.com/notes/router/lightning router/captive portal/arubanetworks captive portal/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.7320508075688772},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":2.6457513110645907}},"df":13,"&":{"docs":{},"df":0,"g":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.0}},"df":1}}},"a":{"docs":{},"df":0,"b":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/misc/water distillation setup/":{"tf":1.4142135623730951}},"df":1}},"l":{"docs":{"https://phlip9.com/notes/crypto/dex - open-source OIDC & OAuth 2.0 provider/":{"tf":1.0},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.7320508075688772},"https://phlip9.com/notes/router/lightning router/captive portal/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":3.4641016151377544},"https://phlip9.com/notes/router/lightning router/captive portal/arubanetworks captive portal/":{"tf":3.605551275463989},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":5.830951894845301},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":5.477225575051661},"https://phlip9.com/notes/router/lightning router/lightning router overview/":{"tf":1.7320508075688772}},"df":8,"'":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.7320508075688772},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":2.449489742783178}},"df":3},".":{"docs":{},"df":0,"[":{"docs":{},"df":0,"3":{"docs":{"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.0}},"df":1}}},"]":{"docs":{},"df":0,"(":{"docs":{},"df":0,"@":{"docs":{},"df":0,"/":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"/":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"g":{"docs":{},"df":0,"h":{"docs":{},"df":0,"t":{"docs":{},"df":0,"n":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"g":{"docs":{},"df":0,"%":{"docs":{},"df":0,"2":{"docs":{},"df":0,"0":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"/":{"docs":{},"df":0,"c":{"docs":{},"df":0,"a":{"docs":{},"df":0,"p":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"v":{"docs":{},"df":0,"e":{"docs":{},"df":0,"%":{"docs":{},"df":0,"2":{"docs":{},"df":0,"0":{"docs":{},"df":0,"p":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"/":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"u":{"docs":{},"df":0,"b":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{},"df":0,"w":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"k":{"docs":{},"df":0,"s":{"docs":{},"df":0,"%":{"docs":{},"df":0,"2":{"docs":{},"df":0,"0":{"docs":{},"df":0,"c":{"docs":{},"df":0,"a":{"docs":{},"df":0,"p":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"v":{"docs":{},"df":0,"e":{"docs":{},"df":0,"%":{"docs":{},"df":0,"2":{"docs":{},"df":0,"0":{"docs":{},"df":0,"p":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,".":{"docs":{},"df":0,"m":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.4142135623730951}},"df":2}}}}},"s":{"docs":{},"df":0,"_":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":3.4641016151377544}},"df":1},"x":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":2.6457513110645907}},"df":1},"z":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":3.4641016151377544}},"df":1}},"i":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/AI ML/Expectimax Search/":{"tf":3.1622776601683795},"https://phlip9.com/notes/btc-ln/BOLT 4 - onion routing protocol/":{"tf":1.0},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.7320508075688772},"https://phlip9.com/notes/lang/operator fixity and precedence/":{"tf":1.0},"https://phlip9.com/notes/management/relieve often - why generals were more successful in WWII/":{"tf":1.0},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.4142135623730951}},"df":6,"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"(":{"docs":{},"df":0,"|":{"docs":{},"df":0,"b":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.0}},"df":1}}}},"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"g":{"docs":{},"df":0,"u":{"docs":{"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0}},"df":1}}}}}}}}},"v":{"docs":{"https://phlip9.com/notes/AI ML/Expectimax Search/":{"tf":1.0}},"df":1}}},"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"b":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/AI ML/Expectimax Search/":{"tf":2.0},"https://phlip9.com/notes/AI ML/Markov Decision Process (MDP)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/android/ADB over TCP inside WSL2/":{"tf":1.0},"https://phlip9.com/notes/b l o c k c h a i n/fastpay/":{"tf":1.4142135623730951},"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.4142135623730951},"https://phlip9.com/notes/btc-ln/BOLT 8 - secure noise transport/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/lightning rod/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/zero-conf channels/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":2.8284271247461903},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.4142135623730951},"https://phlip9.com/notes/crypto/(talk) authenticated data structures for stateless validation/":{"tf":1.0},"https://phlip9.com/notes/design/form design/":{"tf":1.0},"https://phlip9.com/notes/devops/nomad/":{"tf":1.0},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0},"https://phlip9.com/notes/lang/koka-lang/":{"tf":1.0},"https://phlip9.com/notes/misc/setting up a headless raspbian boot image/":{"tf":1.0},"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.4142135623730951},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.7320508075688772},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.4142135623730951}},"df":24}}}},"t":{"docs":{"https://phlip9.com/notes/android/root phone with magisk/":{"tf":1.0},"https://phlip9.com/notes/b l o c k c h a i n/fastpay/":{"tf":1.7320508075688772},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":1.0},"https://phlip9.com/notes/crypto/acme protocol/":{"tf":1.4142135623730951},"https://phlip9.com/notes/devops/nomad/":{"tf":1.0},"https://phlip9.com/notes/fuzzing/fuzzing/":{"tf":1.4142135623730951},"https://phlip9.com/notes/router/lightning router/captive portal/arubanetworks captive portal/":{"tf":1.0}},"df":9,"a":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/money services business (MSB)/":{"tf":1.0}},"df":1}},"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/lang/rust/rust verification tools/":{"tf":1.0}},"df":1}}}}}},"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/statistics probability/testing whether a coin is fair/":{"tf":2.0}},"df":1}}}}},"f":{"docs":{},"df":0,"i":{"docs":{},"df":0,"x":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0},"https://phlip9.com/notes/lang/operator fixity and precedence/":{"tf":1.4142135623730951}},"df":2}}},"g":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.0},"https://phlip9.com/notes/postgres/":{"tf":1.0},"https://phlip9.com/notes/postgres/postgres performance tuning/":{"tf":2.23606797749979},"https://phlip9.com/notes/postgres/types of scans/":{"tf":1.4142135623730951}},"df":4,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"q":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/postgres/postgres performance tuning/":{"tf":1.0}},"df":1}}}}}},"i":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/lang/ATS/Install ATS2/":{"tf":1.0}},"df":1,"s":{"docs":{},"df":0,".":{"docs":{},"df":0,"g":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/lang/ATS/Install ATS2/":{"tf":1.0}},"df":1}}}}}}}},"u":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0}},"df":1}}},"}":{"docs":{},"df":0,"{":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0}},"df":1}}}},"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/devops/deployment strategies/":{"tf":1.4142135623730951},"https://phlip9.com/notes/devops/service mesh/":{"tf":1.0},"https://phlip9.com/notes/fuzzing/fuzzcheck-rs/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.0}},"df":4}}}},"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/misc/kintsugi/":{"tf":1.0}},"df":1}}}}},"w":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/secure time/":{"tf":1.0}},"df":1,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/misc/kintsugi/":{"tf":3.3166247903554}},"df":1}}},"e":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/btc-ln/lightning libs/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.4142135623730951},"https://phlip9.com/notes/keyboards/moergo glove80/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":2.0},"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.0},"https://phlip9.com/notes/postgres/postgres performance tuning/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/nix/links/":{"tf":1.0}},"df":9,"s":{"docs":{},"df":0,"h":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/WSL/WSL2 custom kernel/":{"tf":1.0}},"df":1,"l":{"docs":{},"df":0,"/":{"docs":{},"df":0,"c":{"docs":{},"df":0,"m":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0}},"df":1}}}}}}}},"t":{"docs":{"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/gramine/":{"tf":1.0},"https://phlip9.com/notes/devops/azure CLI/":{"tf":1.0}},"df":3}}}}}},"p":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":2.0},"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.0},"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.0}},"df":3}},"p":{"docs":{},"df":0,"o":{"docs":{},"df":0,"e":{"docs":{"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.4142135623730951}},"df":1}}}},"r":{"docs":{"https://phlip9.com/notes/confidential computing/gramine/":{"tf":1.0},"https://phlip9.com/notes/fuzzing/fuzzcheck-rs/":{"tf":1.0},"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":1.0}},"df":3,"[":{"docs":{},"df":0,"(":{"docs":{},"df":0,"\\":{"docs":{},"df":0,"m":{"docs":{},"df":0,"u":{"docs":{},"df":0,"_":{"docs":{},"df":0,"x":{"docs":{"https://phlip9.com/notes/statistics probability/testing whether a coin is fair/":{"tf":1.0}},"df":1}}}}}},"\\":{"docs":{},"df":0,"m":{"docs":{},"df":0,"u":{"docs":{},"df":0,"_":{"docs":{},"df":0,"x":{"docs":{"https://phlip9.com/notes/statistics probability/testing whether a coin is fair/":{"tf":1.0}},"df":1}}}}},"f":{"docs":{},"df":0,"a":{"docs":{},"df":0,"i":{"docs":{},"df":0,"l":{"docs":{},"df":0,"u":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/statistics probability/testing whether a coin is fair/":{"tf":2.0}},"df":1}}}}}},"g":{"docs":{},"df":0,"(":{"docs":{},"df":0,"x":{"docs":{"https://phlip9.com/notes/statistics probability/multinomial distribution/":{"tf":1.0}},"df":1}}},"h":{"docs":{"https://phlip9.com/notes/statistics probability/testing whether a coin is fair/":{"tf":1.0}},"df":1}},"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{"https://phlip9.com/notes/postgres/postgres performance tuning/":{"tf":1.0}},"df":1}}}},"g":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.0}},"df":1,"t":{"docs":{"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.0}},"df":1}}}},"y":{"docs":{"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":1.0},"https://phlip9.com/notes/performance/simdjson talk/":{"tf":1.0}},"df":2}},"e":{"docs":{"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/money services business (MSB)/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":2.0},"https://phlip9.com/notes/btc-ln/BOLT 4 - onion routing protocol/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.7320508075688772},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/gramine/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0},"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":2.0},"https://phlip9.com/notes/lang/lua/":{"tf":1.0},"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":1.0},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.4142135623730951},"https://phlip9.com/notes/reproducible builds/rebuilderd/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/reproducible-builds.org/":{"tf":1.4142135623730951}},"df":13,"c":{"docs":{},"df":0,"e":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/keyboards/moergo glove80/":{"tf":1.0},"https://phlip9.com/notes/lang/operator fixity and precedence/":{"tf":4.0}},"df":2}},"i":{"docs":{},"df":0,"s":{"docs":{"https://phlip9.com/notes/crypto/acme protocol/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.4142135623730951},"https://phlip9.com/notes/statistics probability/testing whether a coin is fair/":{"tf":1.0}},"df":4}},"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/lang/rust/rust verification tools/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":2.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":3.1622776601683795}},"df":3}}}}}},"d":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 4 - onion routing protocol/":{"tf":1.0},"https://phlip9.com/notes/lang/koka-lang/":{"tf":1.0}},"df":2,"e":{"docs":{},"df":0,"f":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.0}},"df":1}}}},"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/btc-ln/breez lightning service providers/":{"tf":1.0}},"df":1}}}},"e":{"docs":{},"df":0,"m":{"docs":{},"df":0,"p":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0}},"df":1}}}},"f":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0},"https://phlip9.com/notes/lang/operator fixity and precedence/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/rr with rust/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":2.0}},"df":5,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"d":{"docs":{},"df":0,"_":{"docs":{},"df":0,"l":{"docs":{},"df":0,"f":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/networking/network interfaces/":{"tf":4.0}},"df":1}}}}}}}}},"i":{"docs":{},"df":0,"x":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/operator fixity and precedence/":{"tf":1.7320508075688772},"https://phlip9.com/notes/networking/CIDR/":{"tf":2.449489742783178},"https://phlip9.com/notes/networking/ipv6 address space/":{"tf":1.0},"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.7320508075688772},"https://phlip9.com/notes/reproducible builds/nix/nix auto-allocate-uids -> nixbld users/":{"tf":1.0}},"df":7,"=":{"docs":{},"df":0,"&":{"docs":{},"df":0,"l":{"docs":{},"df":0,"t":{"docs":{},"df":0,";":{"docs":{},"df":0,"s":{"docs":{},"df":0,"u":{"docs":{},"df":0,"b":{"docs":{},"df":0,"d":{"docs":{},"df":0,"i":{"docs":{},"df":0,"r":{"docs":{},"df":0,"&":{"docs":{},"df":0,"g":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":1.0}},"df":1}}}}}}}}}}}}},"p":{"docs":{},"df":0,"u":{"docs":{},"df":0,"b":{"docs":{"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":1.4142135623730951}},"df":1,"l":{"docs":{"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":1.0}},"df":1}}}}},"f":{"docs":{},"df":0,"d":{"docs":{},"df":0,"6":{"docs":{},"df":0,"c":{"docs":{},"df":0,":":{"docs":{},"df":0,"6":{"docs":{},"df":0,"5":{"docs":{},"df":0,"7":{"docs":{},"df":0,"8":{"docs":{},"df":0,":":{"docs":{},"df":0,"6":{"docs":{},"df":0,"5":{"docs":{},"df":0,"0":{"docs":{},"df":0,"2":{"docs":{},"df":0,":":{"docs":{},"df":0,":":{"docs":{},"df":0,"/":{"docs":{},"df":0,"4":{"docs":{},"df":0,"8":{"docs":{"https://phlip9.com/notes/networking/ipv6 address space/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}},"n":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"f":{"docs":{},"df":0,"c":{"docs":{"https://phlip9.com/notes/networking/ipv6 address space/":{"tf":1.0}},"df":1}}}}}}},"r":{"docs":{},"df":0,"f":{"docs":{},"df":0,"c":{"docs":{},"df":0,"6":{"docs":{},"df":0,"0":{"docs":{},"df":0,"5":{"docs":{},"df":0,"2":{"docs":{"https://phlip9.com/notes/networking/ipv6 address space/":{"tf":1.0}},"df":1}}}},"8":{"docs":{},"df":0,"2":{"docs":{},"df":0,"1":{"docs":{},"df":0,"5":{"docs":{"https://phlip9.com/notes/networking/ipv6 address space/":{"tf":1.0}},"df":1}}}}}}}}}},"i":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"g":{"docs":{"https://phlip9.com/notes/btc-ln/atomic multipath payments (AMP)/":{"tf":1.7320508075688772},"https://phlip9.com/notes/btc-ln/lightning network notes/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":2.6457513110645907},"https://phlip9.com/notes/btc-ln/submarine swaps/":{"tf":1.4142135623730951}},"df":4}}}},"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"m":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/AI ML/Markov Decision Process (MDP)/":{"tf":1.0},"https://phlip9.com/notes/networking/CIDR/":{"tf":1.0}},"df":2}}}}}}},"u":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0},"https://phlip9.com/notes/lang/lua/":{"tf":1.0},"https://phlip9.com/notes/lang/operator fixity and precedence/":{"tf":1.0}},"df":3,"e":{"docs":{},"df":0,".":{"docs":{},"df":0,"o":{"docs":{},"df":0,"p":{"docs":{"https://phlip9.com/notes/lang/operator fixity and precedence/":{"tf":1.0}},"df":1}}},"/":{"docs":{},"df":0,"d":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"s":{"docs":{},"df":0,"/":{"docs":{},"df":0,"&":{"docs":{},"df":0,"l":{"docs":{},"df":0,"t":{"docs":{},"df":0,";":{"docs":{},"df":0,"p":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{},"df":0,"u":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}},"m":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0}},"df":1},"u":{"docs":{},"df":0,"m":{"docs":{"https://phlip9.com/notes/postgres/postgres performance tuning/":{"tf":2.0}},"df":1}}}},"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/AI ML/Expectimax Search/":{"tf":1.7320508075688772}},"df":1}}}}},"p":{"docs":{"https://phlip9.com/notes/misc/prepping RPI for embedded dev/":{"tf":1.4142135623730951}},"df":1,"a":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/money services business (MSB)/":{"tf":1.0}},"df":1}},"r":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.0},"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":2.6457513110645907},"https://phlip9.com/notes/misc/kintsugi/":{"tf":1.0}},"df":3}},"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.0}},"df":1}}}},"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"q":{"docs":{"https://phlip9.com/notes/lang/flutter/flutter setup/":{"tf":1.0}},"df":1}}},"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/btc utreexo - utxo accumulator/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":1.4142135623730951},"https://phlip9.com/notes/crypto/biscuit authz/":{"tf":1.0},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0},"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.7320508075688772},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":2.0}},"df":10}},"r":{"docs":{},"df":0,"v":{"docs":{"https://phlip9.com/notes/AI ML/Expectimax Search/":{"tf":2.449489742783178},"https://phlip9.com/notes/android/root phone with magisk/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/lightning libs/":{"tf":1.0},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.4142135623730951},"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":1.7320508075688772},"https://phlip9.com/notes/reproducible builds/nix/nix debug broken package build/":{"tf":1.0}},"df":6}}},"s":{"docs":{"https://phlip9.com/notes/keyboards/moergo glove80/":{"tf":2.23606797749979},"https://phlip9.com/notes/lang/gdb ref/":{"tf":1.0},"https://phlip9.com/notes/misc/kintsugi/":{"tf":1.7320508075688772},"https://phlip9.com/notes/misc/pop_OS! tweaks/":{"tf":1.0},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":2.8284271247461903}},"df":5,"_":{"docs":{},"df":0,"u":{"docs":{},"df":0,"p":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1,".":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1},"x":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1}}}}}},"u":{"docs":{},"df":0,"m":{"docs":{"https://phlip9.com/notes/AI ML/Expectimax Search/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.0}},"df":2}}},"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.0}},"df":1}}},"t":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/android/root phone with magisk/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.4142135623730951},"https://phlip9.com/notes/crypto/biscuit authz/":{"tf":1.0},"https://phlip9.com/notes/fuzzing/fuzzing/":{"tf":1.0},"https://phlip9.com/notes/lang/flutter/flutter setup/":{"tf":1.0},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.4142135623730951},"https://phlip9.com/notes/nvim/universal-ctags Notes/":{"tf":1.0},"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.0},"https://phlip9.com/notes/performance/simdjson talk/":{"tf":1.0}},"df":9}}},"v":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/fastpay/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/breez lightning service providers/":{"tf":1.0},"https://phlip9.com/notes/crypto/biscuit authz/":{"tf":1.0}},"df":3,"_":{"docs":{},"df":0,"s":{"docs":{},"df":0,"c":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"_":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{},"df":0,"x":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.7320508075688772}},"df":1}}}}}}}}}}},"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/AI ML/Markov Decision Process (MDP)/":{"tf":1.0},"https://phlip9.com/notes/b l o c k c h a i n/fastpay/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.7320508075688772},"https://phlip9.com/notes/confidential computing/intel SGX/secure time/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel TDX/":{"tf":1.0},"https://phlip9.com/notes/crypto/(talk) authenticated data structures for stateless validation/":{"tf":1.0},"https://phlip9.com/notes/crypto/biscuit authz/":{"tf":1.0},"https://phlip9.com/notes/devops/secrets/envkey/":{"tf":1.0},"https://phlip9.com/notes/fuzzing/fuzzcheck-rs/":{"tf":1.0},"https://phlip9.com/notes/management/relieve often - why generals were more successful in WWII/":{"tf":1.4142135623730951},"https://phlip9.com/notes/reproducible builds/reproducible-builds.org/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.4142135623730951}},"df":14}}},"i":{"docs":{},"df":0,"e":{"docs":{},"df":0,"w":{"docs":{"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.7320508075688772}},"df":1,")":{"docs":{},"df":0,"y":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0}},"df":1}},"y":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0}},"df":1}}},"o":{"docs":{},"df":0,"u":{"docs":{"https://phlip9.com/notes/AI ML/Markov Decision Process (MDP)/":{"tf":1.0},"https://phlip9.com/notes/combinatorics/k-combinations of a multiset/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/secure time/":{"tf":1.0},"https://phlip9.com/notes/crypto/biscuit authz/":{"tf":1.0},"https://phlip9.com/notes/devops/deployment strategies/":{"tf":1.4142135623730951},"https://phlip9.com/notes/devops/secrets/1password - secrets automation/":{"tf":1.0},"https://phlip9.com/notes/fuzzing/fuzzcheck-rs/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/understanding sycamore reactivity/":{"tf":1.0},"https://phlip9.com/notes/misc/pop_OS! tweaks/":{"tf":1.4142135623730951},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":12,"s":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/gramine/":{"tf":1.0},"https://phlip9.com/notes/devops/deployment strategies/":{"tf":1.4142135623730951},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.0}},"df":4}}}}}},"f":{"docs":{"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":1.7320508075688772}},"df":1,"n":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.7320508075688772}},"df":1},"u":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":2.0}},"df":1}}},"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"e":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0},"https://phlip9.com/notes/devops/azure CLI/":{"tf":1.0},"https://phlip9.com/notes/devops/secrets/1password - secrets automation/":{"tf":1.4142135623730951},"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":1.0},"https://phlip9.com/notes/management/relieve often - why generals were more successful in WWII/":{"tf":1.4142135623730951},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":6}},"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/fastpay/":{"tf":3.605551275463989},"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.0},"https://phlip9.com/notes/devops/docker compose/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.0},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0},"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.4142135623730951}},"df":6,"l":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/money services business (MSB)/":{"tf":1.0},"https://phlip9.com/notes/devops/kind (kubernetes in docker)/":{"tf":1.0},"https://phlip9.com/notes/postgres/postgres performance tuning/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.0}},"df":4}}},"y":{"docs":{},"df":0,"/":{"docs":{},"df":0,"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/fastpay/":{"tf":1.0}},"df":1}}}}}}}}}}}}},"i":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.4142135623730951},"https://phlip9.com/notes/crypto/zkdocs/":{"tf":1.0},"https://phlip9.com/notes/lang/koka-lang/":{"tf":1.0}},"df":5}}},"n":{"docs":{},"df":0,"c":{"docs":{},"df":0,"i":{"docs":{},"df":0,"p":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.0},"https://phlip9.com/notes/devops/secrets/1password - secrets automation/":{"tf":1.0},"https://phlip9.com/notes/management/relieve often - why generals were more successful in WWII/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/testing whether a coin is fair/":{"tf":1.0}},"df":4}}}},"t":{"docs":{"https://phlip9.com/notes/WSL/WSL2 custom kernel/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0},"https://phlip9.com/notes/fuzzing/fuzzcheck-rs/":{"tf":1.0},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":2.0},"https://phlip9.com/notes/lang/lua/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":3.872983346207417},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.7320508075688772},"https://phlip9.com/notes/postgres/snippets/":{"tf":1.4142135623730951},"https://phlip9.com/notes/reproducible builds/nix/nix debug broken package build/":{"tf":1.4142135623730951}},"df":9,"(":{"docs":{},"df":0,"\"":{"docs":{},"df":0,"$":{"docs":{},"df":0,"f":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0}},"df":1}}}}},"b":{"docs":{},"df":0,"i":{"docs":{},"df":0,"g":{"docs":{"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0}},"df":1}}},"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0}},"df":1}}}}},"h":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{},"df":0,"l":{"docs":{},"df":0,"o":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1}}}}},"i":{"docs":{"https://phlip9.com/notes/statistics probability/kelly criterion + ELO/":{"tf":1.0}},"df":1},"t":{"docs":{},"df":0,"h":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0}},"df":1}}},"v":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"u":{"docs":{"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0}},"df":1}}}},"w":{"docs":{},"df":0,"o":{"docs":{},"df":0,"w":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1}}}},"'":{"docs":{},"df":0,"n":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0}},"df":1}}},"u":{"docs":{},"df":0,"n":{"docs":{},"df":0,"k":{"docs":{},"df":0,"n":{"docs":{},"df":0,"o":{"docs":{},"df":0,"w":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.4142135623730951}},"df":1}}}}}}}},"1":{"docs":{},"df":0,"2":{"docs":{},"df":0,"3":{"docs":{"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.0}},"df":1}}},"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"c":{"docs":{"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0}},"df":1}}}},"f":{"docs":{},"df":0,"\"":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1}}}}},"h":{"docs":{},"df":0,"u":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1}}},"o":{"docs":{},"df":0,"o":{"docs":{"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0}},"df":1}}},"i":{"docs":{"https://phlip9.com/notes/lang/lua/":{"tf":2.0}},"df":1},"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/confidential computing/gramine/":{"tf":1.4142135623730951}},"df":1}}},"p":{"docs":{},"df":0,".":{"docs":{},"df":0,"x":{"docs":{"https://phlip9.com/notes/lang/lua/":{"tf":1.0}},"df":1}},":":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"a":{"docs":{"https://phlip9.com/notes/lang/lua/":{"tf":1.0}},"df":1}}}}},"o":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"(":{"docs":{},"df":0,"x":{"docs":{"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.4142135623730951}},"df":1}},".":{"docs":{},"df":0,"f":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"p":{"docs":{},"df":0,"o":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"(":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0}},"df":1}},"3":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0}},"df":1}}}}}}}}}}},"x":{"docs":{"https://phlip9.com/notes/lang/lua/":{"tf":1.0}},"df":1}}}}}}},"x":{"docs":{"https://phlip9.com/notes/lang/lua/":{"tf":1.4142135623730951}},"df":1}},"a":{"docs":{},"df":0,"(":{"docs":{},"df":0,"\"":{"docs":{},"df":0,"d":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"k":{"docs":{"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.0}},"df":1}}}}},"@":{"docs":{},"df":0,"b":{"docs":{},"df":0,"y":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.0}},"df":1}}}}}},"e":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0}},"df":1}},"f":{"docs":{},"df":0,"(":{"docs":{},"df":0,"\"":{"docs":{},"df":0,"%":{"docs":{"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":3.3166247903554}},"df":1,"d":{"docs":{"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.4142135623730951}},"df":1,"\\":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.4142135623730951}},"df":1}}},"i":{"docs":{"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.0}},"df":1},"s":{"docs":{},"df":0,"\\":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.0}},"df":1}}},"y":{"docs":{},"df":0,"\\":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.0}},"df":1}}}},"\\":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.0}},"df":1}},"p":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{},"df":0,"\\":{"docs":{},"df":0,"t":{"docs":{},"df":0,"p":{"docs":{},"df":0,"p":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{},"df":0,"\\":{"docs":{},"df":0,"t":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"\\":{"docs":{},"df":0,"t":{"docs":{},"df":0,"p":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"h":{"docs":{},"df":0,"\\":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"g":{"docs":{},"df":0,"v":{"docs":{},"df":0,"\\":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"\\":{"docs":{},"df":0,"\"":{"docs":{},"df":0,"%":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.0}},"df":1}}}}}},"l":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.4142135623730951},"https://phlip9.com/notes/statistics probability/multinomial distribution/":{"tf":1.0}},"df":2,"!":{"docs":{},"df":0,"(":{"docs":{},"df":0,"\"":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"_":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"f":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0}},"df":1}}}}}}},"{":{"docs":{},"df":0,":":{"docs":{},"df":0,"&":{"docs":{},"df":0,"g":{"docs":{},"df":0,"t":{"docs":{},"df":0,";":{"docs":{},"df":0,"1":{"docs":{},"df":0,"2":{"docs":{"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.7320508075688772}},"df":1}}}}}}}}}}}}},"w":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"i":{"docs":{},"df":0,"l":{"docs":{},"df":0,"s":{"docs":{},"df":0,"(":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}},"o":{"docs":{"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0}},"df":1,"r":{"docs":{"https://phlip9.com/notes/AI ML/Markov Decision Process (MDP)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/statistics probability/testing whether a coin is fair/":{"tf":1.7320508075688772}},"df":2,"i":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/AI ML/Markov Decision Process (MDP)/":{"tf":1.0}},"df":1,"i":{"docs":{"https://phlip9.com/notes/lang/operator fixity and precedence/":{"tf":1.7320508075688772}},"df":1}}}}},"s":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/foreign bank account report (FBAR)/":{"tf":1.0}},"df":1}}},"v":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/bip158 - compact block filters/":{"tf":1.0},"https://phlip9.com/notes/b l o c k c h a i n/fastpay/":{"tf":1.7320508075688772},"https://phlip9.com/notes/btc-ln/BOLT 8 - secure noise transport/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/lightning libs/":{"tf":1.4142135623730951},"https://phlip9.com/notes/btc-ln/submarine swaps/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel TDX/":{"tf":1.0},"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/reproducible-builds.org/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.7320508075688772},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":2.449489742783178}},"df":12}},"t":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.4142135623730951},"https://phlip9.com/notes/btc-ln/BOLT 11 - invoices/":{"tf":2.23606797749979},"https://phlip9.com/notes/btc-ln/lightning libs/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/gramine/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel TDX/":{"tf":1.7320508075688772},"https://phlip9.com/notes/crypto/biscuit authz/":{"tf":2.23606797749979},"https://phlip9.com/notes/crypto/smallstep - private online CA & ACME server/":{"tf":1.7320508075688772},"https://phlip9.com/notes/lang/rust/sycamore x futures/":{"tf":1.0},"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":1.0},"https://phlip9.com/notes/networking/ipv6 address space/":{"tf":1.0},"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.0}},"df":14,"e":{"docs":{},"df":0,"_":{"docs":{},"df":0,"k":{"docs":{},"df":0,"e":{"docs":{},"df":0,"y":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0}},"df":1}}}},"i":{"docs":{},"df":0,"p":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{},"df":0,"d":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"s":{"docs":{"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/gramine/":{"tf":1.0},"https://phlip9.com/notes/devops/azure CLI/":{"tf":1.0}},"df":3}}}}}}}}},"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"(":{"docs":{},"df":0,"p":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"v":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 11 - invoices/":{"tf":1.0}},"df":1}}}}}}}}}}},"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"h":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 11 - invoices/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}},"i":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"g":{"docs":{"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/money services business (MSB)/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/lightning rod/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.4142135623730951},"https://phlip9.com/notes/devops/secrets/1password - secrets automation/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.0}},"df":7}}}}}},"k":{"docs":{"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":3.4641016151377544}},"df":1,"(":{"docs":{},"df":0,"h":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,":":{"docs":{},"df":0,":":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"x":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":1.0}},"df":1}}}}}}}}}}}}}},".":{"docs":{},"df":0,"0":{"docs":{"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":1.0}},"df":1},"e":{"docs":{},"df":0,"x":{"docs":{},"df":0,"p":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{},"df":0,"(":{"docs":{},"df":0,"&":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{},"df":0,"p":{"docs":{},"df":0,";":{"docs":{},"df":0,"[":{"docs":{},"df":0,"b":{"docs":{},"df":0,"\"":{"docs":{},"df":0,"f":{"docs":{},"df":0,"i":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":1.0}},"df":1}}},"n":{"docs":{},"df":0,"o":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":1.0}},"df":1}}}}}}}}}}}},"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"f":{"docs":{},"df":0,"o":{"docs":{"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":1.0}},"df":1}}}}}}}}}}}}},"o":{"docs":{"https://phlip9.com/notes/devops/deployment strategies/":{"tf":2.23606797749979},"https://phlip9.com/notes/devops/service mesh/":{"tf":1.0},"https://phlip9.com/notes/ios/ios setup/":{"tf":1.0},"https://phlip9.com/notes/lang/flutter/flutter setup/":{"tf":1.0},"https://phlip9.com/notes/misc/kintsugi/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/CDF confidence bands - DKW inequality/":{"tf":1.0}},"df":7,"b":{"docs":{"https://phlip9.com/notes/statistics probability/standard error/":{"tf":1.0}},"df":1,"a":{"docs":{},"df":0,"b":{"docs":{},"df":0,"i":{"docs":{},"df":0,"l":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/statistics probability/testing whether a coin is fair/":{"tf":1.0}},"df":1}}}},"l":{"docs":{"https://phlip9.com/notes/AI ML/Expectimax Search/":{"tf":2.6457513110645907},"https://phlip9.com/notes/AI ML/Markov Decision Process (MDP)/":{"tf":2.0},"https://phlip9.com/notes/android/android cli setup/":{"tf":1.0},"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.7320508075688772},"https://phlip9.com/notes/android/root phone with magisk/":{"tf":1.0},"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/foreign bank account report (FBAR)/":{"tf":1.0},"https://phlip9.com/notes/b l o c k c h a i n/fastpay/":{"tf":1.4142135623730951},"https://phlip9.com/notes/btc-ln/breez lightning service providers/":{"tf":1.7320508075688772},"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.4142135623730951},"https://phlip9.com/notes/combinatorics/k-combinations of a multiset/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/secure time/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0},"https://phlip9.com/notes/lang/flutter/flutter setup/":{"tf":1.0},"https://phlip9.com/notes/misc/kintsugi/":{"tf":1.0},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/CDF confidence bands - DKW inequality/":{"tf":1.7320508075688772},"https://phlip9.com/notes/statistics probability/G-test - multinomial goodness-of-fit/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/cheat sheet/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/multinomial distribution/":{"tf":1.7320508075688772},"https://phlip9.com/notes/statistics probability/p-value/":{"tf":2.449489742783178},"https://phlip9.com/notes/statistics probability/testing whether a coin is fair/":{"tf":3.1622776601683795}},"df":25}}},"e":{"docs":{"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":2.23606797749979}},"df":1,"f":{"docs":{},"df":0,"u":{"docs":{},"df":0,"n":{"docs":{},"df":0,"c":{"docs":{"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.0}},"df":1}}}}},"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"m":{"docs":{"https://phlip9.com/notes/android/ADB over TCP inside WSL2/":{"tf":1.4142135623730951},"https://phlip9.com/notes/btc-ln/atomic multipath payments (AMP)/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/breez lightning service providers/":{"tf":1.4142135623730951},"https://phlip9.com/notes/btc-ln/submarine swaps/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/gramine/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/secure time/":{"tf":1.0},"https://phlip9.com/notes/crypto/(talk) authenticated data structures for stateless validation/":{"tf":1.0},"https://phlip9.com/notes/design/form design/":{"tf":1.0},"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":1.7320508075688772},"https://phlip9.com/notes/fuzzing/fuzzcheck-rs/":{"tf":1.0},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/rr with rust/":{"tf":1.0},"https://phlip9.com/notes/management/relieve often - why generals were more successful in WWII/":{"tf":1.0},"https://phlip9.com/notes/misc/optimization solvers/":{"tf":2.0},"https://phlip9.com/notes/postgres/postgres performance tuning/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.7320508075688772},"https://phlip9.com/notes/reproducible builds/nix/nix debug spurrious rebuilds/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":2.6457513110645907},"https://phlip9.com/notes/statistics probability/herbie - float error fixer/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/testing whether a coin is fair/":{"tf":1.7320508075688772}},"df":26,"a":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.0}},"df":2}}}}}},"c":{"docs":{},"df":0,"/":{"docs":{},"df":0,"s":{"docs":{},"df":0,"y":{"docs":{},"df":0,"s":{"docs":{},"df":0,"/":{"docs":{},"df":0,"k":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{},"df":0,"/":{"docs":{},"df":0,"p":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"f":{"docs":{},"df":0,"_":{"docs":{},"df":0,"e":{"docs":{},"df":0,"v":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"_":{"docs":{},"df":0,"p":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"o":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/WSL/WSL2 custom kernel/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/rr with rust/":{"tf":1.4142135623730951}},"df":2}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},":":{"docs":{},"df":0,":":{"docs":{},"df":0,":":{"docs":{},"df":0,"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"g":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.0}},"df":1}}}}}}},"e":{"docs":{},"df":0,"d":{"docs":{},"df":0,"u":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.0},"https://phlip9.com/notes/lang/gdb ref/":{"tf":1.0}},"df":3}}},"e":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/lang/rust/rr with rust/":{"tf":1.4142135623730951}},"df":1}},"s":{"docs":{},"df":0,"s":{"docs":{"https://phlip9.com/notes/AI ML/Markov Decision Process (MDP)/":{"tf":2.6457513110645907},"https://phlip9.com/notes/android/ADB over TCP inside WSL2/":{"tf":1.4142135623730951},"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.7320508075688772},"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":2.6457513110645907},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":2.6457513110645907},"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.0},"https://phlip9.com/notes/crypto/acme protocol/":{"tf":2.0},"https://phlip9.com/notes/distributed systems/papers/(2021) Leaderless Consensus/":{"tf":1.4142135623730951},"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":1.0},"https://phlip9.com/notes/fuzzing/fuzzcheck-rs/":{"tf":2.0},"https://phlip9.com/notes/lang/rust/rr with rust/":{"tf":2.0},"https://phlip9.com/notes/misc/kintsugi/":{"tf":1.0},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0},"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":4.123105625617661},"https://phlip9.com/notes/reproducible builds/rebuilderd/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/reproducible-builds.org/":{"tf":1.4142135623730951},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/arubanetworks captive portal/":{"tf":1.7320508075688772},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.4142135623730951},"https://phlip9.com/notes/statistics probability/standard error/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/testing whether a coin is fair/":{"tf":1.0}},"df":24,"o":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/money services business (MSB)/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0},"https://phlip9.com/notes/performance/simdjson talk/":{"tf":1.0}},"df":6}}}}},"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/misc/pop_OS! tweaks/":{"tf":1.0}},"df":1}}}}}},"u":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/crypto/acme protocol/":{"tf":1.0}},"df":1}}},"d":{"docs":{"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":3.4641016151377544},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0}},"df":2,"u":{"docs":{},"df":0,"c":{"docs":{"https://phlip9.com/notes/AI ML/Markov Decision Process (MDP)/":{"tf":1.0},"https://phlip9.com/notes/android/root phone with magisk/":{"tf":1.0},"https://phlip9.com/notes/b l o c k c h a i n/btc utreexo - utxo accumulator/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":2.23606797749979},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.4142135623730951},"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":1.0},"https://phlip9.com/notes/performance/simdjson talk/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/CDF confidence bands - DKW inequality/":{"tf":1.0}},"df":9,"t":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":2.6457513110645907},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":2.449489742783178},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.0},"https://phlip9.com/notes/devops/deployment strategies/":{"tf":3.0},"https://phlip9.com/notes/devops/docker compose/":{"tf":1.0},"https://phlip9.com/notes/devops/k3s/":{"tf":1.0},"https://phlip9.com/notes/devops/secrets/ejson (Shopify)/":{"tf":1.0},"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":1.0},"https://phlip9.com/notes/misc/optimization solvers/":{"tf":1.0},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.4142135623730951}},"df":15,"/":{"docs":{},"df":0,"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"v":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{"https://phlip9.com/notes/btc-ln/zero-conf channels/":{"tf":1.0}},"df":1}}}}}}},"i":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/confidential computing/marblerun/":{"tf":1.0}},"df":1}}}}}},"f":{"docs":{},"df":0,"i":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"c":{"docs":{},"df":0,"/":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"f":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{"https://phlip9.com/notes/reproducible builds/nix/links/":{"tf":1.0}},"df":1}}}}}}}}}}},"l":{"docs":{"https://phlip9.com/notes/WSL/WSL2 custom kernel/":{"tf":1.7320508075688772},"https://phlip9.com/notes/keyboards/moergo glove80/":{"tf":1.0},"https://phlip9.com/notes/performance/profiling/":{"tf":1.7320508075688772},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.4142135623730951},"https://phlip9.com/notes/reproducible builds/nix/links/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/arubanetworks captive portal/":{"tf":1.0}},"df":6,"e":{"docs":{},"df":0,".":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.0}},"df":1}}}}}}}}},"t":{"docs":{"https://phlip9.com/notes/btc-ln/breez lightning service providers/":{"tf":1.0}},"df":1}}},"g":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"y":{"docs":{},"df":0,"o":{"docs":{},"df":0,"f":{"docs":{},"df":0,"(":{"docs":{},"df":0,"$":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"g":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.7320508075688772}},"df":1}}}}}}}}}}}}},"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{"https://phlip9.com/notes/AI ML/Markov Decision Process (MDP)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/WSL/WSL2 custom kernel/":{"tf":1.0},"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/foreign bank account report (FBAR)/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":2.0},"https://phlip9.com/notes/fuzzing/fuzzing/":{"tf":1.4142135623730951},"https://phlip9.com/notes/keyboards/moergo glove80/":{"tf":1.0},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0},"https://phlip9.com/notes/lang/gdb ref/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/rust/rr with rust/":{"tf":2.8284271247461903},"https://phlip9.com/notes/lang/rust/rust verification tools/":{"tf":1.0},"https://phlip9.com/notes/misc/optimization solvers/":{"tf":1.0},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.7320508075688772},"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.0},"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.0}},"df":16}},"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"s":{"docs":{"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.0},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.7320508075688772},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.4142135623730951}},"df":4}}}}},"h":{"docs":{},"df":0,"i":{"docs":{},"df":0,"b":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/AI ML/Markov Decision Process (MDP)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.0}},"df":2}}}}},"j":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":2.23606797749979},"https://phlip9.com/notes/btc-ln/lightning libs/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":1.7320508075688772},"https://phlip9.com/notes/devops/service mesh/":{"tf":1.0},"https://phlip9.com/notes/fuzzing/fuzzcheck-rs/":{"tf":1.0},"https://phlip9.com/notes/fuzzing/fuzzing/":{"tf":1.0},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0},"https://phlip9.com/notes/management/relieve often - why generals were more successful in WWII/":{"tf":1.0},"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":2.23606797749979},"https://phlip9.com/notes/misc/optimization solvers/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/nix/links/":{"tf":1.4142135623730951},"https://phlip9.com/notes/reproducible builds/reproducible-builds.org/":{"tf":1.4142135623730951},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.4142135623730951},"https://phlip9.com/notes/statistics probability/multinomial distribution/":{"tf":1.0}},"df":17,"'":{"docs":{"https://phlip9.com/notes/":{"tf":1.0}},"df":1},".":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"g":{"docs":{"https://phlip9.com/notes/lang/rust/rr with rust/":{"tf":1.0}},"df":1}}}}}}}},"m":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/reproducible-builds.org/":{"tf":1.0}},"df":2,"s":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/monetary instruments/":{"tf":1.0}},"df":1}}}}}},"o":{"docs":{"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0},"https://phlip9.com/notes/management/relieve often - why generals were more successful in WWII/":{"tf":1.0}},"df":2,"t":{"docs":{"https://phlip9.com/notes/management/relieve often - why generals were more successful in WWII/":{"tf":1.0}},"df":1}},"p":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/reproducible builds/nix/nix auto-allocate-uids -> nixbld users/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.0}},"df":2}}},"n":{"docs":{},"df":0,"e":{"docs":{"https://phlip9.com/notes/crypto/acme protocol/":{"tf":1.0}},"df":1}},"o":{"docs":{},"df":0,"f":{"docs":{"https://phlip9.com/notes/AI ML/Markov Decision Process (MDP)/":{"tf":1.0},"https://phlip9.com/notes/b l o c k c h a i n/btc utreexo - utxo accumulator/":{"tf":1.7320508075688772},"https://phlip9.com/notes/btc-ln/lightning network notes/":{"tf":1.4142135623730951},"https://phlip9.com/notes/btc-ln/submarine swaps/":{"tf":1.0},"https://phlip9.com/notes/combinatorics/k-combinations of a multiset/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0},"https://phlip9.com/notes/crypto/(talk) authenticated data structures for stateless validation/":{"tf":3.0},"https://phlip9.com/notes/crypto/acme protocol/":{"tf":1.4142135623730951},"https://phlip9.com/notes/crypto/biscuit authz/":{"tf":1.4142135623730951},"https://phlip9.com/notes/crypto/zkdocs/":{"tf":1.0},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":3.872983346207417}},"df":11}},"p":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":2.6457513110645907}},"df":1,"_":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"p":{"docs":{},"df":0,"(":{"docs":{},"df":0,"m":{"docs":{},"df":0,"o":{"docs":{},"df":0,"v":{"docs":{"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.0}},"df":1}}}}}}}},"a":{"docs":{},"df":0,"g":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/btc utreexo - utxo accumulator/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/BOLT 4 - onion routing protocol/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/zero-conf channels/":{"tf":1.0},"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":1.7320508075688772}},"df":5}},"e":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/devops/secrets/1password - secrets automation/":{"tf":1.0}},"df":1,"l":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0},"https://phlip9.com/notes/design/form design/":{"tf":1.0},"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":1.0},"https://phlip9.com/notes/misc/kintsugi/":{"tf":1.0},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":5}},"t":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/AI ML/Expectimax Search/":{"tf":1.0},"https://phlip9.com/notes/AI ML/Markov Decision Process (MDP)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/btc-ln/atomic multipath payments (AMP)/":{"tf":1.0},"https://phlip9.com/notes/combinatorics/k-combinations of a multiset/":{"tf":1.0},"https://phlip9.com/notes/devops/azure CLI/":{"tf":1.0},"https://phlip9.com/notes/distributed systems/papers/(2020) Semi-Fast Byzantine-tolerant Shared Register without Reliable Broadcast/":{"tf":1.0},"https://phlip9.com/notes/distributed systems/papers/(2021) Leaderless Consensus/":{"tf":1.0},"https://phlip9.com/notes/fuzzing/bolero - fuzzing + property testing/":{"tf":1.7320508075688772},"https://phlip9.com/notes/fuzzing/fuzzing/":{"tf":1.0},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":2.0},"https://phlip9.com/notes/lang/operator fixity and precedence/":{"tf":1.0}},"df":11},"y":{"docs":{},"df":0,"v":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"u":{"docs":{"https://phlip9.com/notes/statistics probability/multinomial distribution/":{"tf":1.0}},"df":1}}}}}}}},"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 4 - onion routing protocol/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.0}},"df":2,"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":1.0}},"df":1}}}}},"s":{"docs":{"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/foreign bank account report (FBAR)/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":2.0},"https://phlip9.com/notes/btc-ln/lightning network notes/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":1.4142135623730951}},"df":4}},"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/fuzzing/bolero - fuzzing + property testing/":{"tf":1.0},"https://phlip9.com/notes/fuzzing/fuzzcheck-rs/":{"tf":2.0},"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.0},"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.0}},"df":4}}}}},"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.7320508075688772},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":2.8284271247461903},"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel TDX/":{"tf":1.7320508075688772},"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":1.0},"https://phlip9.com/notes/crypto/acme protocol/":{"tf":1.4142135623730951},"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.0}},"df":9}}},"o":{"docs":{"https://phlip9.com/notes/android/android cli setup/":{"tf":1.0},"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.4142135623730951},"https://phlip9.com/notes/devops/algo wireguard VPN server/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.0}},"df":5,"b":{"docs":{},"df":0,"u":{"docs":{},"df":0,"f":{"docs":{"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":2.449489742783178},"https://phlip9.com/notes/confidential computing/gramine/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0}},"df":3}}},"c":{"docs":{"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.4142135623730951}},"df":1,"o":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/fastpay/":{"tf":1.0},"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.7320508075688772},"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":2.23606797749979},"https://phlip9.com/notes/btc-ln/BOLT 4 - onion routing protocol/":{"tf":1.4142135623730951},"https://phlip9.com/notes/btc-ln/BOLT 8 - secure noise transport/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/atomic multipath payments (AMP)/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/lightning libs/":{"tf":1.4142135623730951},"https://phlip9.com/notes/btc-ln/submarine swaps/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":2.23606797749979},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel SGX/secure time/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":4.795831523312719},"https://phlip9.com/notes/crypto/acme protocol/":{"tf":2.23606797749979},"https://phlip9.com/notes/crypto/dex - open-source OIDC & OAuth 2.0 provider/":{"tf":1.0},"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":1.0},"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":2.23606797749979},"https://phlip9.com/notes/networking/ipv6 address space/":{"tf":1.7320508075688772},"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.7320508075688772},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":2.23606797749979},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.7320508075688772},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":3.1622776601683795}},"df":22,".":{"docs":{},"df":0,"h":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0}},"df":1}}}}},"m":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.0}},"df":1}}},"i":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":1.0}},"df":1}}}}},"t":{"docs":{},"df":0,"y":{"docs":{},"df":0,"p":{"docs":{"https://phlip9.com/notes/lang/lua/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/rust verification tools/":{"tf":1.0}},"df":2}}}}},"v":{"docs":{},"df":0,"a":{"docs":{},"df":0,"b":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 4 - onion routing protocol/":{"tf":1.0}},"df":1}}},"e":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 7 - p2p node and channel discovery/":{"tf":2.23606797749979},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":1.0},"https://phlip9.com/notes/crypto/(talk) authenticated data structures for stateless validation/":{"tf":1.0},"https://phlip9.com/notes/crypto/acme protocol/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":2.0},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/rust verification tools/":{"tf":1.0}},"df":11,"r":{"docs":{},"df":0,"b":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/networking/network interface card (NIC)/":{"tf":1.0}},"df":1}}}},"i":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/money services business (MSB)/":{"tf":2.0},"https://phlip9.com/notes/b l o c k c h a i n/fastpay/":{"tf":1.0},"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.7320508075688772},"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.7320508075688772},"https://phlip9.com/notes/btc-ln/breez lightning service providers/":{"tf":2.0},"https://phlip9.com/notes/btc-ln/lightning libs/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.4142135623730951},"https://phlip9.com/notes/btc-ln/submarine swaps/":{"tf":2.449489742783178},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":2.8284271247461903},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":3.872983346207417},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":2.449489742783178},"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.7320508075688772},"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/secure time/":{"tf":2.0},"https://phlip9.com/notes/confidential computing/intel TDX/":{"tf":2.0},"https://phlip9.com/notes/confidential computing/marblerun/":{"tf":1.7320508075688772},"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":1.4142135623730951},"https://phlip9.com/notes/crypto/dex - open-source OIDC & OAuth 2.0 provider/":{"tf":2.449489742783178},"https://phlip9.com/notes/crypto/zkdocs/":{"tf":1.0},"https://phlip9.com/notes/devops/AKS - azure kubernetes service/":{"tf":1.0},"https://phlip9.com/notes/devops/algo wireguard VPN server/":{"tf":1.0},"https://phlip9.com/notes/devops/consul/":{"tf":1.7320508075688772},"https://phlip9.com/notes/devops/nomad/":{"tf":1.4142135623730951},"https://phlip9.com/notes/devops/secrets/ejson (Shopify)/":{"tf":1.0},"https://phlip9.com/notes/distributed systems/papers/(2021) Leaderless Consensus/":{"tf":1.0},"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":2.0},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":2.0},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/rust/rust verification tools/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/understanding sycamore reactivity/":{"tf":1.7320508075688772},"https://phlip9.com/notes/networking/network interface card (NIC)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/networking/network interfaces/":{"tf":2.6457513110645907},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/nix/links/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/rebuilderd/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/reproducible-builds.org/":{"tf":1.4142135623730951},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/router/lightning router/captive portal/arubanetworks captive portal/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":2.6457513110645907},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":2.0},"https://phlip9.com/notes/router/lightning router/lightning router overview/":{"tf":1.7320508075688772},"https://phlip9.com/notes/statistics probability/CDF confidence bands - DKW inequality/":{"tf":1.7320508075688772}},"df":43,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"'":{"docs":{"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":1.0}},"df":1}}}},"s":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/gramine/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":4.795831523312719},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":2.6457513110645907},"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":2.23606797749979},"https://phlip9.com/notes/crypto/acme protocol/":{"tf":1.0},"https://phlip9.com/notes/devops/secrets/ejson (Shopify)/":{"tf":1.0},"https://phlip9.com/notes/devops/secrets/mozilla SOPS/":{"tf":1.4142135623730951},"https://phlip9.com/notes/devops/secrets/sops-nix/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.7320508075688772},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":2.0}},"df":15,"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0}},"df":1,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"g":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/devops/azure CLI/":{"tf":1.4142135623730951}},"df":1}}}}},"k":{"docs":{},"df":0,"e":{"docs":{},"df":0,"y":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0}},"df":1}}},"s":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0}},"df":1}}}}}}},"x":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/marblerun/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":1.7320508075688772},"https://phlip9.com/notes/devops/consul/":{"tf":1.4142135623730951},"https://phlip9.com/notes/devops/linkerd/":{"tf":1.4142135623730951},"https://phlip9.com/notes/devops/service mesh/":{"tf":2.0},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.4142135623730951}},"df":11},"y":{"docs":{},"df":0,"g":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/devops/service mesh/":{"tf":1.0}},"df":1}}}}}},"t":{"docs":{},"df":0,"c":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0}},"df":1}},"u":{"docs":{},"df":0,"n":{"docs":{},"df":0,"e":{"docs":{"https://phlip9.com/notes/AI ML/Expectimax Search/":{"tf":2.6457513110645907}},"df":1}},"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/lang/rust/rust verification tools/":{"tf":2.0}},"df":1}}}},"v":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0}},"df":1}}},"{":{"docs":{"https://phlip9.com/notes/AI ML/Markov Decision Process (MDP)/":{"tf":1.0}},"df":1,"\\":{"docs":{},"df":0,"s":{"docs":{},"df":0,"u":{"docs":{},"df":0,"p":{"docs":{},"df":0,"_":{"docs":{},"df":0,"{":{"docs":{},"df":0,"x":{"docs":{"https://phlip9.com/notes/statistics probability/CDF confidence bands - DKW inequality/":{"tf":1.0}},"df":1}}}}}}},"a":{"docs":{"https://phlip9.com/notes/statistics probability/cheat sheet/":{"tf":2.449489742783178}},"df":1},"b":{"docs":{},"df":0,"_":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/statistics probability/cheat sheet/":{"tf":1.7320508075688772}},"df":1}}},"f":{"docs":{},"df":0,"(":{"docs":{},"df":0,"x":{"docs":{"https://phlip9.com/notes/statistics probability/p-value/":{"tf":1.4142135623730951}},"df":1}}},"s":{"docs":{},"df":0,"_":{"docs":{},"df":0,"{":{"docs":{},"df":0,"t":{"docs":{},"df":0,"+":{"docs":{},"df":0,"1":{"docs":{"https://phlip9.com/notes/AI ML/Markov Decision Process (MDP)/":{"tf":1.0}},"df":1}}}}}},"x":{"docs":{"https://phlip9.com/notes/statistics probability/p-value/":{"tf":1.4142135623730951}},"df":1}}},"s":{"docs":{"https://phlip9.com/notes/WSL/WSL2 custom kernel/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":3.4641016151377544},"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.4142135623730951}},"df":3,"2":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1}}},"e":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":2.0},"https://phlip9.com/notes/confidential computing/intel SGX/secure time/":{"tf":1.4142135623730951}},"df":2,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"i":{"docs":{},"df":0,"f":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"h":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{},"df":0,"h":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0}},"df":1}}}},"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"u":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.4142135623730951}},"df":1}}}}}}}}}}}}},"u":{"docs":{},"df":0,"d":{"docs":{},"df":0,"o":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0},"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":1.4142135623730951},"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.0}},"df":3}}}},"l":{"docs":{"https://phlip9.com/notes/statistics probability/CDF confidence bands - DKW inequality/":{"tf":1.0}},"df":1},"q":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/postgres/snippets/":{"tf":1.0},"https://phlip9.com/notes/postgres/types of scans/":{"tf":1.0}},"df":2}},"t":{"docs":{"https://phlip9.com/notes/WSL/WSL2 custom kernel/":{"tf":1.0}},"df":1},"v":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.7320508075688772}},"df":1,"_":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0}},"df":1}}}},"w":{"docs":{"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.4142135623730951}},"df":1,"/":{"docs":{},"df":0,"a":{"docs":{},"df":0,"e":{"docs":{},"df":0,"/":{"docs":{},"df":0,"d":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"/":{"docs":{},"df":0,"p":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"b":{"docs":{},"df":0,"u":{"docs":{},"df":0,"i":{"docs":{},"df":0,"l":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}},"y":{"docs":{},"df":0,"n":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{},"df":0,"_":{"docs":{},"df":0,"c":{"docs":{},"df":0,"v":{"docs":{},"df":0,"w":{"docs":{},"df":0,"a":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.0}},"df":1}}}}}}}}}}}},"t":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":3.3166247903554}},"df":1,"_":{"docs":{},"df":0,"g":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{},"df":0,"&":{"docs":{},"df":0,"l":{"docs":{},"df":0,"t":{"docs":{},"df":0,";":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"&":{"docs":{},"df":0,"g":{"docs":{},"df":0,"t":{"docs":{},"df":0,";":{"docs":{},"df":0,"(":{"docs":{},"df":0,"p":{"docs":{},"df":0,"f":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}},"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.4142135623730951}},"df":1,"&":{"docs":{},"df":0,"l":{"docs":{},"df":0,"t":{"docs":{},"df":0,";":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"&":{"docs":{},"df":0,"g":{"docs":{},"df":0,"t":{"docs":{},"df":0,";":{"docs":{},"df":0,"(":{"docs":{},"df":0,"p":{"docs":{},"df":0,"f":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}},"u":{"docs":{},"df":0,"b":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":4.242640687119285},"https://phlip9.com/notes/btc-ln/BOLT 11 - invoices/":{"tf":3.1622776601683795},"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":8.18535277187245},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":2.8284271247461903},"https://phlip9.com/notes/crypto/tls exported keying material/":{"tf":1.0},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0},"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":8.366600265340756}},"df":7,"(":{"docs":{},"df":0,"c":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":2.0}},"df":2}}}}},"/":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":1.7320508075688772}},"df":1}}},"i":{"docs":{},"df":0,"g":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":2.0}},"df":1}}}}},"_":{"docs":{},"df":0,"k":{"docs":{},"df":0,"e":{"docs":{},"df":0,"y":{"docs":{"https://phlip9.com/notes/crypto/TLS self-signed pubkey-only certs/":{"tf":1.4142135623730951}},"df":1,"_":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0}},"df":1,"_":{"docs":{},"df":0,"s":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0}},"df":1}}}}}}}}},"k":{"docs":{},"df":0,"e":{"docs":{},"df":0,"y":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/fastpay/":{"tf":1.0},"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":2.8284271247461903},"https://phlip9.com/notes/btc-ln/BOLT 4 - onion routing protocol/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/BOLT 7 - p2p node and channel discovery/":{"tf":2.0},"https://phlip9.com/notes/btc-ln/BOLT 8 - secure noise transport/":{"tf":1.7320508075688772},"https://phlip9.com/notes/confidential computing/gramine/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.7320508075688772},"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":1.0},"https://phlip9.com/notes/crypto/TLS self-signed pubkey-only certs/":{"tf":2.0},"https://phlip9.com/notes/crypto/biscuit authz/":{"tf":1.0},"https://phlip9.com/notes/devops/azure CLI/":{"tf":1.4142135623730951},"https://phlip9.com/notes/misc/prepping RPI for embedded dev/":{"tf":1.0},"https://phlip9.com/notes/misc/setting up a headless raspbian boot image/":{"tf":1.0},"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.0}},"df":15,"_":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"l":{"docs":{},"df":0,"y":{"docs":{},"df":0,"_":{"docs":{},"df":0,"s":{"docs":{},"df":0,"s":{"docs":{},"df":0,"h":{"docs":{},"df":0,"=":{"docs":{},"df":0,"1":{"docs":{"https://phlip9.com/notes/misc/setting up a headless raspbian boot image/":{"tf":1.0}},"df":1}}}}}}}}}},"s":{"docs":{},"df":0,"s":{"docs":{},"df":0,"h":{"docs":{},"df":0,"_":{"docs":{},"df":0,"f":{"docs":{},"df":0,"i":{"docs":{},"df":0,"r":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"_":{"docs":{},"df":0,"u":{"docs":{},"df":0,"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"=":{"docs":{},"df":0,"\"":{"docs":{},"df":0,"s":{"docs":{},"df":0,"s":{"docs":{},"df":0,"h":{"docs":{"https://phlip9.com/notes/misc/setting up a headless raspbian boot image/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}},"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/BOLT 11 - invoices/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/atomic multipath payments (AMP)/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/hosted channels/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":3.605551275463989},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.7320508075688772},"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.0},"https://phlip9.com/notes/crypto/(talk) authenticated data structures for stateless validation/":{"tf":1.0},"https://phlip9.com/notes/crypto/acme protocol/":{"tf":1.4142135623730951},"https://phlip9.com/notes/crypto/biscuit authz/":{"tf":1.0},"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":1.0},"https://phlip9.com/notes/devops/azure CLI/":{"tf":2.8284271247461903},"https://phlip9.com/notes/lang/rust/sycamore x futures/":{"tf":1.0},"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":3.605551275463989},"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.0},"https://phlip9.com/notes/postgres/snippets/":{"tf":2.449489742783178},"https://phlip9.com/notes/reproducible builds/rebuilderd/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.7320508075688772},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":2.449489742783178}},"df":19,".":{"docs":{},"df":0,"\"":{"docs":{},"df":0,"u":{"docs":{},"df":0,"s":{"docs":{"https://phlip9.com/notes/postgres/types of scans/":{"tf":1.0}},"df":1}}}},"/":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":1.7320508075688772}},"df":1}}}}},"_":{"docs":{},"df":0,"k":{"docs":{},"df":0,"e":{"docs":{},"df":0,"y":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0}},"df":1}}}},"i":{"docs":{},"df":0,"p":{"docs":{"https://phlip9.com/notes/devops/azure CLI/":{"tf":1.0}},"df":1,"a":{"docs":{},"df":0,"d":{"docs":{},"df":0,"d":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"s":{"docs":{"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/gramine/":{"tf":1.0},"https://phlip9.com/notes/devops/azure CLI/":{"tf":1.0}},"df":3,"v":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"s":{"docs":{"https://phlip9.com/notes/devops/azure CLI/":{"tf":1.0}},"df":1}}}}}}}}}},"l":{"docs":{},"df":0,"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"c":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{},"df":0,"h":{"docs":{},"df":0,"o":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/devops/azure CLI/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}},"p":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"f":{"docs":{},"df":0,"i":{"docs":{},"df":0,"x":{"docs":{"https://phlip9.com/notes/devops/azure CLI/":{"tf":1.0}},"df":1}}}}}}}},"k":{"docs":{},"df":0,"e":{"docs":{},"df":0,"y":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 11 - invoices/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":3.605551275463989}},"df":2,"d":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"&":{"docs":{},"df":0,"g":{"docs":{},"df":0,"t":{"docs":{},"df":0,";":{"docs":{},"df":0,"(":{"docs":{},"df":0,"&":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{},"df":0,"p":{"docs":{},"df":0,";":{"docs":{},"df":0,"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{},"df":0,"f":{"docs":{"https://phlip9.com/notes/crypto/TLS self-signed pubkey-only certs/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}},"l":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 11 - invoices/":{"tf":1.0}},"df":1}}},"s":{"docs":{},"df":0,"h":{"docs":{"https://phlip9.com/notes/btc-ln/lightning network notes/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.0},"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":2.23606797749979},"https://phlip9.com/notes/reproducible builds/rebuilderd/":{"tf":1.0}},"df":5}}}}},"l":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/android/root phone with magisk/":{"tf":1.4142135623730951},"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/gramine/":{"tf":1.0},"https://phlip9.com/notes/design/form design/":{"tf":1.0},"https://phlip9.com/notes/devops/azure CLI/":{"tf":1.0},"https://phlip9.com/notes/devops/secrets/mozilla SOPS/":{"tf":1.0},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.4142135623730951},"https://phlip9.com/notes/networking/network interface card (NIC)/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.4142135623730951}},"df":10,"=":{"docs":{},"df":0,"d":{"docs":{},"df":0,"i":{"docs":{},"df":0,"g":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,".":{"docs":{},"df":0,"p":{"docs":{},"df":0,"u":{"docs":{},"df":0,"l":{"docs":{},"df":0,"l":{"docs":{},"df":0,".":{"docs":{},"df":0,"u":{"docs":{},"df":0,"p":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}},"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1}}}}},"m":{"docs":{},"df":0,"p":{"docs":{"https://phlip9.com/notes/networking/network interface card (NIC)/":{"tf":1.0}},"df":1}},"n":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"h":{"docs":{"https://phlip9.com/notes/btc-ln/lightning network notes/":{"tf":1.4142135623730951},"https://phlip9.com/notes/management/relieve often - why generals were more successful in WWII/":{"tf":1.0}},"df":2}}}},"r":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{"https://phlip9.com/notes/networking/network interface card (NIC)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/lightning router overview/":{"tf":1.7320508075688772}},"df":2}}}},"e":{"docs":{"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0}},"df":1},"g":{"docs":{"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.4142135623730951}},"df":1},"p":{"docs":{},"df":0,"o":{"docs":{},"df":0,"s":{"docs":{"https://phlip9.com/notes/AI ML/Markov Decision Process (MDP)/":{"tf":1.0},"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.7320508075688772},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/rr with rust/":{"tf":1.0},"https://phlip9.com/notes/networking/ipv6 address space/":{"tf":1.0},"https://phlip9.com/notes/networking/network interface card (NIC)/":{"tf":1.0},"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/arubanetworks captive portal/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.4142135623730951}},"df":11}}},"s":{"docs":{},"df":0,"u":{"docs":{"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.0}},"df":1}}},"s":{"docs":{},"df":0,"h":{"docs":{"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0},"https://phlip9.com/notes/android/root phone with magisk/":{"tf":1.4142135623730951},"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.0},"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":1.0},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/rr with rust/":{"tf":1.0},"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":3.1622776601683795},"https://phlip9.com/notes/networking/network interface card (NIC)/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":3.0}},"df":9,"'":{"docs":{"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":1.0}},"df":1},"_":{"docs":{},"df":0,"m":{"docs":{},"df":0,"s":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.0}},"df":1}}}}}}},"t":{"docs":{"https://phlip9.com/notes/android/root phone with magisk/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0},"https://phlip9.com/notes/design/form design/":{"tf":1.4142135623730951},"https://phlip9.com/notes/distributed systems/papers/(2020) Semi-Fast Byzantine-tolerant Shared Register without Reliable Broadcast/":{"tf":1.7320508075688772},"https://phlip9.com/notes/misc/kintsugi/":{"tf":1.0},"https://phlip9.com/notes/misc/setting up a headless raspbian boot image/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/nix/nix debug spurrious rebuilds/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.4142135623730951}},"df":9},"z":{"docs":{},"df":0,"z":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.0}},"df":1}}}},"v":{"docs":{"https://phlip9.com/notes/statistics probability/p-value/":{"tf":1.7320508075688772}},"df":1,"(":{"docs":{},"df":0,"x":{"docs":{"https://phlip9.com/notes/statistics probability/p-value/":{"tf":1.0}},"df":1}},"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"u":{"docs":{"https://phlip9.com/notes/statistics probability/multinomial distribution/":{"tf":1.7320508075688772}},"df":1}}},"e":{"docs":{"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/gramine/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0}},"df":3},"}":{"docs":{},"df":0,"}":{"docs":{},"df":0,"{":{"docs":{},"df":0,"\\":{"docs":{},"df":0,"p":{"docs":{},"df":0,"r":{"docs":{},"df":0,"{":{"docs":{},"df":0,"x":{"docs":{"https://phlip9.com/notes/statistics probability/p-value/":{"tf":1.0}},"df":1}}}}}}}}},"w":{"docs":{},"df":0,"m":{"docs":{"https://phlip9.com/notes/misc/prepping RPI for embedded dev/":{"tf":1.0},"https://phlip9.com/notes/misc/setting up a headless raspbian boot image/":{"tf":1.0}},"df":2,"i":{"docs":{},"df":0,"o":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1}}}},"y":{"docs":{"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":1.0}},"df":1,"e":{"docs":{},"df":0,"l":{"docs":{},"df":0,"f":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"o":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/confidential computing/gramine/":{"tf":1.0}},"df":1}}}}}}},"m":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.0}},"df":1}},"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/confidential computing/gramine/":{"tf":1.0}},"df":1}}},"h":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.0},"https://phlip9.com/notes/crypto/acme protocol/":{"tf":1.0},"https://phlip9.com/notes/devops/algo wireguard VPN server/":{"tf":1.0},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.4142135623730951}},"df":4,"3":{"docs":{"https://phlip9.com/notes/confidential computing/gramine/":{"tf":3.0},"https://phlip9.com/notes/devops/algo wireguard VPN server/":{"tf":2.23606797749979},"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.0}},"df":3},"=":{"docs":{},"df":0,"\"":{"docs":{},"df":0,"$":{"docs":{},"df":0,"(":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/devops/algo wireguard VPN server/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}},"y":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/confidential computing/gramine/":{"tf":1.0}},"df":1}}}}}},"q":{"docs":{"https://phlip9.com/notes/AI ML/Expectimax Search/":{"tf":2.23606797749979},"https://phlip9.com/notes/AI ML/Markov Decision Process (MDP)/":{"tf":3.3166247903554},"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":3.3166247903554},"https://phlip9.com/notes/statistics probability/G-test - multinomial goodness-of-fit/":{"tf":2.449489742783178},"https://phlip9.com/notes/statistics probability/kelly criterion + ELO/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/winsorize/":{"tf":4.898979485566356}},"df":8,"'":{"docs":{"https://phlip9.com/notes/statistics probability/G-test - multinomial goodness-of-fit/":{"tf":1.0}},"df":1},"(":{"docs":{},"df":0,"r":{"docs":{},"df":0,"1":{"docs":{"https://phlip9.com/notes/statistics probability/kelly criterion + ELO/":{"tf":1.4142135623730951}},"df":1},"2":{"docs":{"https://phlip9.com/notes/statistics probability/kelly criterion + ELO/":{"tf":1.0}},"df":1}}},"1":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.0}},"df":2},"2":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0}},"df":1},"^":{"docs":{},"df":0,"*":{"docs":{},"df":0,"(":{"docs":{"https://phlip9.com/notes/AI ML/Markov Decision Process (MDP)/":{"tf":1.7320508075688772}},"df":1}},"\\":{"docs":{},"df":0,"p":{"docs":{},"df":0,"i":{"docs":{},"df":0,"(":{"docs":{"https://phlip9.com/notes/AI ML/Markov Decision Process (MDP)/":{"tf":1.4142135623730951}},"df":1}}}}},"_":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/statistics probability/G-test - multinomial goodness-of-fit/":{"tf":2.6457513110645907}},"df":1,")":{"docs":{},"df":0,".":{"docs":{},"df":0,"l":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/statistics probability/G-test - multinomial goodness-of-fit/":{"tf":1.0}},"df":1}}}}},"{":{"docs":{},"df":0,"k":{"docs":{},"df":0,"+":{"docs":{},"df":0,"1":{"docs":{},"df":0,"}":{"docs":{},"df":0,"(":{"docs":{"https://phlip9.com/notes/AI ML/Markov Decision Process (MDP)/":{"tf":1.0}},"df":1}}}},"}":{"docs":{},"df":0,"(":{"docs":{"https://phlip9.com/notes/AI ML/Markov Decision Process (MDP)/":{"tf":1.4142135623730951}},"df":1}}}}},"`":{"docs":{},"df":0,"/":{"docs":{},"df":0,"`":{"docs":{},"df":0,"1":{"docs":{"https://phlip9.com/notes/statistics probability/winsorize/":{"tf":1.4142135623730951}},"df":1}}}},"d":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"c":{"docs":{"https://phlip9.com/notes/networking/network interfaces/":{"tf":3.605551275463989}},"df":1}}}},"e":{"docs":{"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/gramine/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":3.872983346207417},"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":4.358898943540674}},"df":4,"'":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0}},"df":1},")":{"docs":{},"df":0,"'":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0}},"df":1}},".":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"p":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{},"df":0,".":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"p":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{},"df":0,"d":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}},"_":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"p":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.4142135623730951}},"df":1}}}}}}},"m":{"docs":{},"df":0,"u":{"docs":{"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel TDX/":{"tf":2.0},"https://phlip9.com/notes/misc/setting up a headless raspbian boot image/":{"tf":1.7320508075688772},"https://phlip9.com/notes/reproducible builds/nix/nix auto-allocate-uids -> nixbld users/":{"tf":1.0}},"df":4}}},"l":{"docs":{"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":2.449489742783178},"https://phlip9.com/notes/confidential computing/gramine/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.0}},"df":3,"e":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/networking/network interfaces/":{"tf":3.605551275463989}},"df":1}}},"n":{"docs":{"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.7320508075688772}},"df":1},"o":{"docs":{"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.7320508075688772},"https://phlip9.com/notes/confidential computing/gramine/":{"tf":1.4142135623730951}},"df":2},"q":{"docs":{},"df":0,"u":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/AI ML/Expectimax Search/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/CDF confidence bands - DKW inequality/":{"tf":1.4142135623730951},"https://phlip9.com/notes/statistics probability/cheat sheet/":{"tf":1.0}},"df":3}}}},"r":{"docs":{"https://phlip9.com/notes/devops/algo wireguard VPN server/":{"tf":1.0},"https://phlip9.com/notes/misc/scanning QR codes on desktop/":{"tf":1.4142135623730951}},"df":2},"u":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/misc/optimization solvers/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/standard error/":{"tf":1.4142135623730951}},"df":2}}}},"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"f":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/money services business (MSB)/":{"tf":1.0}},"df":1}},"t":{"docs":{"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":1.0}},"df":1,"i":{"docs":{"https://phlip9.com/notes/btc-ln/lightning network notes/":{"tf":1.0},"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/lightning router overview/":{"tf":1.4142135623730951}},"df":4}}}},"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"f":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.4142135623730951}},"df":1},"l":{"docs":{"https://phlip9.com/notes/statistics probability/winsorize/":{"tf":2.6457513110645907}},"df":1},"t":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/AI ML/Markov Decision Process (MDP)/":{"tf":1.0}},"df":1}},"z":{"docs":{},"df":0,"e":{"docs":{},"df":0,"(":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"g":{"docs":{},"df":0,"0":{"docs":{"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.7320508075688772}},"df":1}}}}}}}}}}},"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/secure time/":{"tf":1.4142135623730951},"https://phlip9.com/notes/devops/azure CLI/":{"tf":1.4142135623730951},"https://phlip9.com/notes/devops/consul/":{"tf":1.0},"https://phlip9.com/notes/distributed systems/papers/(2020) Semi-Fast Byzantine-tolerant Shared Register without Reliable Broadcast/":{"tf":2.449489742783178},"https://phlip9.com/notes/postgres/postgres performance tuning/":{"tf":2.6457513110645907},"https://phlip9.com/notes/postgres/snippets/":{"tf":1.0},"https://phlip9.com/notes/postgres/types of scans/":{"tf":2.8284271247461903},"https://phlip9.com/notes/router/lightning router/captive portal/arubanetworks captive portal/":{"tf":1.4142135623730951},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/lightning router overview/":{"tf":1.0}},"df":14},"y":{"docs":{},"df":0,"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"(":{"docs":{},"df":0,"\"":{"docs":{},"df":0,"#":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"f":{"docs":{},"df":0,"i":{"docs":{},"df":0,"r":{"docs":{},"df":0,"m":{"docs":{"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}},"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/testing whether a coin is fair/":{"tf":1.4142135623730951}},"df":2}}}}},"u":{"docs":{},"df":0,"e":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0},"https://phlip9.com/notes/devops/nomad/":{"tf":1.4142135623730951},"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":3.7416573867739413},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.4142135623730951},"https://phlip9.com/notes/networking/network interface card (NIC)/":{"tf":1.7320508075688772},"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.0}},"df":7}}},"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"k":{"docs":{"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.0},"https://phlip9.com/notes/management/relieve often - why generals were more successful in WWII/":{"tf":1.0}},"df":2,"l":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/btc-ln/lightning network notes/":{"tf":1.7320508075688772},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.0},"https://phlip9.com/notes/design/form design/":{"tf":1.0},"https://phlip9.com/notes/devops/azure CLI/":{"tf":1.0},"https://phlip9.com/notes/devops/nomad/":{"tf":1.4142135623730951},"https://phlip9.com/notes/management/relieve often - why generals were more successful in WWII/":{"tf":1.0},"https://phlip9.com/notes/misc/kintsugi/":{"tf":1.0},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0},"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.0},"https://phlip9.com/notes/postgres/postgres performance tuning/":{"tf":1.0},"https://phlip9.com/notes/postgres/types of scans/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/reproducible-builds.org/":{"tf":1.0}},"df":13}},"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/secure time/":{"tf":1.0}},"df":1}}}}}}},"e":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.0}},"df":1}},"t":{"docs":{"https://phlip9.com/notes/misc/kintsugi/":{"tf":1.0},"https://phlip9.com/notes/networking/network interface card (NIC)/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/nix/nix auto-allocate-uids -> nixbld users/":{"tf":1.0}},"df":3}},"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"u":{"docs":{},"df":0,"m":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/fastpay/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/secure time/":{"tf":1.0}},"df":2}}},"t":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":2.6457513110645907},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/gramine/":{"tf":2.8284271247461903},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":4.242640687119285},"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":5.656854249492381},"https://phlip9.com/notes/confidential computing/marblerun/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":4.242640687119285},"https://phlip9.com/notes/performance/simdjson talk/":{"tf":2.0},"https://phlip9.com/notes/postgres/snippets/":{"tf":1.4142135623730951}},"df":9,"a":{"docs":{"https://phlip9.com/notes/router/lightning router/lightning router overview/":{"tf":1.4142135623730951}},"df":1},"e":{"docs":{},"df":0,".":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"p":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0}},"df":1,".":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"b":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,".":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"_":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"b":{"docs":{},"df":0,"u":{"docs":{},"df":0,"g":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}},"_":{"docs":{},"df":0,"s":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.7320508075688772}},"df":1},"t":{"docs":{},"df":0,"y":{"docs":{},"df":0,"p":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0}},"df":1}}}},"b":{"docs":{},"df":0,"o":{"docs":{},"df":0,"d":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.4142135623730951}},"df":1}}}},"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"f":{"docs":{},"df":0,"o":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.7320508075688772}},"df":2,".":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"g":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"f":{"docs":{},"df":0,"o":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}},"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"g":{"docs":{},"df":0,"n":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"u":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{},"df":0,"y":{"docs":{},"df":0,"p":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}},"v":{"docs":{},"df":0,"e":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.4142135623730951}},"df":1}},"w":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"k":{"docs":{"https://phlip9.com/notes/misc/water distillation setup/":{"tf":1.7320508075688772}},"df":1}}}}},"r":{"docs":{"https://phlip9.com/notes/AI ML/Expectimax Search/":{"tf":3.1622776601683795},"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0},"https://phlip9.com/notes/android/root phone with magisk/":{"tf":1.0},"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/":{"tf":1.0},"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/lightning network notes/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/gramine/":{"tf":1.0},"https://phlip9.com/notes/devops/algo wireguard VPN server/":{"tf":1.0},"https://phlip9.com/notes/distributed systems/papers/(2020) Semi-Fast Byzantine-tolerant Shared Register without Reliable Broadcast/":{"tf":1.7320508075688772},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":3.1622776601683795},"https://phlip9.com/notes/lang/lua/":{"tf":2.23606797749979},"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.0},"https://phlip9.com/notes/misc/pop_OS! tweaks/":{"tf":1.0},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.4142135623730951},"https://phlip9.com/notes/misc/setting up a headless raspbian boot image/":{"tf":2.449489742783178},"https://phlip9.com/notes/reproducible builds/nix/nix debug spurrious rebuilds/":{"tf":1.4142135623730951},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":2.0},"https://phlip9.com/notes/statistics probability/MAD - median absolute deviation/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/kelly criterion + ELO/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/testing whether a coin is fair/":{"tf":1.4142135623730951}},"df":23,"&":{"docs":{},"df":0,"l":{"docs":{},"df":0,"t":{"docs":{},"df":0,";":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"b":{"docs":{},"df":0,"&":{"docs":{},"df":0,"g":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/lang/rust/rr with rust/":{"tf":1.0}},"df":1}}}}}}}}}},"(":{"docs":{"https://phlip9.com/notes/AI ML/Markov Decision Process (MDP)/":{"tf":2.8284271247461903}},"df":1,"s":{"docs":{},"df":0,"_":{"docs":{},"df":0,"1":{"docs":{"https://phlip9.com/notes/AI ML/Markov Decision Process (MDP)/":{"tf":1.0}},"df":1},"2":{"docs":{"https://phlip9.com/notes/AI ML/Markov Decision Process (MDP)/":{"tf":1.0}},"df":1},"3":{"docs":{"https://phlip9.com/notes/AI ML/Markov Decision Process (MDP)/":{"tf":1.0}},"df":1},"t":{"docs":{"https://phlip9.com/notes/AI ML/Markov Decision Process (MDP)/":{"tf":1.0}},"df":1}}}},")":{"docs":{},"df":0,"a":{"docs":{},"df":0,"g":{"docs":{},"df":0,"e":{"docs":{"https://phlip9.com/notes/reproducible builds/nix/links/":{"tf":1.0}},"df":1}}}},".":{"docs":{},"df":0,"v":{"docs":{"https://phlip9.com/notes/statistics probability/p-value/":{"tf":1.4142135623730951},"https://phlip9.com/notes/statistics probability/standard error/":{"tf":1.4142135623730951}},"df":2}},"0":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.4142135623730951}},"df":1,"+":{"docs":{},"df":0,"r":{"docs":{},"df":0,"1":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0}},"df":1}}}},"1":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.4142135623730951},"https://phlip9.com/notes/statistics probability/kelly criterion + ELO/":{"tf":1.0}},"df":2},"2":{"docs":{"https://phlip9.com/notes/statistics probability/kelly criterion + ELO/":{"tf":1.0}},"df":1},"_":{"docs":{},"df":0,"0":{"docs":{"https://phlip9.com/notes/AI ML/Markov Decision Process (MDP)/":{"tf":1.0}},"df":1},"1":{"docs":{"https://phlip9.com/notes/AI ML/Markov Decision Process (MDP)/":{"tf":1.0}},"df":1},"\\":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"x":{"docs":{},"df":0,"t":{"docs":{},"df":0,"{":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"x":{"docs":{"https://phlip9.com/notes/AI ML/Markov Decision Process (MDP)/":{"tf":1.7320508075688772}},"df":1}}}}}}}}},"a":{"docs":{"https://phlip9.com/notes/AI ML/Markov Decision Process (MDP)/":{"tf":1.0}},"df":1},"i":{"docs":{"https://phlip9.com/notes/btc-ln/atomic multipath payments (AMP)/":{"tf":1.0}},"df":1},"k":{"docs":{"https://phlip9.com/notes/AI ML/Markov Decision Process (MDP)/":{"tf":1.0}},"df":1}},"a":{"docs":{"https://phlip9.com/notes/confidential computing/gramine/":{"tf":2.0},"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":1.4142135623730951}},"df":2,"c":{"docs":{},"df":0,"e":{"docs":{"https://phlip9.com/notes/devops/deployment strategies/":{"tf":1.0}},"df":1},"h":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/distributed systems/papers/(2021) Leaderless Consensus/":{"tf":1.0}},"df":1}}},"k":{"docs":{},"df":0,"s":{"docs":{},"df":0,"p":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":2.0}},"df":2}}}}}},"d":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.0}},"df":1,"0":{"docs":{"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.4142135623730951}},"df":1}},"u":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":3.0}},"df":1,"s":{"docs":{},"df":0,"=":{"docs":{},"df":0,"1":{"docs":{},"df":0,"5":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1},"6":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1}}}}},"x":{"docs":{"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0}},"df":1}}},"i":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/btc-ln/breez lightning service providers/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.0}},"df":2},"n":{"docs":{},"df":0,"b":{"docs":{},"df":0,"o":{"docs":{},"df":0,"w":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1}}}}}},"s":{"docs":{"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.0},"https://phlip9.com/notes/lang/lua/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.4142135623730951}},"df":4}},"k":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":3.605551275463989}},"df":1},"m":{"docs":{"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.4142135623730951},"https://phlip9.com/notes/misc/prepping RPI for embedded dev/":{"tf":1.0}},"df":2},"n":{"docs":{"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0},"https://phlip9.com/notes/fuzzing/fuzzcheck-rs/":{"tf":1.4142135623730951}},"df":3,"d":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{"https://phlip9.com/notes/AI ML/Expectimax Search/":{"tf":1.0},"https://phlip9.com/notes/android/ADB over TCP inside WSL2/":{"tf":1.4142135623730951},"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0},"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":2.23606797749979},"https://phlip9.com/notes/btc-ln/atomic multipath payments (AMP)/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/gramine/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel SGX/secure time/":{"tf":1.0},"https://phlip9.com/notes/crypto/acme protocol/":{"tf":1.0},"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":1.4142135623730951},"https://phlip9.com/notes/devops/secrets/ejson-kms (AWS)/":{"tf":2.0},"https://phlip9.com/notes/fuzzing/fuzzing/":{"tf":1.0},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":2.449489742783178},"https://phlip9.com/notes/postgres/types of scans/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/CDF confidence bands - DKW inequality/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/multinomial distribution/":{"tf":1.0}},"df":18,".":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"(":{"docs":{},"df":0,"0":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.4142135623730951}},"df":1}}}}},"o":{"docs":{},"df":0,"m":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":2.0}},"df":1}}}}}}},"_":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"k":{"docs":{},"df":0,"_":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{},"df":0,"v":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"c":{"docs":{},"df":0,"e":{"docs":{},"df":0,"&":{"docs":{},"df":0,"l":{"docs":{},"df":0,"t":{"docs":{},"df":0,";":{"docs":{},"df":0,"0":{"docs":{},"df":0,"x":{"docs":{},"df":0,"4":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"&":{"docs":{},"df":0,"g":{"docs":{},"df":0,"t":{"docs":{},"df":0,";":{"docs":{},"df":0,"(":{"docs":{},"df":0,"s":{"docs":{},"df":0,"g":{"docs":{},"df":0,"x":{"docs":{},"df":0,"_":{"docs":{},"df":0,"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"_":{"docs":{},"df":0,"d":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"_":{"docs":{},"df":0,"i":{"docs":{},"df":0,"v":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"i":{"docs":{},"df":0,"z":{"docs":{},"df":0,"e":{"docs":{},"df":0,"(":{"docs":{},"df":0,"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{},"df":0,"f":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1}}}}}}}},"l":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0},"https://phlip9.com/notes/networking/ipv6 address space/":{"tf":1.0}},"df":2}}}}},"g":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/btc utreexo - utxo accumulator/":{"tf":1.0},"https://phlip9.com/notes/b l o c k c h a i n/fastpay/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.7320508075688772},"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.0},"https://phlip9.com/notes/combinatorics/k-combinations of a multiset/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel TDX/":{"tf":1.0},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0},"https://phlip9.com/notes/networking/CIDR/":{"tf":1.0},"https://phlip9.com/notes/networking/ipv6 address space/":{"tf":1.0},"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.0},"https://phlip9.com/notes/performance/bit hacks/":{"tf":3.4641016151377544},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/winsorize/":{"tf":1.4142135623730951}},"df":14,"e":{"docs":{},"df":0,"(":{"docs":{},"df":0,"h":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1,"e":{"docs":{},"df":0,"i":{"docs":{},"df":0,"g":{"docs":{},"df":0,"h":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":2.0}},"df":1}}}}}},"n":{"docs":{},"df":0,"u":{"docs":{},"df":0,"m":{"docs":{},"df":0,"_":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":2.23606797749979}},"df":1}}}}}}}}},"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{},"df":0,"f":{"docs":{},"df":0,".":{"docs":{},"df":0,"w":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{},"df":0,"t":{"docs":{},"df":0,"h":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1}}}}}}}}}},"w":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1,"i":{"docs":{},"df":0,"d":{"docs":{},"df":0,"t":{"docs":{},"df":0,"h":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":2.0}},"df":1}}}}}},"c":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/networking/CIDR/":{"tf":1.0}},"df":1}}}}}}},"p":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{},"df":0,"j":{"docs":{},"df":0,"s":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/performance/simdjson talk/":{"tf":1.0}},"df":1}}}}}}},"r":{"docs":{},"df":0,"e":{"docs":{"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":1.0},"https://phlip9.com/notes/networking/network interface card (NIC)/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/standard error/":{"tf":1.0}},"df":3}},"s":{"docs":{},"df":0,"p":{"docs":{},"df":0,"b":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/misc/setting up a headless raspbian boot image/":{"tf":2.0}},"df":1},"y":{"docs":{},"df":0,"p":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/misc/prepping RPI for embedded dev/":{"tf":1.0}},"df":1,".":{"docs":{},"df":0,"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"c":{"docs":{"https://phlip9.com/notes/misc/setting up a headless raspbian boot image/":{"tf":1.0}},"df":1}}}}}}}}}},"i":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/misc/setting up a headless raspbian boot image/":{"tf":1.7320508075688772}},"df":1,"_":{"docs":{},"df":0,"h":{"docs":{},"df":0,"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"s":{"docs":{"https://phlip9.com/notes/misc/setting up a headless raspbian boot image/":{"tf":1.7320508075688772}},"df":1}}}}}}}}}}}}},"i":{"docs":{"https://phlip9.com/notes/misc/prepping RPI for embedded dev/":{"tf":1.4142135623730951}},"df":1}}},"t":{"docs":{"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":1.0}},"df":1,"c":{"docs":{},"df":0,"h":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.0},"https://phlip9.com/notes/distributed systems/papers/(2020) Semi-Fast Byzantine-tolerant Shared Register without Reliable Broadcast/":{"tf":1.4142135623730951}},"df":3}}}},"e":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/BOLT 4 - onion routing protocol/":{"tf":2.0},"https://phlip9.com/notes/devops/linkerd/":{"tf":1.7320508075688772},"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":1.4142135623730951},"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":2.0},"https://phlip9.com/notes/router/lightning router/lightning router overview/":{"tf":1.7320508075688772}},"df":8},"i":{"docs":{},"df":0,"o":{"docs":{"https://phlip9.com/notes/statistics probability/G-test - multinomial goodness-of-fit/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/multinomial distribution/":{"tf":1.0}},"df":2,"n":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.4142135623730951}},"df":1}}}},"w":{"docs":{"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":1.0},"https://phlip9.com/notes/devops/nomad/":{"tf":1.0},"https://phlip9.com/notes/fuzzing/fuzzcheck-rs/":{"tf":1.0},"https://phlip9.com/notes/misc/pop_OS! tweaks/":{"tf":1.0}},"df":4,"_":{"docs":{},"df":0,"t":{"docs":{},"df":0,"x":{"docs":{"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.0}},"df":1}}}},"y":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.4142135623730951}},"df":1,"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.7320508075688772}},"df":1,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"]":{"docs":{},"df":0,"(":{"docs":{},"df":0,"h":{"docs":{},"df":0,"t":{"docs":{},"df":0,"t":{"docs":{},"df":0,"p":{"docs":{},"df":0,"s":{"docs":{},"df":0,":":{"docs":{},"df":0,"/":{"docs":{},"df":0,"/":{"docs":{},"df":0,"w":{"docs":{},"df":0,"w":{"docs":{},"df":0,"w":{"docs":{},"df":0,".":{"docs":{},"df":0,"w":{"docs":{},"df":0,"i":{"docs":{},"df":0,"k":{"docs":{},"df":0,"i":{"docs":{},"df":0,"w":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{},"df":0,".":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"/":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"/":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"y":{"docs":{},"df":0,"_":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"g":{"docs":{},"df":0,"_":{"docs":{},"df":0,"(":{"docs":{},"df":0,"g":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"p":{"docs":{},"df":0,"h":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"b":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{"https://phlip9.com/notes/crypto/biscuit authz/":{"tf":1.0}},"df":1}},"f":{"docs":{"https://phlip9.com/notes/btc-ln/zero-conf channels/":{"tf":1.4142135623730951}},"df":1},"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"k":{"docs":{"https://phlip9.com/notes/lang/rust/rr with rust/":{"tf":1.0}},"df":1}}}}},"c":{"docs":{"https://phlip9.com/notes/lang/rust/rr with rust/":{"tf":1.4142135623730951}},"df":1,"c":{"docs":{},"df":0,"h":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"k":{"docs":{},"df":0,"/":{"docs":{},"df":0,"s":{"docs":{},"df":0,"r":{"docs":{},"df":0,"c":{"docs":{},"df":0,"/":{"docs":{},"df":0,"e":{"docs":{},"df":0,"d":{"docs":{},"df":0,"2":{"docs":{},"df":0,"5":{"docs":{},"df":0,"5":{"docs":{},"df":0,"1":{"docs":{},"df":0,"9":{"docs":{},"df":0,"_":{"docs":{},"df":0,"c":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{},"df":0,"g":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,".":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/crypto/TLS self-signed pubkey-only certs/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}},"g":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"/":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"b":{"docs":{},"df":0,".":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/crypto/TLS self-signed pubkey-only certs/":{"tf":1.0}},"df":1}}}}}},":":{"docs":{},"df":0,":":{"docs":{},"df":0,"c":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"f":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,":":{"docs":{},"df":0,":":{"docs":{},"df":0,"f":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"_":{"docs":{},"df":0,"p":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{},"df":0,"s":{"docs":{},"df":0,"(":{"docs":{},"df":0,"c":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{},"df":0,"_":{"docs":{},"df":0,"p":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{},"df":0,"s":{"docs":{},"df":0,")":{"docs":{},"df":0,".":{"docs":{},"df":0,"e":{"docs":{},"df":0,"x":{"docs":{},"df":0,"p":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/crypto/TLS self-signed pubkey-only certs/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"d":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"g":{"docs":{},"df":0,"u":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"h":{"docs":{},"df":0,"e":{"docs":{},"df":0,"d":{"docs":{},"df":0,"n":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,":":{"docs":{},"df":0,":":{"docs":{},"df":0,"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"w":{"docs":{"https://phlip9.com/notes/crypto/TLS self-signed pubkey-only certs/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}},"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"&":{"docs":{},"df":0,"g":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/crypto/TLS self-signed pubkey-only certs/":{"tf":1.4142135623730951}},"df":1}}}}}}}}}}}},"d":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.4142135623730951}},"df":1,"_":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":3.4641016151377544}},"df":1},"x":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":3.3166247903554}},"df":1},"z":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":3.605551275463989}},"df":1}},"m":{"docs":{},"df":0,"s":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0}},"df":1}}}},"e":{"docs":{"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.0},"https://phlip9.com/notes/combinatorics/k-combinations of a multiset/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/secure time/":{"tf":1.0},"https://phlip9.com/notes/crypto/biscuit authz/":{"tf":1.0},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":3.4641016151377544},"https://phlip9.com/notes/lang/rust/understanding sycamore reactivity/":{"tf":1.0},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/arubanetworks captive portal/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.0}},"df":13,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{"https://phlip9.com/notes/AI ML/Markov Decision Process (MDP)/":{"tf":1.0},"https://phlip9.com/notes/android/linux ADB udev setup/":{"tf":1.0},"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/foreign bank account report (FBAR)/":{"tf":1.0},"https://phlip9.com/notes/keyboards/moergo glove80/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/rr with rust/":{"tf":1.4142135623730951},"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.0}},"df":6,"a":{"docs":{},"df":0,"b":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 11 - invoices/":{"tf":1.0}},"df":1}}}},"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"v":{"docs":{"https://phlip9.com/notes/lang/rust/understanding sycamore reactivity/":{"tf":2.8284271247461903}},"df":1}}}},"d":{"docs":{"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/foreign bank account report (FBAR)/":{"tf":1.0},"https://phlip9.com/notes/b l o c k c h a i n/fastpay/":{"tf":2.0},"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.7320508075688772},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.7320508075688772},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.7320508075688772},"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.7320508075688772},"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.7320508075688772},"https://phlip9.com/notes/devops/algo wireguard VPN server/":{"tf":1.0},"https://phlip9.com/notes/distributed systems/papers/(2020) Semi-Fast Byzantine-tolerant Shared Register without Reliable Broadcast/":{"tf":2.0},"https://phlip9.com/notes/fuzzing/fuzzing/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0},"https://phlip9.com/notes/lang/operator fixity and precedence/":{"tf":1.0},"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":1.4142135623730951},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.4142135623730951},"https://phlip9.com/notes/networking/CIDR/":{"tf":1.0},"https://phlip9.com/notes/networking/network interface card (NIC)/":{"tf":1.0},"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":2.0},"https://phlip9.com/notes/performance/simdjson talk/":{"tf":1.4142135623730951},"https://phlip9.com/notes/postgres/postgres performance tuning/":{"tf":1.7320508075688772},"https://phlip9.com/notes/statistics probability/standard error/":{"tf":1.0}},"df":22,"(":{"docs":{"https://phlip9.com/notes/distributed systems/papers/(2020) Semi-Fast Byzantine-tolerant Shared Register without Reliable Broadcast/":{"tf":1.0}},"df":1},"/":{"docs":{},"df":0,"w":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0}},"df":1,"e":{"docs":{},"df":0,"/":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"m":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":1.0}},"df":1}}}}}}}}}}}}},"a":{"docs":{},"df":0,"b":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.0}},"df":2}}},"e":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/combinatorics/k-combinations of a multiset/":{"tf":1.0},"https://phlip9.com/notes/distributed systems/papers/(2020) Semi-Fast Byzantine-tolerant Shared Register without Reliable Broadcast/":{"tf":2.0}},"df":2,".":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/performance/simdjson talk/":{"tf":1.0}},"df":1}}}},"/":{"docs":{},"df":0,"w":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/distributed systems/papers/(2020) Semi-Fast Byzantine-tolerant Shared Register without Reliable Broadcast/":{"tf":1.0}},"df":1}}}}}}},"i":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.4142135623730951},"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.0},"https://phlip9.com/notes/crypto/acme protocol/":{"tf":1.0},"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":1.4142135623730951},"https://phlip9.com/notes/devops/deployment strategies/":{"tf":1.0},"https://phlip9.com/notes/misc/kintsugi/":{"tf":1.0},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":7},"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,".":{"docs":{},"df":0,"m":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":2.0}},"df":1}}}}},"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/postgres/postgres performance tuning/":{"tf":1.4142135623730951}},"df":1}}}}},"l":{"docs":{"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.4142135623730951},"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.7320508075688772},"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel SGX/secure time/":{"tf":1.0},"https://phlip9.com/notes/devops/deployment strategies/":{"tf":1.4142135623730951},"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":1.4142135623730951},"https://phlip9.com/notes/fuzzing/fuzzcheck-rs/":{"tf":1.0},"https://phlip9.com/notes/ios/ios setup/":{"tf":1.0},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/lua/":{"tf":2.0},"https://phlip9.com/notes/misc/kintsugi/":{"tf":1.0},"https://phlip9.com/notes/performance/simdjson talk/":{"tf":1.0}},"df":14,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/devops/nomad/":{"tf":1.0}},"df":1}}},"l":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0},"https://phlip9.com/notes/android/root phone with magisk/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/marblerun/":{"tf":1.0},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0},"https://phlip9.com/notes/misc/kintsugi/":{"tf":1.4142135623730951},"https://phlip9.com/notes/misc/optimization solvers/":{"tf":1.0},"https://phlip9.com/notes/networking/ipv6 address space/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/testing whether a coin is fair/":{"tf":1.0}},"df":9}},"m":{"docs":{"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.0}},"df":1}},"s":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/AI ML/Markov Decision Process (MDP)/":{"tf":1.0},"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0},"https://phlip9.com/notes/android/root phone with magisk/":{"tf":1.0},"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.0},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/rr with rust/":{"tf":1.4142135623730951},"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":1.0},"https://phlip9.com/notes/misc/kintsugi/":{"tf":1.0},"https://phlip9.com/notes/misc/pop_OS! tweaks/":{"tf":1.0},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0},"https://phlip9.com/notes/misc/setting up a headless raspbian boot image/":{"tf":1.0},"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.0}},"df":16}}}},"b":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/btc-ln/breez lightning service providers/":{"tf":1.7320508075688772}},"df":1}},"o":{"docs":{},"df":0,"o":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/android/OTA updates for rooted android phone/":{"tf":2.449489742783178},"https://phlip9.com/notes/android/root phone with magisk/":{"tf":2.0},"https://phlip9.com/notes/keyboards/moergo glove80/":{"tf":1.0},"https://phlip9.com/notes/misc/pop_OS! tweaks/":{"tf":1.7320508075688772},"https://phlip9.com/notes/misc/prepping RPI for embedded dev/":{"tf":1.4142135623730951},"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.0}},"df":6}}},"u":{"docs":{},"df":0,"i":{"docs":{},"df":0,"l":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0},"https://phlip9.com/notes/devops/docker compose/":{"tf":1.0},"https://phlip9.com/notes/misc/setting up a headless raspbian boot image/":{"tf":1.0},"https://phlip9.com/notes/postgres/postgres performance tuning/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/nix/nix debug spurrious rebuilds/":{"tf":2.23606797749979},"https://phlip9.com/notes/reproducible builds/rebuilderd/":{"tf":2.0}},"df":6,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/reproducible builds/rebuilderd/":{"tf":2.0}},"df":1}}}}}}}},"c":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.4142135623730951},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":2.0}},"df":3,"a":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/AI ML/Expectimax Search/":{"tf":1.0},"https://phlip9.com/notes/AI ML/Markov Decision Process (MDP)/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/standard error/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/testing whether a coin is fair/":{"tf":1.4142135623730951}},"df":4},"p":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.0}},"df":1}},"e":{"docs":{},"df":0,"i":{"docs":{},"df":0,"v":{"docs":{"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/foreign bank account report (FBAR)/":{"tf":1.0},"https://phlip9.com/notes/b l o c k c h a i n/fastpay/":{"tf":2.23606797749979},"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.7320508075688772},"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":3.0},"https://phlip9.com/notes/btc-ln/atomic multipath payments (AMP)/":{"tf":1.7320508075688772},"https://phlip9.com/notes/btc-ln/breez lightning service providers/":{"tf":1.4142135623730951},"https://phlip9.com/notes/btc-ln/hosted channels/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/lightning rod/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/submarine swaps/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/zero-conf channels/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.0},"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":1.0},"https://phlip9.com/notes/networking/network interface card (NIC)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.7320508075688772},"https://phlip9.com/notes/router/lightning router/captive portal/arubanetworks captive portal/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":2.6457513110645907}},"df":18}},"n":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/AI ML/Markov Decision Process (MDP)/":{"tf":1.0},"https://phlip9.com/notes/android/android cli setup/":{"tf":1.0},"https://phlip9.com/notes/android/root phone with magisk/":{"tf":1.0},"https://phlip9.com/notes/b l o c k c h a i n/fastpay/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.7320508075688772},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/secure time/":{"tf":1.0},"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":1.0},"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.0}},"df":11}}},"i":{"docs":{},"df":0,"p":{"docs":{"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.0}},"df":1,"i":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 11 - invoices/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/atomic multipath payments (AMP)/":{"tf":1.4142135623730951}},"df":3}}},"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"i":{"docs":{},"df":0,"m":{"docs":{"https://phlip9.com/notes/btc-ln/submarine swaps/":{"tf":1.0}},"df":1}}}},"o":{"docs":{"https://phlip9.com/notes/lang/operator fixity and precedence/":{"tf":1.0}},"df":1,"g":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/marblerun/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.4142135623730951}},"df":4}},"m":{"docs":{},"df":0,"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/android/android cli setup/":{"tf":1.0},"https://phlip9.com/notes/misc/kintsugi/":{"tf":2.0},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/nix/nix auto-allocate-uids -> nixbld users/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.7320508075688772},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":2.449489742783178}},"df":6}}}},"p":{"docs":{},"df":0,"i":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.0}},"df":1}}}},"n":{"docs":{},"df":0,"f":{"docs":{},"df":0,"i":{"docs":{},"df":0,"g":{"docs":{},"df":0,"u":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/fastpay/":{"tf":1.0},"https://phlip9.com/notes/distributed systems/papers/(2020) Semi-Fast Byzantine-tolerant Shared Register without Reliable Broadcast/":{"tf":1.0}},"df":2}}}}},"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.0}},"df":1}}}},"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"u":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/btc-ln/atomic multipath payments (AMP)/":{"tf":1.4142135623730951}},"df":1}}}}}}},"r":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/AI ML/Expectimax Search/":{"tf":1.4142135623730951},"https://phlip9.com/notes/WSL/WSL2 custom kernel/":{"tf":2.23606797749979},"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/foreign bank account report (FBAR)/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.4142135623730951},"https://phlip9.com/notes/devops/algo wireguard VPN server/":{"tf":2.449489742783178},"https://phlip9.com/notes/devops/azure CLI/":{"tf":1.0},"https://phlip9.com/notes/devops/service mesh/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.7320508075688772},"https://phlip9.com/notes/lang/rust/rr with rust/":{"tf":2.8284271247461903},"https://phlip9.com/notes/performance/profiling/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/reproducible-builds.org/":{"tf":1.4142135623730951},"https://phlip9.com/notes/statistics probability/standard error/":{"tf":1.0}},"df":12,"o":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.4142135623730951}},"df":2}}}},"v":{"docs":{"https://phlip9.com/notes/AI ML/Markov Decision Process (MDP)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/btc-ln/breez lightning service providers/":{"tf":1.0}},"df":2,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/android/OTA updates for rooted android phone/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0},"https://phlip9.com/notes/misc/pop_OS! tweaks/":{"tf":1.0},"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.4142135623730951}},"df":4}}}}},"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/reproducible builds/reproducible-builds.org/":{"tf":1.0}},"df":1}}}},"u":{"docs":{},"df":0,"r":{"docs":{},"df":0,"s":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":3.3166247903554}},"df":1}}},"v":{"docs":{},"df":0,"e":{"docs":{},"df":0,"i":{"docs":{},"df":0,"v":{"docs":{"https://phlip9.com/notes/btc-ln/breez lightning service providers/":{"tf":1.0}},"df":1}}}},"y":{"docs":{},"df":0,"c":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.0}},"df":1}}}},"d":{"docs":{"https://phlip9.com/notes/android/OTA updates for rooted android phone/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":2.0},"https://phlip9.com/notes/design/form design/":{"tf":1.0},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.4142135623730951},"https://phlip9.com/notes/statistics probability/herbie - float error fixer/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/testing whether a coin is fair/":{"tf":1.0}},"df":7,"e":{"docs":{},"df":0,"e":{"docs":{},"df":0,"m":{"docs":{"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/money services business (MSB)/":{"tf":1.0},"https://phlip9.com/notes/b l o c k c h a i n/fastpay/":{"tf":3.0}},"df":2}},"f":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/AI ML/Markov Decision Process (MDP)/":{"tf":1.0}},"df":1}}},"m":{"docs":{},"df":0,"p":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.0}},"df":1}}},"r":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.0}},"df":2,"i":{"docs":{},"df":0,"v":{"docs":{"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":1.0}},"df":1}}}},"i":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0},"https://phlip9.com/notes/lang/gdb ref/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.7320508075688772},"https://phlip9.com/notes/router/lightning router/captive portal/arubanetworks captive portal/":{"tf":2.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":3.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":3.605551275463989},"https://phlip9.com/notes/router/lightning router/lightning router overview/":{"tf":1.0}},"df":7,"]":{"docs":{},"df":0,"(":{"docs":{},"df":0,"h":{"docs":{},"df":0,"t":{"docs":{},"df":0,"t":{"docs":{},"df":0,"p":{"docs":{},"df":0,"s":{"docs":{},"df":0,":":{"docs":{},"df":0,"/":{"docs":{},"df":0,"/":{"docs":{},"df":0,"w":{"docs":{},"df":0,"w":{"docs":{},"df":0,"w":{"docs":{},"df":0,".":{"docs":{},"df":0,"w":{"docs":{},"df":0,"i":{"docs":{},"df":0,"k":{"docs":{},"df":0,"i":{"docs":{},"df":0,"w":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{},"df":0,".":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"/":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"/":{"docs":{},"df":0,"c":{"docs":{},"df":0,"a":{"docs":{},"df":0,"p":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"v":{"docs":{},"df":0,"e":{"docs":{},"df":0,"_":{"docs":{},"df":0,"p":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"#":{"docs":{},"df":0,"/":{"docs":{},"df":0,"h":{"docs":{},"df":0,"t":{"docs":{},"df":0,"t":{"docs":{},"df":0,"p":{"docs":{},"df":0,"_":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"d":{"docs":{},"df":0,"i":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"u":{"docs":{},"df":0,"c":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 8 - secure noise transport/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.7320508075688772},"https://phlip9.com/notes/confidential computing/intel SGX/secure time/":{"tf":1.0},"https://phlip9.com/notes/crypto/(talk) authenticated data structures for stateless validation/":{"tf":1.0},"https://phlip9.com/notes/crypto/acme protocol/":{"tf":1.4142135623730951},"https://phlip9.com/notes/crypto/biscuit authz/":{"tf":1.4142135623730951},"https://phlip9.com/notes/devops/service mesh/":{"tf":1.0},"https://phlip9.com/notes/fuzzing/fuzzcheck-rs/":{"tf":1.0},"https://phlip9.com/notes/fuzzing/fuzzing/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.4142135623730951},"https://phlip9.com/notes/statistics probability/winsorize/":{"tf":1.0}},"df":13},"n":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0}},"df":1}}}},"f":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0},"https://phlip9.com/notes/lang/gdb ref/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/rust/rr with rust/":{"tf":1.0}},"df":3,"&":{"docs":{},"df":0,"g":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":1.0}},"df":1}},"l":{"docs":{},"df":0,"t":{"docs":{},"df":0,";":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"&":{"docs":{},"df":0,"g":{"docs":{},"df":0,"t":{"docs":{},"df":0,";":{"docs":{},"df":0,"(":{"docs":{},"df":0,"1":{"docs":{},"df":0,"2":{"docs":{},"df":0,"3":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}},"e":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0},"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/foreign bank account report (FBAR)/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":2.0},"https://phlip9.com/notes/fuzzing/fuzzing/":{"tf":1.0},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":3.3166247903554},"https://phlip9.com/notes/lang/operator fixity and precedence/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/rr with rust/":{"tf":1.0},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.4142135623730951},"https://phlip9.com/notes/networking/CIDR/":{"tf":1.4142135623730951},"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.0},"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/nix/nix debug spurrious rebuilds/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":2.6457513110645907},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":3.7416573867739413},"https://phlip9.com/notes/statistics probability/G-test - multinomial goodness-of-fit/":{"tf":1.0}},"df":17,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"c":{"docs":{"https://phlip9.com/notes/lang/rust/self-referencing structs/":{"tf":1.4142135623730951}},"df":1,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"/":{"docs":{},"df":0,"d":{"docs":{},"df":0,"s":{"docs":{},"df":0,"m":{"docs":{"https://phlip9.com/notes/devops/secrets/fortanix DSM/":{"tf":1.0}},"df":1}}}}}}}}}}},"i":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/AI ML/Expectimax Search/":{"tf":1.0}},"df":1}},"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{},"df":0,"h":{"docs":{"https://phlip9.com/notes/android/root phone with magisk/":{"tf":1.0}},"df":1}}},"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/AI ML/Markov Decision Process (MDP)/":{"tf":1.0},"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/foreign bank account report (FBAR)/":{"tf":1.0}},"df":2}}}},"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"h":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/secure time/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/rust/rr with rust/":{"tf":1.0},"https://phlip9.com/notes/networking/CIDR/":{"tf":1.0}},"df":3}}}},"u":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/btc-ln/lightning network notes/":{"tf":1.0}},"df":1}},"s":{"docs":{"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0},"https://phlip9.com/notes/networking/ipv6 address space/":{"tf":1.0}},"df":2}}},"g":{"docs":{},"df":0,"a":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/management/relieve often - why generals were more successful in WWII/":{"tf":1.0}},"df":1}},"r":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/foreign bank account report (FBAR)/":{"tf":1.0}},"df":1,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"s":{"docs":{"https://phlip9.com/notes/AI ML/Markov Decision Process (MDP)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/foreign bank account report (FBAR)/":{"tf":1.0},"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/money services business (MSB)/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0},"https://phlip9.com/notes/performance/profiling/":{"tf":1.0}},"df":6}}}}}}},"e":{"docs":{},"df":0,"h":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/fuzzing/fuzzing/":{"tf":1.0}},"df":1}},"x":{"docs":{"https://phlip9.com/notes/nvim/universal-ctags Notes/":{"tf":2.6457513110645907}},"df":1}},"i":{"docs":{},"df":0,"m":{"docs":{"https://phlip9.com/notes/reproducible builds/reproducible-builds.org/":{"tf":1.0}},"df":1},"o":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.4142135623730951},"https://phlip9.com/notes/devops/algo wireguard VPN server/":{"tf":1.0},"https://phlip9.com/notes/devops/azure CLI/":{"tf":2.0},"https://phlip9.com/notes/devops/consul/":{"tf":1.0},"https://phlip9.com/notes/devops/nomad/":{"tf":1.0},"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.0},"https://phlip9.com/notes/performance/simdjson talk/":{"tf":1.4142135623730951},"https://phlip9.com/notes/statistics probability/multinomial distribution/":{"tf":2.449489742783178}},"df":9}},"s":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/money services business (MSB)/":{"tf":1.0},"https://phlip9.com/notes/b l o c k c h a i n/bip158 - compact block filters/":{"tf":1.0},"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0},"https://phlip9.com/notes/crypto/acme protocol/":{"tf":1.7320508075688772},"https://phlip9.com/notes/devops/consul/":{"tf":1.0},"https://phlip9.com/notes/distributed systems/papers/(2020) Semi-Fast Byzantine-tolerant Shared Register without Reliable Broadcast/":{"tf":3.1622776601683795},"https://phlip9.com/notes/lang/rust/understanding sycamore reactivity/":{"tf":2.0},"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.7320508075688772}},"df":11,"r":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0},"https://phlip9.com/notes/crypto/acme protocol/":{"tf":1.4142135623730951},"https://phlip9.com/notes/router/lightning router/captive portal/arubanetworks captive portal/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.0}},"df":4,"a":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/devops/algo wireguard VPN server/":{"tf":1.4142135623730951}},"df":1}},"i":{"docs":{"https://phlip9.com/notes/devops/consul/":{"tf":1.0},"https://phlip9.com/notes/networking/ipv6 address space/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.4142135623730951}},"df":4}}}}},"u":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/foreign bank account report (FBAR)/":{"tf":1.0},"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/money services business (MSB)/":{"tf":1.7320508075688772}},"df":2,"a":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.0}},"df":1}}}}},"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"f":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"c":{"docs":{"https://phlip9.com/notes/AI ML/Markov Decision Process (MDP)/":{"tf":1.0}},"df":1}}}}}},"j":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/BOLT 4 - onion routing protocol/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/BOLT 8 - secure noise transport/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/secure time/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":1.0}},"df":6}}}},"l":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel SGX/secure time/":{"tf":2.0},"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":1.4142135623730951},"https://phlip9.com/notes/devops/deployment strategies/":{"tf":1.0},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.7320508075688772},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.0}},"df":6,"a":{"docs":{},"df":0,".":{"docs":{},"df":0,"d":{"docs":{},"df":0,"y":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.0}},"df":1}}},"p":{"docs":{},"df":0,"l":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.0}},"df":1}}}},"t":{"docs":{"https://phlip9.com/notes/":{"tf":1.4142135623730951},"https://phlip9.com/notes/b l o c k c h a i n/btc utreexo - utxo accumulator/":{"tf":1.0},"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/gramine/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/mystikos/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":1.0},"https://phlip9.com/notes/crypto/zkdocs/":{"tf":1.0},"https://phlip9.com/notes/devops/nomad/":{"tf":1.0},"https://phlip9.com/notes/devops/secrets/ejson (Shopify)/":{"tf":1.0},"https://phlip9.com/notes/devops/service mesh/":{"tf":1.0},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.7320508075688772},"https://phlip9.com/notes/lang/flutter/flutter setup/":{"tf":1.0},"https://phlip9.com/notes/lang/operator fixity and precedence/":{"tf":1.0},"https://phlip9.com/notes/postgres/postgres performance tuning/":{"tf":1.0},"https://phlip9.com/notes/postgres/snippets/":{"tf":1.4142135623730951},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/arubanetworks captive portal/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.4142135623730951},"https://phlip9.com/notes/statistics probability/G-test - multinomial goodness-of-fit/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/p-value/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/standard error/":{"tf":1.0}},"df":21,"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"s":{"docs":{},"df":0,"h":{"docs":{},"df":0,"i":{"docs":{},"df":0,"p":{"docs":{"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.0}},"df":1}}}}}}}},"y":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 11 - invoices/":{"tf":1.0},"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.0}},"df":2}},"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.0}},"df":1}},"s":{"docs":{"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":3.4641016151377544},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.7320508075688772},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":2.0},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":2.0},"https://phlip9.com/notes/reproducible builds/reproducible-builds.org/":{"tf":1.0}},"df":6}},"v":{"docs":{"https://phlip9.com/notes/WSL/WSL2 custom kernel/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0},"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":1.0},"https://phlip9.com/notes/devops/o11y/jaeger oss e2e tracing/":{"tf":1.0},"https://phlip9.com/notes/fuzzing/fuzzing/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.0},"https://phlip9.com/notes/postgres/types of scans/":{"tf":1.0}},"df":8}},"i":{"docs":{"https://phlip9.com/notes/btc-ln/submarine swaps/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/secure time/":{"tf":1.4142135623730951},"https://phlip9.com/notes/design/form design/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.4142135623730951}},"df":7,"a":{"docs":{},"df":0,"b":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/btc-ln/breez lightning service providers/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/lightning rod/":{"tf":1.0},"https://phlip9.com/notes/devops/linkerd/":{"tf":1.4142135623730951},"https://phlip9.com/notes/devops/service mesh/":{"tf":1.0},"https://phlip9.com/notes/distributed systems/papers/(2020) Semi-Fast Byzantine-tolerant Shared Register without Reliable Broadcast/":{"tf":1.7320508075688772},"https://phlip9.com/notes/fuzzing/fuzzing/":{"tf":1.0},"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.0}},"df":7}}},"e":{"docs":{},"df":0,"f":{"docs":{"https://phlip9.com/notes/management/relieve often - why generals were more successful in WWII/":{"tf":2.449489742783178}},"df":1},"v":{"docs":{"https://phlip9.com/notes/management/relieve often - why generals were more successful in WWII/":{"tf":2.8284271247461903}},"df":1}}},"o":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/android/android cli setup/":{"tf":1.0},"https://phlip9.com/notes/android/linux ADB udev setup/":{"tf":1.0},"https://phlip9.com/notes/devops/secrets/envkey/":{"tf":1.0},"https://phlip9.com/notes/lang/flutter/flutter setup/":{"tf":1.4142135623730951},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.4142135623730951}},"df":5}},"c":{"docs":{"https://phlip9.com/notes/router/lightning router/captive portal/arubanetworks captive portal/":{"tf":1.0}},"df":1}}},"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.0},"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":1.4142135623730951},"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.0},"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.0}},"df":4}}},"e":{"docs":{},"df":0,"m":{"docs":{},"df":0,"b":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0},"https://phlip9.com/notes/distributed systems/papers/(2020) Semi-Fast Byzantine-tolerant Shared Register without Reliable Broadcast/":{"tf":1.0},"https://phlip9.com/notes/networking/CIDR/":{"tf":1.4142135623730951},"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.0},"https://phlip9.com/notes/postgres/snippets/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/arubanetworks captive portal/":{"tf":1.0}},"df":6}}},"o":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":2.0},"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.7320508075688772},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":2.0},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/gramine/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":3.1622776601683795},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":3.0},"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/secure time/":{"tf":2.23606797749979},"https://phlip9.com/notes/confidential computing/intel TDX/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/marblerun/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":2.6457513110645907},"https://phlip9.com/notes/devops/k3s/":{"tf":1.0},"https://phlip9.com/notes/devops/service mesh/":{"tf":1.0},"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/rust/rr with rust/":{"tf":1.0},"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":2.0},"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.4142135623730951},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":2.8284271247461903},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.4142135623730951}},"df":22},"v":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/btc utreexo - utxo accumulator/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.0},"https://phlip9.com/notes/crypto/(talk) authenticated data structures for stateless validation/":{"tf":1.0},"https://phlip9.com/notes/crypto/biscuit authz/":{"tf":1.7320508075688772},"https://phlip9.com/notes/lang/lua/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/rr with rust/":{"tf":1.4142135623730951},"https://phlip9.com/notes/networking/CIDR/":{"tf":1.0},"https://phlip9.com/notes/performance/simdjson talk/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/nix/nix auto-allocate-uids -> nixbld users/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/winsorize/":{"tf":1.4142135623730951}},"df":11}}},"n":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{"https://phlip9.com/notes/keyboards/moergo glove80/":{"tf":1.0},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0},"https://phlip9.com/notes/lang/lua/":{"tf":1.0},"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.0}},"df":4,"e":{"docs":{},"df":0,"(":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"g":{"docs":{"https://phlip9.com/notes/lang/lua/":{"tf":1.0}},"df":1}}}}}}},"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/lang/rust/understanding sycamore reactivity/":{"tf":1.0},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":2.23606797749979},"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.0}},"df":3}}},"e":{"docs":{},"df":0,"w":{"docs":{"https://phlip9.com/notes/crypto/acme protocol/":{"tf":2.0}},"df":1,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{},"df":0,"{":{"docs":{},"df":0,"\\":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"g":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"x":{"docs":{},"df":0,"}":{"docs":{},"df":0,"{":{"docs":{},"df":0,"\\":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"x":{"docs":{},"df":0,"t":{"docs":{},"df":0,"{":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"g":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"x":{"docs":{"https://phlip9.com/notes/AI ML/Markov Decision Process (MDP)/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}},"e":{"docs":{},"df":0,"}":{"docs":{},"df":0,"[":{"docs":{},"df":0,"1":{"docs":{},"df":0,"]":{"docs":{},"df":0,"{":{"docs":{},"df":0,"\\":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"h":{"docs":{},"df":0,"b":{"docs":{},"df":0,"b":{"docs":{},"df":0,"{":{"docs":{},"df":0,"e":{"docs":{},"df":0,"}":{"docs":{},"df":0,"\\":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"f":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/AI ML/Markov Decision Process (MDP)/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}},"p":{"docs":{},"df":0,"r":{"docs":{},"df":0,"}":{"docs":{},"df":0,"[":{"docs":{},"df":0,"1":{"docs":{},"df":0,"]":{"docs":{},"df":0,"{":{"docs":{},"df":0,"\\":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"x":{"docs":{},"df":0,"t":{"docs":{},"df":0,"{":{"docs":{},"df":0,"p":{"docs":{},"df":0,"r":{"docs":{},"df":0,"}":{"docs":{},"df":0,"\\":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"f":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/AI ML/Markov Decision Process (MDP)/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/CDF confidence bands - DKW inequality/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/cheat sheet/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/multinomial distribution/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/p-value/":{"tf":1.0}},"df":5}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/lang/rust/self-referencing structs/":{"tf":1.0}},"df":1}}}},"p":{"docs":{},"df":0,"a":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/lang/gdb ref/":{"tf":1.0}},"df":1}},"r":{"docs":{"https://phlip9.com/notes/misc/kintsugi/":{"tf":1.7320508075688772},"https://phlip9.com/notes/misc/pop_OS! tweaks/":{"tf":1.0}},"df":2}}},"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/lang/lua/":{"tf":1.0},"https://phlip9.com/notes/misc/kintsugi/":{"tf":1.0},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.7320508075688772},"https://phlip9.com/notes/statistics probability/standard error/":{"tf":1.0}},"df":5}}},"l":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":3.0},"https://phlip9.com/notes/postgres/snippets/":{"tf":1.0}},"df":2,"a":{"docs":{},"df":0,"c":{"docs":{"https://phlip9.com/notes/btc-ln/zero-conf channels/":{"tf":1.0},"https://phlip9.com/notes/combinatorics/k-combinations of a multiset/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":1.0},"https://phlip9.com/notes/crypto/biscuit authz/":{"tf":1.0},"https://phlip9.com/notes/devops/minikube/":{"tf":1.0},"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":1.0},"https://phlip9.com/notes/fuzzing/bolero - fuzzing + property testing/":{"tf":1.0},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0},"https://phlip9.com/notes/lang/lua/":{"tf":1.7320508075688772},"https://phlip9.com/notes/misc/envsubst/":{"tf":2.0},"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":1.0},"https://phlip9.com/notes/networking/CIDR/":{"tf":1.0},"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.4142135623730951},"https://phlip9.com/notes/postgres/snippets/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/herbie - float error fixer/":{"tf":1.4142135623730951},"https://phlip9.com/notes/statistics probability/standard error/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/winsorize/":{"tf":1.4142135623730951}},"df":19,"e":{"docs":{},"df":0,"(":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/postgres/snippets/":{"tf":1.0}},"df":1}}}}},"y":{"docs":{"https://phlip9.com/notes/AI ML/Markov Decision Process (MDP)/":{"tf":1.0},"https://phlip9.com/notes/b l o c k c h a i n/fastpay/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/BOLT 8 - secure noise transport/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/secure time/":{"tf":1.0},"https://phlip9.com/notes/crypto/acme protocol/":{"tf":1.7320508075688772},"https://phlip9.com/notes/lang/rust/rr with rust/":{"tf":3.3166247903554}},"df":8}},"i":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/secure time/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/arubanetworks captive portal/":{"tf":3.0}},"df":2,"c":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":1.0}},"df":2}}},"o":{"docs":{"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.4142135623730951},"https://phlip9.com/notes/devops/secrets/ejson (Shopify)/":{"tf":1.0},"https://phlip9.com/notes/devops/secrets/mozilla SOPS/":{"tf":1.0},"https://phlip9.com/notes/devops/secrets/sy - share secrets safely/":{"tf":1.0},"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":6.48074069840786},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.4142135623730951}},"df":6,"'":{"docs":{"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":1.0}},"df":1},"r":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0},"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/foreign bank account report (FBAR)/":{"tf":2.6457513110645907},"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":4.0},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/gramine/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":4.358898943540674},"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":4.0},"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":2.23606797749979},"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/rust verification tools/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/rebuilderd/":{"tf":1.4142135623730951}},"df":11,"'":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.0}},"df":2},".":{"docs":{},"df":0,"b":{"docs":{},"df":0,"o":{"docs":{},"df":0,"d":{"docs":{},"df":0,"y":{"docs":{},"df":0,".":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"v":{"docs":{},"df":0,"s":{"docs":{},"df":0,"v":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.0}},"df":1}}}}}}}}}}}},"/":{"docs":{},"df":0,"q":{"docs":{},"df":0,"u":{"docs":{},"df":0,"o":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0}},"df":1}}}}},":":{"docs":{},"df":0,":":{"docs":{},"df":0,"f":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"_":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"g":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{},"df":0,"(":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"g":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{},"df":0,"_":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"f":{"docs":{},"df":0,"o":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}},"_":{"docs":{},"df":0,"b":{"docs":{},"df":0,"o":{"docs":{},"df":0,"d":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.7320508075688772}},"df":1}}}},"d":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.7320508075688772},"https://phlip9.com/notes/confidential computing/gramine/":{"tf":1.0}},"df":2}}}}},"d":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.4142135623730951}},"df":2}}}}}},"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/confidential computing/gramine/":{"tf":2.23606797749979},"https://phlip9.com/notes/lang/flutter/flutter setup/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/rebuilderd/":{"tf":1.0}},"df":3}}}}}}},"r":{"docs":{},"df":0,"(":{"docs":{},"df":0,"c":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0}},"df":1},"u":{"docs":{},"df":0,"1":{"docs":{},"df":0,"6":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0}},"df":1}}}},"e":{"docs":{},"df":0,"s":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.4142135623730951},"https://phlip9.com/notes/combinatorics/k-combinations of a multiset/":{"tf":2.0},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.0},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":2.0},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0},"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.4142135623730951},"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.4142135623730951},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.4142135623730951},"https://phlip9.com/notes/statistics probability/multinomial distribution/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/testing whether a coin is fair/":{"tf":1.4142135623730951}},"df":12,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/combinatorics/k-combinations of a multiset/":{"tf":2.449489742783178},"https://phlip9.com/notes/lang/rust/rust verification tools/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.7320508075688772},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":2.449489742783178}},"df":4}}},"s":{"docs":{"https://phlip9.com/notes/reproducible builds/reproducible-builds.org/":{"tf":1.0}},"df":1}}},"o":{"docs":{"https://phlip9.com/notes/reproducible builds/rebuilderd/":{"tf":1.0}},"df":1,"d":{"docs":{},"df":0,"u":{"docs":{},"df":0,"c":{"docs":{"https://phlip9.com/notes/reproducible builds/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":2.449489742783178},"https://phlip9.com/notes/reproducible builds/nix/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/rebuilderd/":{"tf":1.7320508075688772},"https://phlip9.com/notes/reproducible builds/reproducible-builds.org/":{"tf":2.23606797749979}},"df":5}}},"v":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{"https://phlip9.com/notes/devops/deployment strategies/":{"tf":1.4142135623730951}},"df":1}}}}}},"q":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0}},"df":1,".":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"b":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{},"df":0,"k":{"docs":{},"df":0,"[":{"docs":{},"df":0,"0":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0}},"df":1},"1":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}},"e":{"docs":{},"df":0,"g":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{},"df":0,"k":{"docs":{},"df":0,"e":{"docs":{},"df":0,"y":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0}},"df":1}}}}}}},"k":{"docs":{},"df":0,"e":{"docs":{},"df":0,"y":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0}},"df":1}},"n":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0}},"df":1}}},"p":{"docs":{},"df":0,"o":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0}},"df":1}}}}}}}}}},"u":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/bip158 - compact block filters/":{"tf":1.0},"https://phlip9.com/notes/b l o c k c h a i n/fastpay/":{"tf":1.0},"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":2.6457513110645907},"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.4142135623730951},"https://phlip9.com/notes/btc-ln/lightning network notes/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":3.0},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":2.0},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":2.23606797749979},"https://phlip9.com/notes/confidential computing/intel SGX/secure time/":{"tf":2.0},"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":2.0},"https://phlip9.com/notes/crypto/(talk) authenticated data structures for stateless validation/":{"tf":1.0},"https://phlip9.com/notes/crypto/acme protocol/":{"tf":3.0},"https://phlip9.com/notes/devops/consul/":{"tf":1.0},"https://phlip9.com/notes/devops/linkerd/":{"tf":1.4142135623730951},"https://phlip9.com/notes/devops/secrets/ejson-kms (AWS)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/devops/service mesh/":{"tf":2.6457513110645907},"https://phlip9.com/notes/distributed systems/papers/(2020) Semi-Fast Byzantine-tolerant Shared Register without Reliable Broadcast/":{"tf":2.0},"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":2.8284271247461903},"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.0},"https://phlip9.com/notes/performance/profiling/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":5.291502622129181},"https://phlip9.com/notes/router/lightning router/captive portal/arubanetworks captive portal/":{"tf":2.23606797749979},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":2.449489742783178},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":8.18535277187245}},"df":26,"'":{"docs":{"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.4142135623730951}},"df":2},"/":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"p":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"s":{"docs":{"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":1.0}},"df":1}}}}}}}},"s":{"docs":{},"df":0,"&":{"docs":{},"df":0,"l":{"docs":{},"df":0,"t":{"docs":{},"df":0,";":{"docs":{},"df":0,"/":{"docs":{},"df":0,"h":{"docs":{},"df":0,"1":{"docs":{},"df":0,"&":{"docs":{},"df":0,"g":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.0}},"df":2}}}}},"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"&":{"docs":{},"df":0,"g":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.0}},"df":2}}}}}}}}}}}}}}}}},"i":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/AI ML/Expectimax Search/":{"tf":1.4142135623730951},"https://phlip9.com/notes/AI ML/Markov Decision Process (MDP)/":{"tf":2.6457513110645907},"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":2.23606797749979},"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/foreign bank account report (FBAR)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/b l o c k c h a i n/fastpay/":{"tf":1.0},"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/BOLT 8 - secure noise transport/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/breez lightning service providers/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":2.23606797749979},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":3.1622776601683795},"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel SGX/secure time/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":2.8284271247461903},"https://phlip9.com/notes/crypto/acme protocol/":{"tf":1.0},"https://phlip9.com/notes/distributed systems/papers/(2020) Semi-Fast Byzantine-tolerant Shared Register without Reliable Broadcast/":{"tf":1.0},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":2.449489742783178},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":3.1622776601683795},"https://phlip9.com/notes/lang/flutter/flutter setup/":{"tf":1.0},"https://phlip9.com/notes/lang/lua/":{"tf":2.0},"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/rr with rust/":{"tf":1.0},"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":1.7320508075688772},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.4142135623730951},"https://phlip9.com/notes/misc/setting up a headless raspbian boot image/":{"tf":1.0},"https://phlip9.com/notes/networking/network interface card (NIC)/":{"tf":1.0},"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.0},"https://phlip9.com/notes/postgres/types of scans/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.4142135623730951},"https://phlip9.com/notes/reproducible builds/nix/nix debug broken package build/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":4.242640687119285},"https://phlip9.com/notes/router/lightning router/captive portal/arubanetworks captive portal/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":2.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":6.48074069840786},"https://phlip9.com/notes/statistics probability/CDF confidence bands - DKW inequality/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/multinomial distribution/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/testing whether a coin is fair/":{"tf":2.449489742783178}},"df":39,"e":{"docs":{},"df":0,"d":{"docs":{},"df":0,"&":{"docs":{},"df":0,"l":{"docs":{},"df":0,"t":{"docs":{},"df":0,";":{"docs":{},"df":0,"/":{"docs":{},"df":0,"h":{"docs":{},"df":0,"1":{"docs":{},"df":0,"&":{"docs":{},"df":0,"g":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.0}},"df":2}}}}},"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"&":{"docs":{},"df":0,"g":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.4142135623730951}},"df":2}}}}}}}}}}}}}},"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"s":{"docs":{},"df":0,".":{"docs":{},"df":0,"t":{"docs":{},"df":0,"x":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/devops/algo wireguard VPN server/":{"tf":1.0}},"df":1}}}}}}}}}}}}},"w":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,":":{"docs":{},"df":0,":":{"docs":{},"df":0,"c":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"b":{"docs":{},"df":0,"u":{"docs":{},"df":0,"i":{"docs":{},"df":0,"l":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}},"s":{"docs":{},"df":0,"1":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.7320508075688772}},"df":1},"c":{"docs":{},"df":0,"h":{"docs":{},"df":0,"k":{"docs":{"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.4142135623730951}},"df":2}},"u":{"docs":{"https://phlip9.com/notes/reproducible builds/nix/nix debug spurrious rebuilds/":{"tf":1.0}},"df":1}},"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.0},"https://phlip9.com/notes/misc/kintsugi/":{"tf":1.0}},"df":2}},"m":{"docs":{},"df":0,"b":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0}},"df":1}}},"r":{"docs":{},"df":0,"v":{"docs":{"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/money services business (MSB)/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/lua/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.4142135623730951},"https://phlip9.com/notes/router/lightning router/lightning router overview/":{"tf":1.0}},"df":6}},"t":{"docs":{"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":1.4142135623730951},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":2}},"h":{"docs":{},"df":0,"u":{"docs":{},"df":0,"f":{"docs":{},"df":0,"f":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/management/relieve often - why generals were more successful in WWII/":{"tf":1.4142135623730951}},"df":1}}}}},"i":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/foreign bank account report (FBAR)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0}},"df":2,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.0}},"df":1}}}},"u":{"docs":{"https://phlip9.com/notes/lang/operator fixity and precedence/":{"tf":1.0}},"df":1}},"l":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/distributed systems/papers/(2021) Leaderless Consensus/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/MAD - median absolute deviation/":{"tf":1.0}},"df":2}},"n":{"docs":{"https://phlip9.com/notes/statistics probability/multinomial distribution/":{"tf":1.0}},"df":1},"s":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0}},"df":1}}},"o":{"docs":{},"df":0,"l":{"docs":{},"df":0,"v":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":2.0},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.7320508075688772},"https://phlip9.com/notes/crypto/acme protocol/":{"tf":1.0},"https://phlip9.com/notes/devops/azure CLI/":{"tf":1.0},"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/arubanetworks captive portal/":{"tf":2.6457513110645907}},"df":6}},"u":{"docs":{},"df":0,"r":{"docs":{},"df":0,"c":{"docs":{"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/gramine/":{"tf":1.0},"https://phlip9.com/notes/devops/azure CLI/":{"tf":1.4142135623730951},"https://phlip9.com/notes/devops/k3s/":{"tf":1.0},"https://phlip9.com/notes/devops/nomad/":{"tf":1.0},"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":1.7320508075688772},"https://phlip9.com/notes/fuzzing/fuzzing/":{"tf":1.0},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.4142135623730951},"https://phlip9.com/notes/misc/kintsugi/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":2.449489742783178},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":3.4641016151377544}},"df":13,"e":{"docs":{},"df":0,"'":{"docs":{"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.4142135623730951}},"df":2},"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"v":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"u":{"docs":{"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0}},"df":1}}}}}}}}}}},"g":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"p":{"docs":{"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/gramine/":{"tf":1.0},"https://phlip9.com/notes/devops/azure CLI/":{"tf":1.4142135623730951}},"df":3}}}},"u":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/devops/azure CLI/":{"tf":1.0}},"df":1}}}}}}}}},"p":{"docs":{"https://phlip9.com/notes/AI ML/Expectimax Search/":{"tf":1.7320508075688772},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/G-test - multinomial goodness-of-fit/":{"tf":1.0}},"df":3,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":2.0},"https://phlip9.com/notes/statistics probability/winsorize/":{"tf":1.7320508075688772}},"df":3}}},"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/fastpay/":{"tf":1.4142135623730951},"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":2.23606797749979},"https://phlip9.com/notes/btc-ln/BOLT 8 - secure noise transport/":{"tf":1.0},"https://phlip9.com/notes/crypto/acme protocol/":{"tf":2.0},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/arubanetworks captive portal/":{"tf":1.4142135623730951},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.4142135623730951}},"df":7},"s":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/fastpay/":{"tf":1.0},"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":1.0},"https://phlip9.com/notes/crypto/acme protocol/":{"tf":1.4142135623730951},"https://phlip9.com/notes/distributed systems/papers/(2020) Semi-Fast Byzantine-tolerant Shared Register without Reliable Broadcast/":{"tf":1.4142135623730951},"https://phlip9.com/notes/networking/network interface card (NIC)/":{"tf":1.0},"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":3.872983346207417},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.7320508075688772},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":5.830951894845301}},"df":13,"e":{"docs":{},"df":0,"(":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/distributed systems/papers/(2020) Semi-Fast Byzantine-tolerant Shared Register without Reliable Broadcast/":{"tf":1.0}},"df":1},"t":{"docs":{"https://phlip9.com/notes/distributed systems/papers/(2020) Semi-Fast Byzantine-tolerant Shared Register without Reliable Broadcast/":{"tf":1.0}},"df":1,"_":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"x":{"docs":{"https://phlip9.com/notes/distributed systems/papers/(2020) Semi-Fast Byzantine-tolerant Shared Register without Reliable Broadcast/":{"tf":1.4142135623730951}},"df":1}}}}}},"/":{"docs":{},"df":0,"d":{"docs":{},"df":0,"n":{"docs":{},"df":0,"s":{"docs":{},"df":0,"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/secure time/":{"tf":1.0}},"df":1}}}}}}}}}}}},"t":{"docs":{"https://phlip9.com/notes/AI ML/Expectimax Search/":{"tf":1.4142135623730951},"https://phlip9.com/notes/btc-ln/BOLT 7 - p2p node and channel discovery/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/breez lightning service providers/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/marblerun/":{"tf":1.0},"https://phlip9.com/notes/devops/secrets/fortanix DSM/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.0}},"df":8,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/WSL/WSL2 custom kernel/":{"tf":1.0},"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.4142135623730951},"https://phlip9.com/notes/android/linux ADB udev setup/":{"tf":1.0},"https://phlip9.com/notes/android/root phone with magisk/":{"tf":1.4142135623730951},"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.0},"https://phlip9.com/notes/devops/nomad/":{"tf":1.0},"https://phlip9.com/notes/keyboards/moergo glove80/":{"tf":1.0},"https://phlip9.com/notes/lang/flutter/flutter setup/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/rr with rust/":{"tf":1.0},"https://phlip9.com/notes/misc/pop_OS! tweaks/":{"tf":1.0},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.7320508075688772},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/nix/nix auto-allocate-uids -> nixbld users/":{"tf":1.4142135623730951}},"df":15}},"u":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/router/lightning router/lightning router overview/":{"tf":1.0}},"df":1,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"s":{"docs":{},"df":0,".":{"docs":{},"df":0,"[":{"docs":{},"df":0,"7":{"docs":{"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.0}},"df":1}}}}}}}}}},"o":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/android/OTA updates for rooted android phone/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/rr with rust/":{"tf":1.0},"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":1.0}},"df":4}},"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/monetary instruments/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0},"https://phlip9.com/notes/lang/lua/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.4142135623730951}},"df":6}}}}},"u":{"docs":{},"df":0,"b":{"docs":{},"df":0,"m":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":2.0}},"df":2}}}},"l":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.7320508075688772},"https://phlip9.com/notes/btc-ln/submarine swaps/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":2.8284271247461903},"https://phlip9.com/notes/fuzzing/fuzzing/":{"tf":1.0},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":2.0},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":2.23606797749979},"https://phlip9.com/notes/lang/lua/":{"tf":1.4142135623730951},"https://phlip9.com/notes/management/relieve often - why generals were more successful in WWII/":{"tf":1.0},"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":1.0},"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.4142135623730951},"https://phlip9.com/notes/performance/profiling/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/rebuilderd/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/reproducible-builds.org/":{"tf":2.23606797749979},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.7320508075688772},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":2.449489742783178},"https://phlip9.com/notes/statistics probability/p-value/":{"tf":1.7320508075688772},"https://phlip9.com/notes/statistics probability/winsorize/":{"tf":1.4142135623730951}},"df":20,"&":{"docs":{},"df":0,"l":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/crypto/tls exported keying material/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.0}},"df":2,";":{"docs":{},"df":0,"(":{"docs":{},"df":0,")":{"docs":{},"df":0,"&":{"docs":{},"df":0,"g":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0}},"df":1}}}}},"a":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{},"df":0,"h":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"d":{"docs":{},"df":0,"a":{"docs":{},"df":0,"v":{"docs":{},"df":0,"r":{"docs":{},"df":0,"&":{"docs":{},"df":0,"g":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}},"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0}},"df":1}}},"r":{"docs":{},"df":0,"u":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"l":{"docs":{},"df":0,"s":{"docs":{},"df":0,":":{"docs":{},"df":0,":":{"docs":{},"df":0,"c":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"f":{"docs":{"https://phlip9.com/notes/crypto/TLS self-signed pubkey-only certs/":{"tf":1.0}},"df":1}}}}}}}}}}}}}},"t":{"docs":{"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":2.23606797749979}},"df":1},"v":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"&":{"docs":{},"df":0,"l":{"docs":{},"df":0,"t":{"docs":{},"df":0,";":{"docs":{},"df":0,"u":{"docs":{},"df":0,"8":{"docs":{},"df":0,"&":{"docs":{},"df":0,"g":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/crypto/TLS self-signed pubkey-only certs/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}},"m":{"docs":{"https://phlip9.com/notes/AI ML/Expectimax Search/":{"tf":1.4142135623730951}},"df":1}}},"t":{"docs":{},"df":0,"h":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"w":{"docs":{"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0}},"df":1}}}},"i":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/foreign bank account report (FBAR)/":{"tf":1.0}},"df":1,"e":{"docs":{"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/foreign bank account report (FBAR)/":{"tf":1.0}},"df":1}}},"r":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/fastpay/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.0},"https://phlip9.com/notes/devops/linkerd/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":2.0}},"df":6,"e":{"docs":{},"df":0,"v":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":3.605551275463989},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/understanding sycamore reactivity/":{"tf":1.0},"https://phlip9.com/notes/networking/CIDR/":{"tf":1.0},"https://phlip9.com/notes/postgres/postgres performance tuning/":{"tf":1.4142135623730951}},"df":6}}},"y":{"docs":{},"df":0,"a":{"docs":{},"df":0,"b":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.0}},"df":1}}}}},"u":{"docs":{},"df":0,"r":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0},"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/foreign bank account report (FBAR)/":{"tf":1.0},"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":2.449489742783178},"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.4142135623730951},"https://phlip9.com/notes/combinatorics/k-combinations of a multiset/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":4.58257569495584},"https://phlip9.com/notes/crypto/(talk) authenticated data structures for stateless validation/":{"tf":1.4142135623730951},"https://phlip9.com/notes/crypto/acme protocol/":{"tf":1.4142135623730951},"https://phlip9.com/notes/devops/secrets/ejson-kms (AWS)/":{"tf":1.0},"https://phlip9.com/notes/distributed systems/papers/(2020) Semi-Fast Byzantine-tolerant Shared Register without Reliable Broadcast/":{"tf":2.449489742783178},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":2.23606797749979},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":3.872983346207417},"https://phlip9.com/notes/lang/lua/":{"tf":6.082762530298219},"https://phlip9.com/notes/lang/rust/rr with rust/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/understanding sycamore reactivity/":{"tf":2.0},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":5.830951894845301},"https://phlip9.com/notes/performance/bit hacks/":{"tf":3.872983346207417},"https://phlip9.com/notes/performance/simdjson talk/":{"tf":1.7320508075688772},"https://phlip9.com/notes/postgres/snippets/":{"tf":2.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.7320508075688772},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.7320508075688772},"https://phlip9.com/notes/statistics probability/G-test - multinomial goodness-of-fit/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/multinomial distribution/":{"tf":1.4142135623730951},"https://phlip9.com/notes/statistics probability/p-value/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/winsorize/":{"tf":2.449489742783178}},"df":26}}}},"u":{"docs":{},"df":0,"s":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/atomic multipath payments (AMP)/":{"tf":1.0},"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":2.449489742783178}},"df":3,"a":{"docs":{},"df":0,"b":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.0}},"df":1}}}}},"v":{"docs":{"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":1.4142135623730951}},"df":1,"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0}},"df":1}},"n":{"docs":{},"df":0,"u":{"docs":{"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/financial instituion/":{"tf":1.4142135623730951}},"df":1}},"r":{"docs":{},"df":0,"s":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":1.7320508075688772},"https://phlip9.com/notes/lang/operator fixity and precedence/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/rr with rust/":{"tf":4.0},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0},"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.0}},"df":7,"e":{"docs":{},"df":0,"f":{"docs":{},"df":0,"q":{"docs":{},"df":0,"d":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/devops/azure CLI/":{"tf":1.0}},"df":1}}}}}},"t":{"docs":{"https://phlip9.com/notes/btc-ln/breez lightning service providers/":{"tf":1.0}},"df":1}}},"i":{"docs":{},"df":0,"e":{"docs":{},"df":0,"w":{"docs":{"https://phlip9.com/notes/confidential computing/intel TDX/":{"tf":1.7320508075688772},"https://phlip9.com/notes/postgres/postgres performance tuning/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":2.0}},"df":4}},"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/btc-ln/lightning rod/":{"tf":1.0}},"df":1}}}},"o":{"docs":{},"df":0,"c":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.7320508075688772},"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.0},"https://phlip9.com/notes/crypto/biscuit authz/":{"tf":1.0}},"df":4,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"_":{"docs":{},"df":0,"b":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"p":{"docs":{},"df":0,"o":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.4142135623730951}},"df":1}}}}}}}}}},"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0}},"df":1}}}}}}}}}}}},"k":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/lightning network notes/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.0},"https://phlip9.com/notes/crypto/biscuit authz/":{"tf":1.0}},"df":4,"e":{"docs":{},"df":0,"_":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{},"df":0,"_":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"k":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.7320508075688772}},"df":1}}}}}}}}}},"l":{"docs":{},"df":0,"v":{"docs":{"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.0}},"df":1}}}},"w":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/AI ML/Markov Decision Process (MDP)/":{"tf":3.4641016151377544}},"df":1}}},"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":2.0},"https://phlip9.com/notes/reproducible builds/nix/links/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.4142135623730951}},"df":4}}}}},"f":{"docs":{},"df":0,"c":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/secure time/":{"tf":1.0},"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":1.7320508075688772},"https://phlip9.com/notes/crypto/tls exported keying material/":{"tf":1.0},"https://phlip9.com/notes/networking/CIDR/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":2.8284271247461903},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":4.0}},"df":6,"&":{"docs":{},"df":0,"n":{"docs":{},"df":0,"b":{"docs":{},"df":0,"s":{"docs":{},"df":0,"p":{"docs":{},"df":0,";":{"docs":{},"df":0,"6":{"docs":{},"df":0,"5":{"docs":{},"df":0,"8":{"docs":{},"df":0,"5":{"docs":{"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.0}},"df":1}}}}}}}}}},"2":{"docs":{},"df":0,"1":{"docs":{},"df":0,"1":{"docs":{},"df":0,"9":{"docs":{"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.7320508075688772}},"df":2}}},"6":{"docs":{},"df":0,"1":{"docs":{},"df":0,"6":{"docs":{"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.7320508075688772},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":2.449489742783178}},"df":2}}}},"4":{"docs":{},"df":0,"7":{"docs":{},"df":0,"9":{"docs":{},"df":0,"1":{"docs":{"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":2.0}},"df":2}}},"9":{"docs":{},"df":0,"1":{"docs":{},"df":0,"8":{"docs":{"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":2.0}},"df":2}}}},"6":{"docs":{},"df":0,"5":{"docs":{},"df":0,"8":{"docs":{},"df":0,"5":{"docs":{"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":2.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":2.8284271247461903}},"df":2}}}}}},"g":{"docs":{},"df":0,"b":{"docs":{"https://phlip9.com/notes/keyboards/moergo glove80/":{"tf":1.0},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":2.0}},"df":2,"_":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 7 - p2p node and channel discovery/":{"tf":1.0}},"df":1}}}}},"p":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1}}},"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"_":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"(":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{},"df":0,"x":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1}}},"l":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1},"r":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.4142135623730951}},"df":1}}}}}}}}},"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"x":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.4142135623730951}},"df":1,".":{"docs":{},"df":0,"r":{"docs":{},"df":0,"g":{"docs":{},"df":0,"b":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"x":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}},"x":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.4142135623730951}},"df":1}}}}},"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{},"df":0,"e":{"docs":{},"df":0,"y":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"y":{"docs":{"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/foreign bank account report (FBAR)/":{"tf":1.0}},"df":1}}}}}}},"d":{"docs":{"https://phlip9.com/notes/misc/kintsugi/":{"tf":1.0}},"df":1},"g":{"docs":{},"df":0,"h":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/AI ML/Markov Decision Process (MDP)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/android/OTA updates for rooted android phone/":{"tf":1.0},"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0},"https://phlip9.com/notes/android/root phone with magisk/":{"tf":1.4142135623730951},"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/breez lightning service providers/":{"tf":1.0},"https://phlip9.com/notes/keyboards/moergo glove80/":{"tf":2.6457513110645907},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0},"https://phlip9.com/notes/lang/operator fixity and precedence/":{"tf":1.7320508075688772},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.4142135623730951},"https://phlip9.com/notes/networking/CIDR/":{"tf":1.4142135623730951},"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/nix/nix auto-allocate-uids -> nixbld users/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":2.0},"https://phlip9.com/notes/statistics probability/CDF confidence bands - DKW inequality/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/cheat sheet/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/multinomial distribution/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/p-value/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/testing whether a coin is fair/":{"tf":1.7320508075688772}},"df":22,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"w":{"docs":{"https://phlip9.com/notes/AI ML/Markov Decision Process (MDP)/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/standard error/":{"tf":1.0}},"df":2}}}}},"m":{"docs":{},"df":0,"o":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/combinatorics/k-combinations of a multiset/":{"tf":1.0}},"df":1}}}},"s":{"docs":{},"df":0,"/":{"docs":{},"df":0,"p":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"m":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"s":{"docs":{"https://phlip9.com/notes/crypto/biscuit authz/":{"tf":1.0}},"df":1}}}}}}}}}}},"o":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/statistics probability/testing whether a coin is fair/":{"tf":1.0}},"df":1}}},"n":{"docs":{},"df":0,"g":{"docs":{"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.0},"https://phlip9.com/notes/networking/network interface card (NIC)/":{"tf":1.0}},"df":2}},"p":{"docs":{"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.0}},"df":1,"g":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"p":{"docs":{"https://phlip9.com/notes/reproducible builds/nix/nix debug broken package build/":{"tf":1.7320508075688772}},"df":1}}}}},"s":{"docs":{},"df":0,"e":{"docs":{"https://phlip9.com/notes/management/relieve often - why generals were more successful in WWII/":{"tf":1.0}},"df":1},"k":{"docs":{"https://phlip9.com/notes/btc-ln/breez lightning service providers/":{"tf":1.4142135623730951},"https://phlip9.com/notes/btc-ln/zero-conf channels/":{"tf":1.4142135623730951},"https://phlip9.com/notes/devops/deployment strategies/":{"tf":1.4142135623730951},"https://phlip9.com/notes/management/relieve often - why generals were more successful in WWII/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.4142135623730951}},"df":7,"i":{"docs":{"https://phlip9.com/notes/btc-ln/zero-conf channels/":{"tf":1.4142135623730951},"https://phlip9.com/notes/devops/deployment strategies/":{"tf":1.7320508075688772}},"df":2}},"o":{"docs":{},"df":0,"f":{"docs":{},"df":0,"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"/":{"docs":{},"df":0,"s":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"p":{"docs":{},"df":0,"_":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"q":{"docs":{},"df":0,"u":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/secure time/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}},"l":{"docs":{"https://phlip9.com/notes/AI ML/Markov Decision Process (MDP)/":{"tf":1.4142135623730951}},"df":1},"m":{"docs":{"https://phlip9.com/notes/android/android cli setup/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/gramine/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.0}},"df":3,"d":{"docs":{},"df":0,"i":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/android/android cli setup/":{"tf":1.0}},"df":1}}}},"n":{"docs":{"https://phlip9.com/notes/lang/rust/rr with rust/":{"tf":1.0}},"df":1,"g":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0}},"df":1,".":{"docs":{},"df":0,"f":{"docs":{},"df":0,"i":{"docs":{},"df":0,"l":{"docs":{},"df":0,"l":{"docs":{},"df":0,"(":{"docs":{},"df":0,"&":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{},"df":0,"p":{"docs":{},"df":0,";":{"docs":{},"df":0,"m":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}},"i":{"docs":{"https://phlip9.com/notes/lang/rust/rr with rust/":{"tf":1.0}},"df":1}},"o":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.7320508075688772}},"df":1,"_":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":3.3166247903554}},"df":1},"x":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":2.6457513110645907}},"df":1},"z":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":3.3166247903554}},"df":1}},"a":{"docs":{},"df":0,"d":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"p":{"docs":{"https://phlip9.com/notes/confidential computing/intel TDX/":{"tf":1.0}},"df":1}}}}},"b":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":1.0},"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.0}},"df":2}},"u":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":1.0}},"df":1}}}},"d":{"docs":{"https://phlip9.com/notes/btc-ln/lightning rod/":{"tf":1.7320508075688772}},"df":1,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.0}},"df":1}}}},"l":{"docs":{},"df":0,"e":{"docs":{"https://phlip9.com/notes/crypto/biscuit authz/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/arubanetworks captive portal/":{"tf":2.8284271247461903}},"df":2},"l":{"docs":{"https://phlip9.com/notes/combinatorics/k-combinations of a multiset/":{"tf":2.0},"https://phlip9.com/notes/devops/deployment strategies/":{"tf":1.4142135623730951},"https://phlip9.com/notes/statistics probability/multinomial distribution/":{"tf":1.4142135623730951}},"df":3,"b":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"k":{"docs":{"https://phlip9.com/notes/devops/deployment strategies/":{"tf":2.449489742783178},"https://phlip9.com/notes/postgres/snippets/":{"tf":1.4142135623730951}},"df":2}}}},"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/AI ML/Markov Decision Process (MDP)/":{"tf":1.0},"https://phlip9.com/notes/devops/deployment strategies/":{"tf":1.4142135623730951},"https://phlip9.com/notes/devops/nomad/":{"tf":1.0}},"df":3}}}}},"m":{"docs":{},"df":0,"e":{"docs":{"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.4142135623730951}},"df":1}},"o":{"docs":{},"df":0,"f":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/performance/simdjson talk/":{"tf":1.0}},"df":1}}}},"m":{"docs":{"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/financial instituion/":{"tf":1.4142135623730951},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.0}},"df":3},"t":{"docs":{"https://phlip9.com/notes/android/OTA updates for rooted android phone/":{"tf":1.7320508075688772},"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0},"https://phlip9.com/notes/android/root phone with magisk/":{"tf":3.3166247903554},"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":2.23606797749979},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":2.0},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":2.0},"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":2.0},"https://phlip9.com/notes/crypto/(talk) authenticated data structures for stateless validation/":{"tf":1.4142135623730951},"https://phlip9.com/notes/crypto/acme protocol/":{"tf":1.0},"https://phlip9.com/notes/crypto/biscuit authz/":{"tf":1.7320508075688772},"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":1.7320508075688772},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0},"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":2.23606797749979},"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/nix/nix debug broken package build/":{"tf":1.4142135623730951}},"df":18}},"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{"https://phlip9.com/notes/lang/flutter/flutter setup/":{"tf":1.0}},"df":1}}}}},"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"y":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1}}}},"t":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0},"https://phlip9.com/notes/management/relieve often - why generals were more successful in WWII/":{"tf":1.0},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":2.23606797749979}},"df":3}}},"u":{"docs":{},"df":0,"g":{"docs":{},"df":0,"h":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/statistics probability/standard error/":{"tf":1.0}},"df":1}},"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"m":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/secure time/":{"tf":1.4142135623730951}},"df":1}}}}},"n":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.4142135623730951},"https://phlip9.com/notes/distributed systems/papers/(2021) Leaderless Consensus/":{"tf":1.4142135623730951},"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":1.0},"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.0}},"df":5,"(":{"docs":{},"df":0,"(":{"docs":{},"df":0,"n":{"docs":{},"df":0,"u":{"docs":{},"df":0,"m":{"docs":{},"df":0,"_":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":2.0}},"df":1}}}}}}}}}},"2":{"docs":{},"df":0,".":{"docs":{},"df":0,"0":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1}}},"4":{"docs":{},"df":0,".":{"docs":{},"df":0,"0":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1}}},"8":{"docs":{},"df":0,".":{"docs":{},"df":0,"0":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1}}},"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"h":{"docs":{},"df":0,".":{"docs":{},"df":0,"f":{"docs":{},"df":0,"m":{"docs":{},"df":0,"o":{"docs":{},"df":0,"d":{"docs":{},"df":0,"(":{"docs":{},"df":0,"6":{"docs":{},"df":0,"4":{"docs":{},"df":0,".":{"docs":{},"df":0,"0":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1}}}}}}}}}}}}}},"t":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1}}}},"t":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/BOLT 11 - invoices/":{"tf":2.6457513110645907},"https://phlip9.com/notes/btc-ln/BOLT 4 - onion routing protocol/":{"tf":2.6457513110645907},"https://phlip9.com/notes/btc-ln/BOLT 7 - p2p node and channel discovery/":{"tf":1.4142135623730951},"https://phlip9.com/notes/btc-ln/atomic multipath payments (AMP)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":1.0},"https://phlip9.com/notes/devops/consul/":{"tf":1.4142135623730951},"https://phlip9.com/notes/devops/linkerd/":{"tf":1.7320508075688772},"https://phlip9.com/notes/devops/service mesh/":{"tf":1.7320508075688772},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.7320508075688772},"https://phlip9.com/notes/networking/CIDR/":{"tf":1.4142135623730951},"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.4142135623730951}},"df":14,"a":{"docs":{},"df":0,"b":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/networking/ipv6 address space/":{"tf":2.0}},"df":1}}},"e":{"docs":{},"df":0,")":{"docs":{},"df":0,".":{"docs":{},"df":0,"i":{"docs":{},"df":0,"g":{"docs":{},"df":0,"n":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0}},"df":1}}}}}}},"h":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"(":{"docs":{},"df":0,"p":{"docs":{},"df":0,"u":{"docs":{},"df":0,"b":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 11 - invoices/":{"tf":1.0}},"df":1}}}},"h":{"docs":{},"df":0,"o":{"docs":{},"df":0,"p":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 11 - invoices/":{"tf":1.0}},"df":1}}}}}}},"r":{"docs":{"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":2.0},"https://phlip9.com/notes/networking/ipv6 address space/":{"tf":1.7320508075688772},"https://phlip9.com/notes/networking/network interface card (NIC)/":{"tf":1.0},"https://phlip9.com/notes/networking/network interfaces/":{"tf":2.0},"https://phlip9.com/notes/router/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/lightning router overview/":{"tf":1.7320508075688772}},"df":7,"/":{"docs":{},"df":0,"c":{"docs":{},"df":0,"a":{"docs":{},"df":0,"p":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/router/lightning router/captive portal/":{"tf":1.0}},"df":1}}}},"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"g":{"docs":{},"df":0,"h":{"docs":{},"df":0,"t":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/router/lightning router/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/":{"tf":1.0}},"df":2}}}}}}}}},"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"g":{"docs":{},"df":0,".":{"docs":{},"df":0,"m":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 4 - onion routing protocol/":{"tf":1.0}},"df":1}}},"f":{"docs":{},"df":0,"e":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 11 - invoices/":{"tf":1.0}},"df":1}}}}}}},"w":{"docs":{"https://phlip9.com/notes/keyboards/moergo glove80/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0},"https://phlip9.com/notes/postgres/snippets/":{"tf":2.6457513110645907},"https://phlip9.com/notes/postgres/types of scans/":{"tf":2.6457513110645907}},"df":4,"s":{"docs":{},"df":0,"=":{"docs":{},"df":0,"1":{"docs":{"https://phlip9.com/notes/postgres/types of scans/":{"tf":1.4142135623730951}},"df":1}}}},"y":{"docs":{"https://phlip9.com/notes/btc-ln/lightning rod/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.4142135623730951}},"df":3}},"p":{"docs":{},"df":0,"1":{"docs":{},"df":0,"a":{"docs":{},"df":0,".":{"docs":{},"df":0,"2":{"docs":{},"df":0,"0":{"docs":{},"df":0,"1":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"5":{"docs":{},"df":0,".":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"4":{"docs":{},"df":0,".":{"docs":{},"df":0,"a":{"docs":{},"df":0,"1":{"docs":{"https://phlip9.com/notes/android/root phone with magisk/":{"tf":1.4142135623730951}},"df":1,"/":{"docs":{},"df":0,"b":{"docs":{},"df":0,"o":{"docs":{},"df":0,"o":{"docs":{},"df":0,"t":{"docs":{},"df":0,".":{"docs":{},"df":0,"i":{"docs":{},"df":0,"m":{"docs":{},"df":0,"g":{"docs":{"https://phlip9.com/notes/android/root phone with magisk/":{"tf":1.0}},"df":1}}}}}}}},"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"g":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"k":{"docs":{},"df":0,"_":{"docs":{},"df":0,"p":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{"https://phlip9.com/notes/android/root phone with magisk/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"c":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":2.6457513110645907}},"df":2},"i":{"docs":{"https://phlip9.com/notes/misc/prepping RPI for embedded dev/":{"tf":3.4641016151377544},"https://phlip9.com/notes/misc/setting up a headless raspbian boot image/":{"tf":1.4142135623730951}},"df":2,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,".":{"docs":{},"df":0,"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"c":{"docs":{"https://phlip9.com/notes/misc/prepping RPI for embedded dev/":{"tf":1.0}},"df":1}}}}}}},"k":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.4142135623730951}},"df":1},"n":{"docs":{"https://phlip9.com/notes/lang/operator fixity and precedence/":{"tf":1.0}},"df":1},"o":{"docs":{},"df":0,"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"(":{"docs":{},"df":0,"|":{"docs":{},"df":0,"(":{"docs":{},"df":0,"b":{"docs":{},"df":0,"x":{"docs":{"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.0}},"df":1}},"x":{"docs":{"https://phlip9.com/notes/combinatorics/k-combinations of a multiset/":{"tf":1.0}},"df":1}}}}}}}}}}}},"r":{"docs":{"https://phlip9.com/notes/lang/rust/rr with rust/":{"tf":5.5677643628300215}},"df":1},"s":{"docs":{"https://phlip9.com/notes/fuzzing/fuzzcheck-rs/":{"tf":2.23606797749979},"https://phlip9.com/notes/lang/rust/rr with rust/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/nix/links/":{"tf":1.4142135623730951}},"df":3,".":{"docs":{},"df":0,"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"f":{"docs":{},"df":0,"y":{"docs":{},"df":0,".":{"docs":{},"df":0,"a":{"docs":{},"df":0,"p":{"docs":{},"df":0,"p":{"docs":{},"df":0,"/":{"docs":{},"df":0,"d":{"docs":{},"df":0,"o":{"docs":{},"df":0,"c":{"docs":{},"df":0,"s":{"docs":{},"df":0,"/":{"docs":{},"df":0,"b":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"s":{"docs":{},"df":0,"/":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/lang/rust/understanding sycamore reactivity/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"a":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.7320508075688772},"https://phlip9.com/notes/confidential computing/gramine/":{"tf":2.0},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":2.0},"https://phlip9.com/notes/crypto/(talk) authenticated data structures for stateless validation/":{"tf":1.7320508075688772},"https://phlip9.com/notes/devops/azure CLI/":{"tf":1.0}},"df":5},"i":{"docs":{"https://phlip9.com/notes/lang/rust/rr with rust/":{"tf":1.0}},"df":1,"n":{"docs":{},"df":0,"p":{"docs":{},"df":0,"h":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.7320508075688772}},"df":1}}}}},"k":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":2.0}},"df":1},"t":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1}},"t":{"docs":{},"df":0,"c":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/secure time/":{"tf":1.4142135623730951},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":2},"t":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 8 - secure noise transport/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":2.0},"https://phlip9.com/notes/distributed systems/papers/(2020) Semi-Fast Byzantine-tolerant Shared Register without Reliable Broadcast/":{"tf":1.0}},"df":3}},"u":{"docs":{},"df":0,"b":{"docs":{"https://phlip9.com/notes/misc/kintsugi/":{"tf":1.0}},"df":1,"b":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/misc/water distillation setup/":{"tf":1.0}},"df":1}}}},"d":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{"https://phlip9.com/notes/lang/rust/rust verification tools/":{"tf":1.4142135623730951}},"df":1}}},"l":{"docs":{},"df":0,"e":{"docs":{"https://phlip9.com/notes/AI ML/Markov Decision Process (MDP)/":{"tf":1.0},"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0},"https://phlip9.com/notes/android/linux ADB udev setup/":{"tf":1.0},"https://phlip9.com/notes/devops/service mesh/":{"tf":1.0},"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.4142135623730951}},"df":6,"s":{"docs":{},"df":0,".":{"docs":{},"df":0,"g":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/android/linux ADB udev setup/":{"tf":1.0}},"df":1}}}}}}},"n":{"docs":{"https://phlip9.com/notes/WSL/WSL2 custom kernel/":{"tf":2.0},"https://phlip9.com/notes/android/ADB over TCP inside WSL2/":{"tf":1.7320508075688772},"https://phlip9.com/notes/android/OTA updates for rooted android phone/":{"tf":1.4142135623730951},"https://phlip9.com/notes/android/android cli setup/":{"tf":1.4142135623730951},"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":4.0},"https://phlip9.com/notes/android/root phone with magisk/":{"tf":2.23606797749979},"https://phlip9.com/notes/b l o c k c h a i n/fastpay/":{"tf":1.0},"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":2.6457513110645907},"https://phlip9.com/notes/btc-ln/breez lightning service providers/":{"tf":2.0},"https://phlip9.com/notes/btc-ln/lightning libs/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/lightning rod/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.7320508075688772},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":3.7416573867739413},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":3.3166247903554},"https://phlip9.com/notes/confidential computing/gramine/":{"tf":2.23606797749979},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":4.242640687119285},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":2.449489742783178},"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":2.23606797749979},"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel TDX/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/marblerun/":{"tf":2.0},"https://phlip9.com/notes/confidential computing/mystikos/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":2.23606797749979},"https://phlip9.com/notes/devops/azure CLI/":{"tf":1.4142135623730951},"https://phlip9.com/notes/devops/docker compose/":{"tf":2.0},"https://phlip9.com/notes/devops/kind (kubernetes in docker)/":{"tf":1.0},"https://phlip9.com/notes/devops/minikube/":{"tf":1.0},"https://phlip9.com/notes/devops/nomad/":{"tf":2.0},"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":1.0},"https://phlip9.com/notes/fuzzing/fuzzcheck-rs/":{"tf":2.0},"https://phlip9.com/notes/ios/ios setup/":{"tf":2.449489742783178},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0},"https://phlip9.com/notes/lang/flutter/flutter setup/":{"tf":2.6457513110645907},"https://phlip9.com/notes/lang/gdb ref/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":2.23606797749979},"https://phlip9.com/notes/lang/rust/rr with rust/":{"tf":3.4641016151377544},"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":1.0},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":2.449489742783178},"https://phlip9.com/notes/misc/setting up a headless raspbian boot image/":{"tf":2.449489742783178},"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.0},"https://phlip9.com/notes/nvim/universal-ctags Notes/":{"tf":1.0},"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":2.449489742783178},"https://phlip9.com/notes/postgres/postgres performance tuning/":{"tf":1.0},"https://phlip9.com/notes/postgres/snippets/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":4.795831523312719},"https://phlip9.com/notes/reproducible builds/nix/nix auto-allocate-uids -> nixbld users/":{"tf":1.4142135623730951},"https://phlip9.com/notes/reproducible builds/nix/nix debug broken package build/":{"tf":1.4142135623730951},"https://phlip9.com/notes/reproducible builds/rebuilderd/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.0}},"df":49,"f":{"docs":{},"df":0,"i":{"docs":{},"df":0,"r":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"u":{"docs":{},"df":0,"n":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{"https://phlip9.com/notes/ios/ios setup/":{"tf":1.0}},"df":1}}}}}}}}}}},"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.0}},"df":3}}},"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"m":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":5.196152422706632},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":2.449489742783178},"https://phlip9.com/notes/confidential computing/marblerun/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/mystikos/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.4142135623730951}},"df":6,"e":{"docs":{},"df":0,"b":{"docs":{},"df":0,"u":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.7320508075688772}},"df":1}}}}},"c":{"docs":{},"df":0,"a":{"docs":{},"df":0,"p":{"docs":{},"df":0,"a":{"docs":{},"df":0,"b":{"docs":{},"df":0,"i":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"y":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"k":{"docs":{},"df":0,"a":{"docs":{},"df":0,"v":{"docs":{},"df":0,"r":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"q":{"docs":{},"df":0,"u":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0}},"df":1}}}}}}}}}},"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"q":{"docs":{},"df":0,"u":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0}},"df":1}}}}}}}}}}},"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"p":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"q":{"docs":{},"df":0,"u":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"x":{"docs":{},"df":0,"u":{"docs":{},"df":0,"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"=":{"docs":{},"df":0,"1":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"m":{"docs":{"https://phlip9.com/notes/misc/prepping RPI for embedded dev/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}},"s":{"docs":{},"df":0,"h":{"docs":{"https://phlip9.com/notes/misc/kintsugi/":{"tf":1.0}},"df":1},"t":{"docs":{"https://phlip9.com/notes/":{"tf":1.0},"https://phlip9.com/notes/WSL/WSL2 custom kernel/":{"tf":1.0},"https://phlip9.com/notes/b l o c k c h a i n/fastpay/":{"tf":1.0},"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/lightning libs/":{"tf":1.7320508075688772},"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.4142135623730951},"https://phlip9.com/notes/combinatorics/k-combinations of a multiset/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.7320508075688772},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":2.449489742783178},"https://phlip9.com/notes/confidential computing/gramine/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel SGX/secure time/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/mystikos/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":1.0},"https://phlip9.com/notes/crypto/TLS self-signed pubkey-only certs/":{"tf":1.0},"https://phlip9.com/notes/crypto/biscuit authz/":{"tf":1.7320508075688772},"https://phlip9.com/notes/devops/linkerd/":{"tf":1.0},"https://phlip9.com/notes/devops/secrets/fortanix DSM/":{"tf":1.4142135623730951},"https://phlip9.com/notes/fuzzing/fuzzing/":{"tf":1.0},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.7320508075688772},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0},"https://phlip9.com/notes/lang/gdb ref/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":2.449489742783178},"https://phlip9.com/notes/lang/rust/rr with rust/":{"tf":1.7320508075688772},"https://phlip9.com/notes/lang/rust/rust verification tools/":{"tf":2.6457513110645907},"https://phlip9.com/notes/lang/rust/rust x SGX/":{"tf":2.0},"https://phlip9.com/notes/misc/optimization solvers/":{"tf":1.0},"https://phlip9.com/notes/networking/CIDR/":{"tf":1.0},"https://phlip9.com/notes/performance/simdjson talk/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.4142135623730951},"https://phlip9.com/notes/reproducible builds/nix/links/":{"tf":1.7320508075688772},"https://phlip9.com/notes/reproducible builds/nix/nix debug spurrious rebuilds/":{"tf":1.0}},"df":32,"'":{"docs":{"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0}},"df":1},".":{"docs":{},"df":0,"m":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/confidential computing/mystikos/":{"tf":1.0}},"df":1}}},"_":{"docs":{},"df":0,"b":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"k":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"e":{"docs":{},"df":0,"=":{"docs":{},"df":0,"1":{"docs":{"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0}},"df":1}}}}}}}}}}}},"f":{"docs":{},"df":0,"i":{"docs":{},"df":0,"l":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/WSL/WSL2 custom kernel/":{"tf":1.7320508075688772}},"df":1}}},"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"g":{"docs":{"https://phlip9.com/notes/WSL/WSL2 custom kernel/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.7320508075688772}},"df":2}}}},"i":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/aptos/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/lightning network notes/":{"tf":1.0},"https://phlip9.com/notes/fuzzing/fuzzcheck-rs/":{"tf":1.0}},"df":3},"l":{"docs":{"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":1.0}},"df":1,"s":{"docs":{},"df":0,":":{"docs":{},"df":0,":":{"docs":{},"df":0,"c":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,":":{"docs":{},"df":0,":":{"docs":{},"df":0,"d":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"g":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"s":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"f":{"docs":{},"df":0,"i":{"docs":{},"df":0,"g":{"docs":{},"df":0,":":{"docs":{},"df":0,":":{"docs":{},"df":0,"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{},"df":0,"_":{"docs":{},"df":0,"c":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"f":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"_":{"docs":{},"df":0,"v":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"f":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,":":{"docs":{},"df":0,":":{"docs":{},"df":0,"e":{"docs":{},"df":0,"x":{"docs":{},"df":0,"p":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{},"df":0,"_":{"docs":{},"df":0,"k":{"docs":{},"df":0,"e":{"docs":{},"df":0,"y":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"g":{"docs":{},"df":0,"_":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,":":{"docs":{},"df":0,":":{"docs":{},"df":0,"e":{"docs":{},"df":0,"x":{"docs":{},"df":0,"p":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{},"df":0,"_":{"docs":{},"df":0,"k":{"docs":{},"df":0,"e":{"docs":{},"df":0,"y":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"g":{"docs":{},"df":0,"_":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/crypto/tls exported keying material/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"u":{"docs":{},"df":0,"p":{"docs":{"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":2.0},"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.7320508075688772}},"df":2}}}}},"w":{"docs":{"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.7320508075688772},"https://phlip9.com/notes/misc/setting up a headless raspbian boot image/":{"tf":1.7320508075688772}},"df":2,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{"https://phlip9.com/notes/lang/rust/rr with rust/":{"tf":1.0}},"df":1}}}},"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"c":{"docs":{},"df":0,"k":{"docs":{},"df":0,"&":{"docs":{},"df":0,"l":{"docs":{},"df":0,"t":{"docs":{},"df":0,";":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"&":{"docs":{},"df":0,"g":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}},"x":{"docs":{},"df":0,"r":{"docs":{},"df":0,"w":{"docs":{},"df":0,"x":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.0}},"df":1}}}}}},"x":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.4142135623730951},"https://phlip9.com/notes/networking/network interface card (NIC)/":{"tf":1.0}},"df":2,"'":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.0}},"df":1}}},"z":{"docs":{},"df":0,"p":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"y":{"docs":{},"df":0,"o":{"docs":{},"df":0,"p":{"docs":{},"df":0,"s":{"docs":{},"df":0,"1":{"docs":{},"df":0,"p":{"docs":{},"df":0,"h":{"docs":{},"df":0,"j":{"docs":{},"df":0,"s":{"docs":{},"df":0,"z":{"docs":{},"df":0,"f":{"docs":{"https://phlip9.com/notes/crypto/acme protocol/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}},"s":{"docs":{"https://phlip9.com/notes/AI ML/Markov Decision Process (MDP)/":{"tf":5.916079783099616},"https://phlip9.com/notes/android/ADB over TCP inside WSL2/":{"tf":1.0},"https://phlip9.com/notes/android/android cli setup/":{"tf":1.0},"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.7320508075688772},"https://phlip9.com/notes/android/root phone with magisk/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":2.0},"https://phlip9.com/notes/distributed systems/papers/(2020) Semi-Fast Byzantine-tolerant Shared Register without Reliable Broadcast/":{"tf":2.449489742783178},"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":2.0},"https://phlip9.com/notes/fuzzing/fuzzing/":{"tf":1.0},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.0},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":2.449489742783178},"https://phlip9.com/notes/nvim/universal-ctags Notes/":{"tf":1.0},"https://phlip9.com/notes/performance/bit hacks/":{"tf":2.449489742783178},"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":3.3166247903554},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/CDF confidence bands - DKW inequality/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/winsorize/":{"tf":1.0}},"df":18,"/":{"docs":{},"df":0,"^":{"docs":{},"df":0,"(":{"docs":{},"df":0,"[":{"docs":{},"df":0,"^":{"docs":{},"df":0,"\\":{"docs":{},"df":0,"/":{"docs":{},"df":0,"]":{"docs":{},"df":0,"*":{"docs":{},"df":0,")":{"docs":{},"df":0,"\\":{"docs":{},"df":0,"/":{"docs":{},"df":0,"?":{"docs":{},"df":0,".":{"docs":{},"df":0,"*":{"docs":{},"df":0,"$":{"docs":{},"df":0,"/":{"docs":{},"df":0,"\\":{"docs":{},"df":0,"1":{"docs":{},"df":0,"/":{"docs":{},"df":0,"p":{"docs":{"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}},"1":{"docs":{"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.4142135623730951}},"df":1},"2":{"docs":{"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.4142135623730951}},"df":1},"[":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":1.4142135623730951}},"df":1}}}}}},"\\":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.4142135623730951}},"df":1,"\"":{"docs":{},"df":0,",":{"docs":{},"df":0,"w":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"l":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{},"df":0,"p":{"docs":{},"df":0,",":{"docs":{},"df":0,"c":{"docs":{},"df":0,"u":{"docs":{},"df":0,"r":{"docs":{},"df":0,"p":{"docs":{},"df":0,"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"f":{"docs":{},"df":0,"o":{"docs":{"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}},"_":{"docs":{},"df":0,"0":{"docs":{"https://phlip9.com/notes/AI ML/Markov Decision Process (MDP)/":{"tf":1.4142135623730951}},"df":1},"1":{"docs":{"https://phlip9.com/notes/AI ML/Markov Decision Process (MDP)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/btc-ln/atomic multipath payments (AMP)/":{"tf":1.7320508075688772}},"df":2},"2":{"docs":{"https://phlip9.com/notes/AI ML/Markov Decision Process (MDP)/":{"tf":1.0}},"df":1},"i":{"docs":{"https://phlip9.com/notes/btc-ln/atomic multipath payments (AMP)/":{"tf":1.0}},"df":1},"k":{"docs":{"https://phlip9.com/notes/AI ML/Markov Decision Process (MDP)/":{"tf":1.0}},"df":1},"n":{"docs":{"https://phlip9.com/notes/btc-ln/atomic multipath payments (AMP)/":{"tf":1.7320508075688772}},"df":1},"p":{"docs":{"https://phlip9.com/notes/statistics probability/testing whether a coin is fair/":{"tf":2.23606797749979}},"df":1},"t":{"docs":{"https://phlip9.com/notes/AI ML/Markov Decision Process (MDP)/":{"tf":1.0}},"df":1},"{":{"docs":{},"df":0,"\\":{"docs":{},"df":0,"m":{"docs":{},"df":0,"u":{"docs":{},"df":0,"_":{"docs":{},"df":0,"x":{"docs":{"https://phlip9.com/notes/statistics probability/standard error/":{"tf":1.0}},"df":1}}}}},"t":{"docs":{},"df":0,"+":{"docs":{},"df":0,"1":{"docs":{"https://phlip9.com/notes/AI ML/Markov Decision Process (MDP)/":{"tf":1.0}},"df":1}}}}},"a":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.4142135623730951}},"df":1,"d":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/reproducible builds/nix/nix auto-allocate-uids -> nixbld users/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/nix/nix debug spurrious rebuilds/":{"tf":1.0}},"df":2}}},"f":{"docs":{},"df":0,"e":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/fastpay/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":1.4142135623730951},"https://phlip9.com/notes/devops/secrets/ejson (Shopify)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/devops/secrets/mozilla SOPS/":{"tf":1.0},"https://phlip9.com/notes/devops/secrets/sy - share secrets safely/":{"tf":1.4142135623730951},"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":1.0},"https://phlip9.com/notes/misc/kintsugi/":{"tf":2.449489742783178},"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.4142135623730951}},"df":11,"_":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"g":{"docs":{},"df":0,"c":{"docs":{"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.0}},"df":1,"(":{"docs":{},"df":0,"0":{"docs":{"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.0}},"df":1},"1":{"docs":{"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.0}},"df":1},"2":{"docs":{"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.0}},"df":1},"3":{"docs":{"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.0}},"df":1},"4":{"docs":{"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.0}},"df":1},"5":{"docs":{"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.0}},"df":1},"6":{"docs":{"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.0}},"df":1},"7":{"docs":{"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.0}},"df":1},"8":{"docs":{"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.0}},"df":1},"9":{"docs":{"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.0}},"df":1},"i":{"docs":{},"df":0,"d":{"docs":{},"df":0,"x":{"docs":{"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.0}},"df":1}}}}},"v":{"docs":{"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.0}},"df":1,"(":{"docs":{},"df":0,"1":{"docs":{"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.0}},"df":1},"2":{"docs":{"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.0}},"df":1},"3":{"docs":{"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.0}},"df":1},"4":{"docs":{"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.0}},"df":1},"5":{"docs":{"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.0}},"df":1},"6":{"docs":{"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.0}},"df":1},"7":{"docs":{"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.0}},"df":1},"8":{"docs":{"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.0}},"df":1},"9":{"docs":{"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.0}},"df":1},"i":{"docs":{},"df":0,"d":{"docs":{},"df":0,"x":{"docs":{"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.0}},"df":1}}}}}}}}},"l":{"docs":{},"df":0,"y":{"docs":{},"df":0,"/":{"docs":{},"df":0,"c":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/devops/secrets/sy - share secrets safely/":{"tf":1.0}},"df":1}}}}}},"r":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0}},"df":1},"s":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":1.0}},"df":1}},"t":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":1.0},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0}},"df":4},"y":{"docs":{},"df":0,"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/android/root phone with magisk/":{"tf":1.7320508075688772}},"df":1}}}}}}},"l":{"docs":{},"df":0,"e":{"docs":{"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/money services business (MSB)/":{"tf":1.0}},"df":1},"t":{"docs":{"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":4.0}},"df":1,"(":{"docs":{},"df":0,"h":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,":":{"docs":{},"df":0,":":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"x":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":1.0}},"df":1}}}}}}}}}}}}}},".":{"docs":{},"df":0,"0":{"docs":{"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":1.0}},"df":1},"e":{"docs":{},"df":0,"x":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{},"df":0,"(":{"docs":{},"df":0,"i":{"docs":{},"df":0,"k":{"docs":{},"df":0,"m":{"docs":{"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":1.0}},"df":1}}}}}}}}}}}},"/":{"docs":{},"df":0,"p":{"docs":{},"df":0,"r":{"docs":{},"df":0,"k":{"docs":{"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":1.0}},"df":1}}}},"_":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{},"df":0,"x":{"docs":{"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":1.0}},"df":1,".":{"docs":{},"df":0,"f":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"h":{"docs":{},"df":0,"(":{"docs":{},"df":0,")":{"docs":{},"df":0,".":{"docs":{},"df":0,"0":{"docs":{"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":1.0}},"df":1}}}}}}}}}},"u":{"docs":{},"df":0,"p":{"docs":{},"df":0,"d":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"(":{"docs":{},"df":0,"i":{"docs":{},"df":0,"k":{"docs":{},"df":0,"m":{"docs":{"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":1.0}},"df":1}}}}}}}}}}}}}},"v":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"u":{"docs":{"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":1.0}},"df":1}}}}},"e":{"docs":{},"df":0,"d":{"docs":{},"df":0,"_":{"docs":{},"df":0,"h":{"docs":{},"df":0,"k":{"docs":{},"df":0,"d":{"docs":{},"df":0,"f":{"docs":{"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":2.0}},"df":1,".":{"docs":{},"df":0,"e":{"docs":{},"df":0,"x":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{},"df":0,"(":{"docs":{},"df":0,"i":{"docs":{},"df":0,"k":{"docs":{},"df":0,"m":{"docs":{"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}},"m":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/sui/":{"tf":1.0}},"df":1,"d":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1,"5":{"docs":{},"df":0,"1":{"docs":{},"df":0,"j":{"docs":{},"df":0,"1":{"docs":{},"df":0,"9":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1,"a":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1}}}}}}},"e":{"docs":{"https://phlip9.com/notes/AI ML/Expectimax Search/":{"tf":1.0},"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/monetary instruments/":{"tf":1.0},"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/money services business (MSB)/":{"tf":1.0},"https://phlip9.com/notes/b l o c k c h a i n/fastpay/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.0},"https://phlip9.com/notes/combinatorics/k-combinations of a multiset/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":2.23606797749979},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.7320508075688772},"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":2.6457513110645907},"https://phlip9.com/notes/confidential computing/intel SGX/secure time/":{"tf":1.7320508075688772},"https://phlip9.com/notes/confidential computing/marblerun/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":1.0},"https://phlip9.com/notes/devops/deployment strategies/":{"tf":1.4142135623730951},"https://phlip9.com/notes/distributed systems/papers/(2021) Leaderless Consensus/":{"tf":1.0},"https://phlip9.com/notes/fuzzing/fuzzcheck-rs/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/operator fixity and precedence/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/rust/rr with rust/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/rust/understanding sycamore reactivity/":{"tf":1.0},"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":1.7320508075688772},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.4142135623730951},"https://phlip9.com/notes/networking/CIDR/":{"tf":1.4142135623730951},"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.7320508075688772},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/reproducible-builds.org/":{"tf":1.4142135623730951},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":2.0},"https://phlip9.com/notes/statistics probability/G-test - multinomial goodness-of-fit/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/multinomial distribution/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/testing whether a coin is fair/":{"tf":1.7320508075688772}},"df":32},"l":{"docs":{"https://phlip9.com/notes/crypto/dex - open-source OIDC & OAuth 2.0 provider/":{"tf":1.0}},"df":1},"p":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/AI ML/Markov Decision Process (MDP)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.7320508075688772},"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/atomic multipath payments (AMP)/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.7320508075688772},"https://phlip9.com/notes/confidential computing/gramine/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0},"https://phlip9.com/notes/ios/ios setup/":{"tf":1.0},"https://phlip9.com/notes/lang/flutter/flutter setup/":{"tf":1.4142135623730951},"https://phlip9.com/notes/networking/ipv6 address space/":{"tf":1.4142135623730951},"https://phlip9.com/notes/statistics probability/CDF confidence bands - DKW inequality/":{"tf":2.0},"https://phlip9.com/notes/statistics probability/G-test - multinomial goodness-of-fit/":{"tf":1.4142135623730951},"https://phlip9.com/notes/statistics probability/multinomial distribution/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/p-value/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/standard error/":{"tf":4.795831523312719},"https://phlip9.com/notes/statistics probability/testing whether a coin is fair/":{"tf":3.4641016151377544},"https://phlip9.com/notes/statistics probability/winsorize/":{"tf":2.0}},"df":17,"e":{"docs":{},"df":0,"'":{"docs":{"https://phlip9.com/notes/statistics probability/standard error/":{"tf":1.0}},"df":1},"s":{"docs":{},"df":0,"/":{"docs":{},"df":0,"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{"https://phlip9.com/notes/WSL/WSL2 custom kernel/":{"tf":1.0}},"df":1}}}}}}}}},"n":{"docs":{"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.4142135623730951}},"df":2,"c":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/foreign bank account report (FBAR)/":{"tf":1.0}},"df":1}}}}},"d":{"docs":{"https://phlip9.com/notes/misc/kintsugi/":{"tf":3.1622776601683795},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":2,"b":{"docs":{},"df":0,"o":{"docs":{},"df":0,"x":{"docs":{"https://phlip9.com/notes/reproducible builds/nix/links/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/nix/nix auto-allocate-uids -> nixbld users/":{"tf":1.4142135623730951},"https://phlip9.com/notes/reproducible builds/nix/nix debug broken package build/":{"tf":1.0}},"df":3}}},"p":{"docs":{},"df":0,"a":{"docs":{},"df":0,"p":{"docs":{"https://phlip9.com/notes/misc/kintsugi/":{"tf":1.0}},"df":1}}},"w":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{"https://phlip9.com/notes/performance/profiling/":{"tf":1.0}},"df":1}}}}},"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/android/android cli setup/":{"tf":1.7320508075688772},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0},"https://phlip9.com/notes/ios/ios setup/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/flutter/flutter setup/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.4142135623730951}},"df":5}}}},"p":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{"https://phlip9.com/notes/distributed systems/papers/(2020) Semi-Fast Byzantine-tolerant Shared Register without Reliable Broadcast/":{"tf":1.0}},"df":1}}},"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"s":{"docs":{},"df":0,"h":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":2.8284271247461903}},"df":1}}}},"u":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":3.1622776601683795}},"df":1}}},"v":{"docs":{},"df":0,"e":{"docs":{"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/foreign bank account report (FBAR)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":2.0},"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":1.4142135623730951},"https://phlip9.com/notes/devops/algo wireguard VPN server/":{"tf":1.0},"https://phlip9.com/notes/devops/secrets/envkey/":{"tf":1.0},"https://phlip9.com/notes/fuzzing/fuzzcheck-rs/":{"tf":1.0},"https://phlip9.com/notes/lang/flutter/flutter setup/":{"tf":1.0},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":2.0},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":2.449489742783178}},"df":9}},"w":{"docs":{"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":2,"(":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1}}},"y":{"docs":{"https://phlip9.com/notes/router/lightning router/captive portal/arubanetworks captive portal/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/testing whether a coin is fair/":{"tf":1.0}},"df":2,"(":{"docs":{},"df":0,"\"":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0}},"df":1}}}},"b":{"docs":{},"df":0,"o":{"docs":{},"df":0,"b":{"docs":{"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0}},"df":1}}}},"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0}},"df":1}}}}}},"b":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"/":{"docs":{},"df":0,"n":{"docs":{},"df":0,"o":{"docs":{},"df":0,"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"g":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/reproducible builds/nix/nix auto-allocate-uids -> nixbld users/":{"tf":1.0}},"df":1}}}}}}}}}}},"c":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{"https://phlip9.com/notes/btc-ln/lightning libs/":{"tf":1.0}},"df":1,"b":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/fastpay/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/nix/links/":{"tf":1.0}},"df":3}},"r":{"docs":{"https://phlip9.com/notes/AI ML/Expectimax Search/":{"tf":1.0}},"df":1}},"e":{"docs":{"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":1.0},"https://phlip9.com/notes/devops/secrets/doppler/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/standard error/":{"tf":1.4142135623730951},"https://phlip9.com/notes/statistics probability/winsorize/":{"tf":1.4142135623730951}},"df":4}},"n":{"docs":{"https://phlip9.com/notes/devops/algo wireguard VPN server/":{"tf":1.0},"https://phlip9.com/notes/misc/scanning QR codes on desktop/":{"tf":1.4142135623730951},"https://phlip9.com/notes/postgres/types of scans/":{"tf":4.795831523312719}},"df":3},"s":{"docs":{},"df":0,"e":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0}},"df":1}}},"c":{"docs":{"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.0}},"df":1},"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.0}},"df":1}}}}}},"h":{"docs":{},"df":0,"e":{"docs":{},"df":0,"d":{"docs":{},"df":0,"u":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/devops/nomad/":{"tf":2.0},"https://phlip9.com/notes/lang/rust/rr with rust/":{"tf":1.0}},"df":2}}},"m":{"docs":{},"df":0,"a":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 4 - onion routing protocol/":{"tf":1.0},"https://phlip9.com/notes/postgres/snippets/":{"tf":1.4142135623730951}},"df":2,"t":{"docs":{"https://phlip9.com/notes/misc/water distillation setup/":{"tf":1.0}},"df":1}}}},"o":{"docs":{},"df":0,"o":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/lang/operator fixity and precedence/":{"tf":1.0}},"df":1}}}},"i":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.4142135623730951}},"df":1},"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"c":{"docs":{"https://phlip9.com/notes/fuzzing/fuzzing/":{"tf":1.0}},"df":1}}}},"o":{"docs":{},"df":0,"o":{"docs":{},"df":0,"p":{"docs":{"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":2.0}},"df":1}},"p":{"docs":{},"df":0,"e":{"docs":{"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":2.23606797749979},"https://phlip9.com/notes/confidential computing/intel SGX/secure time/":{"tf":1.0},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0},"https://phlip9.com/notes/lang/lua/":{"tf":1.7320508075688772},"https://phlip9.com/notes/lang/rust/understanding sycamore reactivity/":{"tf":2.8284271247461903},"https://phlip9.com/notes/networking/network interfaces/":{"tf":4.0}},"df":7,"/":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"v":{"docs":{},"df":0,"i":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0}},"df":1}}}}}}}},"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"f":{"docs":{"https://phlip9.com/notes/lang/rust/sycamore x futures/":{"tf":1.4142135623730951}},"df":1}}}}},"r":{"docs":{},"df":0,"e":{"docs":{"https://phlip9.com/notes/AI ML/Expectimax Search/":{"tf":1.4142135623730951},"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.4142135623730951},"https://phlip9.com/notes/statistics probability/testing whether a coin is fair/":{"tf":1.0}},"df":3,"r":{"docs":{"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.4142135623730951}},"df":1}}}},"p":{"docs":{"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0}},"df":1,"'":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"g":{"docs":{"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0}},"df":1}}}}},"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"p":{"docs":{},"df":0,"e":{"docs":{"https://phlip9.com/notes/misc/kintsugi/":{"tf":1.4142135623730951}},"df":1,"/":{"docs":{},"df":0,"c":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/misc/kintsugi/":{"tf":1.0}},"df":1}}}}}},"t":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/btc utreexo - utxo accumulator/":{"tf":1.0},"https://phlip9.com/notes/fuzzing/fuzzing/":{"tf":1.0},"https://phlip9.com/notes/misc/setting up a headless raspbian boot image/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/nix/nix debug spurrious rebuilds/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/winsorize/":{"tf":1.0}},"df":5}}}},"e":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/gdb ref/":{"tf":1.4142135623730951},"https://phlip9.com/notes/misc/pop_OS! tweaks/":{"tf":1.4142135623730951},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":3.0},"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.4142135623730951}},"df":5,".":{"docs":{},"df":0,"u":{"docs":{},"df":0,"p":{"docs":{},"df":0,"d":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"(":{"docs":{},"df":0,"d":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"p":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"y":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}},"_":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{},"df":0,"x":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":2.23606797749979}},"df":1}}}},"s":{"docs":{},"df":0,"[":{"docs":{},"df":0,"s":{"docs":{},"df":0,"c":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"_":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{},"df":0,"x":{"docs":{},"df":0,"]":{"docs":{},"df":0,"(":{"docs":{},"df":0,"d":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"p":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"y":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}},"i":{"docs":{},"df":0,"p":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/WSL/WSL2 custom kernel/":{"tf":1.4142135623730951},"https://phlip9.com/notes/android/android cli setup/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.7320508075688772},"https://phlip9.com/notes/devops/deployment strategies/":{"tf":1.0},"https://phlip9.com/notes/devops/secrets/1password - secrets automation/":{"tf":1.0},"https://phlip9.com/notes/performance/profiling/":{"tf":1.0}},"df":6,"p":{"docs":{},"df":0,"u":{"docs":{},"df":0,"b":{"docs":{},"df":0,"k":{"docs":{},"df":0,"e":{"docs":{},"df":0,"y":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.7320508075688772}},"df":1}}}}}}}}},"o":{"docs":{},"df":0,"l":{"docs":{},"df":0,"l":{"docs":{},"df":0,"b":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"(":{"docs":{},"df":0,"{":{"docs":{},"df":0,"s":{"docs":{},"df":0,"u":{"docs":{},"df":0,"p":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,".":{"docs":{},"df":0,"k":{"docs":{},"df":0,"e":{"docs":{},"df":0,"y":{"docs":{"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0}},"df":1}}}}}}}}}}}}}},"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"v":{"docs":{},"df":0,"i":{"docs":{},"df":0,"e":{"docs":{},"df":0,"w":{"docs":{"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0}},"df":1}}}}}}}}}}},"t":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"b":{"docs":{},"df":0,"s":{"docs":{},"df":0,"/":{"docs":{},"df":0,"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{},"df":0,"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{},"df":0,"w":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"k":{"docs":{},"df":0,"/":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"s":{"docs":{},"df":0,"m":{"docs":{},"df":0,"w":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{},"df":0,"m":{"docs":{},"df":0,"/":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"c":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"v":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}},"x":{"docs":{},"df":0,"/":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"g":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"/":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"m":{"docs":{},"df":0,"o":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"_":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"u":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/reproducible builds/reproducible-builds.org/":{"tf":1.0}},"df":1}}}}}}},"d":{"docs":{"https://phlip9.com/notes/misc/prepping RPI for embedded dev/":{"tf":1.4142135623730951},"https://phlip9.com/notes/misc/setting up a headless raspbian boot image/":{"tf":2.0}},"df":2,"c":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"d":{"docs":{},"df":0,"/":{"docs":{},"df":0,"d":{"docs":{},"df":0,"o":{"docs":{},"df":0,"w":{"docs":{},"df":0,"n":{"docs":{},"df":0,"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/android/root phone with magisk/":{"tf":1.0}},"df":1,"/":{"docs":{},"df":0,"b":{"docs":{},"df":0,"o":{"docs":{},"df":0,"o":{"docs":{},"df":0,"t":{"docs":{},"df":0,".":{"docs":{},"df":0,"i":{"docs":{},"df":0,"m":{"docs":{},"df":0,"g":{"docs":{"https://phlip9.com/notes/android/root phone with magisk/":{"tf":1.0}},"df":1}}}}}}}},"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"g":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"k":{"docs":{},"df":0,"_":{"docs":{},"df":0,"p":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{"https://phlip9.com/notes/android/root phone with magisk/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}},"i":{"docs":{},"df":0,"o":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1}}}}}},"k":{"docs":{"https://phlip9.com/notes/android/android cli setup/":{"tf":2.23606797749979},"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":2.449489742783178},"https://phlip9.com/notes/android/root phone with magisk/":{"tf":1.0},"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/gramine/":{"tf":2.0},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/mystikos/":{"tf":1.0},"https://phlip9.com/notes/devops/secrets/1password - secrets automation/":{"tf":1.4142135623730951},"https://phlip9.com/notes/devops/secrets/fortanix DSM/":{"tf":1.0},"https://phlip9.com/notes/lang/flutter/flutter setup/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/rust x SGX/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/nix/nix debug broken package build/":{"tf":1.0}},"df":13,"&":{"docs":{},"df":0,"g":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/reproducible builds/nix/nix debug broken package build/":{"tf":1.7320508075688772}},"df":1}}},"_":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"o":{"docs":{},"df":0,"t":{"docs":{},"df":0,"=":{"docs":{},"df":0,"\"":{"docs":{},"df":0,"$":{"docs":{},"df":0,"{":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{},"df":0,"_":{"docs":{},"df":0,"h":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.4142135623730951}},"df":1}}}}}}}}}}}}}}}}}}}},"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/android/android cli setup/":{"tf":2.8284271247461903},"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.4142135623730951}},"df":2,"_":{"docs":{},"df":0,"d":{"docs":{},"df":0,"i":{"docs":{},"df":0,"r":{"docs":{},"df":0,"/":{"docs":{},"df":0,"b":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"/":{"docs":{},"df":0,"s":{"docs":{},"df":0,"d":{"docs":{},"df":0,"k":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/android/android cli setup/":{"tf":1.4142135623730951}},"df":1}}}}}}}}}}},"=":{"docs":{},"df":0,"\"":{"docs":{},"df":0,"$":{"docs":{},"df":0,"h":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"/":{"docs":{},"df":0,".":{"docs":{},"df":0,"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"c":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"/":{"docs":{},"df":0,"s":{"docs":{},"df":0,"d":{"docs":{},"df":0,"k":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/android/android cli setup/":{"tf":1.0}},"df":1}}}}}}}}}}}},"s":{"docs":{},"df":0,"d":{"docs":{},"df":0,"k":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}},"a":{"docs":{},"df":0,"g":{"docs":{"https://phlip9.com/notes/android/android cli setup/":{"tf":2.449489742783178},"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.4142135623730951}},"df":2}}}}}},"t":{"docs":{},"df":0,":":{"docs":{},"df":0,":":{"docs":{},"df":0,":":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"r":{"docs":{},"df":0,"u":{"docs":{},"df":0,"p":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.0}},"df":1}}}}}}}}}}}}}},"e":{"docs":{},"df":0,"_":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"b":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0}},"df":1}}}}}}}}},"a":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":3.3166247903554},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":3.605551275463989},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":2.8284271247461903},"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":4.358898943540674},"https://phlip9.com/notes/confidential computing/intel SGX/secure time/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/marblerun/":{"tf":2.0},"https://phlip9.com/notes/crypto/biscuit authz/":{"tf":1.0},"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":1.0},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.4142135623730951}},"df":9,"_":{"docs":{},"df":0,"k":{"docs":{},"df":0,"e":{"docs":{},"df":0,"y":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0}},"df":1,".":{"docs":{},"df":0,"z":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0}},"df":1}}}}}}}}},"e":{"docs":{},"df":0,"d":{"docs":{},"df":0,"_":{"docs":{},"df":0,"d":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"_":{"docs":{},"df":0,"s":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.4142135623730951}},"df":1}}}}}}},"d":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":2.0}},"df":1}}}}}}}},"m":{"docs":{"https://phlip9.com/notes/confidential computing/intel TDX/":{"tf":1.0}},"df":1,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"s":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.0}},"df":1}}}}}}},"n":{"docs":{"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.0}},"df":1},"q":{"docs":{},"df":0,"l":{"docs":{},"df":0,"_":{"docs":{},"df":0,"m":{"docs":{},"df":0,"i":{"docs":{},"df":0,"g":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/postgres/snippets/":{"tf":1.4142135623730951}},"df":1}}}}}}},"r":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{"https://phlip9.com/notes/AI ML/Expectimax Search/":{"tf":2.449489742783178},"https://phlip9.com/notes/AI ML/Markov Decision Process (MDP)/":{"tf":1.0},"https://phlip9.com/notes/WSL/WSL2 custom kernel/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/gramine/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0},"https://phlip9.com/notes/ios/ios setup/":{"tf":1.0},"https://phlip9.com/notes/lang/lua/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/rr with rust/":{"tf":1.0}},"df":9}}}},"c":{"docs":{"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/money services business (MSB)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/btc-ln/breez lightning service providers/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/secure time/":{"tf":1.0},"https://phlip9.com/notes/devops/azure CLI/":{"tf":1.0},"https://phlip9.com/notes/devops/nomad/":{"tf":1.0},"https://phlip9.com/notes/fuzzing/fuzzcheck-rs/":{"tf":1.4142135623730951},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.7320508075688772},"https://phlip9.com/notes/misc/uptime to downtime conversion/":{"tf":1.0},"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.0}},"df":9,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/android/ADB over TCP inside WSL2/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/atomic multipath payments (AMP)/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/submarine swaps/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/secure time/":{"tf":1.4142135623730951},"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":1.0},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":2.6457513110645907},"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/reproducible-builds.org/":{"tf":1.0}},"df":13,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/fastpay/":{"tf":2.23606797749979}},"df":1}}},"l":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.0},"https://phlip9.com/notes/misc/kintsugi/":{"tf":1.0}},"df":2}}}}},"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/foreign bank account report (FBAR)/":{"tf":1.0}},"df":1}},"t":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/fastpay/":{"tf":1.0},"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":2.0},"https://phlip9.com/notes/btc-ln/BOLT 4 - onion routing protocol/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":2.0},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.7320508075688772},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":2.449489742783178},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":2.449489742783178},"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/marblerun/":{"tf":1.7320508075688772},"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":2.8284271247461903},"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":4.358898943540674},"https://phlip9.com/notes/crypto/tls exported keying material/":{"tf":1.7320508075688772},"https://phlip9.com/notes/devops/secrets/1password - secrets automation/":{"tf":2.23606797749979},"https://phlip9.com/notes/devops/secrets/ejson (Shopify)/":{"tf":2.6457513110645907},"https://phlip9.com/notes/devops/secrets/ejson-kms (AWS)/":{"tf":4.0},"https://phlip9.com/notes/devops/secrets/envkey/":{"tf":1.4142135623730951},"https://phlip9.com/notes/devops/secrets/mozilla SOPS/":{"tf":1.7320508075688772},"https://phlip9.com/notes/devops/secrets/sops-nix/":{"tf":1.0},"https://phlip9.com/notes/devops/secrets/sy - share secrets safely/":{"tf":2.0},"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.4142135623730951},"https://phlip9.com/notes/reproducible builds/nix/links/":{"tf":1.0}},"df":23,"1":{"docs":{"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":1.4142135623730951}},"df":1},"2":{"docs":{"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":1.4142135623730951}},"df":1},"_":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":2.0}},"df":1}}}},"b":{"docs":{},"df":0,"o":{"docs":{},"df":0,"x":{"docs":{"https://phlip9.com/notes/devops/secrets/ejson-kms (AWS)/":{"tf":2.0}},"df":1}}}}}},"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/android/android cli setup/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.4142135623730951},"https://phlip9.com/notes/ios/ios setup/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":2.449489742783178},"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":1.0},"https://phlip9.com/notes/misc/kintsugi/":{"tf":1.4142135623730951},"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.7320508075688772},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":2.449489742783178}},"df":12}}}},"u":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/android/root phone with magisk/":{"tf":1.0},"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/financial instituion/":{"tf":1.0},"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/foreign bank account report (FBAR)/":{"tf":1.0},"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/monetary instruments/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/BOLT 4 - onion routing protocol/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/BOLT 8 - secure noise transport/":{"tf":1.7320508075688772},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":2.0},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":3.1622776601683795},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":2.6457513110645907},"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":2.0},"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":2.8284271247461903},"https://phlip9.com/notes/confidential computing/intel SGX/secure time/":{"tf":3.4641016151377544},"https://phlip9.com/notes/confidential computing/intel TDX/":{"tf":1.7320508075688772},"https://phlip9.com/notes/confidential computing/marblerun/":{"tf":2.23606797749979},"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":2.449489742783178},"https://phlip9.com/notes/crypto/acme protocol/":{"tf":1.0},"https://phlip9.com/notes/crypto/biscuit authz/":{"tf":1.0},"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":1.0},"https://phlip9.com/notes/crypto/smallstep - private online CA & ACME server/":{"tf":1.0},"https://phlip9.com/notes/devops/consul/":{"tf":1.0},"https://phlip9.com/notes/devops/linkerd/":{"tf":1.0},"https://phlip9.com/notes/devops/secrets/1password - secrets automation/":{"tf":1.0},"https://phlip9.com/notes/devops/secrets/envkey/":{"tf":1.0},"https://phlip9.com/notes/devops/secrets/fortanix DSM/":{"tf":1.0},"https://phlip9.com/notes/devops/service mesh/":{"tf":1.0},"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.4142135623730951},"https://phlip9.com/notes/reproducible builds/nix/links/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/reproducible-builds.org/":{"tf":1.4142135623730951},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":2.23606797749979},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.7320508075688772},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":3.1622776601683795},"https://phlip9.com/notes/router/lightning router/lightning router overview/":{"tf":1.0}},"df":34,"e":{"docs":{},"df":0,"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"g":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,".":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"u":{"docs":{},"df":0,"b":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{},"df":0,"w":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"k":{"docs":{},"df":0,"s":{"docs":{},"df":0,".":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{"https://phlip9.com/notes/router/lightning router/captive portal/arubanetworks captive portal/":{"tf":1.4142135623730951}},"df":1}}}}}}}}}}}}}}}}}}}}}}}},"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"y":{"docs":{},"df":0,"v":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"s":{"docs":{"https://phlip9.com/notes/confidential computing/marblerun/":{"tf":1.0}},"df":1}}}}}}}}}},"d":{"docs":{"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":1.0}},"df":1},"e":{"docs":{"https://phlip9.com/notes/AI ML/Expectimax Search/":{"tf":1.4142135623730951},"https://phlip9.com/notes/AI ML/Markov Decision Process (MDP)/":{"tf":1.0},"https://phlip9.com/notes/WSL/WSL2 custom kernel/":{"tf":1.0},"https://phlip9.com/notes/android/android cli setup/":{"tf":1.7320508075688772},"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.7320508075688772},"https://phlip9.com/notes/android/linux ADB udev setup/":{"tf":1.0},"https://phlip9.com/notes/android/root phone with magisk/":{"tf":1.4142135623730951},"https://phlip9.com/notes/b l o c k c h a i n/fastpay/":{"tf":1.4142135623730951},"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":2.0},"https://phlip9.com/notes/btc-ln/BOLT 11 - invoices/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":3.0},"https://phlip9.com/notes/btc-ln/BOLT 4 - onion routing protocol/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/breez lightning service providers/":{"tf":1.7320508075688772},"https://phlip9.com/notes/btc-ln/lightning network notes/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/submarine swaps/":{"tf":1.4142135623730951},"https://phlip9.com/notes/combinatorics/k-combinations of a multiset/":{"tf":1.7320508075688772},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":4.242640687119285},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":2.23606797749979},"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":4.47213595499958},"https://phlip9.com/notes/crypto/acme protocol/":{"tf":1.0},"https://phlip9.com/notes/crypto/biscuit authz/":{"tf":1.0},"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":1.0},"https://phlip9.com/notes/design/form design/":{"tf":1.0},"https://phlip9.com/notes/devops/azure CLI/":{"tf":1.4142135623730951},"https://phlip9.com/notes/devops/secrets/ejson-kms (AWS)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/fuzzing/fuzzing/":{"tf":1.0},"https://phlip9.com/notes/keyboards/moergo glove80/":{"tf":1.7320508075688772},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0},"https://phlip9.com/notes/lang/flutter/flutter setup/":{"tf":1.0},"https://phlip9.com/notes/lang/operator fixity and precedence/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/rr with rust/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/understanding sycamore reactivity/":{"tf":1.4142135623730951},"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":1.0},"https://phlip9.com/notes/misc/kintsugi/":{"tf":1.0},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":3.3166247903554},"https://phlip9.com/notes/misc/setting up a headless raspbian boot image/":{"tf":1.4142135623730951},"https://phlip9.com/notes/networking/CIDR/":{"tf":1.7320508075688772},"https://phlip9.com/notes/networking/ipv6 address space/":{"tf":1.4142135623730951},"https://phlip9.com/notes/networking/network interfaces/":{"tf":2.6457513110645907},"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.4142135623730951},"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.0},"https://phlip9.com/notes/performance/profiling/":{"tf":1.4142135623730951},"https://phlip9.com/notes/postgres/postgres performance tuning/":{"tf":1.0},"https://phlip9.com/notes/postgres/types of scans/":{"tf":1.4142135623730951},"https://phlip9.com/notes/reproducible builds/nix/nix debug spurrious rebuilds/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.4142135623730951},"https://phlip9.com/notes/statistics probability/G-test - multinomial goodness-of-fit/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/p-value/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/standard error/":{"tf":1.4142135623730951},"https://phlip9.com/notes/statistics probability/testing whether a coin is fair/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/winsorize/":{"tf":1.0}},"df":58,"d":{"docs":{"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.0},"https://phlip9.com/notes/lang/lua/":{"tf":2.0}},"df":2,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"s":{"docs":{"https://phlip9.com/notes/lang/lua/":{"tf":1.0}},"df":1}}}}},"m":{"docs":{"https://phlip9.com/notes/android/android cli setup/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/breez lightning service providers/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.0},"https://phlip9.com/notes/fuzzing/fuzzcheck-rs/":{"tf":1.0},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.4142135623730951},"https://phlip9.com/notes/misc/kintsugi/":{"tf":1.4142135623730951},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0},"https://phlip9.com/notes/misc/setting up a headless raspbian boot image/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.7320508075688772},"https://phlip9.com/notes/reproducible builds/nix/nix auto-allocate-uids -> nixbld users/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/nix/nix debug spurrious rebuilds/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.4142135623730951}},"df":16},"n":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":1.0},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0}},"df":3}},"g":{"docs":{},"df":0,"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/devops/consul/":{"tf":1.0}},"df":1}}}}},"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/android/OTA updates for rooted android phone/":{"tf":1.0},"https://phlip9.com/notes/android/root phone with magisk/":{"tf":1.0},"https://phlip9.com/notes/combinatorics/k-combinations of a multiset/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0},"https://phlip9.com/notes/distributed systems/papers/(2020) Semi-Fast Byzantine-tolerant Shared Register without Reliable Broadcast/":{"tf":1.0},"https://phlip9.com/notes/ios/ios setup/":{"tf":1.0},"https://phlip9.com/notes/keyboards/moergo glove80/":{"tf":1.0},"https://phlip9.com/notes/misc/prepping RPI for embedded dev/":{"tf":1.4142135623730951},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.7320508075688772},"https://phlip9.com/notes/misc/setting up a headless raspbian boot image/":{"tf":1.0},"https://phlip9.com/notes/performance/bit hacks/":{"tf":3.7416573867739413},"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.4142135623730951},"https://phlip9.com/notes/postgres/snippets/":{"tf":2.0},"https://phlip9.com/notes/postgres/types of scans/":{"tf":1.7320508075688772}},"df":14}}},"f":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0},"https://phlip9.com/notes/combinatorics/k-combinations of a multiset/":{"tf":1.7320508075688772},"https://phlip9.com/notes/confidential computing/gramine/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.7320508075688772},"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":2.0},"https://phlip9.com/notes/crypto/TLS self-signed pubkey-only certs/":{"tf":1.7320508075688772},"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":2.449489742783178},"https://phlip9.com/notes/lang/lua/":{"tf":2.23606797749979},"https://phlip9.com/notes/lang/rust/self-referencing structs/":{"tf":1.4142135623730951},"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.7320508075688772},"https://phlip9.com/notes/router/lightning router/captive portal/arubanetworks captive portal/":{"tf":1.0}},"df":11,"(":{"docs":{},"df":0,"h":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,":":{"docs":{},"df":0,":":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"x":{"docs":{},"df":0,"t":{"docs":{},"df":0,":":{"docs":{},"df":0,":":{"docs":{},"df":0,"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"w":{"docs":{},"df":0,"(":{"docs":{},"df":0,"s":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"t":{"docs":{},"df":0,"_":{"docs":{},"df":0,"v":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"u":{"docs":{"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}},".":{"docs":{},"df":0,"0":{"docs":{},"df":0,".":{"docs":{},"df":0,"c":{"docs":{},"df":0,"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":1.4142135623730951}},"df":1}}}}}},"a":{"docs":{},"df":0,"p":{"docs":{},"df":0,"p":{"docs":{},"df":0,"l":{"docs":{},"df":0,"y":{"docs":{},"df":0,"_":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"f":{"docs":{},"df":0,"e":{"docs":{},"df":0,"_":{"docs":{},"df":0,"r":{"docs":{},"df":0,"u":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1}}}}}}}}}}}}},"r":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"w":{"docs":{},"df":0,"_":{"docs":{},"df":0,"g":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"p":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1,".":{"docs":{},"df":0,"x":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.7320508075688772}},"df":1}}}}}}}}}}}}},"b":{"docs":{},"df":0,"o":{"docs":{},"df":0,"d":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0}},"df":1}}}},"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"b":{"docs":{"https://phlip9.com/notes/combinatorics/k-combinations of a multiset/":{"tf":1.0}},"df":1,".":{"docs":{},"df":0,"c":{"docs":{},"df":0,"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/combinatorics/k-combinations of a multiset/":{"tf":1.0}},"df":1}}}}}}}},"u":{"docs":{},"df":0,"r":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":3.605551275463989}},"df":1,"_":{"docs":{},"df":0,"g":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"p":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":3.4641016151377544}},"df":1}}}}}}}}}},"d":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/combinatorics/k-combinations of a multiset/":{"tf":1.4142135623730951}},"df":1}}},"g":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"p":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1,".":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1},"x":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1}}}}}}},"h":{"docs":{},"df":0,"e":{"docs":{},"df":0,"i":{"docs":{},"df":0,"g":{"docs":{},"df":0,"h":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":3.0}},"df":1}}}}}},"i":{"docs":{"https://phlip9.com/notes/lang/lua/":{"tf":2.0}},"df":1,"m":{"docs":{"https://phlip9.com/notes/lang/lua/":{"tf":1.4142135623730951}},"df":1},"n":{"docs":{},"df":0,"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,".":{"docs":{},"df":0,"f":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"h":{"docs":{"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":1.0}},"df":1}}}}}},"u":{"docs":{},"df":0,"p":{"docs":{},"df":0,"d":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"(":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"p":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}},"t":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":2.0}},"df":1}},"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"x":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":3.4641016151377544}},"df":1,"[":{"docs":{},"df":0,"x":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1}},"_":{"docs":{},"df":0,"g":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"p":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":3.4641016151377544}},"df":1}}}}}}}}},"u":{"docs":{},"df":0,"m":{"docs":{},"df":0,"_":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":2.8284271247461903}},"df":1}}}}}}}}},"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,".":{"docs":{},"df":0,"f":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"h":{"docs":{"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":1.0}},"df":1}}}}}},"u":{"docs":{},"df":0,"p":{"docs":{},"df":0,"d":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"(":{"docs":{},"df":0,"&":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{},"df":0,"p":{"docs":{},"df":0,";":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"_":{"docs":{},"df":0,"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{},"df":0,"p":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"p":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.7320508075688772}},"df":1,"e":{"docs":{},"df":0,"[":{"docs":{},"df":0,"0":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1},"1":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.4142135623730951}},"df":1},"i":{"docs":{},"df":0,"d":{"docs":{},"df":0,"x":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1}}}}}}}}}},"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"s":{"docs":{},"df":0,"_":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,".":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}},"v":{"docs":{},"df":0,"_":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.7320508075688772}},"df":1}}},"u":{"docs":{},"df":0,"p":{"docs":{},"df":0,"d":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"_":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.7320508075688772}},"df":1}}}}}}}}}}}}},"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1}}}}},"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/lang/lua/":{"tf":1.0}},"df":1}},"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{},"df":0,"_":{"docs":{},"df":0,"a":{"docs":{},"df":0,"f":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.7320508075688772}},"df":1}}}}}}}}},"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"g":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0}},"df":1}},"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{},"df":0,"s":{"docs":{},"df":0,"_":{"docs":{},"df":0,"w":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"h":{"docs":{},"df":0,"(":{"docs":{},"df":0,"p":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"h":{"docs":{},"df":0,".":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{},"df":0,"_":{"docs":{},"df":0,"o":{"docs":{},"df":0,"s":{"docs":{},"df":0,"_":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"(":{"docs":{},"df":0,")":{"docs":{},"df":0,".":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{},"df":0,"_":{"docs":{},"df":0,"b":{"docs":{},"df":0,"y":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.4142135623730951}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"w":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{},"df":0,"t":{"docs":{},"df":0,"h":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":2.8284271247461903}},"df":1}}}},"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"_":{"docs":{},"df":0,"c":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{},"df":0,"(":{"docs":{},"df":0,"w":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/crypto/TLS self-signed pubkey-only certs/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}},"x":{"docs":{"https://phlip9.com/notes/lang/lua/":{"tf":1.7320508075688772}},"df":1}}},"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/money services business (MSB)/":{"tf":1.4142135623730951}},"df":1}}}},"m":{"docs":{"https://phlip9.com/notes/statistics probability/standard error/":{"tf":1.4142135623730951}},"df":1,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":2.0},"https://phlip9.com/notes/lang/lua/":{"tf":1.0}},"df":2}},"p":{"docs":{},"df":0,"h":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":1.0}},"df":1}}}}},"i":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/secure time/":{"tf":1.0},"https://phlip9.com/notes/distributed systems/papers/(2020) Semi-Fast Byzantine-tolerant Shared Register without Reliable Broadcast/":{"tf":1.4142135623730951}},"df":4}},"n":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/android/root phone with magisk/":{"tf":1.0},"https://phlip9.com/notes/b l o c k c h a i n/fastpay/":{"tf":1.4142135623730951},"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.7320508075688772},"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":2.8284271247461903},"https://phlip9.com/notes/btc-ln/atomic multipath payments (AMP)/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/breez lightning service providers/":{"tf":1.4142135623730951},"https://phlip9.com/notes/btc-ln/lightning rod/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.7320508075688772},"https://phlip9.com/notes/btc-ln/submarine swaps/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.7320508075688772},"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":1.0},"https://phlip9.com/notes/crypto/acme protocol/":{"tf":2.0},"https://phlip9.com/notes/devops/service mesh/":{"tf":1.0},"https://phlip9.com/notes/distributed systems/papers/(2020) Semi-Fast Byzantine-tolerant Shared Register without Reliable Broadcast/":{"tf":2.449489742783178},"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":1.7320508075688772},"https://phlip9.com/notes/keyboards/moergo glove80/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/sycamore x futures/":{"tf":1.0},"https://phlip9.com/notes/networking/ipv6 address space/":{"tf":1.4142135623730951},"https://phlip9.com/notes/networking/network interface card (NIC)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.4142135623730951},"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/arubanetworks captive portal/":{"tf":2.23606797749979},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.4142135623730951}},"df":23,"/":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{"https://phlip9.com/notes/networking/network interface card (NIC)/":{"tf":1.0}},"df":1}}}},"e":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/fastpay/":{"tf":4.0},"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":5.0990195135927845}},"df":2,"'":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.4142135623730951}},"df":1},"/":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"e":{"docs":{},"df":0,"i":{"docs":{},"df":0,"v":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/fastpay/":{"tf":1.0}},"df":1}}}}}}}}},"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"g":{"docs":{},"df":0,"/":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"e":{"docs":{},"df":0,"i":{"docs":{},"df":0,"v":{"docs":{"https://phlip9.com/notes/btc-ln/submarine swaps/":{"tf":1.0}},"df":1}}}}}}}}}}},"s":{"docs":{"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.0}},"df":1,"i":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 8 - secure noise transport/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/reproducible-builds.org/":{"tf":1.0}},"df":3}},"o":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1}}},"t":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":2.8284271247461903},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.0},"https://phlip9.com/notes/devops/secrets/ejson-kms (AWS)/":{"tf":1.0},"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":1.0},"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.7320508075688772},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.7320508075688772},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":2.449489742783178},"https://phlip9.com/notes/router/lightning router/lightning router overview/":{"tf":1.0}},"df":9}},"p":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/WSL/WSL2 custom kernel/":{"tf":1.0},"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/money services business (MSB)/":{"tf":1.0},"https://phlip9.com/notes/b l o c k c h a i n/fastpay/":{"tf":1.0},"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":2.0},"https://phlip9.com/notes/btc-ln/BOLT 8 - secure noise transport/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/atomic multipath payments (AMP)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/btc-ln/breez lightning service providers/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/submarine swaps/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.7320508075688772},"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.0},"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":2.6457513110645907},"https://phlip9.com/notes/design/form design/":{"tf":1.7320508075688772},"https://phlip9.com/notes/devops/azure CLI/":{"tf":1.0},"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":1.0},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0},"https://phlip9.com/notes/lang/lua/":{"tf":1.4142135623730951},"https://phlip9.com/notes/misc/envsubst/":{"tf":1.0},"https://phlip9.com/notes/misc/kintsugi/":{"tf":1.0},"https://phlip9.com/notes/networking/network interface card (NIC)/":{"tf":1.0},"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.0},"https://phlip9.com/notes/postgres/postgres performance tuning/":{"tf":1.0},"https://phlip9.com/notes/postgres/types of scans/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/standard error/":{"tf":1.4142135623730951}},"df":24}},"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"m":{"docs":{},"df":0,"b":{"docs":{"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.4142135623730951}},"df":2}}}}},"q":{"docs":{"https://phlip9.com/notes/postgres/types of scans/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/nix/nix auto-allocate-uids -> nixbld users/":{"tf":1.0}},"df":2,"n":{"docs":{},"df":0,"u":{"docs":{},"df":0,"m":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/fastpay/":{"tf":2.23606797749979}},"df":1}}},"u":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"c":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/fastpay/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/crypto/biscuit authz/":{"tf":1.0},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.4142135623730951}},"df":5},"t":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.4142135623730951},"https://phlip9.com/notes/performance/simdjson talk/":{"tf":1.0},"https://phlip9.com/notes/postgres/types of scans/":{"tf":2.23606797749979}},"df":3}}}}}},"r":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/fuzzing/fuzzcheck-rs/":{"tf":1.0}},"df":1,"e":{"docs":{},"df":0,":":{"docs":{},"df":0,":":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0}},"df":1}}}}},"i":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":2.6457513110645907},"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":1.0},"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":1.0},"https://phlip9.com/notes/lang/lua/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/rr with rust/":{"tf":1.0}},"df":5,"a":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 7 - p2p node and channel discovery/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/gramine/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/sycamore x futures/":{"tf":1.0},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.7320508075688772}},"df":7,"i":{"docs":{},"df":0,"z":{"docs":{},"df":0,"e":{"docs":{},"df":0,"_":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"_":{"docs":{},"df":0,"w":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"h":{"docs":{},"df":0,"_":{"docs":{},"df":0,"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"g":{"docs":{},"df":0,"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"&":{"docs":{},"df":0,"l":{"docs":{},"df":0,"t":{"docs":{},"df":0,";":{"docs":{},"df":0,"k":{"docs":{"https://phlip9.com/notes/crypto/TLS self-signed pubkey-only certs/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}},"o":{"docs":{},"df":0,"u":{"docs":{"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0}},"df":1}}},"o":{"docs":{},"df":0,"k":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{},"df":0,"l":{"docs":{},"df":0,"/":{"docs":{},"df":0,"g":{"docs":{},"df":0,"e":{"docs":{},"df":0,"m":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/reproducible builds/nix/links/":{"tf":1.0}},"df":1}}}}}}}}}}}},"v":{"docs":{"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":1.0},"https://phlip9.com/notes/postgres/postgres performance tuning/":{"tf":1.0}},"df":3,"e":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/android/linux ADB udev setup/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.7320508075688772},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/gramine/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel SGX/secure time/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":2.0},"https://phlip9.com/notes/crypto/TLS self-signed pubkey-only certs/":{"tf":1.0},"https://phlip9.com/notes/crypto/acme protocol/":{"tf":1.7320508075688772},"https://phlip9.com/notes/crypto/dex - open-source OIDC & OAuth 2.0 provider/":{"tf":1.0},"https://phlip9.com/notes/crypto/smallstep - private online CA & ACME server/":{"tf":1.7320508075688772},"https://phlip9.com/notes/crypto/tls exported keying material/":{"tf":1.0},"https://phlip9.com/notes/devops/algo wireguard VPN server/":{"tf":1.4142135623730951},"https://phlip9.com/notes/devops/azure CLI/":{"tf":1.0},"https://phlip9.com/notes/devops/secrets/1password - secrets automation/":{"tf":1.0},"https://phlip9.com/notes/devops/secrets/ejson (Shopify)/":{"tf":1.0},"https://phlip9.com/notes/devops/secrets/ejson-kms (AWS)/":{"tf":1.0},"https://phlip9.com/notes/distributed systems/papers/(2020) Semi-Fast Byzantine-tolerant Shared Register without Reliable Broadcast/":{"tf":4.123105625617661},"https://phlip9.com/notes/networking/network interfaces/":{"tf":2.6457513110645907},"https://phlip9.com/notes/postgres/postgres performance tuning/":{"tf":2.0},"https://phlip9.com/notes/reproducible builds/nix/links/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":4.898979485566356},"https://phlip9.com/notes/router/lightning router/captive portal/arubanetworks captive portal/":{"tf":2.449489742783178},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":2.6457513110645907},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":7.280109889280518}},"df":26,"'":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/secure time/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.4142135623730951}},"df":3},"(":{"docs":{"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.0}},"df":1,"p":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/distributed systems/papers/(2020) Semi-Fast Byzantine-tolerant Shared Register without Reliable Broadcast/":{"tf":1.0}},"df":1}}},"q":{"docs":{},"df":0,"u":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/distributed systems/papers/(2020) Semi-Fast Byzantine-tolerant Shared Register without Reliable Broadcast/":{"tf":1.4142135623730951}},"df":1}}}}}},".":{"docs":{},"df":0,"&":{"docs":{},"df":0,"n":{"docs":{},"df":0,"b":{"docs":{},"df":0,"s":{"docs":{},"df":0,"p":{"docs":{"https://phlip9.com/notes/router/lightning router/captive portal/arubanetworks captive portal/":{"tf":1.0}},"df":1}}}}}},"/":{"docs":{},"df":0,"s":{"docs":{},"df":0,"g":{"docs":{},"df":0,"x":{"docs":{},"df":0,"_":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"u":{"docs":{},"df":0,"x":{"docs":{},"df":0,"_":{"docs":{},"df":0,"x":{"docs":{},"df":0,"6":{"docs":{},"df":0,"4":{"docs":{},"df":0,"_":{"docs":{},"df":0,"d":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"v":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"_":{"docs":{},"df":0,"1":{"docs":{},"df":0,".":{"docs":{},"df":0,"4":{"docs":{},"df":0,"1":{"docs":{},"df":0,".":{"docs":{},"df":0,"b":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"s":{"docs":{},"df":0,"y":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0}},"df":1}}}},"i":{"docs":{},"df":0,"c":{"docs":{"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0},"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/financial instituion/":{"tf":1.0},"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/money services business (MSB)/":{"tf":3.3166247903554},"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":2.0},"https://phlip9.com/notes/btc-ln/breez lightning service providers/":{"tf":2.0},"https://phlip9.com/notes/btc-ln/submarine swaps/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":4.47213595499958},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.7320508075688772},"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":3.3166247903554},"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/secure time/":{"tf":2.8284271247461903},"https://phlip9.com/notes/confidential computing/intel TDX/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/marblerun/":{"tf":3.3166247903554},"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":2.449489742783178},"https://phlip9.com/notes/crypto/(talk) authenticated data structures for stateless validation/":{"tf":1.4142135623730951},"https://phlip9.com/notes/crypto/acme protocol/":{"tf":1.4142135623730951},"https://phlip9.com/notes/devops/AKS - azure kubernetes service/":{"tf":1.7320508075688772},"https://phlip9.com/notes/devops/consul/":{"tf":4.0},"https://phlip9.com/notes/devops/deployment strategies/":{"tf":1.7320508075688772},"https://phlip9.com/notes/devops/docker compose/":{"tf":1.7320508075688772},"https://phlip9.com/notes/devops/linkerd/":{"tf":1.4142135623730951},"https://phlip9.com/notes/devops/nomad/":{"tf":1.0},"https://phlip9.com/notes/devops/secrets/1password - secrets automation/":{"tf":1.0},"https://phlip9.com/notes/devops/secrets/fortanix DSM/":{"tf":1.0},"https://phlip9.com/notes/devops/secrets/mozilla SOPS/":{"tf":2.0},"https://phlip9.com/notes/devops/service mesh/":{"tf":4.0},"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":1.4142135623730951},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/nix/links/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/arubanetworks captive portal/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":2.23606797749979}},"df":33,"e":{"docs":{},"df":0,"'":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.0}},"df":1},"/":{"docs":{},"df":0,"c":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"/":{"docs":{},"df":0,"u":{"docs":{},"df":0,"s":{"docs":{"https://phlip9.com/notes/crypto/biscuit authz/":{"tf":1.0}},"df":1}}}}}}}}}},"p":{"docs":{},"df":0,"u":{"docs":{},"df":0,"b":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"i":{"docs":{},"df":0,"p":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{},"df":0,"d":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"s":{"docs":{"https://phlip9.com/notes/devops/azure CLI/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}},"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/devops/service mesh/":{"tf":1.0}},"df":1}}}},"s":{"docs":{},"df":0,"/":{"docs":{},"df":0,"f":{"docs":{},"df":0,"o":{"docs":{},"df":0,"o":{"docs":{},"df":0,"b":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.0}},"df":1,"+":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"p":{"docs":{"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.0}},"df":1}}}},"/":{"docs":{},"df":0,"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{},"df":0,"h":{"docs":{},"df":0,"f":{"docs":{},"df":0,"i":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}},"s":{"docs":{},"df":0,"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.7320508075688772},"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":3.4641016151377544},"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":1.0},"https://phlip9.com/notes/crypto/tls exported keying material/":{"tf":1.0},"https://phlip9.com/notes/lang/flutter/flutter setup/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/arubanetworks captive portal/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.4142135623730951},"https://phlip9.com/notes/router/lightning router/lightning router overview/":{"tf":1.0}},"df":9,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"g":{"docs":{},"df":0,"t":{"docs":{},"df":0,"h":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"g":{"docs":{},"df":0,"t":{"docs":{},"df":0,"h":{"docs":{"https://phlip9.com/notes/router/lightning router/lightning router overview/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}},"t":{"docs":{"https://phlip9.com/notes/AI ML/Markov Decision Process (MDP)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/WSL/WSL2 custom kernel/":{"tf":1.0},"https://phlip9.com/notes/android/ADB over TCP inside WSL2/":{"tf":1.0},"https://phlip9.com/notes/android/OTA updates for rooted android phone/":{"tf":1.4142135623730951},"https://phlip9.com/notes/android/android cli setup/":{"tf":1.4142135623730951},"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.7320508075688772},"https://phlip9.com/notes/android/root phone with magisk/":{"tf":1.7320508075688772},"https://phlip9.com/notes/b l o c k c h a i n/bip158 - compact block filters/":{"tf":1.4142135623730951},"https://phlip9.com/notes/b l o c k c h a i n/btc utreexo - utxo accumulator/":{"tf":2.449489742783178},"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.4142135623730951},"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":2.23606797749979},"https://phlip9.com/notes/combinatorics/k-combinations of a multiset/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":2.449489742783178},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":2.8284271247461903},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.7320508075688772},"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":3.7416573867739413},"https://phlip9.com/notes/confidential computing/intel SGX/secure time/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":1.0},"https://phlip9.com/notes/crypto/TLS self-signed pubkey-only certs/":{"tf":1.0},"https://phlip9.com/notes/devops/algo wireguard VPN server/":{"tf":1.0},"https://phlip9.com/notes/devops/nomad/":{"tf":1.0},"https://phlip9.com/notes/distributed systems/papers/(2020) Semi-Fast Byzantine-tolerant Shared Register without Reliable Broadcast/":{"tf":1.0},"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":1.0},"https://phlip9.com/notes/keyboards/moergo glove80/":{"tf":1.0},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.7320508075688772},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":2.449489742783178},"https://phlip9.com/notes/lang/flutter/flutter setup/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/lua/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/operator fixity and precedence/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/rr with rust/":{"tf":1.7320508075688772},"https://phlip9.com/notes/misc/kintsugi/":{"tf":1.4142135623730951},"https://phlip9.com/notes/misc/pop_OS! tweaks/":{"tf":1.4142135623730951},"https://phlip9.com/notes/misc/prepping RPI for embedded dev/":{"tf":1.7320508075688772},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.4142135623730951},"https://phlip9.com/notes/misc/setting up a headless raspbian boot image/":{"tf":2.0},"https://phlip9.com/notes/networking/CIDR/":{"tf":1.0},"https://phlip9.com/notes/networking/network interface card (NIC)/":{"tf":1.0},"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.0},"https://phlip9.com/notes/performance/bit hacks/":{"tf":2.8284271247461903},"https://phlip9.com/notes/performance/simdjson talk/":{"tf":1.4142135623730951},"https://phlip9.com/notes/postgres/snippets/":{"tf":2.0},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.7320508075688772},"https://phlip9.com/notes/reproducible builds/nix/nix auto-allocate-uids -> nixbld users/":{"tf":1.7320508075688772},"https://phlip9.com/notes/reproducible builds/rebuilderd/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/reproducible-builds.org/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":2.0}},"df":50,"&":{"docs":{},"df":0,"l":{"docs":{},"df":0,"t":{"docs":{},"df":0,";":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"g":{"docs":{},"df":0,"&":{"docs":{},"df":0,"g":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0}},"df":1}}}}}}}}},"t":{"docs":{},"df":0,"&":{"docs":{},"df":0,"g":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0}},"df":1}}}}}}}},"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/lang/lua/":{"tf":2.23606797749979}},"df":1}}}}},"s":{"docs":{},"df":0,".":{"docs":{},"df":0,"[":{"docs":{},"df":0,"6":{"docs":{"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.0}},"df":1}}}},"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0}},"df":1}},"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"g":{"docs":{},"df":0,"s":{"docs":{},"df":0,".":{"docs":{},"df":0,"j":{"docs":{},"df":0,"s":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/lang/flutter/flutter setup/":{"tf":1.0}},"df":1}}}}},"[":{"docs":{},"df":0,"i":{"docs":{},"df":0,"]":{"docs":{},"df":0,".":{"docs":{},"df":0,"s":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":2.449489742783178}},"df":1},"t":{"docs":{},"df":0,"y":{"docs":{},"df":0,"p":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.7320508075688772}},"df":1}}},"v":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"u":{"docs":{},"df":0,"e":{"docs":{},"df":0,".":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.0}},"df":1},"p":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.4142135623730951}},"df":1},"q":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.4142135623730951}},"df":1},"w":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":2.0}},"df":1}}}}}}}}}}},"_":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":2.6457513110645907}},"df":1}}}}}}}}}},"l":{"docs":{"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.0}},"df":1,"e":{"docs":{},"df":0,"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/money services business (MSB)/":{"tf":1.4142135623730951}},"df":1}}}}}}},"u":{"docs":{},"df":0,"p":{"docs":{"https://phlip9.com/notes/WSL/WSL2 custom kernel/":{"tf":1.0},"https://phlip9.com/notes/android/ADB over TCP inside WSL2/":{"tf":1.4142135623730951},"https://phlip9.com/notes/android/android cli setup/":{"tf":1.7320508075688772},"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":2.6457513110645907},"https://phlip9.com/notes/android/linux ADB udev setup/":{"tf":1.4142135623730951},"https://phlip9.com/notes/android/root phone with magisk/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/atomic multipath payments (AMP)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/btc-ln/breez lightning service providers/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/gramine/":{"tf":1.0},"https://phlip9.com/notes/devops/algo wireguard VPN server/":{"tf":1.4142135623730951},"https://phlip9.com/notes/devops/azure CLI/":{"tf":1.4142135623730951},"https://phlip9.com/notes/ios/ios setup/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/flutter/flutter setup/":{"tf":3.0},"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/rr with rust/":{"tf":1.0},"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":1.0},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":2.0},"https://phlip9.com/notes/misc/water distillation setup/":{"tf":1.4142135623730951},"https://phlip9.com/notes/networking/ipv6 address space/":{"tf":1.0},"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/nix/links/":{"tf":1.0}},"df":24,".":{"docs":{},"df":0,"h":{"docs":{},"df":0,"t":{"docs":{},"df":0,"m":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0}},"df":1}}}}}}},"{":{"docs":{},"df":0,"0":{"docs":{"https://phlip9.com/notes/statistics probability/multinomial distribution/":{"tf":1.0}},"df":1},"1":{"docs":{"https://phlip9.com/notes/statistics probability/multinomial distribution/":{"tf":1.0}},"df":1},"x":{"docs":{},"df":0,"_":{"docs":{},"df":0,"1":{"docs":{"https://phlip9.com/notes/statistics probability/multinomial distribution/":{"tf":1.0}},"df":1}}}}},"v":{"docs":{"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":4.123105625617661}},"df":1,"e":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/gramine/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0},"https://phlip9.com/notes/fuzzing/fuzzing/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/reproducible-builds.org/":{"tf":1.0}},"df":6}}}},"f":{"docs":{},"df":0,"h":{"docs":{},"df":0,"w":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1}}}},"o":{"docs":{},"df":0,"2":{"docs":{"https://phlip9.com/notes/devops/algo wireguard VPN server/":{"tf":1.0}},"df":1}}},"g":{"docs":{},"df":0,"x":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":4.0},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.7320508075688772},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":9.38083151964686},"https://phlip9.com/notes/confidential computing/gramine/":{"tf":3.4641016151377544},"https://phlip9.com/notes/confidential computing/intel SGX/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":5.916079783099616},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":5.0990195135927845},"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":4.123105625617661},"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel SGX/secure time/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/marblerun/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/mystikos/":{"tf":1.7320508075688772},"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":1.7320508075688772},"https://phlip9.com/notes/devops/nomad/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/rust x SGX/":{"tf":2.23606797749979},"https://phlip9.com/notes/reproducible builds/nix/links/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/nix/nix debug broken package build/":{"tf":2.0}},"df":17,".":{"docs":{},"df":0,"g":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.4142135623730951}},"df":1}}},"h":{"docs":{},"df":0,"t":{"docs":{},"df":0,"m":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0}},"df":1}}}},"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/gramine/":{"tf":1.0}},"df":2}}}}},"/":{"docs":{},"df":0,"b":{"docs":{},"df":0,"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"b":{"docs":{},"df":0,"/":{"docs":{},"df":0,"2":{"docs":{},"df":0,"6":{"docs":{},"df":0,"c":{"docs":{},"df":0,"4":{"docs":{},"df":0,"5":{"docs":{},"df":0,"8":{"docs":{},"df":0,"9":{"docs":{},"df":0,"0":{"docs":{},"df":0,"5":{"docs":{},"df":0,"b":{"docs":{},"df":0,"7":{"docs":{},"df":0,"2":{"docs":{},"df":0,"e":{"docs":{},"df":0,"6":{"docs":{},"df":0,"6":{"docs":{},"df":0,"d":{"docs":{},"df":0,"b":{"docs":{},"df":0,"7":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"1":{"docs":{},"df":0,"f":{"docs":{},"df":0,"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"e":{"docs":{},"df":0,"0":{"docs":{},"df":0,"4":{"docs":{},"df":0,"b":{"docs":{},"df":0,"4":{"docs":{},"df":0,"3":{"docs":{},"df":0,"4":{"docs":{},"df":0,"6":{"docs":{},"df":0,"1":{"docs":{},"df":0,"c":{"docs":{},"df":0,"e":{"docs":{},"df":0,"1":{"docs":{},"df":0,"b":{"docs":{},"df":0,"7":{"docs":{},"df":0,"6":{"docs":{},"df":0,"f":{"docs":{},"df":0,"/":{"docs":{},"df":0,"s":{"docs":{},"df":0,"d":{"docs":{},"df":0,"k":{"docs":{},"df":0,"/":{"docs":{},"df":0,"t":{"docs":{},"df":0,"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"/":{"docs":{},"df":0,"t":{"docs":{},"df":0,"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,".":{"docs":{},"df":0,"c":{"docs":{},"df":0,"p":{"docs":{},"df":0,"p":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"f":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"i":{"docs":{},"df":0,"x":{"docs":{"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0}},"df":1}}}}}}}},"s":{"docs":{},"df":0,"g":{"docs":{},"df":0,"x":{"docs":{"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":2.0},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.4142135623730951}},"df":2,"_":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"p":{"docs":{},"df":0,"o":{"docs":{},"df":0,"/":{"docs":{},"df":0,"u":{"docs":{},"df":0,"b":{"docs":{},"df":0,"u":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"u":{"docs":{"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/gramine/":{"tf":1.0}},"df":2,"/":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/gramine/":{"tf":1.0}},"df":2}}}}}}}}}}}}}}}}}}}}},"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"g":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{},"df":0,"/":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"/":{"docs":{},"df":0,"s":{"docs":{},"df":0,"g":{"docs":{},"df":0,"x":{"docs":{"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}},"1":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":2.0}},"df":1,"y":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"a":{"docs":{},"df":0,"p":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0}},"df":1}}}}}}},"2":{"docs":{"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.4142135623730951}},"df":1,"n":{"docs":{},"df":0,"o":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.4142135623730951}},"df":1}},"o":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0}},"df":1}}},"y":{"docs":{},"df":0,"e":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0}},"df":1,"s":{"docs":{},"df":0,"j":{"docs":{},"df":0,"u":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0}},"df":1}}}}}}}},"=":{"docs":{},"df":0,"1":{"docs":{"https://phlip9.com/notes/confidential computing/gramine/":{"tf":1.0}},"df":1}},"\\":{"docs":{},"df":0,"a":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"m":{"docs":{"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0}},"df":1}}}}},"]":{"docs":{},"df":0,"\\":{"docs":{},"df":0,"n":{"docs":{},"df":0,"r":{"docs":{},"df":0,"u":{"docs":{},"df":0,"n":{"docs":{},"df":0,"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0}},"df":1}}}}}}}}},"_":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"b":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"_":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.0}},"df":2}}}}}}}}}}}},"c":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"c":{"docs":{},"df":0,"_":{"docs":{},"df":0,"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"d":{"docs":{},"df":0,"_":{"docs":{},"df":0,"d":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"_":{"docs":{},"df":0,"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"z":{"docs":{},"df":0,"e":{"docs":{},"df":0,"(":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{},"df":0,"d":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"_":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"x":{"docs":{},"df":0,"t":{"docs":{},"df":0,"_":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"g":{"docs":{},"df":0,"t":{"docs":{},"df":0,"h":{"docs":{},"df":0,",":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"x":{"docs":{},"df":0,"t":{"docs":{},"df":0,"2":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"c":{"docs":{},"df":0,"r":{"docs":{},"df":0,"y":{"docs":{},"df":0,"p":{"docs":{},"df":0,"t":{"docs":{},"df":0,"_":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"g":{"docs":{},"df":0,"t":{"docs":{},"df":0,"h":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"p":{"docs":{},"df":0,"u":{"docs":{},"df":0,"_":{"docs":{},"df":0,"s":{"docs":{},"df":0,"v":{"docs":{},"df":0,"n":{"docs":{},"df":0,"_":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0}},"df":1}}}}}}}}},"d":{"docs":{},"df":0,"c":{"docs":{},"df":0,"a":{"docs":{},"df":0,"p":{"docs":{},"df":0,"_":{"docs":{},"df":0,"q":{"docs":{},"df":0,"l":{"docs":{},"df":0,".":{"docs":{},"df":0,"d":{"docs":{},"df":0,"l":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0}},"df":1}}}}},"u":{"docs":{},"df":0,"o":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"v":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"f":{"docs":{},"df":0,"y":{"docs":{},"df":0,".":{"docs":{},"df":0,"d":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}},"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"v":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"_":{"docs":{},"df":0,"1":{"docs":{},"df":0,".":{"docs":{},"df":0,"9":{"docs":{"https://phlip9.com/notes/confidential computing/gramine/":{"tf":1.0}},"df":1}}}}}}}}}},"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"a":{"docs":{},"df":0,"b":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0}},"df":1}}},"c":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"v":{"docs":{"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0}},"df":1,"e":{"docs":{},"df":0,"_":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"m":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,".":{"docs":{},"df":0,"d":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}},"p":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{},"df":0,".":{"docs":{},"df":0,"d":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0}},"df":1}}}}}},"r":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"_":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"v":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{},"df":0,"_":{"docs":{},"df":0,"p":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":2.8284271247461903}},"df":1}}}}}}}}}}}}}}},"u":{"docs":{},"df":0,"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"x":{"docs":{},"df":0,"p":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.0}},"df":1}}}}}}}}}}}}}},"f":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"g":{"docs":{},"df":0,"s":{"docs":{},"df":0,"_":{"docs":{},"df":0,"a":{"docs":{},"df":0,"e":{"docs":{},"df":0,"x":{"docs":{},"df":0,"_":{"docs":{},"df":0,"n":{"docs":{},"df":0,"o":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"f":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0}},"df":1}}}}}}}}}},"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"b":{"docs":{},"df":0,"u":{"docs":{},"df":0,"g":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.7320508075688772}},"df":3}}}}},"e":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"k":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"_":{"docs":{},"df":0,"k":{"docs":{},"df":0,"e":{"docs":{},"df":0,"y":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":2.0}},"df":2}}}}}}}}}}}}}},"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.7320508075688772}},"df":3}}}},"k":{"docs":{},"df":0,"s":{"docs":{},"df":0,"s":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0}},"df":1}}},"m":{"docs":{},"df":0,"o":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"6":{"docs":{},"df":0,"4":{"docs":{},"df":0,"b":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":2.0}},"df":3}}}}}}}}},"n":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"_":{"docs":{},"df":0,"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"u":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"y":{"docs":{},"df":0,"_":{"docs":{},"df":0,"b":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.4142135623730951}},"df":1}}}}}}}}}}}}}}}},"p":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"v":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"_":{"docs":{},"df":0,"k":{"docs":{},"df":0,"e":{"docs":{},"df":0,"y":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":2.0}},"df":2}}}}}}}}}}}}},"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"v":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.0}},"df":1}}}}}}}}}}}},"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"_":{"docs":{},"df":0,"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{},"df":0,"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"_":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"c":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"v":{"docs":{},"df":0,"e":{"docs":{},"df":0,"(":{"docs":{},"df":0,"p":{"docs":{},"df":0,"_":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{},"df":0,"d":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"_":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"x":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"w":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"h":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"_":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"c":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"v":{"docs":{},"df":0,"e":{"docs":{},"df":0,"(":{"docs":{},"df":0,"p":{"docs":{},"df":0,"_":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{},"df":0,"d":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"_":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"x":{"docs":{},"df":0,"t":{"docs":{},"df":0,",":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{},"df":0,"d":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"_":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"x":{"docs":{},"df":0,"t":{"docs":{},"df":0,"_":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"g":{"docs":{},"df":0,"t":{"docs":{},"df":0,"h":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"d":{"docs":{},"df":0,"_":{"docs":{},"df":0,"d":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,",":{"docs":{},"df":0,"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"d":{"docs":{},"df":0,"_":{"docs":{},"df":0,"d":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"_":{"docs":{},"df":0,"s":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}},"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"x":{"docs":{},"df":0,"t":{"docs":{},"df":0,"2":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"c":{"docs":{},"df":0,"r":{"docs":{},"df":0,"y":{"docs":{},"df":0,"p":{"docs":{},"df":0,"t":{"docs":{},"df":0,",":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"x":{"docs":{},"df":0,"t":{"docs":{},"df":0,"2":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"c":{"docs":{},"df":0,"r":{"docs":{},"df":0,"y":{"docs":{},"df":0,"p":{"docs":{},"df":0,"t":{"docs":{},"df":0,"_":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"g":{"docs":{},"df":0,"t":{"docs":{},"df":0,"h":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"a":{"docs":{},"df":0,":":{"docs":{},"df":0,":":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"b":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0}},"df":1}}}}}}}}}}},"v":{"docs":{},"df":0,"_":{"docs":{},"df":0,"s":{"docs":{},"df":0,"v":{"docs":{},"df":0,"n":{"docs":{},"df":0,"_":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0}},"df":1}}}}}}}}},"k":{"docs":{},"df":0,"e":{"docs":{},"df":0,"y":{"docs":{},"df":0,"_":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{},"df":0,"_":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.0}},"df":1}}}},"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"q":{"docs":{},"df":0,"u":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"_":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.0}},"df":1}}}}}}}}}},"p":{"docs":{},"df":0,"o":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"y":{"docs":{},"df":0,"_":{"docs":{},"df":0,"m":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"c":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"v":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.7320508075688772}},"df":1}}}}}},"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"g":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":2.0}},"df":1}}}}}},"n":{"docs":{},"df":0,"o":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"v":{"docs":{},"df":0,"p":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"d":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}},"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{},"df":0,"_":{"docs":{},"df":0,"s":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.4142135623730951}},"df":1}}}}}}}}}}},"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"u":{"docs":{},"df":0,"n":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{},"df":0,".":{"docs":{},"df":0,"d":{"docs":{},"df":0,"l":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0}},"df":1}}}}}}}}},"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"u":{"docs":{},"df":0,"x":{"docs":{},"df":0,"_":{"docs":{},"df":0,"x":{"docs":{},"df":0,"6":{"docs":{},"df":0,"4":{"docs":{},"df":0,"_":{"docs":{},"df":0,"d":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"v":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"_":{"docs":{},"df":0,"1":{"docs":{},"df":0,".":{"docs":{},"df":0,"4":{"docs":{},"df":0,"1":{"docs":{},"df":0,".":{"docs":{},"df":0,"b":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.7320508075688772}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}},"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{},"df":0,"u":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"_":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.4142135623730951}},"df":1}}}}}}}}}}}},"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"c":{"docs":{},"df":0,"_":{"docs":{},"df":0,"f":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"g":{"docs":{},"df":0,"s":{"docs":{},"df":0,"_":{"docs":{},"df":0,"p":{"docs":{},"df":0,"f":{"docs":{},"df":0,"_":{"docs":{},"df":0,"g":{"docs":{},"df":0,"p":{"docs":{},"df":0,"_":{"docs":{},"df":0,"e":{"docs":{},"df":0,"x":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"_":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"f":{"docs":{},"df":0,"o":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}},"n":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"_":{"docs":{},"df":0,"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"u":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"y":{"docs":{},"df":0,"_":{"docs":{},"df":0,"b":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.4142135623730951}},"df":1}}}}}}}}}}}}}}}},"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{},"df":0,"_":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.0}},"df":1}}}}}}}}}}}}},"p":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"f":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"m":{"docs":{},"df":0,".":{"docs":{},"df":0,"d":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0}},"df":1}}}}}}}}}},"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"v":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0}},"df":1}}}},"v":{"docs":{"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0}},"df":1}}},"q":{"docs":{},"df":0,"l":{"docs":{},"df":0,"_":{"docs":{},"df":0,"c":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{},"df":0,"_":{"docs":{},"df":0,"k":{"docs":{},"df":0,"e":{"docs":{},"df":0,"y":{"docs":{},"df":0,"_":{"docs":{},"df":0,"t":{"docs":{},"df":0,"y":{"docs":{},"df":0,"p":{"docs":{},"df":0,"e":{"docs":{},"df":0,"_":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}},"u":{"docs":{},"df":0,"o":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,".":{"docs":{},"df":0,"h":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.4142135623730951}},"df":1}},"_":{"docs":{},"df":0,"e":{"docs":{},"df":0,"x":{"docs":{},"df":0,".":{"docs":{},"df":0,"d":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0}},"df":1}}}}},"n":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"c":{"docs":{},"df":0,"e":{"docs":{},"df":0,"_":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.4142135623730951}},"df":1}}}}}}},"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"g":{"docs":{},"df":0,"n":{"docs":{},"df":0,"_":{"docs":{},"df":0,"t":{"docs":{},"df":0,"y":{"docs":{},"df":0,"p":{"docs":{},"df":0,"e":{"docs":{},"df":0,"_":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}},"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{},"df":0,"_":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{},"df":0,"(":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"p":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{},"df":0,"_":{"docs":{},"df":0,"c":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"&":{"docs":{},"df":0,"l":{"docs":{},"df":0,"t":{"docs":{},"df":0,";":{"docs":{},"df":0,"u":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"8":{"docs":{},"df":0,"_":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"p":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{},"df":0,".":{"docs":{},"df":0,"h":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":2.0}},"df":1}},"2":{"docs":{},"df":0,".":{"docs":{},"df":0,"h":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0}},"df":1}},"_":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0}},"df":1}}},"_":{"docs":{},"df":0,"b":{"docs":{},"df":0,"o":{"docs":{},"df":0,"d":{"docs":{},"df":0,"y":{"docs":{},"df":0,"_":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0}},"df":1}}}}}},"t":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":2.6457513110645907},"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.4142135623730951}},"df":2}}}}}}}},"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"_":{"docs":{},"df":0,"d":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"_":{"docs":{},"df":0,"e":{"docs":{},"df":0,"x":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.0}},"df":1}}}}}}}},"e":{"docs":{},"df":0,"d":{"docs":{},"df":0,"_":{"docs":{},"df":0,"d":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"_":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.0}},"df":1}}}}}}}}}}},"l":{"docs":{},"df":0,"f":{"docs":{},"df":0,"_":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"p":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.0}},"df":1}}}}}}}}}},"p":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{},"df":0,"_":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0}},"df":1}}}}},"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"u":{"docs":{},"df":0,"s":{"docs":{},"df":0,"_":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.4142135623730951}},"df":1}}}}}}},"u":{"docs":{},"df":0,"c":{"docs":{},"df":0,"c":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"s":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.4142135623730951}},"df":1}}}}}}},"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"g":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{},"df":0,"_":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"f":{"docs":{},"df":0,"o":{"docs":{},"df":0,"_":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.7320508075688772}},"df":1}}}}}}}}}}}},"p":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"d":{"docs":{},"df":0,"_":{"docs":{},"df":0,"f":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0}},"df":1}}}}}}}}}}},"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"d":{"docs":{},"df":0,"c":{"docs":{},"df":0,".":{"docs":{},"df":0,"e":{"docs":{},"df":0,"d":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.7320508075688772}},"df":1}}}}}}}},"y":{"docs":{},"df":0,"p":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,":":{"docs":{},"df":0,":":{"docs":{},"df":0,"s":{"docs":{},"df":0,"g":{"docs":{},"df":0,"x":{"docs":{},"df":0,"_":{"docs":{},"df":0,"q":{"docs":{},"df":0,"l":{"docs":{},"df":0,"_":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"_":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"g":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"h":{"docs":{},"df":0,"m":{"docs":{},"df":0,"_":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{},"df":0,"_":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"u":{"docs":{},"df":0,"a":{"docs":{},"df":0,"e":{"docs":{},"df":0,"_":{"docs":{},"df":0,"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"v":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"e":{"docs":{},"df":0,".":{"docs":{},"df":0,"d":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.4142135623730951}},"df":1}}}}}}}}}}}}},"r":{"docs":{},"df":0,"t":{"docs":{},"df":0,"s":{"docs":{},"df":0,".":{"docs":{},"df":0,"d":{"docs":{},"df":0,"l":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0}},"df":1}}}}}}}},"x":{"docs":{},"df":0,"f":{"docs":{},"df":0,"r":{"docs":{},"df":0,"m":{"docs":{},"df":0,"_":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{},"df":0,"x":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0}},"df":1}},"v":{"docs":{},"df":0,"x":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0}},"df":1,"5":{"docs":{},"df":0,"1":{"docs":{},"df":0,"2":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0}},"df":1}}}}}},"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"g":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0}},"df":2}}}}}},"m":{"docs":{},"df":0,"p":{"docs":{},"df":0,"x":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0}},"df":1}}},"p":{"docs":{},"df":0,"k":{"docs":{},"df":0,"r":{"docs":{},"df":0,"u":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0}},"df":1}}}}}}}}}},"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"v":{"docs":{"https://phlip9.com/notes/devops/azure CLI/":{"tf":1.0}},"df":1,"2":{"docs":{"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.0}},"df":1}}},"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"v":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/confidential computing/gramine/":{"tf":1.0}},"df":1}}}}}},"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.7320508075688772}},"df":1}}}}}}}},"s":{"docs":{},"df":0,"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.7320508075688772}},"df":1}}}}}}},"t":{"docs":{},"df":0,"c":{"docs":{},"df":0,"b":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"p":{"docs":{},"df":0,"0":{"docs":{},"df":0,"1":{"docs":{},"df":0,"s":{"docs":{},"df":0,"v":{"docs":{},"df":0,"n":{"docs":{},"df":0,"\"":{"docs":{},"df":0,":":{"docs":{},"df":0,"0":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.0}},"df":1}}}}}}},"2":{"docs":{},"df":0,"s":{"docs":{},"df":0,"v":{"docs":{},"df":0,"n":{"docs":{},"df":0,"\"":{"docs":{},"df":0,":":{"docs":{},"df":0,"0":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.0}},"df":1}}}}}}},"3":{"docs":{},"df":0,"s":{"docs":{},"df":0,"v":{"docs":{},"df":0,"n":{"docs":{},"df":0,"\"":{"docs":{},"df":0,":":{"docs":{},"df":0,"0":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.0}},"df":1}}}}}}},"4":{"docs":{},"df":0,"s":{"docs":{},"df":0,"v":{"docs":{},"df":0,"n":{"docs":{},"df":0,"\"":{"docs":{},"df":0,":":{"docs":{},"df":0,"0":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.0}},"df":1}}}}}}},"5":{"docs":{},"df":0,"s":{"docs":{},"df":0,"v":{"docs":{},"df":0,"n":{"docs":{},"df":0,"\"":{"docs":{},"df":0,":":{"docs":{},"df":0,"0":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.0}},"df":1}}}}}}},"6":{"docs":{},"df":0,"s":{"docs":{},"df":0,"v":{"docs":{},"df":0,"n":{"docs":{},"df":0,"\"":{"docs":{},"df":0,":":{"docs":{},"df":0,"0":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.0}},"df":1}}}}}}},"7":{"docs":{},"df":0,"s":{"docs":{},"df":0,"v":{"docs":{},"df":0,"n":{"docs":{},"df":0,"\"":{"docs":{},"df":0,":":{"docs":{},"df":0,"0":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.0}},"df":1}}}}}}},"8":{"docs":{},"df":0,"s":{"docs":{},"df":0,"v":{"docs":{},"df":0,"n":{"docs":{},"df":0,"\"":{"docs":{},"df":0,":":{"docs":{},"df":0,"0":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.0}},"df":1}}}}}}},"9":{"docs":{},"df":0,"s":{"docs":{},"df":0,"v":{"docs":{},"df":0,"n":{"docs":{},"df":0,"\"":{"docs":{},"df":0,":":{"docs":{},"df":0,"0":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.0}},"df":1}}}}}}}},"1":{"docs":{},"df":0,"0":{"docs":{},"df":0,"s":{"docs":{},"df":0,"v":{"docs":{},"df":0,"n":{"docs":{},"df":0,"\"":{"docs":{},"df":0,":":{"docs":{},"df":0,"0":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.0}},"df":1}}}}}}},"1":{"docs":{},"df":0,"s":{"docs":{},"df":0,"v":{"docs":{},"df":0,"n":{"docs":{},"df":0,"\"":{"docs":{},"df":0,":":{"docs":{},"df":0,"0":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.0}},"df":1}}}}}}},"2":{"docs":{},"df":0,"s":{"docs":{},"df":0,"v":{"docs":{},"df":0,"n":{"docs":{},"df":0,"\"":{"docs":{},"df":0,":":{"docs":{},"df":0,"0":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.0}},"df":1}}}}}}},"3":{"docs":{},"df":0,"s":{"docs":{},"df":0,"v":{"docs":{},"df":0,"n":{"docs":{},"df":0,"\"":{"docs":{},"df":0,":":{"docs":{},"df":0,"0":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.0}},"df":1}}}}}}},"4":{"docs":{},"df":0,"s":{"docs":{},"df":0,"v":{"docs":{},"df":0,"n":{"docs":{},"df":0,"\"":{"docs":{},"df":0,":":{"docs":{},"df":0,"0":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.0}},"df":1}}}}}}},"5":{"docs":{},"df":0,"s":{"docs":{},"df":0,"v":{"docs":{},"df":0,"n":{"docs":{},"df":0,"\"":{"docs":{},"df":0,":":{"docs":{},"df":0,"0":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.0}},"df":1}}}}}}},"6":{"docs":{},"df":0,"s":{"docs":{},"df":0,"v":{"docs":{},"df":0,"n":{"docs":{},"df":0,"\"":{"docs":{},"df":0,":":{"docs":{},"df":0,"0":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}},"v":{"docs":{},"df":0,"1":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0}},"df":1}}}},"h":{"docs":{"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.4142135623730951},"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":1.4142135623730951}},"df":2,"a":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.0},"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":2.0},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":2.0}},"df":4,"2":{"docs":{},"df":0,"5":{"docs":{},"df":0,"6":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/gramine/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0},"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":3.0}},"df":4,":":{"docs":{},"df":0,":":{"docs":{},"df":0,"b":{"docs":{},"df":0,"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"c":{"docs":{},"df":0,"k":{"docs":{},"df":0,"_":{"docs":{},"df":0,"s":{"docs":{"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":1.4142135623730951}},"df":1}},"s":{"docs":{"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":1.0}},"df":1}}}}}},"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"x":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":1.4142135623730951}},"df":1,":":{"docs":{},"df":0,":":{"docs":{},"df":0,"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"w":{"docs":{"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":1.7320508075688772}},"df":1}}}}}}}}}}}},"d":{"docs":{},"df":0,"i":{"docs":{},"df":0,"g":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"(":{"docs":{},"df":0,"&":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{},"df":0,"p":{"docs":{},"df":0,";":{"docs":{},"df":0,"[":{"docs":{},"df":0,"k":{"docs":{},"df":0,"e":{"docs":{},"df":0,"y":{"docs":{"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":1.0}},"df":1}}}},"m":{"docs":{},"df":0,"o":{"docs":{},"df":0,"d":{"docs":{},"df":0,"u":{"docs":{},"df":0,"l":{"docs":{},"df":0,"u":{"docs":{},"df":0,"s":{"docs":{},"df":0,"_":{"docs":{},"df":0,"b":{"docs":{},"df":0,"u":{"docs":{},"df":0,"f":{"docs":{},"df":0,")":{"docs":{},"df":0,".":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{},"df":0,"_":{"docs":{},"df":0,"s":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}},"b":{"docs":{},"df":0,"\"":{"docs":{},"df":0,"m":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":1.0}},"df":1}}}}}}}}}}},"h":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{},"df":0,"h":{"docs":{"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":2.23606797749979}},"df":1}}}}}},"s":{"docs":{},"df":0,"u":{"docs":{},"df":0,"m":{"docs":{"https://phlip9.com/notes/android/android cli setup/":{"tf":1.7320508075688772}},"df":1}}}}}},"3":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.4142135623730951}},"df":1,".":{"docs":{},"df":0,"f":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"z":{"docs":{},"df":0,"e":{"docs":{},"df":0,"(":{"docs":{},"df":0,"&":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{},"df":0,"p":{"docs":{},"df":0,";":{"docs":{},"df":0,"m":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}},"u":{"docs":{},"df":0,"p":{"docs":{},"df":0,"d":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"(":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"x":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}},":":{"docs":{},"df":0,":":{"docs":{},"df":0,"v":{"docs":{},"df":0,"2":{"docs":{},"df":0,"5":{"docs":{},"df":0,"6":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0}},"df":1}}}}}}},"d":{"docs":{},"df":0,"e":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":2.0}},"df":1},"o":{"docs":{},"df":0,"w":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":2.0}},"df":1}}},"l":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":2.0}},"df":2}},"m":{"docs":{},"df":0,"p":{"docs":{},"df":0,"o":{"docs":{},"df":0,"o":{"docs":{"https://phlip9.com/notes/misc/water distillation setup/":{"tf":1.0}},"df":1}}}},"p":{"docs":{},"df":0,"e":{"docs":{"https://phlip9.com/notes/lang/lua/":{"tf":2.6457513110645907},"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.4142135623730951}},"df":2,".":{"docs":{},"df":0,"_":{"docs":{},"df":0,"_":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"x":{"docs":{"https://phlip9.com/notes/lang/lua/":{"tf":1.0}},"df":1}}}}}}}},":":{"docs":{},"df":0,"m":{"docs":{},"df":0,"o":{"docs":{},"df":0,"v":{"docs":{},"df":0,"e":{"docs":{},"df":0,"(":{"docs":{},"df":0,"d":{"docs":{},"df":0,"x":{"docs":{"https://phlip9.com/notes/lang/lua/":{"tf":1.0}},"df":1}}}}}}},"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"w":{"docs":{},"df":0,"(":{"docs":{},"df":0,"x":{"docs":{"https://phlip9.com/notes/lang/lua/":{"tf":1.0}},"df":1}}}}}}}},"r":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/fastpay/":{"tf":2.449489742783178},"https://phlip9.com/notes/crypto/(talk) authenticated data structures for stateless validation/":{"tf":1.0}},"df":2},"e":{"docs":{"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/foreign bank account report (FBAR)/":{"tf":1.0},"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/atomic multipath payments (AMP)/":{"tf":2.0},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.7320508075688772},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/secure time/":{"tf":2.0},"https://phlip9.com/notes/confidential computing/intel TDX/":{"tf":1.7320508075688772},"https://phlip9.com/notes/confidential computing/marblerun/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":2.23606797749979},"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":1.0},"https://phlip9.com/notes/crypto/tls exported keying material/":{"tf":1.0},"https://phlip9.com/notes/devops/secrets/ejson (Shopify)/":{"tf":1.0},"https://phlip9.com/notes/devops/secrets/ejson-kms (AWS)/":{"tf":1.0},"https://phlip9.com/notes/devops/secrets/mozilla SOPS/":{"tf":1.0},"https://phlip9.com/notes/devops/secrets/sy - share secrets safely/":{"tf":1.4142135623730951},"https://phlip9.com/notes/distributed systems/papers/(2020) Semi-Fast Byzantine-tolerant Shared Register without Reliable Broadcast/":{"tf":1.7320508075688772},"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/rust/sycamore x futures/":{"tf":1.0},"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.0},"https://phlip9.com/notes/postgres/types of scans/":{"tf":1.4142135623730951},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.7320508075688772},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":2.0}},"df":26,"/":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"s":{"docs":{},"df":0,"p":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"_":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{},"df":0,".":{"docs":{},"df":0,"h":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}},"d":{"docs":{},"df":0,"_":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"g":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"_":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"k":{"docs":{},"df":0,"_":{"docs":{},"df":0,"n":{"docs":{},"df":0,"p":{"docs":{"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}},"w":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"k":{"docs":{"https://phlip9.com/notes/lang/rust/sycamore x futures/":{"tf":1.0}},"df":1}}}}}},"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"g":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.0}},"df":1}}}}},"t":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/misc/kintsugi/":{"tf":1.0}},"df":1}}}},"v":{"docs":{},"df":0,"e":{"docs":{"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.0}},"df":1}}},"e":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0}},"df":1},"t":{"docs":{"https://phlip9.com/notes/lang/rust/rr with rust/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/CDF confidence bands - DKW inequality/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/cheat sheet/":{"tf":1.4142135623730951}},"df":3}},"l":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/android/ADB over TCP inside WSL2/":{"tf":1.0},"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0},"https://phlip9.com/notes/android/root phone with magisk/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0},"https://phlip9.com/notes/lang/gdb ref/":{"tf":1.7320508075688772},"https://phlip9.com/notes/misc/envsubst/":{"tf":1.0},"https://phlip9.com/notes/misc/pop_OS! tweaks/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/nix/links/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/nix/nix auto-allocate-uids -> nixbld users/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/nix/nix debug broken package build/":{"tf":2.23606797749979},"https://phlip9.com/notes/reproducible builds/nix/nix debug spurrious rebuilds/":{"tf":1.4142135623730951}},"df":11}},"r":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/aptos/":{"tf":1.0}},"df":1}}}},"i":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/confidential computing/gramine/":{"tf":1.4142135623730951}},"df":1}}},"f":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/confidential computing/mystikos/":{"tf":1.0},"https://phlip9.com/notes/devops/deployment strategies/":{"tf":1.0},"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":1.0},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/lua/":{"tf":1.0},"https://phlip9.com/notes/networking/CIDR/":{"tf":1.0},"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.4142135623730951}},"df":7}},"m":{"docs":{},"df":0,"/":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"c":{"docs":{},"df":0,"l":{"docs":{},"df":0,"u":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/reproducible builds/nix/nix debug spurrious rebuilds/":{"tf":1.4142135623730951}},"df":1}}}}}}}},"n":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/misc/kintsugi/":{"tf":1.0}},"df":1}},"p":{"docs":{"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/marblerun/":{"tf":1.0}},"df":2},"t":{"docs":{"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0},"https://phlip9.com/notes/misc/setting up a headless raspbian boot image/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/nix/links/":{"tf":1.0}},"df":3}},"o":{"docs":{},"df":0,"p":{"docs":{},"df":0,"i":{"docs":{},"df":0,"f":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/devops/secrets/ejson (Shopify)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/devops/secrets/ejson-kms (AWS)/":{"tf":1.0},"https://phlip9.com/notes/devops/secrets/mozilla SOPS/":{"tf":1.0},"https://phlip9.com/notes/devops/secrets/sy - share secrets safely/":{"tf":1.0}},"df":4}}}},"r":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/AI ML/Markov Decision Process (MDP)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/BOLT 4 - onion routing protocol/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/devops/azure CLI/":{"tf":1.0},"https://phlip9.com/notes/devops/deployment strategies/":{"tf":1.4142135623730951},"https://phlip9.com/notes/devops/nomad/":{"tf":1.4142135623730951}},"df":7,"_":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{},"df":0,"_":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 11 - invoices/":{"tf":1.4142135623730951},"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/BOLT 7 - p2p node and channel discovery/":{"tf":2.23606797749979}},"df":3,"_":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"a":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}},"e":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/crypto/acme protocol/":{"tf":1.0},"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":1.0}},"df":2}},"h":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0}},"df":2}}}}}},"t":{"docs":{"https://phlip9.com/notes/distributed systems/papers/(2020) Semi-Fast Byzantine-tolerant Shared Register without Reliable Broadcast/":{"tf":1.0}},"df":1},"u":{"docs":{},"df":0,"l":{"docs":{},"df":0,"d":{"docs":{},"df":0,"n":{"docs":{},"df":0,"'":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0}},"df":1}}}}}},"w":{"docs":{"https://phlip9.com/notes/AI ML/Expectimax Search/":{"tf":1.0},"https://phlip9.com/notes/WSL/WSL2 custom kernel/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":2.0},"https://phlip9.com/notes/confidential computing/gramine/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.0},"https://phlip9.com/notes/design/form design/":{"tf":1.7320508075688772},"https://phlip9.com/notes/keyboards/moergo glove80/":{"tf":1.0},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.4142135623730951},"https://phlip9.com/notes/misc/kintsugi/":{"tf":1.0},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":3.3166247903554},"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.0},"https://phlip9.com/notes/performance/profiling/":{"tf":2.0},"https://phlip9.com/notes/postgres/snippets/":{"tf":1.4142135623730951},"https://phlip9.com/notes/reproducible builds/nix/nix debug spurrious rebuilds/":{"tf":1.4142135623730951},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.4142135623730951},"https://phlip9.com/notes/statistics probability/testing whether a coin is fair/":{"tf":1.0}},"df":18,"e":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/misc/water distillation setup/":{"tf":1.0}},"df":1}},"n":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.7320508075688772},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.0}},"df":2}}},"u":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0},"https://phlip9.com/notes/devops/deployment strategies/":{"tf":1.0},"https://phlip9.com/notes/postgres/postgres performance tuning/":{"tf":1.0}},"df":4,"d":{"docs":{},"df":0,"o":{"docs":{},"df":0,"w":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/WSL/WSL2 custom kernel/":{"tf":1.0},"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":4.47213595499958},"https://phlip9.com/notes/confidential computing/marblerun/":{"tf":1.0}},"df":4,"_":{"docs":{},"df":0,"s":{"docs":{},"df":0,"c":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"p":{"docs":{},"df":0,"t":{"docs":{},"df":0,"p":{"docs":{},"df":0,"u":{"docs":{},"df":0,"b":{"docs":{},"df":0,"k":{"docs":{},"df":0,"e":{"docs":{},"df":0,"y":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.4142135623730951}},"df":1}}}}}}}}}}}}}}}}}}}},"i":{"docs":{},"df":0,"a":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.7320508075688772}},"df":1},"c":{"docs":{},"df":0,"k":{"docs":{"https://phlip9.com/notes/lang/flutter/flutter setup/":{"tf":1.0}},"df":1}},"d":{"docs":{},"df":0,"e":{"docs":{"https://phlip9.com/notes/android/ADB over TCP inside WSL2/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":3.1622776601683795},"https://phlip9.com/notes/btc-ln/BOLT 7 - p2p node and channel discovery/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/hosted channels/":{"tf":1.4142135623730951},"https://phlip9.com/notes/btc-ln/submarine swaps/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.4142135623730951},"https://phlip9.com/notes/devops/service mesh/":{"tf":1.0},"https://phlip9.com/notes/keyboards/moergo glove80/":{"tf":1.0},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/multinomial distribution/":{"tf":1.0}},"df":11,"c":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/confidential computing/marblerun/":{"tf":1.0},"https://phlip9.com/notes/devops/consul/":{"tf":1.4142135623730951},"https://phlip9.com/notes/devops/service mesh/":{"tf":1.0}},"df":3}},"h":{"docs":{},"df":0,"a":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/fastpay/":{"tf":1.0}},"df":1}}}}},"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/android/OTA updates for rooted android phone/":{"tf":2.0}},"df":1}}}}}},"f":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.4142135623730951}},"df":1},"g":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/fastpay/":{"tf":1.4142135623730951},"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.7320508075688772},"https://phlip9.com/notes/btc-ln/BOLT 7 - p2p node and channel discovery/":{"tf":2.0}},"df":3,"_":{"docs":{},"df":0,"r":{"docs":{},"df":0,"l":{"docs":{},"df":0,"_":{"docs":{},"df":0,"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"z":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0}},"df":1}}}}}}},"m":{"docs":{},"df":0,"a":{"docs":{"https://phlip9.com/notes/statistics probability/standard error/":{"tf":2.6457513110645907},"https://phlip9.com/notes/statistics probability/testing whether a coin is fair/":{"tf":1.4142135623730951}},"df":2,"'":{"docs":{"https://phlip9.com/notes/statistics probability/testing whether a coin is fair/":{"tf":1.0}},"df":1},"^":{"docs":{},"df":0,"2":{"docs":{"https://phlip9.com/notes/statistics probability/standard error/":{"tf":1.7320508075688772}},"df":1,"}":{"docs":{},"df":0,"{":{"docs":{},"df":0,"n":{"docs":{},"df":0,"^":{"docs":{},"df":0,"2":{"docs":{"https://phlip9.com/notes/statistics probability/standard error/":{"tf":1.0}},"df":1}}}}}}},"_":{"docs":{},"df":0,"x":{"docs":{"https://phlip9.com/notes/statistics probability/standard error/":{"tf":1.0}},"df":1},"{":{"docs":{},"df":0,"\\":{"docs":{},"df":0,"m":{"docs":{},"df":0,"u":{"docs":{},"df":0,"_":{"docs":{},"df":0,"x":{"docs":{"https://phlip9.com/notes/statistics probability/standard error/":{"tf":2.6457513110645907},"https://phlip9.com/notes/statistics probability/testing whether a coin is fair/":{"tf":2.8284271247461903}},"df":2}}}}},"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/statistics probability/testing whether a coin is fair/":{"tf":1.7320508075688772}},"df":1}}}}}}},"n":{"docs":{"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":2.449489742783178},"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/monetary instruments/":{"tf":1.0},"https://phlip9.com/notes/b l o c k c h a i n/fastpay/":{"tf":2.449489742783178},"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":3.1622776601683795},"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":2.0},"https://phlip9.com/notes/btc-ln/BOLT 7 - p2p node and channel discovery/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/gramine/":{"tf":3.1622776601683795},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":4.47213595499958},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":3.1622776601683795},"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":2.6457513110645907},"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/secure time/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel TDX/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":2.0},"https://phlip9.com/notes/crypto/TLS self-signed pubkey-only certs/":{"tf":2.0},"https://phlip9.com/notes/crypto/acme protocol/":{"tf":2.0},"https://phlip9.com/notes/crypto/biscuit authz/":{"tf":2.0},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.4142135623730951},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.4142135623730951}},"df":19,"a":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":4.69041575982343},"https://phlip9.com/notes/btc-ln/breez lightning service providers/":{"tf":1.4142135623730951},"https://phlip9.com/notes/btc-ln/lightning rod/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/rust/understanding sycamore reactivity/":{"tf":3.605551275463989},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0},"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.0}},"df":6,"&":{"docs":{},"df":0,"l":{"docs":{},"df":0,"t":{"docs":{},"df":0,";":{"docs":{},"df":0,"u":{"docs":{},"df":0,"&":{"docs":{},"df":0,"g":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/lang/rust/sycamore x futures/":{"tf":1.0}},"df":1}}}}}}}},"'":{"docs":{"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0}},"df":1},".":{"docs":{},"df":0,"g":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/lang/rust/understanding sycamore reactivity/":{"tf":1.7320508075688772}},"df":1,"(":{"docs":{},"df":0,")":{"docs":{"https://phlip9.com/notes/lang/rust/understanding sycamore reactivity/":{"tf":1.0}},"df":1}}}}},"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"p":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{},"df":0,"x":{"docs":{"https://phlip9.com/notes/lang/rust/understanding sycamore reactivity/":{"tf":1.0}},"df":1}}}}}}},"a":{"docs":{},"df":0,"p":{"docs":{},"df":0,"p":{"docs":{},"df":0,"/":{"docs":{},"df":0,"s":{"docs":{},"df":0,"g":{"docs":{},"df":0,"x":{"docs":{},"df":0,"_":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"m":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/lang/rust/rust x SGX/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}},"t":{"docs":{},"df":0,"u":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/foreign bank account report (FBAR)/":{"tf":2.0},"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":3.3166247903554},"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":3.4641016151377544},"https://phlip9.com/notes/btc-ln/BOLT 7 - p2p node and channel discovery/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":3.3166247903554},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.7320508075688772},"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.7320508075688772},"https://phlip9.com/notes/confidential computing/intel SGX/secure time/":{"tf":1.0},"https://phlip9.com/notes/crypto/TLS self-signed pubkey-only certs/":{"tf":1.0},"https://phlip9.com/notes/crypto/acme protocol/":{"tf":1.0},"https://phlip9.com/notes/crypto/biscuit authz/":{"tf":1.0},"https://phlip9.com/notes/distributed systems/papers/(2020) Semi-Fast Byzantine-tolerant Shared Register without Reliable Broadcast/":{"tf":1.0},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0}},"df":13,"e":{"docs":{},"df":0,"\"":{"docs":{},"df":0,":":{"docs":{},"df":0,"\"":{"docs":{},"df":0,"e":{"docs":{},"df":0,"4":{"docs":{},"df":0,"5":{"docs":{},"df":0,"7":{"docs":{},"df":0,"8":{"docs":{},"df":0,"5":{"docs":{},"df":0,"7":{"docs":{},"df":0,"5":{"docs":{},"df":0,"6":{"docs":{},"df":0,"a":{"docs":{},"df":0,"0":{"docs":{},"df":0,"6":{"docs":{},"df":0,"a":{"docs":{},"df":0,"b":{"docs":{},"df":0,"f":{"docs":{},"df":0,"a":{"docs":{},"df":0,"b":{"docs":{},"df":0,"b":{"docs":{},"df":0,"2":{"docs":{},"df":0,"e":{"docs":{},"df":0,"b":{"docs":{},"df":0,"6":{"docs":{},"df":0,"4":{"docs":{},"df":0,"8":{"docs":{},"df":0,"1":{"docs":{},"df":0,"c":{"docs":{},"df":0,"3":{"docs":{},"df":0,"b":{"docs":{},"df":0,"6":{"docs":{},"df":0,"7":{"docs":{},"df":0,"c":{"docs":{},"df":0,"8":{"docs":{},"df":0,"a":{"docs":{},"df":0,"0":{"docs":{},"df":0,"7":{"docs":{},"df":0,"2":{"docs":{},"df":0,"9":{"docs":{},"df":0,"1":{"docs":{},"df":0,"4":{"docs":{},"df":0,"2":{"docs":{},"df":0,"e":{"docs":{},"df":0,"1":{"docs":{},"df":0,"0":{"docs":{},"df":0,"e":{"docs":{},"df":0,"0":{"docs":{},"df":0,"6":{"docs":{},"df":0,"e":{"docs":{},"df":0,"6":{"docs":{},"df":0,"4":{"docs":{},"df":0,"1":{"docs":{},"df":0,"5":{"docs":{},"df":0,"9":{"docs":{},"df":0,"4":{"docs":{},"df":0,"8":{"docs":{},"df":0,"a":{"docs":{},"df":0,"8":{"docs":{},"df":0,"8":{"docs":{},"df":0,"e":{"docs":{},"df":0,"2":{"docs":{},"df":0,"f":{"docs":{},"df":0,"2":{"docs":{},"df":0,"e":{"docs":{},"df":0,"7":{"docs":{},"df":0,"7":{"docs":{},"df":0,"3":{"docs":{},"df":0,"b":{"docs":{},"df":0,"b":{"docs":{},"df":0,"2":{"docs":{},"df":0,"f":{"docs":{},"df":0,"f":{"docs":{},"df":0,"9":{"docs":{},"df":0,"f":{"docs":{},"df":0,"5":{"docs":{},"df":0,"1":{"docs":{},"df":0,"3":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"3":{"docs":{},"df":0,"2":{"docs":{},"df":0,"e":{"docs":{},"df":0,"4":{"docs":{},"df":0,"c":{"docs":{},"df":0,"5":{"docs":{},"df":0,"a":{"docs":{},"df":0,"f":{"docs":{},"df":0,"b":{"docs":{},"df":0,"1":{"docs":{},"df":0,"5":{"docs":{},"df":0,"8":{"docs":{},"df":0,"8":{"docs":{},"df":0,"3":{"docs":{},"df":0,"a":{"docs":{},"df":0,"b":{"docs":{},"df":0,"6":{"docs":{},"df":0,"5":{"docs":{},"df":0,"3":{"docs":{},"df":0,"3":{"docs":{},"df":0,"9":{"docs":{},"df":0,"3":{"docs":{},"df":0,"f":{"docs":{},"df":0,"8":{"docs":{},"df":0,"0":{"docs":{},"df":0,"8":{"docs":{},"df":0,"2":{"docs":{},"df":0,"f":{"docs":{},"df":0,"6":{"docs":{},"df":0,"9":{"docs":{},"df":0,"b":{"docs":{},"df":0,"6":{"docs":{},"df":0,"9":{"docs":{},"df":0,"b":{"docs":{},"df":0,"a":{"docs":{},"df":0,"1":{"docs":{},"df":0,"9":{"docs":{},"df":0,"a":{"docs":{},"df":0,"2":{"docs":{},"df":0,"a":{"docs":{},"df":0,"2":{"docs":{},"df":0,"1":{"docs":{},"df":0,"e":{"docs":{},"df":0,"3":{"docs":{},"df":0,"e":{"docs":{},"df":0,"e":{"docs":{},"df":0,"f":{"docs":{},"df":0,"e":{"docs":{},"df":0,"e":{"docs":{},"df":0,"7":{"docs":{},"df":0,"c":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"_":{"docs":{},"df":0,"b":{"docs":{},"df":0,"u":{"docs":{},"df":0,"f":{"docs":{},"df":0,"_":{"docs":{},"df":0,"s":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0}},"df":1}}}}},"f":{"docs":{},"df":0,"i":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.4142135623730951}},"df":1}}}}}}},"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{},"df":0,"_":{"docs":{},"df":0,"s":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0}},"df":1}}}}},"s":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{},"df":0,"e":{"docs":{},"df":0,"m":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0}},"df":1}}}}},"t":{"docs":{},"df":0,"y":{"docs":{},"df":0,"p":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0}},"df":1}}}},"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"g":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"h":{"docs":{},"df":0,"m":{"docs":{"https://phlip9.com/notes/crypto/TLS self-signed pubkey-only certs/":{"tf":1.4142135623730951}},"df":1}}}}}}}}}}}}}},"e":{"docs":{},"df":0,"d":{"docs":{},"df":0,"_":{"docs":{},"df":0,"t":{"docs":{},"df":0,"x":{"docs":{"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.0}},"df":1}}}},"r":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":3.0},"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":1.0}},"df":3,"'":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.0}},"df":2},"_":{"docs":{},"df":0,"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{},"df":0,"u":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0}},"df":1}}}}}}},"i":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/confidential computing/marblerun/":{"tf":1.0}},"df":1}}}},"i":{"docs":{},"df":0,"f":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.0},"https://phlip9.com/notes/networking/CIDR/":{"tf":1.7320508075688772},"https://phlip9.com/notes/performance/bit hacks/":{"tf":2.0},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/p-value/":{"tf":1.4142135623730951}},"df":5,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/AI ML/Markov Decision Process (MDP)/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/secure time/":{"tf":1.0},"https://phlip9.com/notes/crypto/acme protocol/":{"tf":1.4142135623730951},"https://phlip9.com/notes/misc/prepping RPI for embedded dev/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.0}},"df":6}}}}}}}}}},"r":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0}},"df":2}},"s":{"docs":{},"df":0,"/":{"docs":{},"df":0,"k":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/devops/kind (kubernetes in docker)/":{"tf":1.0}},"df":1}}}}},"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"u":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":3.872983346207417}},"df":2,".":{"docs":{},"df":0,"m":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"c":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"v":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}},"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0},"https://phlip9.com/notes/android/root phone with magisk/":{"tf":1.0},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0},"https://phlip9.com/notes/postgres/snippets/":{"tf":1.0}},"df":4}}},"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.0},"https://phlip9.com/notes/lang/flutter/flutter setup/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/rr with rust/":{"tf":1.0},"https://phlip9.com/notes/misc/water distillation setup/":{"tf":1.0}},"df":4}}}},"v":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/misc/kintsugi/":{"tf":1.7320508075688772}},"df":1}}}},"m":{"docs":{"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/p-value/":{"tf":2.23606797749979}},"df":2,"d":{"docs":{"https://phlip9.com/notes/combinatorics/k-combinations of a multiset/":{"tf":1.0},"https://phlip9.com/notes/performance/simdjson talk/":{"tf":2.6457513110645907}},"df":2,"j":{"docs":{},"df":0,"s":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/performance/simdjson talk/":{"tf":2.0}},"df":1}}}}},"i":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/fastpay/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.0},"https://phlip9.com/notes/devops/secrets/ejson (Shopify)/":{"tf":1.0},"https://phlip9.com/notes/devops/secrets/ejson-kms (AWS)/":{"tf":1.0},"https://phlip9.com/notes/devops/secrets/mozilla SOPS/":{"tf":1.0},"https://phlip9.com/notes/devops/secrets/sy - share secrets safely/":{"tf":1.0},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/rebuilderd/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.4142135623730951}},"df":11,"l":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.4142135623730951}},"df":4}}}}}},"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"b":{"docs":{},"df":0,"a":{"docs":{},"df":0,"e":{"docs":{},"df":0,"u":{"docs":{},"df":0,"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"/":{"docs":{},"df":0,"s":{"docs":{},"df":0,"y":{"docs":{},"df":0,"n":{"docs":{},"df":0,"c":{"docs":{"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":1.0}},"df":1}}}}}}}}}}}}}},"p":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/AI ML/Expectimax Search/":{"tf":1.4142135623730951},"https://phlip9.com/notes/btc-ln/hosted channels/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/lightning libs/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.0},"https://phlip9.com/notes/crypto/TLS self-signed pubkey-only certs/":{"tf":1.0},"https://phlip9.com/notes/devops/consul/":{"tf":1.0},"https://phlip9.com/notes/devops/deployment strategies/":{"tf":1.4142135623730951},"https://phlip9.com/notes/devops/secrets/ejson (Shopify)/":{"tf":1.0},"https://phlip9.com/notes/devops/secrets/mozilla SOPS/":{"tf":1.0},"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":2.0},"https://phlip9.com/notes/lang/lua/":{"tf":1.0},"https://phlip9.com/notes/networking/CIDR/":{"tf":1.0},"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.0},"https://phlip9.com/notes/postgres/postgres performance tuning/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/nix/links/":{"tf":1.4142135623730951},"https://phlip9.com/notes/statistics probability/multinomial distribution/":{"tf":1.0}},"df":18,"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"c":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"a":{"docs":{},"df":0,"g":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"&":{"docs":{},"df":0,"l":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}},"p":{"docs":{},"df":0,"e":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"a":{"docs":{},"df":0,"g":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"&":{"docs":{},"df":0,"l":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}},"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"s":{"docs":{},"df":0,"a":{"docs":{},"df":0,"g":{"docs":{"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.0}},"df":1}}}}}},"r":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/fastpay/":{"tf":1.0},"https://phlip9.com/notes/crypto/TLS self-signed pubkey-only certs/":{"tf":1.0},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0}},"df":3},"s":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/devops/deployment strategies/":{"tf":1.0},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0}},"df":2}}},"i":{"docs":{"https://phlip9.com/notes/AI ML/Markov Decision Process (MDP)/":{"tf":1.0},"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.0},"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":1.0},"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":1.0},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":6,"f":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.0},"https://phlip9.com/notes/crypto/acme protocol/":{"tf":1.0},"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":1.0},"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":1.0},"https://phlip9.com/notes/fuzzing/fuzzcheck-rs/":{"tf":1.4142135623730951},"https://phlip9.com/notes/networking/network interface card (NIC)/":{"tf":1.0},"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":2.0},"https://phlip9.com/notes/statistics probability/testing whether a coin is fair/":{"tf":1.4142135623730951}},"df":11}}}}},"u":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/AI ML/Markov Decision Process (MDP)/":{"tf":2.449489742783178},"https://phlip9.com/notes/confidential computing/mystikos/":{"tf":1.0},"https://phlip9.com/notes/ios/ios setup/":{"tf":2.23606797749979},"https://phlip9.com/notes/lang/flutter/flutter setup/":{"tf":1.0},"https://phlip9.com/notes/lang/lua/":{"tf":1.0},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":6,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/money services business (MSB)/":{"tf":1.0}},"df":1}}}},"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/fuzzing/fuzzcheck-rs/":{"tf":1.0}},"df":1}}}}}},"n":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1,"(":{"docs":{},"df":0,"0":{"docs":{},"df":0,".":{"docs":{},"df":0,"0":{"docs":{},"df":0,"1":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.4142135623730951}},"df":1}},"1":{"docs":{},"df":0,"0":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1},"5":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1}},"3":{"docs":{},"df":0,"1":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1}},"4":{"docs":{},"df":0,"6":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1}},"5":{"docs":{},"df":0,"4":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1}}}},"1":{"docs":{},"df":0,".":{"docs":{},"df":0,"0":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.4142135623730951}},"df":1}}},"3":{"docs":{},"df":0,".":{"docs":{},"df":0,"0":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.4142135623730951}},"df":1}}},"a":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1,"n":{"docs":{},"df":0,"g":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1}}}},"p":{"docs":{},"df":0,"h":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0}},"df":1}}},"t":{"docs":{},"df":0,"h":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.7320508075688772}},"df":1}}}},"i":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1},"x":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1}},"u":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1},"v":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1},"x":{"docs":{},"df":0,")":{"docs":{},"df":0,"*":{"docs":{},"df":0,"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"(":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.4142135623730951}},"df":1}}}}}}}}},"c":{"docs":{},"df":0,"(":{"docs":{},"df":0,"0":{"docs":{},"df":0,".":{"docs":{},"df":0,"5":{"docs":{},"df":0,"4":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1}}}},"x":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1}}},"g":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/AI ML/Expectimax Search/":{"tf":1.0},"https://phlip9.com/notes/AI ML/Markov Decision Process (MDP)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/b l o c k c h a i n/fastpay/":{"tf":1.4142135623730951},"https://phlip9.com/notes/btc-ln/BOLT 11 - invoices/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/breez lightning service providers/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.0},"https://phlip9.com/notes/combinatorics/k-combinations of a multiset/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0},"https://phlip9.com/notes/crypto/biscuit authz/":{"tf":1.0},"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":1.4142135623730951},"https://phlip9.com/notes/design/form design/":{"tf":1.0},"https://phlip9.com/notes/devops/docker compose/":{"tf":1.4142135623730951},"https://phlip9.com/notes/devops/k3s/":{"tf":1.0},"https://phlip9.com/notes/devops/minikube/":{"tf":1.0},"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":1.0},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/lua/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/rust/rr with rust/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/rust verification tools/":{"tf":1.0},"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":1.4142135623730951},"https://phlip9.com/notes/networking/ipv6 address space/":{"tf":1.0},"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.7320508075688772},"https://phlip9.com/notes/nvim/universal-ctags Notes/":{"tf":1.0},"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.0},"https://phlip9.com/notes/postgres/snippets/":{"tf":1.0},"https://phlip9.com/notes/postgres/types of scans/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":2.0},"https://phlip9.com/notes/statistics probability/CDF confidence bands - DKW inequality/":{"tf":1.0}},"df":31}}},"p":{"docs":{"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.0}},"df":1},"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":1.4142135623730951}},"df":1}}},"t":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/secure time/":{"tf":1.0},"https://phlip9.com/notes/misc/kintsugi/":{"tf":1.0},"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/CDF confidence bands - DKW inequality/":{"tf":1.0}},"df":4,"0":{"docs":{"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.7320508075688772}},"df":1},"e":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/gramine/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/mystikos/":{"tf":1.0},"https://phlip9.com/notes/crypto/acme protocol/":{"tf":1.0},"https://phlip9.com/notes/crypto/biscuit authz/":{"tf":1.0},"https://phlip9.com/notes/crypto/dex - open-source OIDC & OAuth 2.0 provider/":{"tf":1.0},"https://phlip9.com/notes/crypto/smallstep - private online CA & ACME server/":{"tf":1.0},"https://phlip9.com/notes/devops/consul/":{"tf":1.0},"https://phlip9.com/notes/devops/kind (kubernetes in docker)/":{"tf":1.0},"https://phlip9.com/notes/devops/linkerd/":{"tf":1.0},"https://phlip9.com/notes/devops/nomad/":{"tf":1.0},"https://phlip9.com/notes/devops/o11y/jaeger oss e2e tracing/":{"tf":1.0},"https://phlip9.com/notes/devops/secrets/1password - secrets automation/":{"tf":1.0},"https://phlip9.com/notes/devops/secrets/doppler/":{"tf":1.0},"https://phlip9.com/notes/devops/secrets/fortanix DSM/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/rr with rust/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/nix/links/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":2.449489742783178},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":3.4641016151377544},"https://phlip9.com/notes/statistics probability/herbie - float error fixer/":{"tf":1.0}},"df":21},"u":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/keyboards/moergo glove80/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":2.0}},"df":3}}}},"v":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0}},"df":1},"z":{"docs":{},"df":0,"e":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/btc utreexo - utxo accumulator/":{"tf":1.0},"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":2.23606797749979},"https://phlip9.com/notes/btc-ln/BOLT 8 - secure noise transport/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":3.7416573867739413},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.7320508075688772},"https://phlip9.com/notes/confidential computing/gramine/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":3.3166247903554},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":2.23606797749979},"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":3.0},"https://phlip9.com/notes/crypto/(talk) authenticated data structures for stateless validation/":{"tf":1.0},"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":3.1622776601683795},"https://phlip9.com/notes/devops/azure CLI/":{"tf":1.0},"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":3.3166247903554},"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":4.242640687119285},"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":2.23606797749979},"https://phlip9.com/notes/performance/simdjson talk/":{"tf":1.0},"https://phlip9.com/notes/postgres/snippets/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.4142135623730951},"https://phlip9.com/notes/statistics probability/multinomial distribution/":{"tf":1.4142135623730951},"https://phlip9.com/notes/statistics probability/p-value/":{"tf":1.0}},"df":24,"=":{"docs":{},"df":0,"1":{"docs":{"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":1.0}},"df":1,"0":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0}},"df":1}},"3":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0}},"df":1},"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"c":{"docs":{},"df":0,"r":{"docs":{},"df":0,"y":{"docs":{},"df":0,"p":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"d":{"docs":{},"df":0,"_":{"docs":{},"df":0,"p":{"docs":{},"df":0,"p":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{},"df":0,"_":{"docs":{},"df":0,"b":{"docs":{},"df":0,"u":{"docs":{},"df":0,"f":{"docs":{},"df":0,"_":{"docs":{},"df":0,"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"z":{"docs":{},"df":0,"e":{"docs":{},"df":0,"]":{"docs":{},"df":0,"u":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"8":{"docs":{},"df":0,"_":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"k":{"docs":{},"df":0,"e":{"docs":{},"df":0,"y":{"docs":{},"df":0,"_":{"docs":{},"df":0,"s":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0}},"df":1,"i":{"docs":{},"df":0,"z":{"docs":{},"df":0,"e":{"docs":{},"df":0,"]":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0}},"df":1}}}}}}}}}}}}}},"p":{"docs":{},"df":0,"u":{"docs":{},"df":0,"b":{"docs":{},"df":0,"_":{"docs":{},"df":0,"k":{"docs":{},"df":0,"e":{"docs":{},"df":0,"y":{"docs":{},"df":0,"_":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{},"df":0,"_":{"docs":{},"df":0,"s":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0}},"df":1}}}}}}}}}}}},"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"g":{"docs":{},"df":0,"n":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"u":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"_":{"docs":{},"df":0,"b":{"docs":{},"df":0,"u":{"docs":{},"df":0,"f":{"docs":{},"df":0,"_":{"docs":{},"df":0,"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"z":{"docs":{},"df":0,"e":{"docs":{},"df":0,"]":{"docs":{},"df":0,"u":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"8":{"docs":{},"df":0,"_":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}},"_":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":3.3166247903554}},"df":1}},"o":{"docs":{},"df":0,"f":{"docs":{},"df":0,"(":{"docs":{},"df":0,"*":{"docs":{},"df":0,"h":{"docs":{},"df":0,"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.0}},"df":1}}}},"k":{"docs":{},"df":0,"e":{"docs":{},"df":0,"y":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"q":{"docs":{},"df":0,"u":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.4142135623730951}},"df":1}}}}}}}}}},"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.0}},"df":1}}}},"h":{"docs":{},"df":0,"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":2.8284271247461903}},"df":1}}}},"k":{"docs":{},"df":0,"e":{"docs":{},"df":0,"y":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"q":{"docs":{},"df":0,"u":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.0}},"df":1}}}}}}}}}},"p":{"docs":{},"df":0,"a":{"docs":{},"df":0,"y":{"docs":{},"df":0,"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{},"df":0,"_":{"docs":{},"df":0,"i":{"docs":{},"df":0,"v":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.0}},"df":1}}}}}}}}}},"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"p":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{},"df":0,".":{"docs":{},"df":0,"b":{"docs":{},"df":0,"o":{"docs":{},"df":0,"d":{"docs":{},"df":0,"y":{"docs":{},"df":0,".":{"docs":{},"df":0,"c":{"docs":{},"df":0,"p":{"docs":{},"df":0,"u":{"docs":{},"df":0,"s":{"docs":{},"df":0,"v":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}},"s":{"docs":{},"df":0,"g":{"docs":{},"df":0,"x":{"docs":{},"df":0,"_":{"docs":{},"df":0,"c":{"docs":{},"df":0,"p":{"docs":{},"df":0,"u":{"docs":{},"df":0,"_":{"docs":{},"df":0,"s":{"docs":{},"df":0,"v":{"docs":{},"df":0,"n":{"docs":{},"df":0,"_":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.0}},"df":1}}}}}}}}},"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"v":{"docs":{},"df":0,"_":{"docs":{},"df":0,"s":{"docs":{},"df":0,"v":{"docs":{},"df":0,"n":{"docs":{},"df":0,"_":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.0}},"df":1}}}}}}}}},"k":{"docs":{},"df":0,"e":{"docs":{},"df":0,"y":{"docs":{},"df":0,"_":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{},"df":0,"_":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":2.23606797749979}},"df":1}}}},"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"q":{"docs":{},"df":0,"u":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"_":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.4142135623730951}},"df":1}}}}}}}}}}}}}}}}}}}}}}},"k":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{"https://phlip9.com/notes/btc-ln/atomic multipath payments (AMP)/":{"tf":1.0}},"df":1,"i":{"docs":{"https://phlip9.com/notes/android/ADB over TCP inside WSL2/":{"tf":1.4142135623730951}},"df":1}}}},"w":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/secure time/":{"tf":1.0}},"df":1}},"i":{"docs":{},"df":0,"a":{"docs":{},"df":0,"p":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,";":{"docs":{},"df":0,"3":{"docs":{"https://phlip9.com/notes/android/android cli setup/":{"tf":1.0}},"df":1}}}}}}}}},"p":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0},"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":2.0},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.4142135623730951},"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.0}},"df":4}},"u":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.0},"https://phlip9.com/notes/devops/azure CLI/":{"tf":2.23606797749979}},"df":4},"y":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"k":{"docs":{"https://phlip9.com/notes/WSL/WSL2 custom kernel/":{"tf":1.0},"https://phlip9.com/notes/performance/simdjson talk/":{"tf":2.23606797749979}},"df":2}}}}},"l":{"docs":{"https://phlip9.com/notes/devops/azure CLI/":{"tf":1.0}},"df":1,"a":{"docs":{"https://phlip9.com/notes/devops/AKS - azure kubernetes service/":{"tf":1.0}},"df":1,"a":{"docs":{},"df":0,"c":{"docs":{"https://phlip9.com/notes/networking/ipv6 address space/":{"tf":1.0}},"df":1}}},"e":{"docs":{},"df":0,"e":{"docs":{},"df":0,"p":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.7320508075688772},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":2}}},"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"e":{"docs":{"https://phlip9.com/notes/combinatorics/k-combinations of a multiset/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/lightning router overview/":{"tf":1.0}},"df":2}},"d":{"docs":{},"df":0,"e":{"docs":{"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":1.4142135623730951},"https://phlip9.com/notes/fuzzing/fuzzing/":{"tf":1.0}},"df":2}},"g":{"docs":{},"df":0,"h":{"docs":{},"df":0,"t":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/combinatorics/k-combinations of a multiset/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":1.0},"https://phlip9.com/notes/crypto/(talk) authenticated data structures for stateless validation/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/rr with rust/":{"tf":1.0}},"df":4}}}}}},"o":{"docs":{},"df":0,"p":{"docs":{},"df":0,"p":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/devops/secrets/envkey/":{"tf":1.0}},"df":1}}},"t":{"docs":{"https://phlip9.com/notes/android/OTA updates for rooted android phone/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.0},"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":1.0},"https://phlip9.com/notes/keyboards/moergo glove80/":{"tf":1.0}},"df":4},"w":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/fastpay/":{"tf":1.0},"https://phlip9.com/notes/misc/pop_OS! tweaks/":{"tf":1.0},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.4142135623730951},"https://phlip9.com/notes/router/lightning router/lightning router overview/":{"tf":1.0}},"df":5,"e":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0},"https://phlip9.com/notes/misc/kintsugi/":{"tf":1.0},"https://phlip9.com/notes/performance/simdjson talk/":{"tf":1.0},"https://phlip9.com/notes/postgres/types of scans/":{"tf":1.4142135623730951}},"df":4},"s":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.0}},"df":1}}},"l":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/AI ML/Expectimax Search/":{"tf":1.0},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.4142135623730951}},"df":2}}}}},"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/btc-ln/breez lightning service providers/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":2.0},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/secure time/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/marblerun/":{"tf":1.0},"https://phlip9.com/notes/devops/minikube/":{"tf":1.0},"https://phlip9.com/notes/devops/secrets/ejson (Shopify)/":{"tf":1.0},"https://phlip9.com/notes/misc/kintsugi/":{"tf":1.4142135623730951},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0},"https://phlip9.com/notes/postgres/types of scans/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/testing whether a coin is fair/":{"tf":1.0}},"df":12,"e":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/AI ML/Markov Decision Process (MDP)/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0},"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.4142135623730951}},"df":4}},"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"p":{"docs":{"https://phlip9.com/notes/crypto/smallstep - private online CA & ACME server/":{"tf":1.4142135623730951}},"df":1}}}}}},"r":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/fastpay/":{"tf":3.0},"https://phlip9.com/notes/fuzzing/fuzzing/":{"tf":1.0}},"df":2}}},"e":{"docs":{"https://phlip9.com/notes/statistics probability/testing whether a coin is fair/":{"tf":1.0}},"df":1},"i":{"docs":{},"df":0,"r":{"docs":{},"df":0,"n":{"docs":{},"df":0,"o":{"docs":{},"df":0,"v":{"docs":{"https://phlip9.com/notes/statistics probability/CDF confidence bands - DKW inequality/":{"tf":1.4142135623730951}},"df":1}}}}},"o":{"docs":{},"df":0,"k":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.4142135623730951}},"df":1,"_":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"b":{"docs":{},"df":0,"u":{"docs":{},"df":0,"g":{"docs":{},"df":0,"_":{"docs":{},"df":0,"p":{"docs":{},"df":0,"u":{"docs":{},"df":0,"b":{"docs":{},"df":0,"t":{"docs":{},"df":0,"y":{"docs":{},"df":0,"p":{"docs":{"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":3.1622776601683795}},"df":1}}}}}}}}}}}}}}}}}}}},"p":{"docs":{"https://phlip9.com/notes/WSL/WSL2 custom kernel/":{"tf":1.4142135623730951},"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0}},"df":2},"u":{"docs":{},"df":0,"d":{"docs":{},"df":0,"g":{"docs":{"https://phlip9.com/notes/misc/kintsugi/":{"tf":1.0}},"df":1}}}},"n":{"docs":{},"df":0,"a":{"docs":{},"df":0,"p":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0}},"df":1},"s":{"docs":{},"df":0,"h":{"docs":{},"df":0,"o":{"docs":{},"df":0,"t":{"docs":{},"df":0,".":{"docs":{},"df":0,"g":{"docs":{},"df":0,"p":{"docs":{},"df":0,"g":{"docs":{},"df":0,".":{"docs":{},"df":0,"k":{"docs":{},"df":0,"e":{"docs":{},"df":0,"y":{"docs":{"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0}},"df":1}}}}}}}},"t":{"docs":{"https://phlip9.com/notes/reproducible builds/nix/links/":{"tf":1.0}},"df":1}}}}}}},"i":{"docs":{},"df":0,"p":{"docs":{},"df":0,"p":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/lightning rod/":{"tf":1.0},"https://phlip9.com/notes/postgres/snippets/":{"tf":1.4142135623730951}},"df":3}}}}},"t":{"docs":{},"df":0,"p":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/secure time/":{"tf":1.4142135623730951}},"df":1}}},"o":{"docs":{},"df":0,"c":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/android/ADB over TCP inside WSL2/":{"tf":2.6457513110645907}},"df":1}},"i":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.7320508075688772}},"df":1}}},"k":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.7320508075688772},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0},"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":1.7320508075688772},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.4142135623730951}},"df":7,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"c":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"p":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.0}},"df":1}}}}}}}}}}}}}},"f":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.4142135623730951}},"df":1,"w":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/WSL/WSL2 custom kernel/":{"tf":1.0},"https://phlip9.com/notes/android/root phone with magisk/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":3.4641016151377544},"https://phlip9.com/notes/confidential computing/gramine/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":3.3166247903554},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":2.0},"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":2.0},"https://phlip9.com/notes/confidential computing/intel TDX/":{"tf":1.7320508075688772},"https://phlip9.com/notes/confidential computing/mystikos/":{"tf":1.0},"https://phlip9.com/notes/fuzzing/fuzzing/":{"tf":1.7320508075688772},"https://phlip9.com/notes/misc/optimization solvers/":{"tf":1.0},"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.4142135623730951},"https://phlip9.com/notes/reproducible builds/reproducible-builds.org/":{"tf":2.449489742783178},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.7320508075688772},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":2.449489742783178}},"df":16,"e":{"docs":{},"df":0,"'":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.0}},"df":1},"u":{"docs":{},"df":0,"p":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/lang/flutter/flutter setup/":{"tf":1.0}},"df":1}}}}}}}}},"l":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/misc/kintsugi/":{"tf":1.0}},"df":1},"e":{"docs":{"https://phlip9.com/notes/btc-ln/breez lightning service providers/":{"tf":1.0},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0}},"df":2,"y":{"docs":{"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/money services business (MSB)/":{"tf":1.0}},"df":1}},"i":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.4142135623730951}},"df":1}},"u":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/btc-ln/atomic multipath payments (AMP)/":{"tf":1.0},"https://phlip9.com/notes/devops/secrets/doppler/":{"tf":1.0},"https://phlip9.com/notes/fuzzing/fuzzing/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.4142135623730951}},"df":6}},"v":{"docs":{"https://phlip9.com/notes/btc-ln/submarine swaps/":{"tf":1.0}},"df":1,"e":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/misc/optimization solvers/":{"tf":2.449489742783178}},"df":1,";":{"docs":{},"df":0,"1":{"docs":{},"df":0,".":{"docs":{},"df":0,"0":{"docs":{},"df":0,".":{"docs":{},"df":0,"0":{"docs":{"https://phlip9.com/notes/android/android cli setup/":{"tf":1.0}},"df":1},"2":{"docs":{"https://phlip9.com/notes/android/android cli setup/":{"tf":1.0}},"df":1}}}}}}}}}},"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"(":{"docs":{},"df":0,"(":{"docs":{},"df":0,"7":{"docs":{"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.0}},"df":1}},"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"b":{"docs":{"https://phlip9.com/notes/combinatorics/k-combinations of a multiset/":{"tf":1.0}},"df":1}}}},"f":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0}},"df":1},"i":{"docs":{"https://phlip9.com/notes/combinatorics/k-combinations of a multiset/":{"tf":1.0}},"df":1},"j":{"docs":{"https://phlip9.com/notes/combinatorics/k-combinations of a multiset/":{"tf":1.0}},"df":1},"k":{"docs":{},"df":0,"p":{"docs":{"https://phlip9.com/notes/crypto/TLS self-signed pubkey-only certs/":{"tf":1.0}},"df":1}},"p":{"docs":{},"df":0,"a":{"docs":{},"df":0,"y":{"docs":{"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.4142135623730951}},"df":1}},"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"x":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0}},"df":1}}}}}}}},"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"i":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"g":{"docs":{"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.0}},"df":1}}}}}}},"u":{"docs":{},"df":0,"6":{"docs":{},"df":0,"4":{"docs":{},"df":0,"_":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"i":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"g":{"docs":{},"df":0,"_":{"docs":{},"df":0,"z":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"_":{"docs":{},"df":0,"b":{"docs":{},"df":0,"y":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"(":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{},"df":0,"k":{"docs":{},"df":0,"_":{"docs":{},"df":0,"0":{"docs":{},"df":0,"x":{"docs":{},"df":0,"8":{"docs":{},"df":0,"0":{"docs":{"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"h":{"docs":{},"df":0,"o":{"docs":{},"df":0,"w":{"docs":{"https://phlip9.com/notes/confidential computing/marblerun/":{"tf":1.0},"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.0}},"df":2}}},"o":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.0},"https://phlip9.com/notes/management/relieve often - why generals were more successful in WWII/":{"tf":1.0}},"df":3}},"t":{"docs":{},"df":0,"h":{"docs":{"https://phlip9.com/notes/android/OTA updates for rooted android phone/":{"tf":1.0},"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0},"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0},"https://phlip9.com/notes/combinatorics/k-combinations of a multiset/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.7320508075688772},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.7320508075688772},"https://phlip9.com/notes/confidential computing/gramine/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.0},"https://phlip9.com/notes/crypto/acme protocol/":{"tf":1.0},"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":1.0},"https://phlip9.com/notes/fuzzing/fuzzcheck-rs/":{"tf":1.4142135623730951},"https://phlip9.com/notes/ios/ios setup/":{"tf":1.0},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0},"https://phlip9.com/notes/misc/kintsugi/":{"tf":1.7320508075688772},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0},"https://phlip9.com/notes/misc/setting up a headless raspbian boot image/":{"tf":1.0},"https://phlip9.com/notes/postgres/postgres performance tuning/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/nix/nix debug broken package build/":{"tf":1.0}},"df":19,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"g":{"docs":{},"df":0,"'":{"docs":{"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0}},"df":1}}}}},"i":{"docs":{},"df":0,"m":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/rr with rust/":{"tf":1.0},"https://phlip9.com/notes/misc/kintsugi/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":2.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.4142135623730951}},"df":7}}},"w":{"docs":{},"df":0,"h":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.0},"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":1.0}},"df":3}},"e":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/android/root phone with magisk/":{"tf":1.7320508075688772},"https://phlip9.com/notes/devops/algo wireguard VPN server/":{"tf":1.0},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.4142135623730951}},"df":3}}}}}},"n":{"docs":{},"df":0,"g":{"docs":{"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":1.4142135623730951}},"df":1}},"o":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/AI ML/Expectimax Search/":{"tf":1.0},"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/foreign bank account report (FBAR)/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/reproducible-builds.org/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.0}},"df":5,".":{"docs":{},"df":0,"&":{"docs":{},"df":0,"l":{"docs":{},"df":0,"t":{"docs":{},"df":0,";":{"docs":{},"df":0,"/":{"docs":{},"df":0,"p":{"docs":{},"df":0,"&":{"docs":{},"df":0,"g":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.0}},"df":2}}}}}}}}}}}},"p":{"docs":{"https://phlip9.com/notes/devops/secrets/ejson (Shopify)/":{"tf":1.0},"https://phlip9.com/notes/devops/secrets/ejson-kms (AWS)/":{"tf":1.0},"https://phlip9.com/notes/devops/secrets/mozilla SOPS/":{"tf":1.4142135623730951},"https://phlip9.com/notes/devops/secrets/sops-nix/":{"tf":1.7320508075688772},"https://phlip9.com/notes/devops/secrets/sy - share secrets safely/":{"tf":1.0}},"df":5,"h":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/android/root phone with magisk/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/zero-conf channels/":{"tf":1.0},"https://phlip9.com/notes/crypto/(talk) authenticated data structures for stateless validation/":{"tf":1.0},"https://phlip9.com/notes/lang/lua/":{"tf":1.0}},"df":4}}}}},"r":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0},"https://phlip9.com/notes/combinatorics/k-combinations of a multiset/":{"tf":1.7320508075688772},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":1.0},"https://phlip9.com/notes/devops/azure CLI/":{"tf":1.7320508075688772},"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":1.0},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":3.605551275463989},"https://phlip9.com/notes/lang/lua/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":3.1622776601683795},"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/winsorize/":{"tf":1.7320508075688772}},"df":12,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"f":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0}},"df":1}}}}},"u":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/lang/operator fixity and precedence/":{"tf":1.0}},"df":1}},"p":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0},"https://phlip9.com/notes/lang/operator fixity and precedence/":{"tf":1.0}},"df":2},"r":{"docs":{},"df":0,"c":{"docs":{"https://phlip9.com/notes/AI ML/Expectimax Search/":{"tf":1.0},"https://phlip9.com/notes/android/android cli setup/":{"tf":1.4142135623730951},"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.4142135623730951},"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/BOLT 4 - onion routing protocol/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/BOLT 7 - p2p node and channel discovery/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/BOLT 8 - secure noise transport/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/breez lightning service providers/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/submarine swaps/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.7320508075688772},"https://phlip9.com/notes/confidential computing/intel SGX/secure time/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel TDX/":{"tf":1.0},"https://phlip9.com/notes/crypto/dex - open-source OIDC & OAuth 2.0 provider/":{"tf":1.4142135623730951},"https://phlip9.com/notes/design/form design/":{"tf":1.0},"https://phlip9.com/notes/devops/algo wireguard VPN server/":{"tf":1.0},"https://phlip9.com/notes/devops/secrets/1password - secrets automation/":{"tf":1.0},"https://phlip9.com/notes/devops/secrets/doppler/":{"tf":1.0},"https://phlip9.com/notes/devops/secrets/ejson (Shopify)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/devops/secrets/ejson-kms (AWS)/":{"tf":1.0},"https://phlip9.com/notes/devops/secrets/envkey/":{"tf":1.0},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/rust/rr with rust/":{"tf":1.0},"https://phlip9.com/notes/management/relieve often - why generals were more successful in WWII/":{"tf":1.0},"https://phlip9.com/notes/misc/arm target triples/":{"tf":1.0},"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":1.4142135623730951},"https://phlip9.com/notes/misc/optimization solvers/":{"tf":1.4142135623730951},"https://phlip9.com/notes/networking/ipv6 address space/":{"tf":1.0},"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/nix/nix debug spurrious rebuilds/":{"tf":2.449489742783178},"https://phlip9.com/notes/reproducible builds/rebuilderd/":{"tf":1.4142135623730951},"https://phlip9.com/notes/reproducible builds/reproducible-builds.org/":{"tf":2.23606797749979},"https://phlip9.com/notes/router/lightning router/captive portal/arubanetworks captive portal/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/G-test - multinomial goodness-of-fit/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/standard error/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/testing whether a coin is fair/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/winsorize/":{"tf":1.4142135623730951}},"df":39,"e":{"docs":{},"df":0,"/":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"b":{"docs":{},"df":0,"c":{"docs":{"https://phlip9.com/notes/reproducible builds/nix/nix debug spurrious rebuilds/":{"tf":1.4142135623730951}},"df":1}}}}},"s":{"docs":{},"df":0,";":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/android/android cli setup/":{"tf":1.4142135623730951}},"df":1}}}}}}}}}}}},"t":{"docs":{},"df":0,"h":{"docs":{},"df":0,"b":{"docs":{},"df":0,"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/devops/nomad/":{"tf":1.0}},"df":1}}}}}}}}},"p":{"docs":{"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.4142135623730951}},"df":1,"'":{"docs":{"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.0}},"df":1},"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"e":{"docs":{"https://phlip9.com/notes/AI ML/Expectimax Search/":{"tf":1.4142135623730951},"https://phlip9.com/notes/AI ML/Markov Decision Process (MDP)/":{"tf":2.0},"https://phlip9.com/notes/b l o c k c h a i n/btc utreexo - utxo accumulator/":{"tf":1.0},"https://phlip9.com/notes/combinatorics/k-combinations of a multiset/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":1.0},"https://phlip9.com/notes/keyboards/moergo glove80/":{"tf":1.0},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0},"https://phlip9.com/notes/misc/envsubst/":{"tf":1.0},"https://phlip9.com/notes/misc/pop_OS! tweaks/":{"tf":1.0},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.7320508075688772},"https://phlip9.com/notes/networking/ipv6 address space/":{"tf":1.7320508075688772},"https://phlip9.com/notes/nvim/universal-ctags Notes/":{"tf":1.0},"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.7320508075688772},"https://phlip9.com/notes/performance/simdjson talk/":{"tf":2.6457513110645907},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.4142135623730951}},"df":17}},"m":{"docs":{"https://phlip9.com/notes/fuzzing/fuzzcheck-rs/":{"tf":1.0}},"df":1},"n":{"docs":{"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.0},"https://phlip9.com/notes/performance/simdjson talk/":{"tf":1.7320508075688772}},"df":2},"r":{"docs":{},"df":0,"s":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/btc utreexo - utxo accumulator/":{"tf":1.0}},"df":1}},"w":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":2.6457513110645907},"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/rr with rust/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/sycamore x futures/":{"tf":1.4142135623730951},"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.4142135623730951}},"df":7}}},"e":{"docs":{},"df":0,"c":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0}},"df":2,"i":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/btc-ln/lightning rod/":{"tf":1.0},"https://phlip9.com/notes/combinatorics/k-combinations of a multiset/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":2.23606797749979},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/sycamore x futures/":{"tf":1.0},"https://phlip9.com/notes/networking/ipv6 address space/":{"tf":1.0},"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.7320508075688772},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.7320508075688772}},"df":11}},"f":{"docs":{"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0},"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/money services business (MSB)/":{"tf":1.0},"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.7320508075688772},"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.4142135623730951},"https://phlip9.com/notes/btc-ln/lightning libs/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.0},"https://phlip9.com/notes/combinatorics/k-combinations of a multiset/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":2.449489742783178},"https://phlip9.com/notes/confidential computing/gramine/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":2.23606797749979},"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":1.0},"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":1.7320508075688772},"https://phlip9.com/notes/devops/consul/":{"tf":1.0},"https://phlip9.com/notes/fuzzing/fuzzcheck-rs/":{"tf":1.0},"https://phlip9.com/notes/keyboards/moergo glove80/":{"tf":1.0},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/rust verification tools/":{"tf":1.0},"https://phlip9.com/notes/networking/CIDR/":{"tf":1.7320508075688772},"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.4142135623730951},"https://phlip9.com/notes/performance/bit hacks/":{"tf":2.8284271247461903},"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.0},"https://phlip9.com/notes/postgres/types of scans/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":2.0}},"df":28,"i":{"docs":{"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/gramine/":{"tf":1.7320508075688772},"https://phlip9.com/notes/devops/nomad/":{"tf":1.4142135623730951},"https://phlip9.com/notes/ios/ios setup/":{"tf":1.0},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/gdb ref/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/koka-lang/":{"tf":1.0},"https://phlip9.com/notes/lang/lua/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/rust verification tools/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.7320508075688772},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.7320508075688772},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":2.449489742783178}},"df":12}}},"t":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0}},"df":1,"u":{"docs":{},"df":0,"m":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1}}}},"u":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/foreign bank account report (FBAR)/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.0}},"df":2}}},"e":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/performance/simdjson talk/":{"tf":1.4142135623730951},"https://phlip9.com/notes/postgres/postgres performance tuning/":{"tf":1.4142135623730951}},"df":2,"s":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"p":{"docs":{"https://phlip9.com/notes/performance/profiling/":{"tf":1.0}},"df":1}}}}}},"n":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/fastpay/":{"tf":1.4142135623730951},"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/submarine swaps/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/zero-conf channels/":{"tf":1.0}},"df":4,"a":{"docs":{},"df":0,"b":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.0}},"df":1,"e":{"docs":{},"df":0,"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{},"df":0,"p":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.0}},"df":1}}}}}}}}}},"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"g":{"docs":{},"df":0,"_":{"docs":{},"df":0,"t":{"docs":{},"df":0,"x":{"docs":{"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.0}},"df":1}}}}}}},"t":{"docs":{"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.0},"https://phlip9.com/notes/misc/kintsugi/":{"tf":1.0},"https://phlip9.com/notes/performance/profiling/":{"tf":1.0}},"df":3}}},"h":{"docs":{},"df":0,"1":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1,"_":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":2.23606797749979}},"df":1},"x":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":2.23606797749979}},"df":1},"z":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":2.23606797749979}},"df":1}}},"2":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1,"_":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":2.23606797749979}},"df":1},"x":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":2.23606797749979}},"df":1},"z":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":2.23606797749979}},"df":1}}},"_":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":2.449489742783178}},"df":1},"x":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":2.449489742783178}},"df":1},"z":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":2.449489742783178}},"df":1}},"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":3.0}},"df":1,"s":{"docs":{},"df":0,"s":{"docs":{},"df":0,"c":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1,"(":{"docs":{},"df":0,"s":{"docs":{},"df":0,"c":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}},"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"x":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 4 - onion routing protocol/":{"tf":1.0}},"df":1}}}},"i":{"docs":{"https://phlip9.com/notes/misc/prepping RPI for embedded dev/":{"tf":1.4142135623730951},"https://phlip9.com/notes/misc/setting up a headless raspbian boot image/":{"tf":1.0}},"df":2,"d":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.7320508075688772},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0}},"df":2,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"f":{"docs":{},"df":0,"o":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0}},"df":1}}}}},"k":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/router/lightning router/lightning router overview/":{"tf":1.0}},"df":1}},"n":{"docs":{"https://phlip9.com/notes/devops/docker compose/":{"tf":1.4142135623730951},"https://phlip9.com/notes/postgres/types of scans/":{"tf":1.0}},"df":2},"t":{"docs":{"https://phlip9.com/notes/misc/setting up a headless raspbian boot image/":{"tf":1.0}},"df":1}},"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/misc/kintsugi/":{"tf":1.0}},"df":1}}}}},"i":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/atomic multipath payments (AMP)/":{"tf":1.0},"https://phlip9.com/notes/design/form design/":{"tf":1.0},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0},"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":2.449489742783178},"https://phlip9.com/notes/misc/optimization solvers/":{"tf":1.0},"https://phlip9.com/notes/networking/CIDR/":{"tf":1.4142135623730951}},"df":7,"s":{"docs":{},"df":0,"h":{"docs":{},"df":0,"/":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":1.0}},"df":1}}}}}}}}},"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/btc-ln/atomic multipath payments (AMP)/":{"tf":1.0}},"df":1}}}},"o":{"docs":{},"df":0,"f":{"docs":{"https://phlip9.com/notes/router/lightning router/captive portal/arubanetworks captive portal/":{"tf":1.7320508075688772},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.7320508075688772}},"df":2}},"t":{"docs":{"https://phlip9.com/notes/fuzzing/fuzzing/":{"tf":1.0},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":2,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"g":{"docs":{},"df":0,"h":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/ios/ios setup/":{"tf":1.0}},"df":1}}}}}}},"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"w":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/devops/secrets/envkey/":{"tf":1.0}},"df":1}},"y":{"docs":{"https://phlip9.com/notes/misc/water distillation setup/":{"tf":1.0}},"df":1}},"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/btc-ln/breez lightning service providers/":{"tf":1.0},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.7320508075688772},"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.0}},"df":3}}}},"u":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"u":{"docs":{"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.4142135623730951}},"df":2}}},"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"u":{"docs":{"https://phlip9.com/notes/reproducible builds/nix/nix debug spurrious rebuilds/":{"tf":1.4142135623730951}},"df":1}}}}}}},"q":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/postgres/postgres performance tuning/":{"tf":1.7320508075688772}},"df":1,"/":{"docs":{},"df":0,"v":{"docs":{},"df":0,"i":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{},"df":0,"u":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/postgres/postgres performance tuning/":{"tf":1.0}},"df":1}}}}}}}},"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{"https://phlip9.com/notes/devops/k3s/":{"tf":1.0}},"df":1}}}},"r":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1,"(":{"docs":{},"df":0,"2":{"docs":{},"df":0,")":{"docs":{},"df":0,"/":{"docs":{},"df":0,"2":{"docs":{"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.4142135623730951}},"df":1}}}},"h":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1},"n":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"m":{"docs":{},"df":0,"_":{"docs":{},"df":0,"s":{"docs":{},"df":0,"q":{"docs":{},"df":0,"(":{"docs":{},"df":0,"x":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1}}}}}}}}},"x":{"docs":{"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/herbie - float error fixer/":{"tf":1.4142135623730951}},"df":2,"+":{"docs":{},"df":0,"1":{"docs":{"https://phlip9.com/notes/statistics probability/herbie - float error fixer/":{"tf":1.0}},"df":1}}}},"{":{"docs":{},"df":0,"\\":{"docs":{},"df":0,"f":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"{":{"docs":{},"df":0,"0":{"docs":{},"df":0,".":{"docs":{},"df":0,"5":{"docs":{"https://phlip9.com/notes/statistics probability/testing whether a coin is fair/":{"tf":1.0}},"df":1}}},"\\":{"docs":{},"df":0,"l":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/statistics probability/CDF confidence bands - DKW inequality/":{"tf":1.0}},"df":1}}},"p":{"docs":{"https://phlip9.com/notes/statistics probability/testing whether a coin is fair/":{"tf":1.0}},"df":1}}}}}}},"n":{"docs":{"https://phlip9.com/notes/statistics probability/testing whether a coin is fair/":{"tf":1.4142135623730951}},"df":1},"v":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"(":{"docs":{},"df":0,"\\":{"docs":{},"df":0,"m":{"docs":{},"df":0,"u":{"docs":{},"df":0,"_":{"docs":{},"df":0,"x":{"docs":{"https://phlip9.com/notes/statistics probability/standard error/":{"tf":1.0}},"df":1}}}}}}}}}}}},"u":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/statistics probability/multinomial distribution/":{"tf":1.0}},"df":1},"s":{"docs":{},"df":0,"h":{"docs":{"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":1.4142135623730951}},"df":1}}},"e":{"docs":{},"df":0,"e":{"docs":{},"df":0,"z":{"docs":{"https://phlip9.com/notes/combinatorics/k-combinations of a multiset/":{"tf":1.0}},"df":1}}},"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":1.0}},"df":1}}}}},"r":{"docs":{},"df":0,"c":{"docs":{"https://phlip9.com/notes/btc-ln/submarine swaps/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/gramine/":{"tf":1.0},"https://phlip9.com/notes/lang/ATS/Install ATS2/":{"tf":1.0}},"df":3,"/":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"b":{"docs":{},"df":0,".":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.0}},"df":1}}}}}},"_":{"docs":{},"df":0,"n":{"docs":{},"df":0,"o":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"_":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 11 - invoices/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.0}},"df":2}}}}}}}}},"o":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/fastpay/":{"tf":1.7320508075688772}},"df":1}},"s":{"docs":{},"df":0,"_":{"docs":{},"df":0,"s":{"docs":{},"df":0,"p":{"docs":{},"df":0,"h":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"(":{"docs":{},"df":0,"p":{"docs":{},"df":0,"o":{"docs":{},"df":0,"s":{"docs":{},"df":0,"_":{"docs":{},"df":0,"x":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.4142135623730951}},"df":1}}}}},"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"_":{"docs":{},"df":0,"x":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1}}}}}}}}}}}},"a":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.0}},"df":1},"d":{"docs":{"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.0}},"df":1},"e":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.7320508075688772}},"df":1},"f":{"docs":{"https://phlip9.com/notes/android/android cli setup/":{"tf":1.0},"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.4142135623730951},"https://phlip9.com/notes/devops/algo wireguard VPN server/":{"tf":1.0}},"df":4,"l":{"docs":{"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.0}},"df":1}},"h":{"docs":{"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0},"https://phlip9.com/notes/crypto/smallstep - private online CA & ACME server/":{"tf":1.4142135623730951},"https://phlip9.com/notes/devops/algo wireguard VPN server/":{"tf":1.7320508075688772},"https://phlip9.com/notes/devops/azure CLI/":{"tf":2.23606797749979},"https://phlip9.com/notes/misc/prepping RPI for embedded dev/":{"tf":2.0},"https://phlip9.com/notes/misc/setting up a headless raspbian boot image/":{"tf":2.23606797749979},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.7320508075688772}},"df":7,"/":{"docs":{},"df":0,"a":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{},"df":0,"h":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"z":{"docs":{},"df":0,"e":{"docs":{},"df":0,"d":{"docs":{},"df":0,"_":{"docs":{},"df":0,"k":{"docs":{},"df":0,"e":{"docs":{},"df":0,"y":{"docs":{"https://phlip9.com/notes/devops/azure CLI/":{"tf":1.0},"https://phlip9.com/notes/misc/prepping RPI for embedded dev/":{"tf":1.0}},"df":2}}}}}}}}}}}}}},"i":{"docs":{},"df":0,"d":{"docs":{},"df":0,"_":{"docs":{},"df":0,"r":{"docs":{},"df":0,"s":{"docs":{},"df":0,"a":{"docs":{},"df":0,"4":{"docs":{},"df":0,"0":{"docs":{},"df":0,"9":{"docs":{},"df":0,"6":{"docs":{"https://phlip9.com/notes/devops/azure CLI/":{"tf":1.4142135623730951}},"df":1,".":{"docs":{},"df":0,"p":{"docs":{},"df":0,"u":{"docs":{},"df":0,"b":{"docs":{"https://phlip9.com/notes/devops/azure CLI/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}},"i":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/router/lightning router/captive portal/arubanetworks captive portal/":{"tf":1.0}},"df":1}},"l":{"docs":{"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.4142135623730951}},"df":4},"o":{"docs":{"https://phlip9.com/notes/crypto/smallstep - private online CA & ACME server/":{"tf":1.0}},"df":1}},"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"b":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/android/root phone with magisk/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/lightning rod/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.4142135623730951}},"df":3}},"c":{"docs":{},"df":0,"k":{"docs":{"https://phlip9.com/notes/WSL/WSL2 custom kernel/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":2.449489742783178},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":3.0},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0},"https://phlip9.com/notes/networking/network interface card (NIC)/":{"tf":1.0},"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.4142135623730951},"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.0},"https://phlip9.com/notes/performance/profiling/":{"tf":2.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.0}},"df":12,"/":{"docs":{},"df":0,"h":{"docs":{},"df":0,"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"p":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.7320508075688772}},"df":1}}}}}}},"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"f":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0}},"df":1}}},"f":{"docs":{},"df":0,"f":{"docs":{"https://phlip9.com/notes/management/relieve often - why generals were more successful in WWII/":{"tf":1.0}},"df":1}},"g":{"docs":{},"df":0,"e":{"docs":{"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":2.0},"https://phlip9.com/notes/devops/deployment strategies/":{"tf":2.6457513110645907},"https://phlip9.com/notes/devops/secrets/ejson-kms (AWS)/":{"tf":1.0}},"df":3,"1":{"docs":{"https://phlip9.com/notes/misc/setting up a headless raspbian boot image/":{"tf":1.0}},"df":1},"2":{"docs":{"https://phlip9.com/notes/misc/setting up a headless raspbian boot image/":{"tf":1.0}},"df":1},"_":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"=":{"docs":{},"df":0,"\"":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"g":{"docs":{},"df":0,"e":{"docs":{},"df":0,"0":{"docs":{"https://phlip9.com/notes/misc/setting up a headless raspbian boot image/":{"tf":1.0}},"df":1}}}}}}}}}}}}}},"n":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/management/relieve often - why generals were more successful in WWII/":{"tf":1.0}},"df":1}}}},"l":{"docs":{},"df":0,"e":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 4 - onion routing protocol/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/secure time/":{"tf":1.4142135623730951},"https://phlip9.com/notes/fuzzing/fuzzcheck-rs/":{"tf":1.0}},"df":4},"o":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":2.23606797749979}},"df":1}}}},"n":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/design/form design/":{"tf":2.0},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0},"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.0}},"df":3,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/fastpay/":{"tf":1.0}},"df":1}}},"r":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/AI ML/Markov Decision Process (MDP)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/WSL/WSL2 custom kernel/":{"tf":1.4142135623730951},"https://phlip9.com/notes/b l o c k c h a i n/fastpay/":{"tf":1.0},"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.7320508075688772},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel SGX/secure time/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":2.0},"https://phlip9.com/notes/devops/minikube/":{"tf":1.0},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/lua/":{"tf":1.0},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0},"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":2.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":2.8284271247461903},"https://phlip9.com/notes/statistics probability/standard error/":{"tf":3.0},"https://phlip9.com/notes/statistics probability/testing whether a coin is fair/":{"tf":2.8284271247461903}},"df":20,"_":{"docs":{},"df":0,"d":{"docs":{},"df":0,"c":{"docs":{},"df":0,"1":{"docs":{},"df":0,"s":{"docs":{},"df":0,"_":{"docs":{},"df":0,"v":{"docs":{},"df":0,"3":{"docs":{"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/gramine/":{"tf":1.0},"https://phlip9.com/notes/devops/azure CLI/":{"tf":1.0}},"df":3}}}}}}},"l":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/devops/azure CLI/":{"tf":1.0}},"df":1}}}}}},"p":{"docs":{},"df":0,"o":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0},"https://phlip9.com/notes/fuzzing/fuzzcheck-rs/":{"tf":1.0}},"df":2}}}}}},"f":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.0}},"df":1}}}}},"r":{"docs":{},"df":0,"c":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"f":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/AI ML/Markov Decision Process (MDP)/":{"tf":1.0}},"df":1}}}}},"e":{"docs":{"https://phlip9.com/notes/combinatorics/k-combinations of a multiset/":{"tf":1.0}},"df":1},"t":{"docs":{"https://phlip9.com/notes/AI ML/Markov Decision Process (MDP)/":{"tf":1.0},"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0},"https://phlip9.com/notes/combinatorics/k-combinations of a multiset/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.7320508075688772},"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/mystikos/":{"tf":1.4142135623730951},"https://phlip9.com/notes/devops/docker compose/":{"tf":1.0},"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":2.449489742783178},"https://phlip9.com/notes/fuzzing/fuzzcheck-rs/":{"tf":1.0},"https://phlip9.com/notes/fuzzing/fuzzing/":{"tf":1.4142135623730951},"https://phlip9.com/notes/keyboards/moergo glove80/":{"tf":1.0},"https://phlip9.com/notes/lang/gdb ref/":{"tf":2.0},"https://phlip9.com/notes/lang/koka-lang/":{"tf":1.0},"https://phlip9.com/notes/lang/operator fixity and precedence/":{"tf":1.0},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":2.449489742783178},"https://phlip9.com/notes/networking/CIDR/":{"tf":1.4142135623730951},"https://phlip9.com/notes/networking/ipv6 address space/":{"tf":1.0},"https://phlip9.com/notes/networking/network interface card (NIC)/":{"tf":1.0},"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.4142135623730951},"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.4142135623730951},"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/arubanetworks captive portal/":{"tf":1.4142135623730951},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.0}},"df":26,"_":{"docs":{},"df":0,"l":{"docs":{},"df":0,"d":{"docs":{},"df":0,"k":{"docs":{"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.0}},"df":1}}}},"e":{"docs":{},"df":0,"d":{"docs":{},"df":0,".":{"docs":{},"df":0,"h":{"docs":{},"df":0,"t":{"docs":{},"df":0,"m":{"docs":{},"df":0,"l":{"docs":{},"df":0,"#":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/ios/ios setup/":{"tf":1.0}},"df":1}}}}}}}}}}}},"/":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/lang/flutter/flutter setup/":{"tf":1.0}},"df":1}}}}}}}},"r":{"docs":{"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":1.0}},"df":1}},"s":{"docs":{},"df":0,"_":{"docs":{},"df":0,"w":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"h":{"docs":{},"df":0,"(":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/postgres/snippets/":{"tf":1.0}},"df":1}}}}}}}},"c":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1,"(":{"docs":{},"df":0,"s":{"docs":{},"df":0,"c":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1}}}}}}}}}}}}},"u":{"docs":{},"df":0,"p":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/secure time/":{"tf":1.7320508075688772},"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":1.4142135623730951},"https://phlip9.com/notes/devops/secrets/mozilla SOPS/":{"tf":1.0}},"df":3}}}},"t":{"docs":{},"df":0,"6":{"docs":{},"df":0,"4":{"docs":{"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.0}},"df":1}},"e":{"docs":{"https://phlip9.com/notes/AI ML/Expectimax Search/":{"tf":3.3166247903554},"https://phlip9.com/notes/AI ML/Markov Decision Process (MDP)/":{"tf":5.656854249492381},"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/financial instituion/":{"tf":1.0},"https://phlip9.com/notes/b l o c k c h a i n/fastpay/":{"tf":1.7320508075688772},"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.7320508075688772},"https://phlip9.com/notes/btc-ln/lightning rod/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.7320508075688772},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.7320508075688772},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":1.4142135623730951},"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":1.4142135623730951},"https://phlip9.com/notes/distributed systems/papers/(2020) Semi-Fast Byzantine-tolerant Shared Register without Reliable Broadcast/":{"tf":2.0},"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":1.0},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0},"https://phlip9.com/notes/lang/flutter/flutter setup/":{"tf":1.0},"https://phlip9.com/notes/lang/lua/":{"tf":2.23606797749979},"https://phlip9.com/notes/lang/rust/rr with rust/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/understanding sycamore reactivity/":{"tf":1.7320508075688772},"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":1.4142135623730951},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.4142135623730951},"https://phlip9.com/notes/networking/network interfaces/":{"tf":3.605551275463989},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.7320508075688772},"https://phlip9.com/notes/reproducible builds/rebuilderd/":{"tf":1.4142135623730951},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.7320508075688772},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":2.449489742783178},"https://phlip9.com/notes/statistics probability/CDF confidence bands - DKW inequality/":{"tf":1.0}},"df":31,"(":{"docs":{},"df":0,"0":{"docs":{},"df":0,"x":{"docs":{},"df":0,"0":{"docs":{},"df":0,"1":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0}},"df":1},"2":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.4142135623730951}},"df":1},"4":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0}},"df":1}}}}},".":{"docs":{},"df":0,"g":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/lang/rust/understanding sycamore reactivity/":{"tf":1.0}},"df":1}}}},"[":{"docs":{},"df":0,"1":{"docs":{"https://phlip9.com/notes/lang/lua/":{"tf":2.0}},"df":1},"2":{"docs":{"https://phlip9.com/notes/lang/lua/":{"tf":1.0}},"df":1}},"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"s":{"docs":{"https://phlip9.com/notes/crypto/(talk) authenticated data structures for stateless validation/":{"tf":1.7320508075688772},"https://phlip9.com/notes/lang/lua/":{"tf":1.0},"https://phlip9.com/notes/networking/ipv6 address space/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/nix/links/":{"tf":1.0}},"df":4}}}},"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/fastpay/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":1.0},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/rust verification tools/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/p-value/":{"tf":1.0}},"df":6}}}}},"i":{"docs":{},"df":0,"c":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.4142135623730951},"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":1.0},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":3.1622776601683795},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/rust/rust verification tools/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/rust/sycamore x futures/":{"tf":1.0},"https://phlip9.com/notes/misc/setting up a headless raspbian boot image/":{"tf":1.4142135623730951},"https://phlip9.com/notes/networking/ipv6 address space/":{"tf":1.4142135623730951},"https://phlip9.com/notes/networking/network interfaces/":{"tf":2.0}},"df":9},"s":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/networking/ipv6 address space/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/CDF confidence bands - DKW inequality/":{"tf":1.7320508075688772},"https://phlip9.com/notes/statistics probability/G-test - multinomial goodness-of-fit/":{"tf":2.449489742783178},"https://phlip9.com/notes/statistics probability/MAD - median absolute deviation/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/multinomial distribution/":{"tf":1.4142135623730951},"https://phlip9.com/notes/statistics probability/standard error/":{"tf":2.0},"https://phlip9.com/notes/statistics probability/testing whether a coin is fair/":{"tf":1.7320508075688772}},"df":8,"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"'":{"docs":{"https://phlip9.com/notes/statistics probability/multinomial distribution/":{"tf":1.0}},"df":1}}}}}},"r":{"docs":{},"df":0,"s":{"docs":{},"df":0,":":{"docs":{},"df":0,":":{"docs":{},"df":0,"d":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"b":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,":":{"docs":{},"df":0,":":{"docs":{},"df":0,"{":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"q":{"docs":{},"df":0,"u":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/statistics probability/G-test - multinomial goodness-of-fit/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/multinomial distribution/":{"tf":1.0}},"df":2}}}}}}}}}}}}}}}}}}}}}}}}}}},"u":{"docs":{"https://phlip9.com/notes/android/root phone with magisk/":{"tf":1.0},"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":2.0},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":2.0},"https://phlip9.com/notes/confidential computing/intel TDX/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":1.0},"https://phlip9.com/notes/crypto/acme protocol/":{"tf":1.7320508075688772},"https://phlip9.com/notes/devops/docker compose/":{"tf":1.0},"https://phlip9.com/notes/lang/operator fixity and precedence/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":5.744562646538029},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.7320508075688772},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":8.12403840463596}},"df":13}},"y":{"docs":{"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":1.4142135623730951},"https://phlip9.com/notes/design/form design/":{"tf":1.0}},"df":2}},"d":{"docs":{"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.7320508075688772},"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":2.0}},"df":2,":":{"docs":{},"df":0,":":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"l":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.4142135623730951}},"df":1,"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,":":{"docs":{},"df":0,":":{"docs":{},"df":0,"{":{"docs":{},"df":0,"v":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"q":{"docs":{},"df":0,"u":{"docs":{"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}},"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,":":{"docs":{},"df":0,":":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,":":{"docs":{},"df":0,":":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"&":{"docs":{},"df":0,"g":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}},"o":{"docs":{},"df":0,"s":{"docs":{},"df":0,":":{"docs":{},"df":0,":":{"docs":{},"df":0,"u":{"docs":{},"df":0,"n":{"docs":{},"df":0,"i":{"docs":{},"df":0,"x":{"docs":{"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0}},"df":1}}}}}}}},"s":{"docs":{},"df":0,"y":{"docs":{},"df":0,"s":{"docs":{},"df":0,":":{"docs":{},"df":0,":":{"docs":{},"df":0,"s":{"docs":{},"df":0,"g":{"docs":{},"df":0,"x":{"docs":{"https://phlip9.com/notes/lang/rust/rust x SGX/":{"tf":1.0}},"df":1}}}}}}}}}},"_":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"l":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0}},"df":1}}}}}}}},"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"l":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0}},"df":1}}}}}}},"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"v":{"docs":{"https://phlip9.com/notes/statistics probability/MAD - median absolute deviation/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/standard error/":{"tf":2.449489742783178},"https://phlip9.com/notes/statistics probability/testing whether a coin is fair/":{"tf":1.0}},"df":3,"_":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"m":{"docs":{"https://phlip9.com/notes/statistics probability/MAD - median absolute deviation/":{"tf":1.0}},"df":1}}}}}}}}},"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"r":{"docs":{},"df":0,"(":{"docs":{},"df":0,"\\":{"docs":{},"df":0,"p":{"docs":{},"df":0,"h":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/statistics probability/standard error/":{"tf":1.0}},"df":1}}}}}}}},"i":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/misc/envsubst/":{"tf":1.4142135623730951}},"df":1}},"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/lang/gdb ref/":{"tf":1.0},"https://phlip9.com/notes/misc/envsubst/":{"tf":1.7320508075688772}},"df":2}}}},"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":1.0}},"df":1}}},"e":{"docs":{},"df":0,"l":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/fuzzing/fuzzing/":{"tf":1.0}},"df":1}}}},"r":{"docs":{"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.4142135623730951}},"df":2}},"p":{"docs":{"https://phlip9.com/notes/android/OTA updates for rooted android phone/":{"tf":1.0},"https://phlip9.com/notes/android/linux ADB udev setup/":{"tf":1.0},"https://phlip9.com/notes/android/root phone with magisk/":{"tf":1.0},"https://phlip9.com/notes/b l o c k c h a i n/fastpay/":{"tf":1.0},"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/submarine swaps/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":2.0},"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":2.0},"https://phlip9.com/notes/confidential computing/marblerun/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":1.4142135623730951},"https://phlip9.com/notes/design/form design/":{"tf":1.7320508075688772},"https://phlip9.com/notes/devops/deployment strategies/":{"tf":1.0},"https://phlip9.com/notes/fuzzing/fuzzcheck-rs/":{"tf":1.0},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/rust/rr with rust/":{"tf":2.449489742783178},"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":2.0},"https://phlip9.com/notes/misc/kintsugi/":{"tf":1.0},"https://phlip9.com/notes/misc/prepping RPI for embedded dev/":{"tf":1.0},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0},"https://phlip9.com/notes/misc/setting up a headless raspbian boot image/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":2.8284271247461903},"https://phlip9.com/notes/reproducible builds/nix/nix debug broken package build/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/router/lightning router/captive portal/arubanetworks captive portal/":{"tf":1.4142135623730951},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":2.0}},"df":25,"i":{"docs":{"https://phlip9.com/notes/lang/rust/rr with rust/":{"tf":1.0}},"df":1}}},"f":{"docs":{},"df":0,"u":{"docs":{"https://phlip9.com/notes/WSL/WSL2 custom kernel/":{"tf":1.0},"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0}},"df":2}},"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"k":{"docs":{"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.4142135623730951}},"df":2}},"l":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/AI ML/Expectimax Search/":{"tf":1.4142135623730951},"https://phlip9.com/notes/android/OTA updates for rooted android phone/":{"tf":1.0},"https://phlip9.com/notes/android/root phone with magisk/":{"tf":1.0},"https://phlip9.com/notes/b l o c k c h a i n/fastpay/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/BOLT 11 - invoices/":{"tf":1.4142135623730951},"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.4142135623730951},"https://phlip9.com/notes/btc-ln/hosted channels/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/gramine/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/secure time/":{"tf":1.0},"https://phlip9.com/notes/crypto/biscuit authz/":{"tf":1.0},"https://phlip9.com/notes/lang/flutter/flutter setup/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.0},"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":2.0},"https://phlip9.com/notes/misc/kintsugi/":{"tf":1.4142135623730951},"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.4142135623730951},"https://phlip9.com/notes/reproducible builds/nix/nix debug broken package build/":{"tf":1.0}},"df":21}}},"o":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/fastpay/":{"tf":1.7320508075688772}},"df":1,"c":{"docs":{},"df":0,"h":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/AI ML/Expectimax Search/":{"tf":1.0}},"df":1}}}},"k":{"docs":{"https://phlip9.com/notes/android/root phone with magisk/":{"tf":1.0},"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/monetary instruments/":{"tf":1.0},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0},"https://phlip9.com/notes/misc/setting up a headless raspbian boot image/":{"tf":1.0}},"df":4}},"n":{"docs":{},"df":0,"y":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"b":{"docs":{"https://phlip9.com/notes/misc/water distillation setup/":{"tf":1.0}},"df":1}}}}},"p":{"docs":{"https://phlip9.com/notes/btc-ln/breez lightning service providers/":{"tf":1.0},"https://phlip9.com/notes/devops/docker compose/":{"tf":1.0},"https://phlip9.com/notes/devops/secrets/envkey/":{"tf":1.0},"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/gdb ref/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/rr with rust/":{"tf":1.4142135623730951},"https://phlip9.com/notes/misc/pop_OS! tweaks/":{"tf":1.0},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":8,"p":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/misc/water distillation setup/":{"tf":1.4142135623730951}},"df":1}}}},"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"g":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.4142135623730951},"https://phlip9.com/notes/devops/azure CLI/":{"tf":1.0},"https://phlip9.com/notes/devops/k3s/":{"tf":1.0},"https://phlip9.com/notes/devops/secrets/ejson-kms (AWS)/":{"tf":1.0},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0},"https://phlip9.com/notes/postgres/postgres performance tuning/":{"tf":1.7320508075688772},"https://phlip9.com/notes/postgres/types of scans/":{"tf":2.0}},"df":9,"e":{"docs":{},"df":0,"$":{"docs":{},"df":0,"/":{"docs":{},"df":0,"h":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.4142135623730951}},"df":1}}}},"=":{"docs":{},"df":0,"v":{"docs":{},"df":0,"o":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/misc/prepping RPI for embedded dev/":{"tf":1.0}},"df":1}}}}}}}},"?":{"docs":{},"df":0,"v":{"docs":{},"df":0,"i":{"docs":{},"df":0,"e":{"docs":{},"df":0,"w":{"docs":{},"df":0,"=":{"docs":{},"df":0,"a":{"docs":{},"df":0,"z":{"docs":{},"df":0,"u":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"q":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/postgres/postgres performance tuning/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}},"e":{"docs":{"https://phlip9.com/notes/AI ML/Markov Decision Process (MDP)/":{"tf":1.0},"https://phlip9.com/notes/WSL/WSL2 custom kernel/":{"tf":1.4142135623730951},"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0},"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/money services business (MSB)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/b l o c k c h a i n/btc utreexo - utxo accumulator/":{"tf":1.4142135623730951},"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":2.23606797749979},"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/secure time/":{"tf":1.0},"https://phlip9.com/notes/crypto/acme protocol/":{"tf":1.0},"https://phlip9.com/notes/devops/algo wireguard VPN server/":{"tf":1.4142135623730951},"https://phlip9.com/notes/devops/consul/":{"tf":1.7320508075688772},"https://phlip9.com/notes/devops/secrets/1password - secrets automation/":{"tf":1.0},"https://phlip9.com/notes/devops/secrets/ejson (Shopify)/":{"tf":1.0},"https://phlip9.com/notes/devops/secrets/ejson-kms (AWS)/":{"tf":2.23606797749979},"https://phlip9.com/notes/devops/secrets/mozilla SOPS/":{"tf":1.4142135623730951},"https://phlip9.com/notes/devops/secrets/sy - share secrets safely/":{"tf":1.0},"https://phlip9.com/notes/distributed systems/papers/(2020) Semi-Fast Byzantine-tolerant Shared Register without Reliable Broadcast/":{"tf":1.7320508075688772},"https://phlip9.com/notes/ios/ios setup/":{"tf":1.0},"https://phlip9.com/notes/misc/kintsugi/":{"tf":1.4142135623730951},"https://phlip9.com/notes/performance/simdjson talk/":{"tf":1.0},"https://phlip9.com/notes/postgres/types of scans/":{"tf":1.7320508075688772},"https://phlip9.com/notes/reproducible builds/nix/nix auto-allocate-uids -> nixbld users/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/nix/nix debug spurrious rebuilds/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":2.23606797749979},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":3.1622776601683795}},"df":28,"_":{"docs":{},"df":0,"c":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{},"df":0,"_":{"docs":{},"df":0,"d":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0}},"df":1}}}}}}}}}}}}},"r":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":2.23606797749979},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0}},"df":2,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"g":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/AI ML/Expectimax Search/":{"tf":1.0},"https://phlip9.com/notes/combinatorics/k-combinations of a multiset/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.0},"https://phlip9.com/notes/devops/deployment strategies/":{"tf":2.0},"https://phlip9.com/notes/devops/nomad/":{"tf":1.0},"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.0}},"df":6},"y":{"docs":{},"df":0,"&":{"docs":{},"df":0,"l":{"docs":{},"df":0,"t":{"docs":{},"df":0,";":{"docs":{},"df":0,"v":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"u":{"docs":{"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.0}},"df":1}}}}}}}}}}}},"y":{"docs":{"https://phlip9.com/notes/misc/kintsugi/":{"tf":1.0}},"df":1}},"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/gramine/":{"tf":1.7320508075688772},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":2.0},"https://phlip9.com/notes/devops/docker compose/":{"tf":1.0}},"df":4}}},"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/statistics probability/G-test - multinomial goodness-of-fit/":{"tf":1.0}},"df":1,"e":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0}},"df":1}},"l":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/secure time/":{"tf":1.0},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0}},"df":2}}}},"k":{"docs":{},"df":0,"e":{"docs":{"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.0}},"df":1}},"n":{"docs":{},"df":0,"g":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":3.872983346207417},"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":1.0},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":4.795831523312719},"https://phlip9.com/notes/lang/lua/":{"tf":2.8284271247461903},"https://phlip9.com/notes/lang/operator fixity and precedence/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.0},"https://phlip9.com/notes/misc/envsubst/":{"tf":1.0},"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.0},"https://phlip9.com/notes/performance/simdjson talk/":{"tf":2.23606797749979},"https://phlip9.com/notes/postgres/snippets/":{"tf":1.4142135623730951},"https://phlip9.com/notes/router/lightning router/lightning router overview/":{"tf":1.4142135623730951}},"df":11,"&":{"docs":{},"df":0,"g":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0}},"df":1}}},".":{"docs":{},"df":0,"p":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0}},"df":1}}}}}}}}},"_":{"docs":{},"df":0,"a":{"docs":{},"df":0,"p":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,".":{"docs":{},"df":0,"d":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.4142135623730951}},"df":1}}}}},"_":{"docs":{},"df":0,"2":{"docs":{},"df":0,".":{"docs":{},"df":0,"d":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0}},"df":1}}}}}},"3":{"docs":{},"df":0,".":{"docs":{},"df":0,"d":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0}},"df":1}}}}}}}}}}}}}},"p":{"docs":{"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.4142135623730951},"https://phlip9.com/notes/misc/kintsugi/":{"tf":1.0}},"df":3,"=":{"docs":{},"df":0,"s":{"docs":{},"df":0,"y":{"docs":{},"df":0,"m":{"docs":{},"df":0,"b":{"docs":{},"df":0,"o":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.7320508075688772}},"df":1}}}}}}}}},"o":{"docs":{},"df":0,"k":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"a":{"docs":{},"df":0,"p":{"docs":{"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0}},"df":1,".":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0}},"df":1}}}}}}}}},"w":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{},"df":0,"t":{"docs":{},"df":0,"h":{"docs":{"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0}},"df":1}}}}}}},"n":{"docs":{},"df":0,"g":{"docs":{"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.0},"https://phlip9.com/notes/crypto/biscuit authz/":{"tf":1.0},"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":1.0}},"df":3,"e":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0}},"df":1}}}}},"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/performance/simdjson talk/":{"tf":1.0}},"df":1}}},"u":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":3.7416573867739413},"https://phlip9.com/notes/btc-ln/BOLT 11 - invoices/":{"tf":1.7320508075688772},"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":3.0},"https://phlip9.com/notes/combinatorics/k-combinations of a multiset/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":3.872983346207417},"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.7320508075688772},"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":2.23606797749979},"https://phlip9.com/notes/lang/lua/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/self-referencing structs/":{"tf":1.4142135623730951},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0},"https://phlip9.com/notes/postgres/types of scans/":{"tf":1.4142135623730951}},"df":12,"_":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"m":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1,"e":{"docs":{},"df":0,"'":{"docs":{},"df":0,"&":{"docs":{},"df":0,"g":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1}}}}}}}}},"u":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/android/android cli setup/":{"tf":1.0},"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/breez lightning service providers/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":2.0},"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.7320508075688772},"https://phlip9.com/notes/crypto/(talk) authenticated data structures for stateless validation/":{"tf":1.4142135623730951},"https://phlip9.com/notes/fuzzing/fuzzcheck-rs/":{"tf":1.0},"https://phlip9.com/notes/fuzzing/fuzzing/":{"tf":1.7320508075688772},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.4142135623730951},"https://phlip9.com/notes/postgres/types of scans/":{"tf":1.4142135623730951}},"df":10}}}}}},"u":{"docs":{},"df":0,"c":{"docs":{},"df":0,"k":{"docs":{"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.0}},"df":1}},"d":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.4142135623730951},"https://phlip9.com/notes/statistics probability/standard error/":{"tf":1.0}},"df":2,"o":{"docs":{"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":3.0},"https://phlip9.com/notes/lang/flutter/flutter setup/":{"tf":1.0}},"df":2,"/":{"docs":{},"df":0,"b":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"/":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"u":{"docs":{},"df":0,"d":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,".":{"docs":{},"df":0,"s":{"docs":{},"df":0,"h":{"docs":{"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}},"f":{"docs":{},"df":0,"f":{"docs":{"https://phlip9.com/notes/":{"tf":1.0},"https://phlip9.com/notes/android/ADB over TCP inside WSL2/":{"tf":1.0},"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.7320508075688772},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0},"https://phlip9.com/notes/devops/docker compose/":{"tf":1.0},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.0},"https://phlip9.com/notes/misc/kintsugi/":{"tf":1.4142135623730951},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.4142135623730951}},"df":9}}},"y":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":2.0},"https://phlip9.com/notes/lang/lua/":{"tf":1.0}},"df":2}}}},"u":{"docs":{},"df":0,"b":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/rr with rust/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/nix/nix debug spurrious rebuilds/":{"tf":1.0}},"df":3,"d":{"docs":{},"df":0,"i":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":1.7320508075688772}},"df":1,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":3.4641016151377544}},"df":1}}}}}}}},"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/devops/algo wireguard VPN server/":{"tf":1.0}},"df":1}}}}}},"j":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/financial instituion/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/gramine/":{"tf":1.4142135623730951},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.4142135623730951}},"df":4,"_":{"docs":{},"df":0,"n":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{"https://phlip9.com/notes/crypto/TLS self-signed pubkey-only certs/":{"tf":1.0}},"df":1}}}}}}}},"k":{"docs":{},"df":0,"e":{"docs":{},"df":0,"y":{"docs":{"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":1.0}},"df":1}}},"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/btc-ln/submarine swaps/":{"tf":3.4641016151377544}},"df":1}}}},"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"s":{"docs":{"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.0}},"df":1}},"t":{"docs":{"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/foreign bank account report (FBAR)/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/gramine/":{"tf":1.0},"https://phlip9.com/notes/devops/nomad/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.4142135623730951}},"df":5}},"o":{"docs":{},"df":0,"d":{"docs":{},"df":0,"u":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":1.0}},"df":1}}}},"u":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/fuzzing/fuzzcheck-rs/":{"tf":1.0}},"df":1}}},"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/networking/CIDR/":{"tf":3.872983346207417},"https://phlip9.com/notes/networking/ipv6 address space/":{"tf":1.0},"https://phlip9.com/notes/networking/network interfaces/":{"tf":2.23606797749979}},"df":3,"_":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{},"df":0,"k":{"docs":{"https://phlip9.com/notes/networking/CIDR/":{"tf":2.0}},"df":1,")":{"docs":{},"df":0,".":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{"https://phlip9.com/notes/networking/CIDR/":{"tf":1.4142135623730951}},"df":1}}}}}}}}}}},"f":{"docs":{},"df":0,"d":{"docs":{},"df":0,"6":{"docs":{},"df":0,"c":{"docs":{},"df":0,":":{"docs":{},"df":0,"6":{"docs":{},"df":0,"5":{"docs":{},"df":0,"7":{"docs":{},"df":0,"8":{"docs":{},"df":0,":":{"docs":{},"df":0,"6":{"docs":{},"df":0,"5":{"docs":{},"df":0,"0":{"docs":{},"df":0,"2":{"docs":{},"df":0,":":{"docs":{},"df":0,":":{"docs":{},"df":0,"/":{"docs":{},"df":0,"6":{"docs":{},"df":0,"4":{"docs":{"https://phlip9.com/notes/networking/ipv6 address space/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}},"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"p":{"docs":{},"df":0,"o":{"docs":{"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":5.0990195135927845}},"df":1}}},"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/lang/rust/rr with rust/":{"tf":1.4142135623730951}},"df":1}}}}}},"s":{"docs":{},"df":0,"c":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"p":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"s":{"docs":{},"df":0,"/":{"docs":{},"df":0,"x":{"docs":{},"df":0,"x":{"docs":{},"df":0,"x":{"docs":{},"df":0,"x":{"docs":{},"df":0,"x":{"docs":{"https://phlip9.com/notes/devops/azure CLI/":{"tf":1.4142135623730951}},"df":1,"x":{"docs":{"https://phlip9.com/notes/devops/azure CLI/":{"tf":1.0}},"df":1,"x":{"docs":{"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/gramine/":{"tf":1.0}},"df":2}}}}}}}}}}}}}}}}},"e":{"docs":{},"df":0,"q":{"docs":{},"df":0,"u":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 4 - onion routing protocol/":{"tf":1.0},"https://phlip9.com/notes/combinatorics/k-combinations of a multiset/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":1.0},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0}},"df":4}},"t":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/fastpay/":{"tf":1.0},"https://phlip9.com/notes/crypto/(talk) authenticated data structures for stateless validation/":{"tf":1.0},"https://phlip9.com/notes/devops/deployment strategies/":{"tf":1.4142135623730951},"https://phlip9.com/notes/devops/secrets/sy - share secrets safely/":{"tf":1.0},"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.7320508075688772},"https://phlip9.com/notes/statistics probability/G-test - multinomial goodness-of-fit/":{"tf":1.0}},"df":6}},"h":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":1.0}},"df":1}}},"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/money services business (MSB)/":{"tf":1.0},"https://phlip9.com/notes/misc/envsubst/":{"tf":1.4142135623730951}},"df":2}}}},"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.4142135623730951}},"df":3}}}},"u":{"docs":{},"df":0,"m":{"docs":{"https://phlip9.com/notes/fuzzing/fuzzcheck-rs/":{"tf":1.0}},"df":1}},"y":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"m":{"docs":{"https://phlip9.com/notes/WSL/WSL2 custom kernel/":{"tf":1.0}},"df":1}}}}}},"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"m":{"docs":{"https://phlip9.com/notes/lang/operator fixity and precedence/":{"tf":1.0}},"df":1}}},"l":{"docs":{"https://phlip9.com/notes/design/form design/":{"tf":1.0},"https://phlip9.com/notes/devops/deployment strategies/":{"tf":1.0}},"df":2},"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/performance/bit hacks/":{"tf":2.0}},"df":1}}},"e":{"docs":{"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":3.3166247903554}},"df":1}},"y":{"docs":{},"df":0,"p":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.4142135623730951}},"df":1}}}},"c":{"docs":{},"df":0,"c":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 4 - onion routing protocol/":{"tf":1.0}},"df":1,"e":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0},"https://phlip9.com/notes/management/relieve often - why generals were more successful in WWII/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.4142135623730951}},"df":3,"e":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.7320508075688772},"https://phlip9.com/notes/devops/azure CLI/":{"tf":1.4142135623730951}},"df":2}},"s":{"docs":{"https://phlip9.com/notes/lang/lua/":{"tf":1.0}},"df":1,"s":{"docs":{"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/submarine swaps/":{"tf":1.0},"https://phlip9.com/notes/crypto/acme protocol/":{"tf":1.4142135623730951},"https://phlip9.com/notes/devops/linkerd/":{"tf":1.0},"https://phlip9.com/notes/management/relieve often - why generals were more successful in WWII/":{"tf":2.0},"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/reproducible-builds.org/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/arubanetworks captive portal/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/testing whether a coin is fair/":{"tf":1.4142135623730951}},"df":9,"f":{"docs":{},"df":0,"u":{"docs":{},"df":0,"l":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/android/OTA updates for rooted android phone/":{"tf":1.4142135623730951},"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.7320508075688772},"https://phlip9.com/notes/btc-ln/atomic multipath payments (AMP)/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/gramine/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.0},"https://phlip9.com/notes/misc/setting up a headless raspbian boot image/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/rebuilderd/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/arubanetworks captive portal/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.4142135623730951}},"df":13}}}}},"o":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/combinatorics/k-combinations of a multiset/":{"tf":1.7320508075688772}},"df":1}}}}},"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/crypto/(talk) authenticated data structures for stateless validation/":{"tf":1.0}},"df":1}}}}},"h":{"docs":{"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/monetary instruments/":{"tf":1.0},"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/money services business (MSB)/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":2.23606797749979},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/rust verification tools/":{"tf":1.0},"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/reproducible-builds.org/":{"tf":1.4142135623730951},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":2.0},"https://phlip9.com/notes/router/lightning router/captive portal/arubanetworks captive portal/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":2.6457513110645907},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":3.0}},"df":11},"k":{"docs":{"https://phlip9.com/notes/android/android cli setup/":{"tf":1.0},"https://phlip9.com/notes/design/form design/":{"tf":1.0}},"df":2}},"d":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/btc-ln/breez lightning service providers/":{"tf":1.0}},"df":1}}}}},"o":{"docs":{"https://phlip9.com/notes/WSL/WSL2 custom kernel/":{"tf":1.7320508075688772},"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":3.7416573867739413},"https://phlip9.com/notes/android/linux ADB udev setup/":{"tf":2.449489742783178},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":4.69041575982343},"https://phlip9.com/notes/confidential computing/gramine/":{"tf":3.0},"https://phlip9.com/notes/devops/algo wireguard VPN server/":{"tf":1.0},"https://phlip9.com/notes/devops/azure CLI/":{"tf":2.0},"https://phlip9.com/notes/ios/ios setup/":{"tf":1.7320508075688772},"https://phlip9.com/notes/lang/ATS/Install ATS2/":{"tf":1.0},"https://phlip9.com/notes/lang/flutter/flutter setup/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/rr with rust/":{"tf":1.7320508075688772},"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":1.0},"https://phlip9.com/notes/misc/pop_OS! tweaks/":{"tf":1.0},"https://phlip9.com/notes/misc/prepping RPI for embedded dev/":{"tf":3.0},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0},"https://phlip9.com/notes/misc/scanning QR codes on desktop/":{"tf":1.0},"https://phlip9.com/notes/misc/setting up a headless raspbian boot image/":{"tf":1.0},"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":2.449489742783178},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":3.605551275463989},"https://phlip9.com/notes/reproducible builds/nix/nix auto-allocate-uids -> nixbld users/":{"tf":1.4142135623730951},"https://phlip9.com/notes/reproducible builds/nix/nix debug broken package build/":{"tf":1.4142135623730951}},"df":22}},"f":{"docs":{},"df":0,"f":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.0},"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/arubanetworks captive portal/":{"tf":1.0}},"df":4}},"x":{"docs":{"https://phlip9.com/notes/networking/network interfaces/":{"tf":2.23606797749979}},"df":1,"=":{"docs":{},"df":0,"b":{"docs":{"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":3.1622776601683795}},"df":1}}}}}},"g":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0}},"df":2}},"g":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0},"https://phlip9.com/notes/management/relieve often - why generals were more successful in WWII/":{"tf":1.0},"https://phlip9.com/notes/misc/setting up a headless raspbian boot image/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.4142135623730951}},"df":6}}}}},"i":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/sui/":{"tf":1.7320508075688772}},"df":1,"t":{"docs":{"https://phlip9.com/notes/combinatorics/k-combinations of a multiset/":{"tf":1.0},"https://phlip9.com/notes/devops/docker compose/":{"tf":1.0},"https://phlip9.com/notes/fuzzing/fuzzcheck-rs/":{"tf":1.0},"https://phlip9.com/notes/misc/optimization solvers/":{"tf":1.0}},"df":4,"a":{"docs":{},"df":0,"b":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.0}},"df":2}}}}},"m":{"docs":{"https://phlip9.com/notes/AI ML/Expectimax Search/":{"tf":1.7320508075688772},"https://phlip9.com/notes/AI ML/Markov Decision Process (MDP)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/btc-ln/atomic multipath payments (AMP)/":{"tf":1.0},"https://phlip9.com/notes/devops/secrets/1password - secrets automation/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":4.0},"https://phlip9.com/notes/performance/bit hacks/":{"tf":4.123105625617661},"https://phlip9.com/notes/statistics probability/G-test - multinomial goodness-of-fit/":{"tf":1.4142135623730951},"https://phlip9.com/notes/statistics probability/standard error/":{"tf":1.0}},"df":8,"(":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"g":{"docs":{},"df":0,"0":{"docs":{"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":2.449489742783178}},"df":1},"2":{"docs":{"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.0}},"df":1}}}}},"_":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/statistics probability/G-test - multinomial goodness-of-fit/":{"tf":2.23606797749979},"https://phlip9.com/notes/statistics probability/multinomial distribution/":{"tf":1.0}},"df":2,"^":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/statistics probability/standard error/":{"tf":1.0}},"df":1}}},"n":{"docs":{"https://phlip9.com/notes/statistics probability/cheat sheet/":{"tf":2.0}},"df":1},"{":{"docs":{"https://phlip9.com/notes/AI ML/Markov Decision Process (MDP)/":{"tf":2.6457513110645907}},"df":1,"i":{"docs":{"https://phlip9.com/notes/statistics probability/multinomial distribution/":{"tf":1.0}},"df":1},"t":{"docs":{"https://phlip9.com/notes/AI ML/Markov Decision Process (MDP)/":{"tf":1.0}},"df":1},"x":{"docs":{"https://phlip9.com/notes/statistics probability/multinomial distribution/":{"tf":1.0}},"df":1}}},"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0}},"df":1,"i":{"docs":{"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/money services business (MSB)/":{"tf":1.0},"https://phlip9.com/notes/b l o c k c h a i n/aptos/":{"tf":1.0},"https://phlip9.com/notes/b l o c k c h a i n/sui/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/BOLT 8 - secure noise transport/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":1.0},"https://phlip9.com/notes/lang/flutter/flutter setup/":{"tf":1.0}},"df":8}}}}},"n":{"docs":{},"df":0,"f":{"docs":{},"df":0,"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"w":{"docs":{"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.4142135623730951}},"df":1}}}}},"p":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0},"https://phlip9.com/notes/misc/pop_OS! tweaks/":{"tf":1.0},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/nix/nix auto-allocate-uids -> nixbld users/":{"tf":1.0}},"df":4,"c":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{},"df":0,"s":{"docs":{"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0}},"df":1}}}}},"g":{"docs":{},"df":0,"l":{"docs":{},"df":0,"u":{"docs":{"https://phlip9.com/notes/misc/kintsugi/":{"tf":1.0}},"df":1}}},"v":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/financial instituion/":{"tf":1.0}},"df":1,"o":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1,"i":{"docs":{"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/financial instituion/":{"tf":1.0}},"df":1}}}}}}}},"p":{"docs":{},"df":0,"(":{"docs":{},"df":0,"p":{"docs":{"https://phlip9.com/notes/statistics probability/G-test - multinomial goodness-of-fit/":{"tf":1.0}},"df":1},"q":{"docs":{"https://phlip9.com/notes/statistics probability/G-test - multinomial goodness-of-fit/":{"tf":1.0}},"df":1}},"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/design/form design/":{"tf":1.4142135623730951},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.0}},"df":2}}}}},"i":{"docs":{"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/rebuilderd/":{"tf":1.4142135623730951}},"df":2}},"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/WSL/WSL2 custom kernel/":{"tf":1.4142135623730951},"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.4142135623730951},"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/money services business (MSB)/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/BOLT 7 - p2p node and channel discovery/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":3.4641016151377544},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.7320508075688772},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.7320508075688772},"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel SGX/secure time/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel TDX/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/marblerun/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":2.6457513110645907},"https://phlip9.com/notes/crypto/biscuit authz/":{"tf":1.0},"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":1.0},"https://phlip9.com/notes/devops/azure CLI/":{"tf":1.0},"https://phlip9.com/notes/devops/consul/":{"tf":1.0},"https://phlip9.com/notes/devops/docker compose/":{"tf":1.0},"https://phlip9.com/notes/devops/k3s/":{"tf":1.0},"https://phlip9.com/notes/devops/nomad/":{"tf":1.4142135623730951},"https://phlip9.com/notes/fuzzing/bolero - fuzzing + property testing/":{"tf":1.0},"https://phlip9.com/notes/fuzzing/fuzzcheck-rs/":{"tf":1.0},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/rust/rr with rust/":{"tf":1.0},"https://phlip9.com/notes/misc/optimization solvers/":{"tf":1.0},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0},"https://phlip9.com/notes/misc/setting up a headless raspbian boot image/":{"tf":1.4142135623730951},"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.7320508075688772},"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":2.0},"https://phlip9.com/notes/statistics probability/G-test - multinomial goodness-of-fit/":{"tf":1.4142135623730951},"https://phlip9.com/notes/statistics probability/multinomial distribution/":{"tf":1.0}},"df":37,"$":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/statistics probability/multinomial distribution/":{"tf":1.0}},"df":1}}}},"s":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/breez lightning service providers/":{"tf":1.0},"https://phlip9.com/notes/combinatorics/k-combinations of a multiset/":{"tf":1.0},"https://phlip9.com/notes/networking/ipv6 address space/":{"tf":1.0},"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.0}},"df":5}},"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"s":{"docs":{"https://phlip9.com/notes/lang/flutter/flutter setup/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":2.0},"https://phlip9.com/notes/lang/rust/rr with rust/":{"tf":1.0}},"df":3}}}}},"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0}},"df":1}}}},"r":{"docs":{},"df":0,"e":{"docs":{"https://phlip9.com/notes/android/ADB over TCP inside WSL2/":{"tf":1.0},"https://phlip9.com/notes/android/OTA updates for rooted android phone/":{"tf":1.7320508075688772},"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0},"https://phlip9.com/notes/android/linux ADB udev setup/":{"tf":1.0},"https://phlip9.com/notes/android/root phone with magisk/":{"tf":1.4142135623730951},"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":2.23606797749979},"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/secure time/":{"tf":1.0},"https://phlip9.com/notes/devops/algo wireguard VPN server/":{"tf":1.0},"https://phlip9.com/notes/devops/azure CLI/":{"tf":1.0},"https://phlip9.com/notes/fuzzing/fuzzcheck-rs/":{"tf":1.0},"https://phlip9.com/notes/keyboards/moergo glove80/":{"tf":1.0},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.0},"https://phlip9.com/notes/misc/prepping RPI for embedded dev/":{"tf":1.0},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.0}},"df":18},"f":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 8 - secure noise transport/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.0},"https://phlip9.com/notes/misc/kintsugi/":{"tf":2.23606797749979}},"df":3}}},"p":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":1.0}},"df":1}}}},"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/postgres/snippets/":{"tf":1.0}},"df":1}}}}},"v":{"docs":{},"df":0,"e":{"docs":{},"df":0,"y":{"docs":{"https://phlip9.com/notes/fuzzing/fuzzing/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.0}},"df":2}}}},"s":{"docs":{},"df":0,"p":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/reproducible builds/reproducible-builds.org/":{"tf":1.0}},"df":1}},"n":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/misc/kintsugi/":{"tf":1.0}},"df":1}}}},"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/router/lightning router/lightning router overview/":{"tf":1.0}},"df":1}}}}}},"v":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":3.1622776601683795},"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.7320508075688772},"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":3.1622776601683795}},"df":3}},"w":{"docs":{"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.7320508075688772}},"df":1,"_":{"docs":{},"df":0,"h":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"g":{"docs":{},"df":0,"_":{"docs":{},"df":0,"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"e":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}},"a":{"docs":{},"df":0,"p":{"docs":{"https://phlip9.com/notes/AI ML/Markov Decision Process (MDP)/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/breez lightning service providers/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/submarine swaps/":{"tf":4.898979485566356},"https://phlip9.com/notes/devops/deployment strategies/":{"tf":1.0},"https://phlip9.com/notes/keyboards/moergo glove80/":{"tf":1.0},"https://phlip9.com/notes/misc/kintsugi/":{"tf":1.0},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":2.0}},"df":7,"(":{"docs":{},"df":0,"x":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0}},"df":1}}},"_":{"docs":{},"df":0,"b":{"docs":{},"df":0,"o":{"docs":{},"df":0,"x":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0}},"df":1}}}}}},"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"f":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0}},"df":1}}}}},"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":2.23606797749979},"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.4142135623730951},"https://phlip9.com/notes/devops/deployment strategies/":{"tf":1.7320508075688772},"https://phlip9.com/notes/ios/ios setup/":{"tf":1.0},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":2.23606797749979},"https://phlip9.com/notes/lang/gdb ref/":{"tf":1.0},"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":1.0},"https://phlip9.com/notes/networking/ipv6 address space/":{"tf":1.0},"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.0}},"df":10}}}},"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/management/relieve often - why generals were more successful in WWII/":{"tf":1.0}},"df":1}}},"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0}},"df":1}}}}},"y":{"docs":{"https://phlip9.com/notes/devops/secrets/ejson (Shopify)/":{"tf":1.0},"https://phlip9.com/notes/devops/secrets/mozilla SOPS/":{"tf":1.0},"https://phlip9.com/notes/devops/secrets/sy - share secrets safely/":{"tf":1.4142135623730951},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":4,"c":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/lang/rust/sycamore x futures/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/rust/understanding sycamore reactivity/":{"tf":1.4142135623730951}},"df":2,"e":{"docs":{},"df":0,":":{"docs":{},"df":0,":":{"docs":{},"df":0,"f":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{},"df":0,"u":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,":":{"docs":{},"df":0,":":{"docs":{},"df":0,"s":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"p":{"docs":{},"df":0,"e":{"docs":{},"df":0,"f":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{},"df":0,"u":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"x":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/lang/rust/sycamore x futures/":{"tf":1.0}},"df":1}}}}}}}}}},"s":{"docs":{},"df":0,"p":{"docs":{},"df":0,"a":{"docs":{},"df":0,"w":{"docs":{},"df":0,"n":{"docs":{},"df":0,"f":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{},"df":0,"u":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/lang/rust/sycamore x futures/":{"tf":1.0}},"df":1}}}}}}}}}}}}}},"p":{"docs":{},"df":0,"a":{"docs":{},"df":0,"w":{"docs":{},"df":0,"n":{"docs":{},"df":0,"_":{"docs":{},"df":0,"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"c":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"(":{"docs":{},"df":0,"f":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{},"df":0,"u":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/lang/rust/sycamore x futures/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"m":{"docs":{},"df":0,"b":{"docs":{},"df":0,"o":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/WSL/WSL2 custom kernel/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/gramine/":{"tf":1.0},"https://phlip9.com/notes/fuzzing/fuzzing/":{"tf":1.0},"https://phlip9.com/notes/keyboards/moergo glove80/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/rr with rust/":{"tf":1.0},"https://phlip9.com/notes/postgres/postgres performance tuning/":{"tf":1.0}},"df":9}}},"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel SGX/secure time/":{"tf":1.0}},"df":2}}}},"p":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"f":{"docs":{},"df":0,"y":{"docs":{},"df":0,"/":{"docs":{},"df":0,"m":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"p":{"docs":{},"df":0,"o":{"docs":{"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":1.0}},"df":1}}}}}}}}}}}}},"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.0}},"df":1}}}}},"n":{"docs":{},"df":0,"c":{"docs":{"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.7320508075688772},"https://phlip9.com/notes/b l o c k c h a i n/btc utreexo - utxo accumulator/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":2.0},"https://phlip9.com/notes/devops/secrets/doppler/":{"tf":1.0},"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":1.7320508075688772},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0}},"df":6,"&":{"docs":{},"df":0,"g":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.0}},"df":1}}},"h":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/fastpay/":{"tf":1.0},"https://phlip9.com/notes/devops/secrets/ejson (Shopify)/":{"tf":1.0},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0}},"df":3,"i":{"docs":{},"df":0,"s":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.7320508075688772}},"df":1}}}}}}},"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0}},"df":2}},"x":{"docs":{"https://phlip9.com/notes/combinatorics/k-combinations of a multiset/":{"tf":1.0},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":2.23606797749979},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/gdb ref/":{"tf":1.0},"https://phlip9.com/notes/lang/koka-lang/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/lua/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/nix/links/":{"tf":1.0}},"df":8}},"h":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1}}}}},"s":{"docs":{},"df":0,".":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"d":{"docs":{},"df":0,"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{},"df":0,".":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/confidential computing/gramine/":{"tf":1.4142135623730951}},"df":1}}}}}}}}}}}}},"c":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":3.605551275463989},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/rr with rust/":{"tf":1.0},"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":2.449489742783178}},"df":5,"l":{"docs":{},"df":0,":":{"docs":{},"df":0,":":{"docs":{},"df":0,":":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":2.0}},"df":1},"y":{"docs":{},"df":0,"'":{"docs":{},"df":0,"/":{"docs":{},"df":0,"p":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.0}},"df":1}}}}},"/":{"docs":{},"df":0,"p":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.0}},"df":1}}}}}}}}},"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{},"df":0,"u":{"docs":{},"df":0,"r":{"docs":{},"df":0,"n":{"docs":{},"df":0,"/":{"docs":{},"df":0,"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{},"df":0,"f":{"docs":{"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.0}},"df":1}}}}}}}}}}}},"e":{"docs":{},"df":0,"x":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"*":{"docs":{},"df":0,":":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{},"df":0,"u":{"docs":{},"df":0,"r":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.0}},"df":1}}}}}}}},"v":{"docs":{},"df":0,"e":{"docs":{},"df":0,":":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.4142135623730951}},"df":1}}}}}}}}}}}},"o":{"docs":{},"df":0,"p":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"*":{"docs":{},"df":0,":":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.0}},"df":1}}}}}}}}}}},"p":{"docs":{},"df":0,"o":{"docs":{},"df":0,"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"x":{"docs":{},"df":0,"_":{"docs":{},"df":0,"s":{"docs":{},"df":0,"p":{"docs":{},"df":0,"a":{"docs":{},"df":0,"w":{"docs":{},"df":0,"n":{"docs":{},"df":0,":":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.7320508075688772}},"df":1}}}}}}}}}}}}}}}}},"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{},"df":0,":":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":2.0}},"df":1}}}}}}}}}},"w":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.0}},"df":1,"e":{"docs":{},"df":0,":":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.0}},"df":1}}}}}}}}}}}}},"s":{"docs":{},"df":0,"[":{"docs":{},"df":0,"p":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"b":{"docs":{},"df":0,"e":{"docs":{},"df":0,"f":{"docs":{},"df":0,"u":{"docs":{},"df":0,"n":{"docs":{},"df":0,"c":{"docs":{"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.4142135623730951}},"df":1}}}}}}}}}}}}}}},"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"m":{"docs":{"https://phlip9.com/notes/":{"tf":1.0},"https://phlip9.com/notes/android/android cli setup/":{"tf":2.449489742783178},"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/financial instituion/":{"tf":1.0},"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/money services business (MSB)/":{"tf":2.0},"https://phlip9.com/notes/b l o c k c h a i n/fastpay/":{"tf":3.3166247903554},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":2.6457513110645907},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":2.449489742783178},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.7320508075688772},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel TDX/":{"tf":1.4142135623730951},"https://phlip9.com/notes/crypto/zkdocs/":{"tf":1.0},"https://phlip9.com/notes/devops/consul/":{"tf":1.0},"https://phlip9.com/notes/distributed systems/":{"tf":1.0},"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":4.358898943540674},"https://phlip9.com/notes/misc/setting up a headless raspbian boot image/":{"tf":1.0},"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.0},"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.4142135623730951},"https://phlip9.com/notes/reproducible builds/nix/nix auto-allocate-uids -> nixbld users/":{"tf":1.4142135623730951},"https://phlip9.com/notes/reproducible builds/nix/nix debug broken package build/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/rebuilderd/":{"tf":1.7320508075688772},"https://phlip9.com/notes/reproducible builds/reproducible-builds.org/":{"tf":1.7320508075688772},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.4142135623730951}},"df":25,".":{"docs":{},"df":0,"c":{"docs":{},"df":0,"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"c":{"docs":{},"df":0,"k":{"docs":{"https://phlip9.com/notes/statistics probability/winsorize/":{"tf":1.0}},"df":1}}}}},"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{"https://phlip9.com/notes/statistics probability/winsorize/":{"tf":1.0}},"df":1}}}}}}},"/":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"b":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"y":{"docs":{},"df":0,"/":{"docs":{},"df":0,"f":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"w":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"k":{"docs":{},"df":0,"s":{"docs":{},"df":0,"/":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"v":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,".":{"docs":{},"df":0,"f":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"w":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"k":{"docs":{},"df":0,"/":{"docs":{},"df":0,"f":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"w":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"k":{"docs":{},"df":0,"s":{"docs":{},"df":0,"/":{"docs":{},"df":0,"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,".":{"docs":{},"df":0,"f":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"w":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"k":{"docs":{},"df":0,"/":{"docs":{},"df":0,"v":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"s":{"docs":{},"df":0,"/":{"docs":{},"df":0,"a":{"docs":{},"df":0,"/":{"docs":{},"df":0,"s":{"docs":{},"df":0,"u":{"docs":{},"df":0,"p":{"docs":{},"df":0,"p":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{},"df":0,"/":{"docs":{},"df":0,"m":{"docs":{},"df":0,"d":{"docs":{},"df":0,"w":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"k":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"_":{"docs":{},"df":0,"s":{"docs":{},"df":0,"h":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"c":{"docs":{},"df":0,"t":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/android/linux ADB udev setup/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.4142135623730951},"https://phlip9.com/notes/reproducible builds/nix/nix auto-allocate-uids -> nixbld users/":{"tf":1.0}},"df":3}}},"d":{"docs":{"https://phlip9.com/notes/android/linux ADB udev setup/":{"tf":1.4142135623730951},"https://phlip9.com/notes/misc/prepping RPI for embedded dev/":{"tf":1.0}},"df":2},"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"s":{"docs":{"https://phlip9.com/notes/android/root phone with magisk/":{"tf":1.0}},"df":1}}}},"s":{"docs":{},"df":0,"/":{"docs":{},"df":0,"p":{"docs":{},"df":0,"a":{"docs":{},"df":0,"p":{"docs":{"https://phlip9.com/notes/distributed systems/papers/":{"tf":1.0}},"df":1}}}}}}}},"u":{"docs":{},"df":0,"s":{"docs":{"https://phlip9.com/notes/android/linux ADB udev setup/":{"tf":1.0}},"df":1}}}},"z":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0}},"df":1,"(":{"docs":{},"df":0,"x":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0}},"df":1}}}},"t":{"docs":{"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/":{"tf":1.0},"https://phlip9.com/notes/combinatorics/k-combinations of a multiset/":{"tf":2.0},"https://phlip9.com/notes/confidential computing/gramine/":{"tf":1.0},"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":1.0},"https://phlip9.com/notes/distributed systems/papers/(2020) Semi-Fast Byzantine-tolerant Shared Register without Reliable Broadcast/":{"tf":4.242640687119285},"https://phlip9.com/notes/fuzzing/fuzzing/":{"tf":1.0},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":5.0990195135927845},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":2.6457513110645907},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":6.244997998398398},"https://phlip9.com/notes/nvim/universal-ctags Notes/":{"tf":1.0},"https://phlip9.com/notes/performance/bit hacks/":{"tf":4.242640687119285},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/nix/nix debug broken package build/":{"tf":1.4142135623730951},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":2.0},"https://phlip9.com/notes/statistics probability/testing whether a coin is fair/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/winsorize/":{"tf":3.605551275463989}},"df":17,"(":{"docs":{},"df":0,"0":{"docs":{"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":1.0}},"df":1},"1":{"docs":{"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":1.0}},"df":1},"2":{"docs":{"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":1.0}},"df":1},"i":{"docs":{"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":2.23606797749979}},"df":1},"n":{"docs":{"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":1.0}},"df":1}},")":{"docs":{},"df":0,".":{"docs":{},"df":0,"w":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"p":{"docs":{},"df":0,"p":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"g":{"docs":{},"df":0,"_":{"docs":{},"df":0,"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"g":{"docs":{},"df":0,"(":{"docs":{},"df":0,")":{"docs":{},"df":0,")":{"docs":{},"df":0,".":{"docs":{},"df":0,"w":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"p":{"docs":{},"df":0,"p":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"g":{"docs":{},"df":0,"_":{"docs":{},"df":0,"s":{"docs":{},"df":0,"u":{"docs":{},"df":0,"b":{"docs":{},"df":0,"(":{"docs":{},"df":0,"1":{"docs":{"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},".":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"i":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"g":{"docs":{},"df":0,"_":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"(":{"docs":{},"df":0,")":{"docs":{},"df":0,")":{"docs":{},"df":0,")":{"docs":{},"df":0,".":{"docs":{},"df":0,"w":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"p":{"docs":{},"df":0,"p":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"g":{"docs":{},"df":0,"_":{"docs":{},"df":0,"s":{"docs":{},"df":0,"u":{"docs":{},"df":0,"b":{"docs":{},"df":0,"(":{"docs":{},"df":0,"1":{"docs":{"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"w":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"p":{"docs":{},"df":0,"p":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"g":{"docs":{},"df":0,"_":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{},"df":0,"d":{"docs":{},"df":0,"(":{"docs":{},"df":0,"1":{"docs":{"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}},"0":{"docs":{},"df":0,"y":{"docs":{},"df":0,"p":{"docs":{},"df":0,"e":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.4142135623730951}},"df":1}}}},"@":{"docs":{},"df":0,"y":{"docs":{},"df":0,"p":{"docs":{},"df":0,"e":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":3.605551275463989}},"df":1}}}},"]":{"docs":{},"df":0,"[":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.4142135623730951}},"df":1,"]":{"docs":{},"df":0,"(":{"docs":{},"df":0,"x":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0}},"df":1}}}}}},"_":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":2.0}},"df":1}}}}},"i":{"docs":{"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":1.4142135623730951}},"df":1,"m":{"docs":{},"df":0,"1":{"docs":{"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":1.4142135623730951}},"df":1}}},"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"c":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/distributed systems/papers/(2020) Semi-Fast Byzantine-tolerant Shared Register without Reliable Broadcast/":{"tf":1.7320508075688772}},"df":1}}}}},"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"x":{"docs":{"https://phlip9.com/notes/distributed systems/papers/(2020) Semi-Fast Byzantine-tolerant Shared Register without Reliable Broadcast/":{"tf":1.7320508075688772}},"df":1}}}},"a":{"docs":{},"df":0,"b":{"docs":{"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0},"https://phlip9.com/notes/keyboards/moergo glove80/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/rust/sycamore x futures/":{"tf":1.0},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.4142135623730951}},"df":4,"l":{"docs":{"https://phlip9.com/notes/AI ML/Expectimax Search/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel TDX/":{"tf":1.0},"https://phlip9.com/notes/lang/lua/":{"tf":3.0},"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.0},"https://phlip9.com/notes/performance/profiling/":{"tf":1.0},"https://phlip9.com/notes/postgres/snippets/":{"tf":2.8284271247461903},"https://phlip9.com/notes/postgres/types of scans/":{"tf":2.23606797749979},"https://phlip9.com/notes/statistics probability/testing whether a coin is fair/":{"tf":1.0}},"df":9,"e":{"docs":{},"df":0,"(":{"docs":{"https://phlip9.com/notes/postgres/types of scans/":{"tf":1.0}},"df":1},".":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"c":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/lang/lua/":{"tf":1.0}},"df":1}}}}}},"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{},"df":0,"(":{"docs":{},"df":0,"a":{"docs":{"https://phlip9.com/notes/lang/lua/":{"tf":1.4142135623730951}},"df":1}}}}}}}},"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"m":{"docs":{},"df":0,"o":{"docs":{},"df":0,"v":{"docs":{},"df":0,"e":{"docs":{},"df":0,"(":{"docs":{},"df":0,"a":{"docs":{"https://phlip9.com/notes/lang/lua/":{"tf":1.0}},"df":1}}}}}}}},"s":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/lang/lua/":{"tf":1.0}},"df":1}}}}}}}},"c":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/management/relieve often - why generals were more successful in WWII/":{"tf":1.0}},"df":1}}},"d":{"docs":{},"df":0,"g":{"docs":{},"df":0,"e":{"docs":{},"df":0,"'":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/btc utreexo - utxo accumulator/":{"tf":1.0}},"df":1}}},"j":{"docs":{"https://phlip9.com/notes/btc-ln/lightning network notes/":{"tf":1.0}},"df":1}},"g":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.7320508075688772},"https://phlip9.com/notes/btc-ln/BOLT 11 - invoices/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.4142135623730951},"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":1.0},"https://phlip9.com/notes/devops/azure CLI/":{"tf":1.4142135623730951},"https://phlip9.com/notes/distributed systems/papers/(2020) Semi-Fast Byzantine-tolerant Shared Register without Reliable Broadcast/":{"tf":4.123105625617661},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.0},"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":1.4142135623730951},"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.4142135623730951},"https://phlip9.com/notes/nvim/universal-ctags Notes/":{"tf":1.4142135623730951},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.0}},"df":12,"(":{"docs":{"https://phlip9.com/notes/distributed systems/papers/(2020) Semi-Fast Byzantine-tolerant Shared Register without Reliable Broadcast/":{"tf":1.4142135623730951}},"df":1,"w":{"docs":{"https://phlip9.com/notes/distributed systems/papers/(2020) Semi-Fast Byzantine-tolerant Shared Register without Reliable Broadcast/":{"tf":1.4142135623730951}},"df":1}},"_":{"docs":{},"df":0,"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"z":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0}},"df":1}}}},"g":{"docs":{},"df":0,"e":{"docs":{},"df":0,"d":{"docs":{},"df":0,"f":{"docs":{},"df":0,"i":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 11 - invoices/":{"tf":1.0}},"df":1}}}}}}}}},"i":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/fastpay/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.0},"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":1.0},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":2.8284271247461903},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.7320508075688772},"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":1.4142135623730951},"https://phlip9.com/notes/statistics probability/CDF confidence bands - DKW inequality/":{"tf":1.0}},"df":8}},"k":{"docs":{},"df":0,"e":{"docs":{"https://phlip9.com/notes/AI ML/Expectimax Search/":{"tf":1.4142135623730951},"https://phlip9.com/notes/AI ML/Markov Decision Process (MDP)/":{"tf":1.7320508075688772},"https://phlip9.com/notes/btc-ln/breez lightning service providers/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.0},"https://phlip9.com/notes/combinatorics/k-combinations of a multiset/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.7320508075688772},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":1.0},"https://phlip9.com/notes/devops/algo wireguard VPN server/":{"tf":1.0},"https://phlip9.com/notes/devops/deployment strategies/":{"tf":1.0},"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":1.0},"https://phlip9.com/notes/keyboards/moergo glove80/":{"tf":1.0},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":2.0},"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.4142135623730951},"https://phlip9.com/notes/misc/kintsugi/":{"tf":1.0},"https://phlip9.com/notes/misc/prepping RPI for embedded dev/":{"tf":1.0},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0},"https://phlip9.com/notes/misc/setting up a headless raspbian boot image/":{"tf":1.0},"https://phlip9.com/notes/misc/water distillation setup/":{"tf":1.0},"https://phlip9.com/notes/networking/network interface card (NIC)/":{"tf":1.0},"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":2.0},"https://phlip9.com/notes/reproducible builds/nix/nix debug spurrious rebuilds/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":2.0},"https://phlip9.com/notes/statistics probability/standard error/":{"tf":1.7320508075688772},"https://phlip9.com/notes/statistics probability/testing whether a coin is fair/":{"tf":1.7320508075688772},"https://phlip9.com/notes/statistics probability/winsorize/":{"tf":1.0}},"df":30,"n":{"docs":{"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.4142135623730951},"https://phlip9.com/notes/statistics probability/multinomial distribution/":{"tf":1.0}},"df":3}}},"l":{"docs":{},"df":0,"e":{"docs":{"https://phlip9.com/notes/fuzzing/fuzzing/":{"tf":1.0}},"df":1},"k":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0},"https://phlip9.com/notes/combinatorics/k-combinations of a multiset/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/marblerun/":{"tf":1.0},"https://phlip9.com/notes/crypto/(talk) authenticated data structures for stateless validation/":{"tf":1.4142135623730951},"https://phlip9.com/notes/crypto/dex - open-source OIDC & OAuth 2.0 provider/":{"tf":1.0},"https://phlip9.com/notes/devops/nomad/":{"tf":1.0},"https://phlip9.com/notes/performance/simdjson talk/":{"tf":1.4142135623730951}},"df":9}},"m":{"docs":{},"df":0,"e":{"docs":{"https://phlip9.com/notes/fuzzing/fuzzing/":{"tf":1.0}},"df":1},"p":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/reproducible builds/rebuilderd/":{"tf":1.0}},"df":1}}}},"p":{"docs":{"https://phlip9.com/notes/android/android cli setup/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0},"https://phlip9.com/notes/keyboards/moergo glove80/":{"tf":3.0},"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.0}},"df":4,"2":{"docs":{"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.0}},"df":1}},"r":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.4142135623730951}},"df":1,"g":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/WSL/WSL2 custom kernel/":{"tf":1.0},"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":2.0},"https://phlip9.com/notes/btc-ln/BOLT 11 - invoices/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":2.449489742783178},"https://phlip9.com/notes/confidential computing/mystikos/":{"tf":1.7320508075688772},"https://phlip9.com/notes/keyboards/moergo glove80/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.7320508075688772},"https://phlip9.com/notes/misc/arm target triples/":{"tf":1.4142135623730951},"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.7320508075688772},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":3.605551275463989},"https://phlip9.com/notes/reproducible builds/reproducible-builds.org/":{"tf":1.4142135623730951},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.0}},"df":15,"(":{"docs":{"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.0}},"df":1},".":{"docs":{},"df":0,"x":{"docs":{},"df":0,"8":{"docs":{},"df":0,"6":{"docs":{},"df":0,"_":{"docs":{},"df":0,"6":{"docs":{},"df":0,"4":{"docs":{"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0}},"df":1}}}}}}},"/":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"b":{"docs":{},"df":0,"u":{"docs":{},"df":0,"g":{"docs":{},"df":0,"/":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"p":{"docs":{},"df":0,"s":{"docs":{},"df":0,"/":{"docs":{},"df":0,"s":{"docs":{},"df":0,"m":{"docs":{},"df":0,"o":{"docs":{},"df":0,"k":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":2.8284271247461903}},"df":1}}}}}}}}}}}}}}}}}}}},"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"/":{"docs":{},"df":0,"m":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.4142135623730951}},"df":1}}}}}}}}}}},"\\":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"\\":{"docs":{},"df":0,"s":{"docs":{},"df":0,"g":{"docs":{},"df":0,"x":{"docs":{"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.4142135623730951}},"df":1}}}}}}}}}}}},"_":{"docs":{},"df":0,"h":{"docs":{},"df":0,"o":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"n":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"=":{"docs":{},"df":0,"&":{"docs":{},"df":0,"l":{"docs":{},"df":0,"t":{"docs":{},"df":0,";":{"docs":{},"df":0,".":{"docs":{},"df":0,".":{"docs":{},"df":0,"&":{"docs":{},"df":0,"g":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/misc/setting up a headless raspbian boot image/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}},"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"f":{"docs":{},"df":0,"o":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.4142135623730951}},"df":2}}}}},"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"f":{"docs":{},"df":0,"o":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":3.0}},"df":2}}}}}}}},"s":{"docs":{},"df":0,"k":{"docs":{"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":2.449489742783178},"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":2.6457513110645907},"https://phlip9.com/notes/devops/nomad/":{"tf":1.0},"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":2.449489742783178},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":2.0}},"df":6}},"x":{"docs":{"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/foreign bank account report (FBAR)/":{"tf":1.7320508075688772}},"df":1}},"b":{"docs":{},"df":0,"a":{"docs":{"https://phlip9.com/notes/":{"tf":1.0}},"df":1},"h":{"docs":{"https://phlip9.com/notes/btc-ln/breez lightning service providers/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0}},"df":2},"o":{"docs":{},"df":0,"x":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.4142135623730951}},"df":1}},"s":{"docs":{},"df":0,"_":{"docs":{},"df":0,"c":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{},"df":0,"_":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"_":{"docs":{},"df":0,"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/crypto/TLS self-signed pubkey-only certs/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}},"c":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/crypto/TLS self-signed pubkey-only certs/":{"tf":1.0}},"df":1}}}}}}}},"s":{"docs":{"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.0}},"df":1}}},"c":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/confidential computing/mystikos/":{"tf":1.0}},"df":1}}},"b":{"docs":{"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.7320508075688772},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":3.872983346207417},"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":5.477225575051661},"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/secure time/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel TDX/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":1.0}},"df":7,"d":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":2.23606797749979}},"df":1,"\"":{"docs":{},"df":0,":":{"docs":{},"df":0,"\"":{"docs":{},"df":0,"2":{"docs":{},"df":0,"0":{"docs":{},"df":0,"1":{"docs":{},"df":0,"9":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.0}},"df":1}}}}}}}}}}},"e":{"docs":{},"df":0,"v":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"u":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"u":{"docs":{},"df":0,"m":{"docs":{},"df":0,"b":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.4142135623730951}},"df":1}}}}}}}}}}}}}}}}}},"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"f":{"docs":{},"df":0,"o":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.0}},"df":1}}}},"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"v":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.7320508075688772}},"df":1}}}}},"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"u":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":2.6457513110645907}},"df":1}}}}},"t":{"docs":{},"df":0,"y":{"docs":{},"df":0,"p":{"docs":{},"df":0,"e":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.0}},"df":1}}}}},"g":{"docs":{"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.0}},"df":1},"p":{"docs":{"https://phlip9.com/notes/android/ADB over TCP inside WSL2/":{"tf":1.7320508075688772},"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":1.4142135623730951},"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":1.7320508075688772},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/router/lightning router/captive portal/arubanetworks captive portal/":{"tf":1.4142135623730951},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":2.23606797749979}},"df":9,"/":{"docs":{},"df":0,"i":{"docs":{},"df":0,"p":{"docs":{"https://phlip9.com/notes/networking/network interface card (NIC)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.0}},"df":2}},"u":{"docs":{},"df":0,"d":{"docs":{},"df":0,"p":{"docs":{},"df":0,"/":{"docs":{},"df":0,"w":{"docs":{},"df":0,"h":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"v":{"docs":{"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.0}},"df":1}}}}}}}}}}},"4":{"docs":{"https://phlip9.com/notes/android/ADB over TCP inside WSL2/":{"tf":2.0}},"df":1}}},"d":{"docs":{"https://phlip9.com/notes/confidential computing/intel TDX/":{"tf":2.8284271247461903}},"df":1,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.0}},"df":1}}},"q":{"docs":{},"df":0,"e":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0}},"df":1}},"u":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/confidential computing/intel TDX/":{"tf":1.0}},"df":1}}}}},"x":{"docs":{"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel TDX/":{"tf":3.0}},"df":3}},"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"v":{"docs":{"https://phlip9.com/notes/lang/rust/rust x SGX/":{"tf":1.4142135623730951}},"df":1}}}},"m":{"docs":{"https://phlip9.com/notes/confidential computing/mystikos/":{"tf":1.0},"https://phlip9.com/notes/devops/secrets/sy - share secrets safely/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.4142135623730951}},"df":3},"p":{"docs":{},"df":0,"o":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/misc/kintsugi/":{"tf":1.0}},"df":1}}},"r":{"docs":{"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.0},"https://phlip9.com/notes/lang/operator fixity and precedence/":{"tf":1.0}},"df":2}},"c":{"docs":{},"df":0,"h":{"docs":{},"df":0,"n":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{"https://phlip9.com/notes/lang/lua/":{"tf":1.0}},"df":1},"q":{"docs":{},"df":0,"u":{"docs":{"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0},"https://phlip9.com/notes/crypto/(talk) authenticated data structures for stateless validation/":{"tf":1.0},"https://phlip9.com/notes/fuzzing/fuzzing/":{"tf":1.0},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/nix/nix debug broken package build/":{"tf":1.0}},"df":6}}},"o":{"docs":{},"df":0,"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"g":{"docs":{"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.4142135623730951},"https://phlip9.com/notes/reproducible builds/rebuilderd/":{"tf":1.0}},"df":3,"y":{"docs":{},"df":0,"/":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"d":{"docs":{},"df":0,"u":{"docs":{},"df":0,"c":{"docs":{"https://phlip9.com/notes/btc-ln/breez lightning service providers/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/lightning rod/":{"tf":1.0}},"df":2}}}}}}}},"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"g":{"docs":{},"df":0,"h":{"docs":{},"df":0,"t":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/btc-ln/zero-conf channels/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}},"d":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"u":{"docs":{"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":1.0},"https://phlip9.com/notes/networking/network interface card (NIC)/":{"tf":1.0}},"df":2}}}},"e":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":5.196152422706632},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":2.0},"https://phlip9.com/notes/confidential computing/gramine/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/mystikos/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":1.4142135623730951},"https://phlip9.com/notes/devops/azure CLI/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/rust/rr with rust/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.7320508075688772}},"df":9},"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"g":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"p":{"docs":{},"df":0,"h":{"docs":{"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/financial instituion/":{"tf":1.0}},"df":1}}}}},"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/lang/flutter/flutter setup/":{"tf":1.0}},"df":1}}}}}},"l":{"docs":{"https://phlip9.com/notes/WSL/WSL2 custom kernel/":{"tf":1.0},"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/secure time/":{"tf":1.0},"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":1.0},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/gdb ref/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/nix/nix debug spurrious rebuilds/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/arubanetworks captive portal/":{"tf":1.4142135623730951}},"df":11}},"m":{"docs":{"https://phlip9.com/notes/android/android cli setup/":{"tf":1.4142135623730951}},"df":1,"p":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.0}},"df":1,".":{"docs":{},"df":0,"l":{"docs":{},"df":0,"u":{"docs":{},"df":0,"a":{"docs":{"https://phlip9.com/notes/lang/lua/":{"tf":1.0}},"df":1}}}},"_":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"_":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.0}},"df":1}}}}}}}},"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":2.8284271247461903},"https://phlip9.com/notes/lang/lua/":{"tf":1.0}},"df":2}}},"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/android/ADB over TCP inside WSL2/":{"tf":1.7320508075688772},"https://phlip9.com/notes/android/android cli setup/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":2.0},"https://phlip9.com/notes/combinatorics/k-combinations of a multiset/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.0},"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.4142135623730951},"https://phlip9.com/notes/router/lightning router/captive portal/arubanetworks captive portal/":{"tf":1.0}},"df":7,"l":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/android/ADB over TCP inside WSL2/":{"tf":1.0},"https://phlip9.com/notes/android/OTA updates for rooted android phone/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/nix/nix debug spurrious rebuilds/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/arubanetworks captive portal/":{"tf":1.0}},"df":4}}},"y":{"docs":{},"df":0,"_":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{},"df":0,"_":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.7320508075688772}},"df":1}}}}}}}}}}}}}}}}}},"n":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.4142135623730951}},"df":1}}},"d":{"docs":{"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":1.0},"https://phlip9.com/notes/networking/network interface card (NIC)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.0}},"df":3}},"q":{"docs":{},"df":0,"l":{"docs":{},"df":0,"0":{"docs":{"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.4142135623730951}},"df":1}}},"r":{"docs":{},"df":0,"m":{"docs":{"https://phlip9.com/notes/AI ML/Markov Decision Process (MDP)/":{"tf":2.23606797749979},"https://phlip9.com/notes/android/ADB over TCP inside WSL2/":{"tf":1.4142135623730951},"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/foreign bank account report (FBAR)/":{"tf":1.0},"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":1.0},"https://phlip9.com/notes/fuzzing/fuzzing/":{"tf":1.4142135623730951},"https://phlip9.com/notes/keyboards/moergo glove80/":{"tf":1.0},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0},"https://phlip9.com/notes/networking/network interface card (NIC)/":{"tf":1.0},"https://phlip9.com/notes/postgres/postgres performance tuning/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.4142135623730951},"https://phlip9.com/notes/statistics probability/G-test - multinomial goodness-of-fit/":{"tf":1.4142135623730951},"https://phlip9.com/notes/statistics probability/standard error/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/testing whether a coin is fair/":{"tf":1.4142135623730951}},"df":14,"i":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/AI ML/Expectimax Search/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/BOLT 11 - invoices/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/marblerun/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":2.6457513110645907},"https://phlip9.com/notes/distributed systems/papers/(2021) Leaderless Consensus/":{"tf":1.0},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":2.23606797749979},"https://phlip9.com/notes/lang/koka-lang/":{"tf":1.0},"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.0}},"df":9,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.7320508075688772}},"df":1,".":{"docs":{},"df":0,"f":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1}}}}}}}}},"o":{"docs":{},"df":0,"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"g":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 4 - onion routing protocol/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0}},"df":2,"y":{"docs":{},"df":0,".":{"docs":{},"df":0,"h":{"docs":{},"df":0,"t":{"docs":{},"df":0,"m":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/misc/arm target triples/":{"tf":1.0}},"df":1}}}}}}}}}}}},"s":{"docs":{},"df":0,"o":{"docs":{},"df":0,"f":{"docs":{},"df":0,"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"v":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"g":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{"https://phlip9.com/notes/crypto/acme protocol/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}},"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"f":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"m":{"docs":{"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.4142135623730951}},"df":1}}}}},"i":{"docs":{},"df":0,"b":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/lang/rust/rr with rust/":{"tf":1.0}},"df":1}}}}},"s":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":3.4641016151377544},"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":2.23606797749979},"https://phlip9.com/notes/confidential computing/gramine/":{"tf":1.7320508075688772},"https://phlip9.com/notes/confidential computing/mystikos/":{"tf":1.0},"https://phlip9.com/notes/devops/deployment strategies/":{"tf":1.7320508075688772},"https://phlip9.com/notes/devops/docker compose/":{"tf":1.4142135623730951},"https://phlip9.com/notes/devops/kind (kubernetes in docker)/":{"tf":1.0},"https://phlip9.com/notes/devops/nomad/":{"tf":1.0},"https://phlip9.com/notes/devops/secrets/ejson (Shopify)/":{"tf":1.0},"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":1.0},"https://phlip9.com/notes/fuzzing/bolero - fuzzing + property testing/":{"tf":1.7320508075688772},"https://phlip9.com/notes/fuzzing/fuzzcheck-rs/":{"tf":3.872983346207417},"https://phlip9.com/notes/fuzzing/fuzzing/":{"tf":2.6457513110645907},"https://phlip9.com/notes/lang/flutter/flutter setup/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/rust/rr with rust/":{"tf":2.0},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0},"https://phlip9.com/notes/misc/setting up a headless raspbian boot image/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.7320508075688772},"https://phlip9.com/notes/reproducible builds/nix/nix auto-allocate-uids -> nixbld users/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/nix/nix debug broken package build/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/G-test - multinomial goodness-of-fit/":{"tf":3.1622776601683795},"https://phlip9.com/notes/statistics probability/multinomial distribution/":{"tf":3.7416573867739413},"https://phlip9.com/notes/statistics probability/p-value/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/testing whether a coin is fair/":{"tf":1.4142135623730951}},"df":26,"&":{"docs":{},"df":0,"g":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/fuzzing/fuzzcheck-rs/":{"tf":1.0}},"df":1}}},"'":{"docs":{"https://phlip9.com/notes/fuzzing/fuzzcheck-rs/":{"tf":1.0}},"df":1},"_":{"docs":{},"df":0,"g":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"p":{"docs":{"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/gramine/":{"tf":1.4142135623730951}},"df":2,"/":{"docs":{},"df":0,"p":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"v":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"s":{"docs":{},"df":0,"/":{"docs":{},"df":0,"m":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"s":{"docs":{},"df":0,"o":{"docs":{},"df":0,"f":{"docs":{},"df":0,"t":{"docs":{},"df":0,".":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"p":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"/":{"docs":{},"df":0,"v":{"docs":{},"df":0,"i":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{},"df":0,"u":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"/":{"docs":{},"df":0,"s":{"docs":{},"df":0,"g":{"docs":{},"df":0,"x":{"docs":{"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/gramine/":{"tf":1.0}},"df":2}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"c":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{"https://phlip9.com/notes/fuzzing/fuzzing/":{"tf":1.0}},"df":1}}},"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0}},"df":1}}},"p":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"y":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"g":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"g":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"b":{"docs":{},"df":0,"u":{"docs":{},"df":0,"g":{"docs":{},"df":0,"u":{"docs":{},"df":0,"n":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":2.23606797749979}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}},"x":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/AI ML/Expectimax Search/":{"tf":1.0},"https://phlip9.com/notes/WSL/WSL2 custom kernel/":{"tf":1.0},"https://phlip9.com/notes/android/android cli setup/":{"tf":1.0},"https://phlip9.com/notes/design/form design/":{"tf":1.0},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/understanding sycamore reactivity/":{"tf":1.4142135623730951},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":2.23606797749979},"https://phlip9.com/notes/performance/profiling/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.4142135623730951},"https://phlip9.com/notes/statistics probability/multinomial distribution/":{"tf":1.0}},"df":12,".":{"docs":{},"df":0,"u":{"docs":{},"df":0,"p":{"docs":{},"df":0,"d":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"_":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"x":{"docs":{},"df":0,"t":{"docs":{},"df":0,"(":{"docs":{},"df":0,"s":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"(":{"docs":{},"df":0,"&":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{},"df":0,"p":{"docs":{},"df":0,";":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,".":{"docs":{},"df":0,"g":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/lang/rust/understanding sycamore reactivity/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"/":{"docs":{},"df":0,"h":{"docs":{},"df":0,"t":{"docs":{},"df":0,"m":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":2.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":3.0}},"df":2}}}}},"2":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"c":{"docs":{},"df":0,"r":{"docs":{},"df":0,"y":{"docs":{},"df":0,"p":{"docs":{},"df":0,"t":{"docs":{},"df":0,"_":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"g":{"docs":{},"df":0,"t":{"docs":{},"df":0,"h":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.7320508075688772}},"df":1}}}}}}}}}}}}}}},"=":{"docs":{},"df":0,"\"":{"docs":{},"df":0,"&":{"docs":{},"df":0,"g":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.4142135623730951}},"df":1}}},"h":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{},"df":0,"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"\\":{"docs":{},"df":0,"n":{"docs":{},"df":0,"w":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"l":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1}}}}}}}}}}}},"p":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"s":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1}}}}}}},"_":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"a":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1,".":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1},"x":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1}}}}}}},"{":{"docs":{},"df":0,"(":{"docs":{},"df":0,"1":{"docs":{"https://phlip9.com/notes/AI ML/Markov Decision Process (MDP)/":{"tf":1.0}},"df":1},"2":{"docs":{"https://phlip9.com/notes/AI ML/Markov Decision Process (MDP)/":{"tf":1.0}},"df":1},"3":{"docs":{"https://phlip9.com/notes/AI ML/Markov Decision Process (MDP)/":{"tf":1.0}},"df":1},"4":{"docs":{"https://phlip9.com/notes/AI ML/Markov Decision Process (MDP)/":{"tf":1.0}},"df":1},"5":{"docs":{"https://phlip9.com/notes/AI ML/Markov Decision Process (MDP)/":{"tf":1.0}},"df":1},"i":{"docs":{},"df":0,"f":{"docs":{"https://phlip9.com/notes/statistics probability/cheat sheet/":{"tf":1.0}},"df":1}}},"f":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/statistics probability/CDF confidence bands - DKW inequality/":{"tf":1.0}},"df":1}}},"m":{"docs":{},"df":0,"u":{"docs":{},"df":0,"l":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/statistics probability/multinomial distribution/":{"tf":1.0}},"df":1}}}}}}}}},"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"g":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/statistics probability/multinomial distribution/":{"tf":1.0}},"df":1}}}}}},"w":{"docs":{},"df":0,"h":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/AI ML/Expectimax Search/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/CDF confidence bands - DKW inequality/":{"tf":1.0}},"df":2}}}}}}}},"f":{"docs":{},"df":0,"l":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.4142135623730951}},"df":1}}},"g":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1,"1":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":2.0}},"df":1},"2":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":2.0}},"df":1}},"h":{"docs":{"https://phlip9.com/notes/distributed systems/papers/(2020) Semi-Fast Byzantine-tolerant Shared Register without Reliable Broadcast/":{"tf":1.4142135623730951}},"df":1,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"k":{"docs":{"https://phlip9.com/notes/reproducible builds/nix/nix debug spurrious rebuilds/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.4142135623730951}},"df":3}},"t":{"docs":{},"df":0,"'":{"docs":{"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/nix/nix debug broken package build/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/nix/nix debug spurrious rebuilds/":{"tf":1.0}},"df":7,"l":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/reproducible builds/nix/nix debug spurrious rebuilds/":{"tf":1.0}},"df":1}}}}},"e":{"docs":{},"df":0,"m":{"docs":{},"df":0,"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{},"df":0,"v":{"docs":{"https://phlip9.com/notes/devops/consul/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/lightning router overview/":{"tf":1.0}},"df":2}}}}},"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"m":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.4142135623730951},"https://phlip9.com/notes/statistics probability/standard error/":{"tf":1.0}},"df":2}},"i":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.0},"https://phlip9.com/notes/misc/kintsugi/":{"tf":1.0}},"df":2}}},"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"'":{"docs":{"https://phlip9.com/notes/AI ML/Markov Decision Process (MDP)/":{"tf":1.0},"https://phlip9.com/notes/android/android cli setup/":{"tf":1.0},"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.4142135623730951},"https://phlip9.com/notes/btc-ln/lightning rod/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/zero-conf channels/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.0},"https://phlip9.com/notes/devops/deployment strategies/":{"tf":1.4142135623730951},"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":1.7320508075688772},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0},"https://phlip9.com/notes/lang/gdb ref/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/testing whether a coin is fair/":{"tf":1.0}},"df":15},"f":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":2.0},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.7320508075688772},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0},"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.0},"https://phlip9.com/notes/postgres/postgres performance tuning/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/reproducible-builds.org/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.4142135623730951}},"df":8}}},"o":{"docs":{},"df":0,"f":{"docs":{"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.4142135623730951}},"df":2}}}},"s":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/management/relieve often - why generals were more successful in WWII/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/lightning router overview/":{"tf":1.0}},"df":2}},"t":{"docs":{},"df":0,"a":{"docs":{"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":2.23606797749979}},"df":1}},"y":{"docs":{},"df":0,"'":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/bip158 - compact block filters/":{"tf":1.0},"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/BOLT 11 - invoices/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/hosted channels/":{"tf":1.0},"https://phlip9.com/notes/crypto/(talk) authenticated data structures for stateless validation/":{"tf":1.0},"https://phlip9.com/notes/crypto/acme protocol/":{"tf":1.0},"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":1.0},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0},"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":1.0},"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.4142135623730951}},"df":10}}}},"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"k":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/misc/kintsugi/":{"tf":1.4142135623730951}},"df":1}}}},"n":{"docs":{"https://phlip9.com/notes/misc/kintsugi/":{"tf":2.23606797749979}},"df":1,"g":{"docs":{"https://phlip9.com/notes/AI ML/Expectimax Search/":{"tf":1.0},"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0},"https://phlip9.com/notes/b l o c k c h a i n/btc utreexo - utxo accumulator/":{"tf":1.0},"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.7320508075688772},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.4142135623730951},"https://phlip9.com/notes/crypto/(talk) authenticated data structures for stateless validation/":{"tf":1.4142135623730951},"https://phlip9.com/notes/design/form design/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0},"https://phlip9.com/notes/lang/lua/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/nix/nix debug spurrious rebuilds/":{"tf":1.0}},"df":15},"k":{"docs":{"https://phlip9.com/notes/AI ML/Expectimax Search/":{"tf":1.0},"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.4142135623730951},"https://phlip9.com/notes/btc-ln/breez lightning service providers/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/lightning rod/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0},"https://phlip9.com/notes/crypto/acme protocol/":{"tf":1.0},"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":1.0},"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":1.0},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0},"https://phlip9.com/notes/misc/kintsugi/":{"tf":1.0},"https://phlip9.com/notes/misc/pop_OS! tweaks/":{"tf":1.0},"https://phlip9.com/notes/networking/network interface card (NIC)/":{"tf":1.0},"https://phlip9.com/notes/postgres/snippets/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/arubanetworks captive portal/":{"tf":1.0}},"df":15},"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/misc/kintsugi/":{"tf":1.0}},"df":1}}}},"r":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/monetary instruments/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/zero-conf channels/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/marblerun/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/reproducible-builds.org/":{"tf":1.4142135623730951},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.4142135623730951}},"df":7,"l":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/misc/kintsugi/":{"tf":1.0}},"df":1}}}},"s":{"docs":{},"df":0,"(":{"docs":{},"df":0,"x":{"docs":{"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0}},"df":1}},".":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.7320508075688772}},"df":1},"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"m":{"docs":{},"df":0,"b":{"docs":{"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0}},"df":1,"s":{"docs":{},"df":0,".":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"g":{"docs":{},"df":0,"t":{"docs":{},"df":0,"h":{"docs":{"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0}},"df":1}}}}}}},"[":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0}},"df":1}}}}}}},"x":{"docs":{"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.4142135623730951}},"df":1},"z":{"docs":{"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.4142135623730951}},"df":1}}}},"o":{"docs":{"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0}},"df":1,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"g":{"docs":{},"df":0,"h":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/misc/kintsugi/":{"tf":1.0}},"df":1}}}}}}},"s":{"docs":{},"df":0,"e":{"docs":{"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/breez lightning service providers/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/nix/nix auto-allocate-uids -> nixbld users/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.0}},"df":6}},"u":{"docs":{},"df":0,"g":{"docs":{},"df":0,"h":{"docs":{"https://phlip9.com/notes/AI ML/Markov Decision Process (MDP)/":{"tf":1.0},"https://phlip9.com/notes/b l o c k c h a i n/btc utreexo - utxo accumulator/":{"tf":1.4142135623730951},"https://phlip9.com/notes/btc-ln/BOLT 11 - invoices/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/gramine/":{"tf":1.0},"https://phlip9.com/notes/devops/azure CLI/":{"tf":1.0},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0},"https://phlip9.com/notes/lang/flutter/flutter setup/":{"tf":1.0},"https://phlip9.com/notes/misc/kintsugi/":{"tf":1.4142135623730951},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0},"https://phlip9.com/notes/misc/setting up a headless raspbian boot image/":{"tf":1.0},"https://phlip9.com/notes/networking/network interface card (NIC)/":{"tf":1.0},"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.0},"https://phlip9.com/notes/performance/simdjson talk/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.4142135623730951}},"df":15,"t":{"docs":{"https://phlip9.com/notes/fuzzing/fuzzing/":{"tf":1.0},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0},"https://phlip9.com/notes/misc/kintsugi/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.0}},"df":4}}},"s":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.0}},"df":1}}}}}},"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.7320508075688772},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":2.6457513110645907},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0},"https://phlip9.com/notes/lang/lua/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/rust/rr with rust/":{"tf":1.7320508075688772},"https://phlip9.com/notes/lang/rust/sycamore x futures/":{"tf":1.4142135623730951},"https://phlip9.com/notes/misc/optimization solvers/":{"tf":1.0}},"df":9},"t":{"docs":{"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/secure time/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/marblerun/":{"tf":1.4142135623730951},"https://phlip9.com/notes/reproducible builds/reproducible-builds.org/":{"tf":1.4142135623730951}},"df":4,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"d":{"docs":{},"df":0,"/":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"c":{"docs":{"https://phlip9.com/notes/reproducible builds/reproducible-builds.org/":{"tf":1.0}},"df":1}}}}}}}}}}}},"e":{"docs":{"https://phlip9.com/notes/AI ML/Markov Decision Process (MDP)/":{"tf":1.0},"https://phlip9.com/notes/b l o c k c h a i n/fastpay/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":2.0},"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.0},"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":1.0},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0},"https://phlip9.com/notes/lang/operator fixity and precedence/":{"tf":1.0},"https://phlip9.com/notes/misc/kintsugi/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.0}},"df":9},"s":{"docs":{},"df":0,"h":{"docs":{},"df":0,"o":{"docs":{},"df":0,"l":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/money services business (MSB)/":{"tf":2.23606797749979},"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel SGX/secure time/":{"tf":1.0},"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/G-test - multinomial goodness-of-fit/":{"tf":1.0}},"df":5}}}}}},"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"g":{"docs":{},"df":0,"h":{"docs":{"https://phlip9.com/notes/AI ML/Markov Decision Process (MDP)/":{"tf":1.0},"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/money services business (MSB)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/BOLT 7 - p2p node and channel discovery/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/atomic multipath payments (AMP)/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.4142135623730951},"https://phlip9.com/notes/btc-ln/submarine swaps/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/zero-conf channels/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.7320508075688772},"https://phlip9.com/notes/confidential computing/marblerun/":{"tf":1.0},"https://phlip9.com/notes/crypto/dex - open-source OIDC & OAuth 2.0 provider/":{"tf":1.0},"https://phlip9.com/notes/devops/consul/":{"tf":1.0},"https://phlip9.com/notes/devops/service mesh/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/rust/rr with rust/":{"tf":1.0},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.4142135623730951},"https://phlip9.com/notes/networking/ipv6 address space/":{"tf":1.0},"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.7320508075688772},"https://phlip9.com/notes/postgres/types of scans/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/arubanetworks captive portal/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.0}},"df":24,"p":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.7320508075688772},"https://phlip9.com/notes/postgres/postgres performance tuning/":{"tf":1.4142135623730951}},"df":2}}},"t":{"docs":{"https://phlip9.com/notes/statistics probability/testing whether a coin is fair/":{"tf":1.0}},"df":1}}}},"w":{"docs":{"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":1.0},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0}},"df":2}}},"u":{"docs":{"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/money services business (MSB)/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.0},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.0}},"df":4,"m":{"docs":{},"df":0,"b":{"docs":{"https://phlip9.com/notes/keyboards/moergo glove80/":{"tf":1.4142135623730951}},"df":1,"p":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"&":{"docs":{},"df":0,"g":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/crypto/acme protocol/":{"tf":1.4142135623730951}},"df":1}}}}}}}}}},"n":{"docs":{},"df":0,"k":{"docs":{"https://phlip9.com/notes/AI ML/Expectimax Search/":{"tf":1.4142135623730951}},"df":1}}}},"i":{"docs":{"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.0}},"df":1,"c":{"docs":{},"df":0,"k":{"docs":{"https://phlip9.com/notes/AI ML/Markov Decision Process (MDP)/":{"tf":1.0},"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.4142135623730951}},"df":2}},"d":{"docs":{"https://phlip9.com/notes/postgres/types of scans/":{"tf":2.8284271247461903}},"df":1},"e":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/devops/azure CLI/":{"tf":1.0},"https://phlip9.com/notes/devops/secrets/1password - secrets automation/":{"tf":1.4142135623730951}},"df":2}},"g":{"docs":{},"df":0,"h":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/CDF confidence bands - DKW inequality/":{"tf":1.0}},"df":2,"e":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/AI ML/Expectimax Search/":{"tf":1.0}},"df":1},"r":{"docs":{"https://phlip9.com/notes/AI ML/Expectimax Search/":{"tf":1.0},"https://phlip9.com/notes/networking/ipv6 address space/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/CDF confidence bands - DKW inequality/":{"tf":1.4142135623730951},"https://phlip9.com/notes/statistics probability/standard error/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/testing whether a coin is fair/":{"tf":1.0}},"df":5}},"l":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.0}},"df":1}}}}},"l":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/lang/rust/rr with rust/":{"tf":1.4142135623730951}},"df":1}},"m":{"docs":{},"df":0,"e":{"docs":{"https://phlip9.com/notes/AI ML/Expectimax Search/":{"tf":1.4142135623730951},"https://phlip9.com/notes/AI ML/Markov Decision Process (MDP)/":{"tf":1.0},"https://phlip9.com/notes/android/root phone with magisk/":{"tf":1.4142135623730951},"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/foreign bank account report (FBAR)/":{"tf":1.0},"https://phlip9.com/notes/b l o c k c h a i n/fastpay/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/breez lightning service providers/":{"tf":1.4142135623730951},"https://phlip9.com/notes/btc-ln/hosted channels/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/lightning network notes/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.4142135623730951},"https://phlip9.com/notes/btc-ln/submarine swaps/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/zero-conf channels/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.7320508075688772},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":3.1622776601683795},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":2.0},"https://phlip9.com/notes/confidential computing/intel SGX/secure time/":{"tf":6.0},"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":1.0},"https://phlip9.com/notes/crypto/(talk) authenticated data structures for stateless validation/":{"tf":1.0},"https://phlip9.com/notes/crypto/acme protocol/":{"tf":1.7320508075688772},"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":2.23606797749979},"https://phlip9.com/notes/devops/deployment strategies/":{"tf":1.4142135623730951},"https://phlip9.com/notes/devops/nomad/":{"tf":1.4142135623730951},"https://phlip9.com/notes/devops/secrets/envkey/":{"tf":1.0},"https://phlip9.com/notes/distributed systems/papers/(2021) Leaderless Consensus/":{"tf":1.0},"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":1.7320508075688772},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.7320508075688772},"https://phlip9.com/notes/lang/lua/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/rr with rust/":{"tf":2.23606797749979},"https://phlip9.com/notes/lang/rust/sycamore x futures/":{"tf":1.0},"https://phlip9.com/notes/misc/kintsugi/":{"tf":2.449489742783178},"https://phlip9.com/notes/misc/optimization solvers/":{"tf":1.0},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":3.1622776601683795},"https://phlip9.com/notes/misc/setting up a headless raspbian boot image/":{"tf":1.4142135623730951},"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.0},"https://phlip9.com/notes/performance/profiling/":{"tf":1.7320508075688772},"https://phlip9.com/notes/postgres/postgres performance tuning/":{"tf":1.4142135623730951},"https://phlip9.com/notes/postgres/types of scans/":{"tf":1.7320508075688772},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/reproducible-builds.org/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.4142135623730951},"https://phlip9.com/notes/statistics probability/multinomial distribution/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/p-value/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/standard error/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/testing whether a coin is fair/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/winsorize/":{"tf":1.0}},"df":46,"'":{"docs":{},"df":0,"&":{"docs":{},"df":0,"g":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1}}}},".":{"docs":{},"df":0,"c":{"docs":{},"df":0,"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"d":{"docs":{},"df":0,"f":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,".":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/secure time/":{"tf":1.0}},"df":1}}}}}}}}}}}}}},"m":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"o":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":3.1622776601683795}},"df":1}}}}}}},"s":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"e":{"docs":{},"df":0,"p":{"docs":{},"df":0,"(":{"docs":{},"df":0,"0":{"docs":{},"df":0,".":{"docs":{},"df":0,"5":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.4142135623730951}},"df":1}}}}}}}}}},":":{"docs":{},"df":0,":":{"docs":{},"df":0,"n":{"docs":{},"df":0,"o":{"docs":{},"df":0,"w":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0}},"df":1}}}}},"=":{"docs":{},"df":0,"0":{"docs":{},"df":0,".":{"docs":{},"df":0,"0":{"docs":{},"df":0,"7":{"docs":{},"df":0,"1":{"docs":{},"df":0,".":{"docs":{},"df":0,".":{"docs":{},"df":0,"0":{"docs":{},"df":0,".":{"docs":{},"df":0,"0":{"docs":{},"df":0,"7":{"docs":{},"df":0,"3":{"docs":{"https://phlip9.com/notes/postgres/types of scans/":{"tf":1.0}},"df":1}}}}}}}}}}}}},"_":{"docs":{},"df":0,"f":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"w":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.0}},"df":1,"a":{"docs":{},"df":0,"b":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,".":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{},"df":0,"_":{"docs":{},"df":0,"m":{"docs":{},"df":0,"i":{"docs":{},"df":0,"l":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}},"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/btc-ln/lightning network notes/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.4142135623730951},"https://phlip9.com/notes/devops/linkerd/":{"tf":1.0},"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":1.0}},"df":4,"f":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{},"df":0,"u":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/lang/rust/sycamore x futures/":{"tf":1.0}},"df":1}}}}}}}},"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{},"df":0,"p":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":2.6457513110645907},"https://phlip9.com/notes/btc-ln/BOLT 7 - p2p node and channel discovery/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/gramine/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.0},"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.4142135623730951}},"df":5,"+":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/secure time/":{"tf":1.0}},"df":1}}}}}}}}}}}},"z":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"_":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"f":{"docs":{},"df":0,"a":{"docs":{},"df":0,"u":{"docs":{},"df":0,"l":{"docs":{},"df":0,"t":{"docs":{},"df":0,"=":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"a":{"docs":{},"df":0,"/":{"docs":{},"df":0,"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"s":{"docs":{},"df":0,"_":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"g":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/misc/setting up a headless raspbian boot image/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"n":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/crypto/acme protocol/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/nix/nix debug spurrious rebuilds/":{"tf":1.0}},"df":2}},"p":{"docs":{"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.4142135623730951},"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":1.4142135623730951},"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.0}},"df":3},"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"u":{"docs":{},"df":0,"p":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"v":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"y":{"docs":{},"df":0,"s":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{},"df":0,"b":{"docs":{},"df":0,"o":{"docs":{},"df":0,"x":{"docs":{"https://phlip9.com/notes/android/android cli setup/":{"tf":1.0}},"df":1,";":{"docs":{},"df":0,"g":{"docs":{},"df":0,"o":{"docs":{},"df":0,"o":{"docs":{},"df":0,"g":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"_":{"docs":{},"df":0,"a":{"docs":{},"df":0,"p":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"_":{"docs":{},"df":0,"p":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"y":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,";":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"m":{"docs":{},"df":0,"6":{"docs":{},"df":0,"4":{"docs":{"https://phlip9.com/notes/android/android cli setup/":{"tf":1.0}},"df":1}}}}},"x":{"docs":{},"df":0,"8":{"docs":{},"df":0,"6":{"docs":{},"df":0,"_":{"docs":{},"df":0,"6":{"docs":{},"df":0,"4":{"docs":{"https://phlip9.com/notes/android/android cli setup/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"e":{"docs":{"https://phlip9.com/notes/lang/gdb ref/":{"tf":1.0}},"df":1}},"t":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/foreign bank account report (FBAR)/":{"tf":1.0},"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/monetary instruments/":{"tf":1.0}},"df":2}}},"l":{"docs":{"https://phlip9.com/notes/confidential computing/gramine/":{"tf":2.449489742783178},"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/secure time/":{"tf":2.0},"https://phlip9.com/notes/confidential computing/marblerun/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/mystikos/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":6.48074069840786},"https://phlip9.com/notes/crypto/TLS self-signed pubkey-only certs/":{"tf":1.0},"https://phlip9.com/notes/crypto/acme protocol/":{"tf":1.4142135623730951},"https://phlip9.com/notes/crypto/smallstep - private online CA & ACME server/":{"tf":1.0},"https://phlip9.com/notes/crypto/tls exported keying material/":{"tf":2.0},"https://phlip9.com/notes/devops/consul/":{"tf":1.4142135623730951},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.4142135623730951}},"df":14,";":{"docs":{},"df":0,"d":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/foreign bank account report (FBAR)/":{"tf":1.0},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/winsorize/":{"tf":1.0}},"df":4}}},"b":{"docs":{"https://phlip9.com/notes/confidential computing/intel TDX/":{"tf":1.0}},"df":1},"d":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0}},"df":1}},"s":{"docs":{},"df":0,"v":{"docs":{},"df":0,"1":{"docs":{},"df":0,".":{"docs":{},"df":0,"2":{"docs":{"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.4142135623730951},"https://phlip9.com/notes/devops/algo wireguard VPN server/":{"tf":1.0}},"df":3},"3":{"docs":{"https://phlip9.com/notes/android/android cli setup/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.0}},"df":2}}}}}},"m":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":3.0}},"df":1,"*":{"docs":{},"df":0,"r":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1}}}}},"p":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1,"/":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"r":{"docs":{},"df":0,"c":{"docs":{},"df":0,"e":{"docs":{},"df":0,"8":{"docs":{},"df":0,"5":{"docs":{},"df":0,"9":{"docs":{},"df":0,"7":{"docs":{},"df":0,"9":{"docs":{},"df":0,"5":{"docs":{},"df":0,"0":{"docs":{},"df":0,"7":{"docs":{},"df":0,"2":{"docs":{},"df":0,"5":{"docs":{},"df":0,"8":{"docs":{},"df":0,"3":{"docs":{},"df":0,"1":{"docs":{},"df":0,"9":{"docs":{},"df":0,"9":{"docs":{},"df":0,"8":{"docs":{},"df":0,"4":{"docs":{},"df":0,"0":{"docs":{},"df":0,"3":{"docs":{},"df":0,".":{"docs":{},"df":0,"s":{"docs":{},"df":0,"o":{"docs":{"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.4142135623730951}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},":":{"docs":{},"df":0,"/":{"docs":{},"df":0,"t":{"docs":{},"df":0,"m":{"docs":{},"df":0,"p":{"docs":{},"df":0,"/":{"docs":{},"df":0,"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{},"df":0,"h":{"docs":{},"df":0,"l":{"docs":{},"df":0,"y":{"docs":{},"df":0,":":{"docs":{},"df":0,"r":{"docs":{},"df":0,"w":{"docs":{"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}},"_":{"docs":{},"df":0,"k":{"docs":{},"df":0,"e":{"docs":{},"df":0,"y":{"docs":{},"df":0,"_":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"q":{"docs":{},"df":0,"u":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.0}},"df":1,".":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"b":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"_":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{},"df":0,"k":{"docs":{},"df":0,".":{"docs":{},"df":0,"f":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"g":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.0}},"df":1}}}},"x":{"docs":{},"df":0,"f":{"docs":{},"df":0,"r":{"docs":{},"df":0,"m":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}},"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"f":{"docs":{},"df":0,"i":{"docs":{},"df":0,"g":{"docs":{},"df":0,"_":{"docs":{},"df":0,"s":{"docs":{},"df":0,"v":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.0}},"df":1}}}}}}}}}},"k":{"docs":{},"df":0,"e":{"docs":{},"df":0,"y":{"docs":{},"df":0,"_":{"docs":{},"df":0,"n":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.0}},"df":1}}},"p":{"docs":{},"df":0,"o":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.0}},"df":1}}}}}}}}}},"m":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"c":{"docs":{},"df":0,"_":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{},"df":0,"k":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}},"u":{"docs":{},"df":0,"x":{"docs":{"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0},"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.0}},"df":2}}},"o":{"docs":{},"df":0,"/":{"docs":{},"df":0,"f":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0}},"df":1}}}}},"=":{"docs":{},"df":0,"f":{"docs":{},"df":0,"6":{"docs":{},"df":0,"4":{"docs":{"https://phlip9.com/notes/statistics probability/winsorize/":{"tf":1.4142135623730951}},"df":1}}},"i":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":3.1622776601683795}},"df":1}},"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"g":{"docs":{"https://phlip9.com/notes/statistics probability/winsorize/":{"tf":1.0}},"df":1}}}}},"s":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.0}},"df":1}}},"_":{"docs":{},"df":0,"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{},"df":0,"f":{"docs":{},"df":0,"_":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"y":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.4142135623730951}},"df":1}}}}}}}}}}},"d":{"docs":{},"df":0,"a":{"docs":{},"df":0,"y":{"docs":{"https://phlip9.com/notes/networking/CIDR/":{"tf":1.0}},"df":1}},"d":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/sui/":{"tf":1.0}},"df":1},"o":{"docs":{"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0},"https://phlip9.com/notes/b l o c k c h a i n/fastpay/":{"tf":1.0},"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.4142135623730951},"https://phlip9.com/notes/btc-ln/atomic multipath payments (AMP)/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/lightning rod/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/gramine/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":1.0},"https://phlip9.com/notes/crypto/acme protocol/":{"tf":1.7320508075688772},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":2.23606797749979},"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.0},"https://phlip9.com/notes/misc/setting up a headless raspbian boot image/":{"tf":1.0},"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/testing whether a coin is fair/":{"tf":1.0}},"df":19,"(":{"docs":{},"df":0,"p":{"docs":{},"df":0,"h":{"docs":{},"df":0,"i":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"p":{"docs":{},"df":0,"h":{"docs":{},"df":0,"a":{"docs":{},"df":0,"y":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.0}},"df":1}}}}}}}}}}}},"g":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{},"df":0,"h":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0},"https://phlip9.com/notes/devops/service mesh/":{"tf":1.0},"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":1.0},"https://phlip9.com/notes/misc/kintsugi/":{"tf":3.1622776601683795},"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.0},"https://phlip9.com/notes/performance/profiling/":{"tf":1.0}},"df":6}}},"g":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/android/android cli setup/":{"tf":1.0},"https://phlip9.com/notes/keyboards/moergo glove80/":{"tf":1.4142135623730951}},"df":2}}},"k":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":3.872983346207417},"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":2.449489742783178},"https://phlip9.com/notes/crypto/acme protocol/":{"tf":1.0},"https://phlip9.com/notes/crypto/biscuit authz/":{"tf":3.7416573867739413},"https://phlip9.com/notes/devops/algo wireguard VPN server/":{"tf":1.4142135623730951},"https://phlip9.com/notes/devops/secrets/1password - secrets automation/":{"tf":1.7320508075688772},"https://phlip9.com/notes/router/lightning router/lightning router overview/":{"tf":1.7320508075688772}},"df":8,"_":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0}},"df":1}}}},"i":{"docs":{},"df":0,"o":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/fastpay/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.0}},"df":3}}},"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/btc-ln/zero-conf channels/":{"tf":1.0},"https://phlip9.com/notes/distributed systems/papers/(2020) Semi-Fast Byzantine-tolerant Shared Register without Reliable Broadcast/":{"tf":1.4142135623730951},"https://phlip9.com/notes/statistics probability/testing whether a coin is fair/":{"tf":1.7320508075688772}},"df":3}}},"m":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/confidential computing/gramine/":{"tf":1.0}},"df":1,"&":{"docs":{},"df":0,"g":{"docs":{},"df":0,"t":{"docs":{},"df":0,";":{"docs":{},"df":0,"=":{"docs":{},"df":0,"0":{"docs":{},"df":0,".":{"docs":{},"df":0,"1":{"docs":{},"df":0,"0":{"docs":{"https://phlip9.com/notes/confidential computing/gramine/":{"tf":1.0}},"df":1}}}}}}}}}}},"o":{"docs":{},"df":0,"k":{"docs":{"https://phlip9.com/notes/AI ML/Markov Decision Process (MDP)/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.0},"https://phlip9.com/notes/misc/kintsugi/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/testing whether a coin is fair/":{"tf":1.0}},"df":4},"l":{"docs":{"https://phlip9.com/notes/android/android cli setup/":{"tf":3.0},"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.4142135623730951},"https://phlip9.com/notes/android/root phone with magisk/":{"tf":1.7320508075688772},"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/foreign bank account report (FBAR)/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":3.7416573867739413},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/marblerun/":{"tf":1.0},"https://phlip9.com/notes/devops/docker compose/":{"tf":1.0},"https://phlip9.com/notes/devops/kind (kubernetes in docker)/":{"tf":1.0},"https://phlip9.com/notes/devops/secrets/mozilla SOPS/":{"tf":1.0},"https://phlip9.com/notes/devops/secrets/sy - share secrets safely/":{"tf":1.0},"https://phlip9.com/notes/devops/service mesh/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.7320508075688772},"https://phlip9.com/notes/lang/rust/rr with rust/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/rust/rust verification tools/":{"tf":2.0},"https://phlip9.com/notes/management/relieve often - why generals were more successful in WWII/":{"tf":1.0},"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":2.23606797749979},"https://phlip9.com/notes/misc/optimization solvers/":{"tf":1.4142135623730951},"https://phlip9.com/notes/misc/prepping RPI for embedded dev/":{"tf":1.0},"https://phlip9.com/notes/misc/scanning QR codes on desktop/":{"tf":1.0},"https://phlip9.com/notes/postgres/postgres performance tuning/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":2.23606797749979},"https://phlip9.com/notes/reproducible builds/nix/links/":{"tf":1.4142135623730951},"https://phlip9.com/notes/reproducible builds/nix/nix debug broken package build/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/reproducible-builds.org/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.0}},"df":26,"c":{"docs":{},"df":0,"h":{"docs":{},"df":0,"a":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":2.449489742783178},"https://phlip9.com/notes/lang/flutter/flutter setup/":{"tf":1.4142135623730951},"https://phlip9.com/notes/misc/prepping RPI for embedded dev/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.7320508075688772}},"df":4}}}}},"k":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/misc/optimization solvers/":{"tf":1.0}},"df":1}}},"s":{"docs":{},"df":0,"/":{"docs":{},"df":0,"$":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{},"df":0,"_":{"docs":{},"df":0,"s":{"docs":{},"df":0,"d":{"docs":{},"df":0,"k":{"docs":{},"df":0,"_":{"docs":{},"df":0,"v":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"s":{"docs":{"https://phlip9.com/notes/android/android cli setup/":{"tf":1.0},"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0}},"df":2}}}}}}}}}}}}}}}}},"a":{"docs":{},"df":0,"d":{"docs":{},"df":0,"b":{"docs":{"https://phlip9.com/notes/android/android cli setup/":{"tf":1.0}},"df":1}}},"b":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/android/android cli setup/":{"tf":1.0}},"df":1}}},"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/android/android cli setup/":{"tf":2.0},"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0}},"df":2,"/":{"docs":{},"df":0,"b":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/android/android cli setup/":{"tf":1.0},"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0}},"df":2,"/":{"docs":{},"df":0,"s":{"docs":{},"df":0,"d":{"docs":{},"df":0,"k":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"a":{"docs":{},"df":0,"g":{"docs":{"https://phlip9.com/notes/android/android cli setup/":{"tf":1.0}},"df":1}}}}}}}}}}}},"c":{"docs":{},"df":0,"m":{"docs":{},"df":0,"d":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/android/android cli setup/":{"tf":1.4142135623730951}},"df":1}}}}}}}}}}}},"i":{"docs":{},"df":0,"b":{"docs":{"https://phlip9.com/notes/android/android cli setup/":{"tf":1.0}},"df":1}}}},";":{"docs":{},"df":0,"3":{"docs":{},"df":0,"3":{"docs":{},"df":0,".":{"docs":{},"df":0,"0":{"docs":{},"df":0,".":{"docs":{},"df":0,"1":{"docs":{"https://phlip9.com/notes/android/android cli setup/":{"tf":1.4142135623730951}},"df":1}}}}}},"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/android/android cli setup/":{"tf":1.0},"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0}},"df":2}}}}}}},"e":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/fuzzing/fuzzing/":{"tf":1.0}},"df":1}}}},"t":{"docs":{},"df":0,"h":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1}}},"p":{"docs":{"https://phlip9.com/notes/btc-ln/breez lightning service providers/":{"tf":1.4142135623730951},"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/submarine swaps/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/marblerun/":{"tf":1.0},"https://phlip9.com/notes/crypto/biscuit authz/":{"tf":1.0},"https://phlip9.com/notes/design/form design/":{"tf":1.0},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.0},"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":1.0},"https://phlip9.com/notes/misc/kintsugi/":{"tf":1.0},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0},"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.0},"https://phlip9.com/notes/performance/profiling/":{"tf":1.4142135623730951}},"df":14,"o":{"docs":{},"df":0,"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"g":{"docs":{"https://phlip9.com/notes/confidential computing/marblerun/":{"tf":1.0},"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":1.4142135623730951},"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.0}},"df":3}}}}},"r":{"docs":{"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.0}},"df":1,"v":{"docs":{},"df":0,"3":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 7 - p2p node and channel discovery/":{"tf":1.0}},"df":1,"(":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"_":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{},"df":0,"d":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 7 - p2p node and channel discovery/":{"tf":1.0}},"df":1}}}}}}}}}}}}}},"s":{"docs":{},"df":0,"s":{"docs":{"https://phlip9.com/notes/devops/azure CLI/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/testing whether a coin is fair/":{"tf":1.4142135623730951}},"df":2},"t":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0},"https://phlip9.com/notes/lang/lua/":{"tf":1.0}},"df":2,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"g":{"docs":{},"df":0,"(":{"docs":{},"df":0,"c":{"docs":{},"df":0,".":{"docs":{},"df":0,"i":{"docs":{},"df":0,"m":{"docs":{"https://phlip9.com/notes/lang/lua/":{"tf":1.4142135623730951}},"df":1}},"r":{"docs":{"https://phlip9.com/notes/lang/lua/":{"tf":1.4142135623730951}},"df":1}}}}}}}}}},"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/android/root phone with magisk/":{"tf":1.0},"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/foreign bank account report (FBAR)/":{"tf":1.0},"https://phlip9.com/notes/b l o c k c h a i n/fastpay/":{"tf":1.4142135623730951},"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/BOLT 4 - onion routing protocol/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/atomic multipath payments (AMP)/":{"tf":1.7320508075688772},"https://phlip9.com/notes/btc-ln/breez lightning service providers/":{"tf":1.4142135623730951},"https://phlip9.com/notes/btc-ln/submarine swaps/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.7320508075688772},"https://phlip9.com/notes/confidential computing/intel TDX/":{"tf":1.0},"https://phlip9.com/notes/devops/nomad/":{"tf":1.0},"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.0},"https://phlip9.com/notes/misc/setting up a headless raspbian boot image/":{"tf":1.0},"https://phlip9.com/notes/performance/profiling/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.4142135623730951},"https://phlip9.com/notes/statistics probability/cheat sheet/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/winsorize/":{"tf":1.0}},"df":20,"$":{"docs":{},"df":0,"1":{"docs":{},"df":0,"0":{"docs":{},"df":0,"4":{"docs":{"https://phlip9.com/notes/misc/water distillation setup/":{"tf":1.0}},"df":1}}}}}}},"u":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/bip158 - compact block filters/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0},"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":2.23606797749979},"https://phlip9.com/notes/misc/kintsugi/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/nix/nix debug spurrious rebuilds/":{"tf":1.0}},"df":6,"i":{"docs":{},"df":0,"o":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1}}}},"g":{"docs":{},"df":0,"h":{"docs":{"https://phlip9.com/notes/postgres/postgres performance tuning/":{"tf":1.0}},"df":1}}},"w":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":2.0},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0},"https://phlip9.com/notes/postgres/postgres performance tuning/":{"tf":1.0}},"df":3}}},"e":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/misc/kintsugi/":{"tf":1.0}},"df":1}}},"x":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{"https://phlip9.com/notes/misc/kintsugi/":{"tf":1.0}},"df":1}}}},"p":{"docs":{},"df":0,"m":{"docs":{"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":2.0},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":2.449489742783178},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0}},"df":3}},"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"e":{"docs":{"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":1.0},"https://phlip9.com/notes/devops/o11y/jaeger oss e2e tracing/":{"tf":1.4142135623730951},"https://phlip9.com/notes/devops/service mesh/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/rr with rust/":{"tf":2.449489742783178},"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":2.23606797749979}},"df":6,"b":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"k":{"docs":{"https://phlip9.com/notes/lang/lua/":{"tf":1.0},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":2}}}}},"k":{"docs":{"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/foreign bank account report (FBAR)/":{"tf":1.0},"https://phlip9.com/notes/b l o c k c h a i n/fastpay/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/secure time/":{"tf":1.7320508075688772},"https://phlip9.com/notes/confidential computing/intel TDX/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":1.0},"https://phlip9.com/notes/fuzzing/fuzzcheck-rs/":{"tf":1.0},"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/rebuilderd/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.7320508075688772},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":2.449489742783178}},"df":12},"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"b":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/statistics probability/multinomial distribution/":{"tf":1.0}},"df":1}}}}},"d":{"docs":{},"df":0,"e":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0}},"df":1,"o":{"docs":{},"df":0,"f":{"docs":{},"df":0,"f":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":1.0},"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":1.0}},"df":3}}}},"i":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/reproducible-builds.org/":{"tf":1.0}},"df":2}}},"f":{"docs":{},"df":0,"f":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":1.0},"https://phlip9.com/notes/devops/deployment strategies/":{"tf":2.0},"https://phlip9.com/notes/networking/network interfaces/":{"tf":2.0},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.7320508075688772},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.7320508075688772},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":2.449489742783178}},"df":6}}}},"i":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/performance/bit hacks/":{"tf":2.449489742783178}},"df":1,"o":{"docs":{},"df":0,"f":{"docs":{},"df":0,"b":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"s":{"docs":{},"df":0,"/":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"g":{"docs":{},"df":0,"o":{"docs":{"https://phlip9.com/notes/devops/algo wireguard VPN server/":{"tf":1.4142135623730951}},"df":1}}}}}}}}}}}},"n":{"docs":{"https://phlip9.com/notes/AI ML/Markov Decision Process (MDP)/":{"tf":1.0},"https://phlip9.com/notes/fuzzing/fuzzing/":{"tf":1.0}},"df":2},"t":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0}},"df":3}},"n":{"docs":{},"df":0,"s":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/money services business (MSB)/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":5.196152422706632},"https://phlip9.com/notes/btc-ln/atomic multipath payments (AMP)/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.0},"https://phlip9.com/notes/devops/deployment strategies/":{"tf":1.0},"https://phlip9.com/notes/postgres/snippets/":{"tf":1.0}},"df":7,"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"'":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.4142135623730951}},"df":1}}}},"o":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/btc utreexo - utxo accumulator/":{"tf":1.4142135623730951}},"df":1}}}}},"f":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/money services business (MSB)/":{"tf":2.0},"https://phlip9.com/notes/b l o c k c h a i n/fastpay/":{"tf":2.6457513110645907},"https://phlip9.com/notes/btc-ln/submarine swaps/":{"tf":1.7320508075688772},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":2.0}},"df":6}},"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"m":{"docs":{"https://phlip9.com/notes/AI ML/Expectimax Search/":{"tf":1.0},"https://phlip9.com/notes/performance/profiling/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/reproducible-builds.org/":{"tf":1.0}},"df":3}}}},"i":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/AI ML/Markov Decision Process (MDP)/":{"tf":2.449489742783178},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":2.0},"https://phlip9.com/notes/crypto/acme protocol/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.0}},"df":5,"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"s":{"docs":{},"df":0,"/":{"docs":{},"df":0,"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0}},"df":1}}}}}}}}}},"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel TDX/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.4142135623730951},"https://phlip9.com/notes/networking/ipv6 address space/":{"tf":1.4142135623730951}},"df":4}}},"m":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"s":{"docs":{"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/money services business (MSB)/":{"tf":2.449489742783178}},"df":1}},"t":{"docs":{"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/money services business (MSB)/":{"tf":1.7320508075688772},"https://phlip9.com/notes/networking/network interface card (NIC)/":{"tf":1.0}},"df":2,"t":{"docs":{"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/money services business (MSB)/":{"tf":2.6457513110645907}},"df":1}}}},"p":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/marblerun/":{"tf":1.0},"https://phlip9.com/notes/crypto/(talk) authenticated data structures for stateless validation/":{"tf":2.449489742783178},"https://phlip9.com/notes/devops/consul/":{"tf":1.0},"https://phlip9.com/notes/devops/linkerd/":{"tf":1.0},"https://phlip9.com/notes/devops/service mesh/":{"tf":1.4142135623730951},"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.0}},"df":8}},"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/money services business (MSB)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/btc-ln/BOLT 8 - secure noise transport/":{"tf":1.7320508075688772},"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":1.7320508075688772},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.4142135623730951}},"df":6,".":{"docs":{},"df":0,"m":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 8 - secure noise transport/":{"tf":1.0}},"df":1}}}}},"s":{"docs":{"https://phlip9.com/notes/statistics probability/p-value/":{"tf":1.0}},"df":1,"i":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/AI ML/Expectimax Search/":{"tf":1.0}},"df":1}}}}}}},"p":{"docs":{"https://phlip9.com/notes/statistics probability/p-value/":{"tf":1.0}},"df":1},"s":{"docs":{},"df":0,"h":{"docs":{"https://phlip9.com/notes/devops/k3s/":{"tf":1.0},"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":1.0}},"df":2}},"v":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/monetary instruments/":{"tf":1.0}},"df":1,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"'":{"docs":{"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/money services business (MSB)/":{"tf":1.4142135623730951}},"df":1}}}}}}},"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0}},"df":1}},"t":{"docs":{"https://phlip9.com/notes/lang/rust/rr with rust/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/rust verification tools/":{"tf":1.0},"https://phlip9.com/notes/misc/kintsugi/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":2.0}},"df":5}},"e":{"docs":{"https://phlip9.com/notes/AI ML/Expectimax Search/":{"tf":1.4142135623730951},"https://phlip9.com/notes/AI ML/Markov Decision Process (MDP)/":{"tf":1.0},"https://phlip9.com/notes/b l o c k c h a i n/btc utreexo - utxo accumulator/":{"tf":1.7320508075688772},"https://phlip9.com/notes/confidential computing/gramine/":{"tf":1.4142135623730951},"https://phlip9.com/notes/crypto/(talk) authenticated data structures for stateless validation/":{"tf":1.7320508075688772},"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":3.3166247903554},"https://phlip9.com/notes/postgres/types of scans/":{"tf":1.0}},"df":7}},"i":{"docs":{"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.7320508075688772},"https://phlip9.com/notes/android/linux ADB udev setup/":{"tf":1.0},"https://phlip9.com/notes/android/root phone with magisk/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/BOLT 8 - secure noise transport/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/lightning network notes/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.7320508075688772},"https://phlip9.com/notes/confidential computing/gramine/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.4142135623730951},"https://phlip9.com/notes/devops/nomad/":{"tf":1.0},"https://phlip9.com/notes/distributed systems/papers/(2020) Semi-Fast Byzantine-tolerant Shared Register without Reliable Broadcast/":{"tf":1.4142135623730951},"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":1.0},"https://phlip9.com/notes/fuzzing/bolero - fuzzing + property testing/":{"tf":1.0},"https://phlip9.com/notes/ios/ios setup/":{"tf":1.0},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0},"https://phlip9.com/notes/lang/flutter/flutter setup/":{"tf":1.0},"https://phlip9.com/notes/lang/gdb ref/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/rr with rust/":{"tf":2.0},"https://phlip9.com/notes/misc/kintsugi/":{"tf":2.0},"https://phlip9.com/notes/misc/pop_OS! tweaks/":{"tf":1.4142135623730951},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.7320508075688772},"https://phlip9.com/notes/misc/setting up a headless raspbian boot image/":{"tf":1.7320508075688772},"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":2.0}},"df":28,"a":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/statistics probability/multinomial distribution/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/testing whether a coin is fair/":{"tf":2.449489742783178}},"df":2}},"c":{"docs":{},"df":0,"k":{"docs":{"https://phlip9.com/notes/combinatorics/k-combinations of a multiset/":{"tf":1.0},"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":1.7320508075688772},"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":1.0},"https://phlip9.com/notes/fuzzing/fuzzing/":{"tf":1.0},"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":1.0},"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.0},"https://phlip9.com/notes/performance/simdjson talk/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/nix/nix debug spurrious rebuilds/":{"tf":1.0}},"df":8,"i":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/android/root phone with magisk/":{"tf":1.0}},"df":1}}}}},"g":{"docs":{},"df":0,"g":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/btc-ln/lightning rod/":{"tf":1.0},"https://phlip9.com/notes/devops/nomad/":{"tf":1.0},"https://phlip9.com/notes/keyboards/moergo glove80/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/rust/rr with rust/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.0}},"df":5}}}},"p":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.4142135623730951}},"df":2,"l":{"docs":{"https://phlip9.com/notes/misc/arm target triples/":{"tf":1.4142135623730951}},"df":1,"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{},"df":0,"u":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{},"df":0,"i":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"s":{"docs":{},"df":0,"f":{"docs":{},"df":0,"l":{"docs":{},"df":0,"o":{"docs":{"https://phlip9.com/notes/misc/arm target triples/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}},"v":{"docs":{},"df":0,"i":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.4142135623730951},"https://phlip9.com/notes/statistics probability/multinomial distribution/":{"tf":1.4142135623730951}},"df":2}}}}},"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"b":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0}},"df":1}}}},"u":{"docs":{},"df":0,"e":{"docs":{"https://phlip9.com/notes/AI ML/Markov Decision Process (MDP)/":{"tf":1.0},"https://phlip9.com/notes/combinatorics/k-combinations of a multiset/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel SGX/secure time/":{"tf":2.0},"https://phlip9.com/notes/confidential computing/marblerun/":{"tf":1.0},"https://phlip9.com/notes/crypto/acme protocol/":{"tf":1.0},"https://phlip9.com/notes/distributed systems/papers/(2021) Leaderless Consensus/":{"tf":1.0},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.7320508075688772},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":2.0},"https://phlip9.com/notes/lang/lua/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.0},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":2.0},"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.0},"https://phlip9.com/notes/performance/bit hacks/":{"tf":2.6457513110645907},"https://phlip9.com/notes/performance/simdjson talk/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/nix/nix auto-allocate-uids -> nixbld users/":{"tf":1.4142135623730951},"https://phlip9.com/notes/statistics probability/CDF confidence bands - DKW inequality/":{"tf":1.4142135623730951},"https://phlip9.com/notes/statistics probability/G-test - multinomial goodness-of-fit/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/p-value/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/standard error/":{"tf":3.0},"https://phlip9.com/notes/statistics probability/testing whether a coin is fair/":{"tf":1.7320508075688772}},"df":20,"l":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.4142135623730951}},"df":1}}},"l":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0}},"df":1}},"n":{"docs":{},"df":0,"c":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/winsorize/":{"tf":2.23606797749979}},"df":2,"(":{"docs":{},"df":0,"@":{"docs":{},"df":0,"b":{"docs":{},"df":0,"y":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.0}},"df":1}}},"i":{"docs":{},"df":0,"o":{"docs":{"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.0}},"df":1}}},"x":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1}},"a":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":1.0},"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.4142135623730951},"https://phlip9.com/notes/statistics probability/winsorize/":{"tf":1.4142135623730951}},"df":3}}}},"s":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0},"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/foreign bank account report (FBAR)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/b l o c k c h a i n/fastpay/":{"tf":1.0},"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":2.0},"https://phlip9.com/notes/btc-ln/hosted channels/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/submarine swaps/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":3.0},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":3.872983346207417},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":2.23606797749979},"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":2.6457513110645907},"https://phlip9.com/notes/confidential computing/intel SGX/secure time/":{"tf":2.23606797749979},"https://phlip9.com/notes/confidential computing/intel TDX/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/marblerun/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":1.4142135623730951},"https://phlip9.com/notes/crypto/(talk) authenticated data structures for stateless validation/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/rust/rust x SGX/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/rebuilderd/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":2.0}},"df":20,"'":{"docs":{"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.4142135623730951}},"df":2},"/":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"d":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/btc-ln/atomic multipath payments (AMP)/":{"tf":1.0}},"df":1}}}}}}}},"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"s":{"docs":{"https://phlip9.com/notes/btc-ln/lightning rod/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/submarine swaps/":{"tf":1.0}},"df":2}}}},"w":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{},"df":0,"h":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/secure time/":{"tf":1.0}},"df":2}}}}}}}}}},"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"g":{"docs":{"https://phlip9.com/notes/distributed systems/papers/(2020) Semi-Fast Byzantine-tolerant Shared Register without Reliable Broadcast/":{"tf":1.0}},"df":1}}},"u":{"docs":{},"df":0,"g":{"docs":{},"df":0,"u":{"docs":{},"df":0,"k":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/misc/kintsugi/":{"tf":1.0}},"df":1}}}}}}},"t":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/misc/pop_OS! tweaks/":{"tf":1.0}},"df":1},"l":{"docs":{"https://phlip9.com/notes/devops/algo wireguard VPN server/":{"tf":1.7320508075688772},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.0}},"df":2,"=":{"docs":{},"df":0,"0":{"docs":{"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.0}},"df":1}}}},"u":{"docs":{},"df":0,"b":{"docs":{},"df":0,"e":{"docs":{"https://phlip9.com/notes/misc/water distillation setup/":{"tf":1.0}},"df":1}},"i":{"docs":{"https://phlip9.com/notes/lang/gdb ref/":{"tf":3.0},"https://phlip9.com/notes/lang/rust/rr with rust/":{"tf":1.7320508075688772}},"df":2},"n":{"docs":{"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.4142135623730951}},"df":1,"/":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"p":{"docs":{"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.4142135623730951}},"df":1}}}},"0":{"docs":{"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.4142135623730951}},"df":1},"e":{"docs":{"https://phlip9.com/notes/misc/optimization solvers/":{"tf":1.0},"https://phlip9.com/notes/postgres/postgres performance tuning/":{"tf":1.7320508075688772}},"df":2},"l":{"docs":{},"df":0,"0":{"docs":{"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.4142135623730951}},"df":1}},"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/android/ADB over TCP inside WSL2/":{"tf":3.0},"https://phlip9.com/notes/devops/algo wireguard VPN server/":{"tf":1.4142135623730951},"https://phlip9.com/notes/networking/ipv6 address space/":{"tf":1.4142135623730951},"https://phlip9.com/notes/networking/network interfaces/":{"tf":2.6457513110645907},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.4142135623730951}},"df":5,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"g":{"docs":{},"df":0,"r":{"docs":{},"df":0,"f":{"docs":{},"df":0,"c":{"docs":{},"df":0,"3":{"docs":{},"df":0,"0":{"docs":{},"df":0,"5":{"docs":{},"df":0,"6":{"docs":{"https://phlip9.com/notes/networking/ipv6 address space/":{"tf":1.0}},"df":1}}}}}}}}}},"s":{"docs":{},"df":0,"/":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"p":{"docs":{"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.0}},"df":1}}}}}}}}},"p":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/AI ML/Markov Decision Process (MDP)/":{"tf":1.0},"https://phlip9.com/notes/distributed systems/papers/(2020) Semi-Fast Byzantine-tolerant Shared Register without Reliable Broadcast/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":2.6457513110645907},"https://phlip9.com/notes/postgres/types of scans/":{"tf":2.0}},"df":4}},"r":{"docs":{},"df":0,"b":{"docs":{},"df":0,"o":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0}},"df":1}},"n":{"docs":{"https://phlip9.com/notes/AI ML/Markov Decision Process (MDP)/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/secure time/":{"tf":1.0},"https://phlip9.com/notes/keyboards/moergo glove80/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.0},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.4142135623730951},"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.0}},"df":8}},"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.7320508075688772},"https://phlip9.com/notes/confidential computing/gramine/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/rust x SGX/":{"tf":1.0},"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":1.0}},"df":5}}}}},"v":{"docs":{},"df":0,"i":{"docs":{},"df":0,"x":{"docs":{"https://phlip9.com/notes/reproducible builds/nix/links/":{"tf":1.0}},"df":1}}},"w":{"docs":{},"df":0,"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"k":{"docs":{"https://phlip9.com/notes/misc/pop_OS! tweaks/":{"tf":1.4142135623730951}},"df":1}},"e":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1}}},"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"e":{"docs":{"https://phlip9.com/notes/combinatorics/k-combinations of a multiset/":{"tf":1.4142135623730951},"https://phlip9.com/notes/reproducible builds/nix/nix debug spurrious rebuilds/":{"tf":1.0}},"df":2}},"d":{"docs":{},"df":0,"d":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.4142135623730951}},"df":1}}},"t":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.4142135623730951}},"df":2,".":{"docs":{},"df":0,"j":{"docs":{},"df":0,"s":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/performance/simdjson talk/":{"tf":2.0}},"df":1}}}}}}}}}},"o":{"docs":{"https://phlip9.com/notes/AI ML/Expectimax Search/":{"tf":1.4142135623730951},"https://phlip9.com/notes/android/ADB over TCP inside WSL2/":{"tf":1.0},"https://phlip9.com/notes/android/OTA updates for rooted android phone/":{"tf":1.0},"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.7320508075688772},"https://phlip9.com/notes/btc-ln/BOLT 7 - p2p node and channel discovery/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/BOLT 8 - secure noise transport/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/atomic multipath payments (AMP)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/combinatorics/k-combinations of a multiset/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":2.0},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.7320508075688772},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":2.0},"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":1.0},"https://phlip9.com/notes/devops/deployment strategies/":{"tf":1.4142135623730951},"https://phlip9.com/notes/devops/docker compose/":{"tf":1.0},"https://phlip9.com/notes/distributed systems/papers/(2020) Semi-Fast Byzantine-tolerant Shared Register without Reliable Broadcast/":{"tf":1.0},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.7320508075688772},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.7320508075688772},"https://phlip9.com/notes/lang/operator fixity and precedence/":{"tf":1.0},"https://phlip9.com/notes/management/relieve often - why generals were more successful in WWII/":{"tf":1.0},"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":2.0},"https://phlip9.com/notes/misc/kintsugi/":{"tf":2.6457513110645907},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":2.23606797749979},"https://phlip9.com/notes/networking/CIDR/":{"tf":1.0},"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.7320508075688772},"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.7320508075688772},"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/nix/nix debug spurrious rebuilds/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/testing whether a coin is fair/":{"tf":1.7320508075688772},"https://phlip9.com/notes/statistics probability/winsorize/":{"tf":1.0}},"df":32}},"x":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/fastpay/":{"tf":1.4142135623730951},"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":4.358898943540674},"https://phlip9.com/notes/btc-ln/BOLT 7 - p2p node and channel discovery/":{"tf":1.4142135623730951},"https://phlip9.com/notes/btc-ln/breez lightning service providers/":{"tf":2.23606797749979},"https://phlip9.com/notes/btc-ln/lightning network notes/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":2.23606797749979},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0},"https://phlip9.com/notes/networking/network interface card (NIC)/":{"tf":1.0}},"df":8,"/":{"docs":{},"df":0,"r":{"docs":{},"df":0,"x":{"docs":{"https://phlip9.com/notes/networking/network interface card (NIC)/":{"tf":1.0}},"df":1}}},"_":{"docs":{},"df":0,"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{},"df":0,"p":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{},"df":0,"_":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{},"df":0,"x":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 7 - p2p node and channel discovery/":{"tf":1.0}},"df":1}}}}}}}}}}},"i":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.0}},"df":1}},"n":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/btc utreexo - utxo accumulator/":{"tf":2.0},"https://phlip9.com/notes/b l o c k c h a i n/fastpay/":{"tf":2.8284271247461903},"https://phlip9.com/notes/btc-ln/zero-conf channels/":{"tf":2.0}},"df":3},"o":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/btc utreexo - utxo accumulator/":{"tf":1.4142135623730951}},"df":1,"u":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/btc-ln/lightning network notes/":{"tf":1.0}},"df":1}}}},"y":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1,"p":{"docs":{},"df":0,"e":{"docs":{"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/foreign bank account report (FBAR)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":2.6457513110645907},"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":2.0},"https://phlip9.com/notes/btc-ln/hosted channels/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":2.449489742783178},"https://phlip9.com/notes/combinatorics/k-combinations of a multiset/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/mystikos/":{"tf":1.0},"https://phlip9.com/notes/crypto/acme protocol/":{"tf":1.7320508075688772},"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":1.0},"https://phlip9.com/notes/devops/algo wireguard VPN server/":{"tf":1.7320508075688772},"https://phlip9.com/notes/devops/azure CLI/":{"tf":1.7320508075688772},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":8.0},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":3.0},"https://phlip9.com/notes/lang/koka-lang/":{"tf":1.0},"https://phlip9.com/notes/lang/lua/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/operator fixity and precedence/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":2.23606797749979},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.4142135623730951},"https://phlip9.com/notes/postgres/snippets/":{"tf":1.4142135623730951},"https://phlip9.com/notes/postgres/types of scans/":{"tf":1.7320508075688772},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":2.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":3.0}},"df":25,"c":{"docs":{},"df":0,"h":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"k":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":2.449489742783178}},"df":1}}}}},"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"f":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.7320508075688772}},"df":1}}},"}":{"docs":{},"df":0,"{":{"docs":{},"df":0,"u":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0}},"df":1}}}},"i":{"docs":{},"df":0,"c":{"docs":{"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/gramine/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.4142135623730951},"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":1.0},"https://phlip9.com/notes/lang/operator fixity and precedence/":{"tf":1.0},"https://phlip9.com/notes/misc/optimization solvers/":{"tf":1.0},"https://phlip9.com/notes/networking/network interface card (NIC)/":{"tf":1.7320508075688772},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.4142135623730951},"https://phlip9.com/notes/reproducible builds/reproducible-builds.org/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.4142135623730951},"https://phlip9.com/notes/statistics probability/standard error/":{"tf":1.4142135623730951}},"df":13}}}}},"u":{"docs":{"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/":{"tf":1.0},"https://phlip9.com/notes/devops/algo wireguard VPN server/":{"tf":1.0},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":2.6457513110645907},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/understanding sycamore reactivity/":{"tf":1.0},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":2.449489742783178},"https://phlip9.com/notes/performance/bit hacks/":{"tf":4.47213595499958}},"df":7,"&":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{},"df":0,"p":{"docs":{},"df":0,";":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{},"df":0,"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"g":{"docs":{},"df":0,"n":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"&":{"docs":{},"df":0,"l":{"docs":{},"df":0,"t":{"docs":{},"df":0,";":{"docs":{},"df":0,"u":{"docs":{},"df":0,"&":{"docs":{},"df":0,"g":{"docs":{},"df":0,"t":{"docs":{},"df":0,";":{"docs":{},"df":0,"c":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/lang/rust/understanding sycamore reactivity/":{"tf":1.7320508075688772}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}},"(":{"docs":{},"df":0,"&":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{},"df":0,"p":{"docs":{},"df":0,";":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{},"df":0,"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"g":{"docs":{},"df":0,"n":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"&":{"docs":{},"df":0,"l":{"docs":{},"df":0,"t":{"docs":{},"df":0,";":{"docs":{},"df":0,"u":{"docs":{},"df":0,"&":{"docs":{},"df":0,"g":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/lang/rust/understanding sycamore reactivity/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}},".":{"docs":{"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/money services business (MSB)/":{"tf":1.0}},"df":1,"w":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"p":{"docs":{},"df":0,"p":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"g":{"docs":{},"df":0,"_":{"docs":{},"df":0,"s":{"docs":{},"df":0,"h":{"docs":{},"df":0,"r":{"docs":{},"df":0,"(":{"docs":{},"df":0,"x":{"docs":{},"df":0,".":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"i":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"g":{"docs":{},"df":0,"_":{"docs":{},"df":0,"z":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"1":{"docs":{},"df":0,"6":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":2.23606797749979},"https://phlip9.com/notes/btc-ln/BOLT 11 - invoices/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":2.23606797749979},"https://phlip9.com/notes/btc-ln/BOLT 7 - p2p node and channel discovery/":{"tf":2.23606797749979},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":2.8284271247461903},"https://phlip9.com/notes/postgres/types of scans/":{"tf":1.0}},"df":6,":":{"docs":{},"df":0,":":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"x":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 8 - secure noise transport/":{"tf":1.0}},"df":1}}}}}}},"2":{"docs":{},"df":0,"4":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 7 - p2p node and channel discovery/":{"tf":1.4142135623730951}},"df":1}},"3":{"docs":{},"df":0,"2":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.7320508075688772},"https://phlip9.com/notes/btc-ln/BOLT 4 - onion routing protocol/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/BOLT 7 - p2p node and channel discovery/":{"tf":2.0},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":3.1622776601683795},"https://phlip9.com/notes/performance/bit hacks/":{"tf":7.874007874011811},"https://phlip9.com/notes/performance/simdjson talk/":{"tf":1.0},"https://phlip9.com/notes/postgres/types of scans/":{"tf":1.0}},"df":8,"&":{"docs":{},"df":0,"g":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.0}},"df":1}}},"_":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"y":{"docs":{},"df":0,"_":{"docs":{},"df":0,"b":{"docs":{},"df":0,"y":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"_":{"docs":{},"df":0,"e":{"docs":{},"df":0,"q":{"docs":{},"df":0,"z":{"docs":{},"df":0,"(":{"docs":{},"df":0,"x":{"docs":{"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.0}},"df":1}},"_":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"f":{"docs":{},"df":0,"(":{"docs":{},"df":0,"x":{"docs":{"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.0}},"df":1}}}}}}}}}}}}}},"n":{"docs":{},"df":0,"i":{"docs":{},"df":0,"b":{"docs":{},"df":0,"_":{"docs":{},"df":0,"e":{"docs":{},"df":0,"q":{"docs":{},"df":0,"z":{"docs":{},"df":0,"(":{"docs":{},"df":0,"x":{"docs":{"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.0}},"df":1}},"_":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"f":{"docs":{},"df":0,"(":{"docs":{},"df":0,"x":{"docs":{"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.0}},"df":1}}}}}}}}}}}}},"s":{"docs":{},"df":0,"p":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"_":{"docs":{},"df":0,"n":{"docs":{},"df":0,"i":{"docs":{},"df":0,"b":{"docs":{},"df":0,"_":{"docs":{},"df":0,"e":{"docs":{},"df":0,"q":{"docs":{},"df":0,"z":{"docs":{},"df":0,"(":{"docs":{},"df":0,"x":{"docs":{"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.4142135623730951}},"df":1}},"_":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"f":{"docs":{},"df":0,"(":{"docs":{},"df":0,"x":{"docs":{"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.4142135623730951}},"df":1}}}}}}}}}}}}}}}}}}}}},"r":{"docs":{},"df":0,"b":{"docs":{},"df":0,"_":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{},"df":0,"k":{"docs":{},"df":0,"(":{"docs":{},"df":0,"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"_":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{},"df":0,"k":{"docs":{"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}},"h":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{},"df":0,"_":{"docs":{},"df":0,"b":{"docs":{},"df":0,"y":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"_":{"docs":{},"df":0,"b":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{},"df":0,"w":{"docs":{},"df":0,"e":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"(":{"docs":{},"df":0,"x":{"docs":{"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.0}},"df":1}},"_":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"f":{"docs":{},"df":0,"(":{"docs":{},"df":0,"x":{"docs":{"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}},"s":{"docs":{},"df":0,"p":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"_":{"docs":{},"df":0,"b":{"docs":{},"df":0,"y":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"_":{"docs":{},"df":0,"b":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{},"df":0,"w":{"docs":{},"df":0,"e":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"(":{"docs":{},"df":0,"x":{"docs":{"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.0}},"df":1}},"_":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"f":{"docs":{},"df":0,"(":{"docs":{},"df":0,"x":{"docs":{"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}},"n":{"docs":{},"df":0,"i":{"docs":{},"df":0,"b":{"docs":{},"df":0,"_":{"docs":{},"df":0,"b":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{},"df":0,"w":{"docs":{},"df":0,"e":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"(":{"docs":{},"df":0,"x":{"docs":{"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.0}},"df":1}},"_":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"f":{"docs":{},"df":0,"(":{"docs":{},"df":0,"x":{"docs":{"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}},"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"_":{"docs":{},"df":0,"n":{"docs":{},"df":0,"i":{"docs":{},"df":0,"b":{"docs":{},"df":0,"_":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"(":{"docs":{},"df":0,"x":{"docs":{"https://phlip9.com/notes/performance/bit hacks/":{"tf":2.449489742783178}},"df":1}}}}}}}}}}}}},"s":{"docs":{},"df":0,"u":{"docs":{},"df":0,"m":{"docs":{},"df":0,"_":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"l":{"docs":{},"df":0,"_":{"docs":{},"df":0,"n":{"docs":{},"df":0,"i":{"docs":{},"df":0,"b":{"docs":{},"df":0,"s":{"docs":{},"df":0,"(":{"docs":{},"df":0,"x":{"docs":{"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.0}},"df":1}}}}}}}}}},"n":{"docs":{},"df":0,"i":{"docs":{},"df":0,"b":{"docs":{},"df":0,"s":{"docs":{},"df":0,"_":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"f":{"docs":{},"df":0,"(":{"docs":{},"df":0,"x":{"docs":{"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.0}},"df":1}}}}},"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"m":{"docs":{},"df":0,"p":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"(":{"docs":{},"df":0,"x":{"docs":{"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}},"6":{"docs":{},"df":0,"4":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/BOLT 11 - invoices/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":4.0},"https://phlip9.com/notes/btc-ln/BOLT 4 - onion routing protocol/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/BOLT 7 - p2p node and channel discovery/":{"tf":1.7320508075688772},"https://phlip9.com/notes/combinatorics/k-combinations of a multiset/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":2.0},"https://phlip9.com/notes/performance/bit hacks/":{"tf":4.358898943540674},"https://phlip9.com/notes/performance/simdjson talk/":{"tf":1.0}},"df":9,"'":{"docs":{"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.0}},"df":1},":":{"docs":{},"df":0,":":{"docs":{},"df":0,"f":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"_":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"_":{"docs":{},"df":0,"b":{"docs":{},"df":0,"y":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"(":{"docs":{},"df":0,"&":{"docs":{},"df":0,"l":{"docs":{},"df":0,"t":{"docs":{},"df":0,";":{"docs":{},"df":0,"[":{"docs":{},"df":0,"u":{"docs":{},"df":0,"8":{"docs":{"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}},"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"_":{"docs":{},"df":0,"b":{"docs":{},"df":0,"y":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"(":{"docs":{},"df":0,"b":{"docs":{},"df":0,"u":{"docs":{},"df":0,"f":{"docs":{"https://phlip9.com/notes/performance/simdjson talk/":{"tf":1.4142135623730951}},"df":1}}}}}}}}}}}}}}}}}}},";":{"docs":{},"df":0,"2":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0}},"df":1}},"_":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"w":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"_":{"docs":{},"df":0,"b":{"docs":{},"df":0,"y":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"_":{"docs":{},"df":0,"l":{"docs":{},"df":0,"t":{"docs":{},"df":0,"(":{"docs":{},"df":0,"x":{"docs":{"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.7320508075688772}},"df":1}},"_":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"f":{"docs":{},"df":0,"(":{"docs":{},"df":0,"x":{"docs":{"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}},"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"g":{"docs":{},"df":0,"_":{"docs":{},"df":0,"b":{"docs":{},"df":0,"y":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"_":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{},"df":0,"x":{"docs":{},"df":0,"_":{"docs":{},"df":0,"l":{"docs":{},"df":0,"t":{"docs":{},"df":0,"(":{"docs":{},"df":0,"x":{"docs":{"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.0}},"df":1}},"_":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"f":{"docs":{},"df":0,"(":{"docs":{},"df":0,"x":{"docs":{"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}},"z":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"_":{"docs":{},"df":0,"b":{"docs":{},"df":0,"y":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"(":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{},"df":0,"k":{"docs":{},"df":0,"_":{"docs":{},"df":0,"0":{"docs":{},"df":0,"x":{"docs":{},"df":0,"8":{"docs":{},"df":0,"0":{"docs":{"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.0}},"df":1}}}}}}}}},"x":{"docs":{"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.0}},"df":1}},"_":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"f":{"docs":{},"df":0,"(":{"docs":{},"df":0,"x":{"docs":{"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}},"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"i":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"g":{"docs":{},"df":0,"_":{"docs":{},"df":0,"b":{"docs":{},"df":0,"y":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"_":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{},"df":0,"x":{"docs":{},"df":0,"_":{"docs":{},"df":0,"l":{"docs":{},"df":0,"t":{"docs":{},"df":0,"(":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.0}},"df":1}},"_":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"f":{"docs":{},"df":0,"(":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}},"z":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"_":{"docs":{},"df":0,"b":{"docs":{},"df":0,"y":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"(":{"docs":{},"df":0,"x":{"docs":{"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.0}},"df":1}},"_":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"f":{"docs":{},"df":0,"(":{"docs":{},"df":0,"x":{"docs":{"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}},"8":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.7320508075688772},"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":3.1622776601683795},"https://phlip9.com/notes/btc-ln/BOLT 7 - p2p node and channel discovery/":{"tf":2.0},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":5.196152422706632},"https://phlip9.com/notes/crypto/tls exported keying material/":{"tf":1.0},"https://phlip9.com/notes/lang/gdb ref/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.0},"https://phlip9.com/notes/performance/bit hacks/":{"tf":3.872983346207417}},"df":8,":":{"docs":{},"df":0,":":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"y":{"docs":{},"df":0,"_":{"docs":{},"df":0,"f":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"(":{"docs":{},"df":0,"n":{"docs":{},"df":0,")":{"docs":{},"df":0,".":{"docs":{},"df":0,"e":{"docs":{},"df":0,"x":{"docs":{},"df":0,"p":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{},"df":0,"(":{"docs":{},"df":0,"\"":{"docs":{},"df":0,"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{},"df":0,"_":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"=":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"1":{"docs":{"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.0}},"df":1}},"1":{"docs":{},"df":0,"1":{"docs":{"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.0}},"df":1}}}}},"1":{"docs":{},"df":0,"1":{"docs":{},"df":0,"1":{"docs":{},"df":0,"1":{"docs":{},"df":0,"1":{"docs":{"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.0}},"df":1}}}}}}}}},"_":{"docs":{},"df":0,"a":{"docs":{"https://phlip9.com/notes/AI ML/Expectimax Search/":{"tf":1.0}},"df":1},"b":{"docs":{"https://phlip9.com/notes/AI ML/Expectimax Search/":{"tf":1.0}},"df":1}},"b":{"docs":{},"df":0,"u":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"u":{"docs":{"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":2.0},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":2.23606797749979},"https://phlip9.com/notes/confidential computing/gramine/":{"tf":2.0},"https://phlip9.com/notes/devops/azure CLI/":{"tf":1.0},"https://phlip9.com/notes/misc/pop_OS! tweaks/":{"tf":1.7320508075688772},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.4142135623730951}},"df":6,"/":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"b":{"docs":{},"df":0,"i":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0}},"df":1,"/":{"docs":{},"df":0,"p":{"docs":{},"df":0,"o":{"docs":{},"df":0,"p":{"docs":{},"df":0,"o":{"docs":{"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.0}},"df":1}}}},"w":{"docs":{},"df":0,"s":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0}},"df":1}}}}}}}}}}},"2":{"docs":{},"df":0,"0":{"docs":{},"df":0,".":{"docs":{},"df":0,"0":{"docs":{},"df":0,"4":{"docs":{"https://phlip9.com/notes/confidential computing/gramine/":{"tf":2.449489742783178}},"df":1}}}}},":":{"docs":{},"df":0,"1":{"docs":{},"df":0,"8":{"docs":{},"df":0,".":{"docs":{},"df":0,"0":{"docs":{},"df":0,"4":{"docs":{"https://phlip9.com/notes/confidential computing/gramine/":{"tf":1.0}},"df":1}}}}},"2":{"docs":{},"df":0,"0":{"docs":{},"df":0,".":{"docs":{},"df":0,"0":{"docs":{},"df":0,"4":{"docs":{"https://phlip9.com/notes/confidential computing/gramine/":{"tf":1.4142135623730951}},"df":1}}}},"1":{"docs":{},"df":0,".":{"docs":{},"df":0,"0":{"docs":{},"df":0,"4":{"docs":{"https://phlip9.com/notes/confidential computing/gramine/":{"tf":1.0}},"df":1}}}}}}}}}}},"d":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0}},"df":1,"e":{"docs":{},"df":0,"v":{"docs":{"https://phlip9.com/notes/android/linux ADB udev setup/":{"tf":1.7320508075688772},"https://phlip9.com/notes/android/root phone with magisk/":{"tf":1.0}},"df":2,".":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"f":{"docs":{"https://phlip9.com/notes/android/linux ADB udev setup/":{"tf":1.0}},"df":1}}}}},"a":{"docs":{},"df":0,"d":{"docs":{},"df":0,"m":{"docs":{"https://phlip9.com/notes/android/linux ADB udev setup/":{"tf":1.0}},"df":1}}},"d":{"docs":{},"df":0,".":{"docs":{},"df":0,"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"v":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{"https://phlip9.com/notes/android/linux ADB udev setup/":{"tf":1.0}},"df":1}}}}}}}}}},"p":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/fastpay/":{"tf":1.7320508075688772},"https://phlip9.com/notes/networking/ipv6 address space/":{"tf":1.0},"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.0}},"df":3}},"e":{"docs":{},"df":0,"f":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.7320508075688772}},"df":1}}},"f":{"docs":{},"df":0,"2":{"docs":{"https://phlip9.com/notes/keyboards/moergo glove80/":{"tf":1.4142135623730951},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":2}},"i":{"docs":{"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/flutter/flutter setup/":{"tf":1.4142135623730951},"https://phlip9.com/notes/misc/pop_OS! tweaks/":{"tf":1.0}},"df":3,"/":{"docs":{},"df":0,"u":{"docs":{},"df":0,"x":{"docs":{"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0}},"df":1}}},"d":{"docs":{"https://phlip9.com/notes/reproducible builds/nix/nix auto-allocate-uids -> nixbld users/":{"tf":2.8284271247461903}},"df":1},"n":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":2.0}},"df":1,"1":{"docs":{},"df":0,"6":{"docs":{},"df":0,"_":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.0}},"df":2}}}},"3":{"docs":{},"df":0,"2":{"docs":{},"df":0,"_":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"x":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.0}},"df":1}}},"t":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":5.385164807134504},"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":2.0}},"df":2,")":{"docs":{},"df":0,"(":{"docs":{},"df":0,"p":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"x":{"docs":{},"df":0,"t":{"docs":{},"df":0,"_":{"docs":{},"df":0,"s":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.0}},"df":1}}}}}}}}}}}},"p":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"x":{"docs":{},"df":0,"t":{"docs":{},"df":0,"_":{"docs":{},"df":0,"s":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}},"6":{"docs":{},"df":0,"4":{"docs":{},"df":0,"_":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/performance/simdjson talk/":{"tf":1.0}},"df":1}}}},"8":{"docs":{},"df":0,"_":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":4.58257569495584},"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":3.1622776601683795}},"df":2,"*":{"docs":{},"df":0,")":{"docs":{},"df":0,"&":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{},"df":0,"p":{"docs":{},"df":0,";":{"docs":{},"df":0,"h":{"docs":{},"df":0,"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.0}},"df":1}}}}}}}}},"(":{"docs":{},"df":0,"h":{"docs":{},"df":0,"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.0}},"df":1}}}}},"o":{"docs":{},"df":0,"e":{"docs":{},"df":0,"_":{"docs":{},"df":0,"c":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"c":{"docs":{},"df":0,"(":{"docs":{},"df":0,"1":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}},"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0}},"df":1}}}}}}}},"l":{"docs":{},"df":0,"a":{"docs":{"https://phlip9.com/notes/networking/ipv6 address space/":{"tf":1.0}},"df":1},"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"m":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.0},"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.0}},"df":3}}}},"n":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0}},"df":1,"a":{"docs":{},"df":0,"b":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.0}},"df":2}},"c":{"docs":{},"df":0,"c":{"docs":{},"df":0,"e":{"docs":{},"df":0,"p":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.0}},"df":1}}}}},"f":{"docs":{},"df":0,"f":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":1.0}},"df":1}}}}},"m":{"docs":{"https://phlip9.com/notes/WSL/WSL2 custom kernel/":{"tf":1.4142135623730951},"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0}},"df":2},"r":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/lang/operator fixity and precedence/":{"tf":1.0}},"df":1}},"t":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/devops/k3s/":{"tf":1.0}},"df":1,"e":{"docs":{},"df":0,"d":{"docs":{},"df":0,"_":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"b":{"docs":{},"df":0,"o":{"docs":{},"df":0,"o":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/devops/algo wireguard VPN server/":{"tf":1.0}},"df":1}}}}}}}}}}}}}},"u":{"docs":{},"df":0,"t":{"docs":{},"df":0,"h":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/distributed systems/papers/(2020) Semi-Fast Byzantine-tolerant Shared Register without Reliable Broadcast/":{"tf":1.7320508075688772},"https://phlip9.com/notes/distributed systems/papers/(2021) Leaderless Consensus/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.4142135623730951}},"df":5}}}}}},"w":{"docs":{},"df":0,"a":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.7320508075688772}},"df":1,"e":{"docs":{},"df":0,"d":{"docs":{},"df":0,"(":{"docs":{},"df":0,"n":{"docs":{},"df":0,"a":{"docs":{},"df":0,"v":{"docs":{},"df":0,"i":{"docs":{},"df":0,"g":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,".":{"docs":{},"df":0,"p":{"docs":{},"df":0,"u":{"docs":{},"df":0,"s":{"docs":{},"df":0,"h":{"docs":{},"df":0,"(":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"x":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}},"_":{"docs":{},"df":0,"f":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{},"df":0,"u":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":2.0}},"df":1,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"_":{"docs":{},"df":0,"s":{"docs":{},"df":0,"y":{"docs":{},"df":0,"n":{"docs":{},"df":0,"c":{"docs":{"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}},"b":{"docs":{},"df":0,"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":2.0},"https://phlip9.com/notes/lang/rust/rust verification tools/":{"tf":1.0}},"df":2}}},"x":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":2.449489742783178}},"df":1}}},"c":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.0}},"df":1}},"p":{"docs":{"https://phlip9.com/notes/misc/kintsugi/":{"tf":1.0}},"df":1},"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"g":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0}},"df":1}}}}}},"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/statistics probability/testing whether a coin is fair/":{"tf":1.0}},"df":1}}}}}}}},"h":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"k":{"docs":{"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0}},"df":1}}}},"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/btc-ln/submarine swaps/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/standard error/":{"tf":1.0}},"df":2}}}}}},"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"f":{"docs":{"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.4142135623730951}},"df":1,"i":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0},"https://phlip9.com/notes/lang/lua/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/rust verification tools/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.0}},"df":4}}},"r":{"docs":{"https://phlip9.com/notes/AI ML/Markov Decision Process (MDP)/":{"tf":1.7320508075688772},"https://phlip9.com/notes/android/android cli setup/":{"tf":1.0},"https://phlip9.com/notes/android/root phone with magisk/":{"tf":1.0},"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/foreign bank account report (FBAR)/":{"tf":1.0},"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/money services business (MSB)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.4142135623730951},"https://phlip9.com/notes/devops/algo wireguard VPN server/":{"tf":1.0},"https://phlip9.com/notes/devops/secrets/ejson-kms (AWS)/":{"tf":1.7320508075688772},"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":2.449489742783178},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/rr with rust/":{"tf":1.0},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/reproducible-builds.org/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":2.0},"https://phlip9.com/notes/router/lightning router/lightning router overview/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/standard error/":{"tf":1.0}},"df":17,"f":{"docs":{},"df":0,"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"w":{"docs":{"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.4142135623730951}},"df":1}}}},"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0},"https://phlip9.com/notes/design/form design/":{"tf":1.4142135623730951}},"df":2}}},"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"h":{"docs":{"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.0}},"df":1}}}}},"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{},"df":0,"{":{"docs":{},"df":0,"a":{"docs":{"https://phlip9.com/notes/AI ML/Markov Decision Process (MDP)/":{"tf":1.0}},"df":1,"}":{"docs":{},"df":0,"{":{"docs":{},"df":0,"\\":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"g":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"x":{"docs":{"https://phlip9.com/notes/AI ML/Markov Decision Process (MDP)/":{"tf":1.4142135623730951}},"df":1}}}}}}}}}}}}},"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.4142135623730951},"https://phlip9.com/notes/btc-ln/breez lightning service providers/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0},"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":1.0},"https://phlip9.com/notes/lang/operator fixity and precedence/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/rust/understanding sycamore reactivity/":{"tf":1.4142135623730951}},"df":6}}}}}},"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"m":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/reproducible builds/rebuilderd/":{"tf":1.0}},"df":1}}}}}}}}}}},"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"c":{"docs":{},"df":0,"u":{"docs":{},"df":0,"m":{"docs":{},"df":0,"b":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.4142135623730951}},"df":1}}}}},"x":{"docs":{},"df":0,"p":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/btc-ln/breez lightning service providers/":{"tf":1.0}},"df":1}}}}}},"f":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{},"df":0,"i":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.0}},"df":1}}}}}}},"o":{"docs":{},"df":0,"l":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0}},"df":1}},"r":{"docs":{},"df":0,"t":{"docs":{},"df":0,"u":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0},"https://phlip9.com/notes/android/root phone with magisk/":{"tf":1.4142135623730951},"https://phlip9.com/notes/btc-ln/breez lightning service providers/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/secure time/":{"tf":1.0},"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":1.0},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0},"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":1.4142135623730951},"https://phlip9.com/notes/misc/kintsugi/":{"tf":1.4142135623730951},"https://phlip9.com/notes/statistics probability/multinomial distribution/":{"tf":1.0}},"df":11}}}}}},"h":{"docs":{},"df":0,"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"t":{"docs":{},"df":0,"h":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/devops/consul/":{"tf":1.0}},"df":1}}}}}}},"i":{"docs":{"https://phlip9.com/notes/lang/rust/sycamore x futures/":{"tf":1.0}},"df":1,"c":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/networking/ipv6 address space/":{"tf":1.4142135623730951}},"df":1,"r":{"docs":{},"df":0,"f":{"docs":{},"df":0,"c":{"docs":{},"df":0,"4":{"docs":{},"df":0,"1":{"docs":{},"df":0,"9":{"docs":{},"df":0,"3":{"docs":{"https://phlip9.com/notes/networking/ipv6 address space/":{"tf":1.0}},"df":1}}},"2":{"docs":{},"df":0,"9":{"docs":{},"df":0,"1":{"docs":{"https://phlip9.com/notes/networking/ipv6 address space/":{"tf":1.4142135623730951}},"df":1}}}}}}}}}}},"f":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.0}},"df":1}},"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.0}},"df":1}}}}},"n":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":2.0}},"df":1,"i":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.4142135623730951}},"df":2}}},"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/android/OTA updates for rooted android phone/":{"tf":1.7320508075688772}},"df":1}}}},"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"g":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.0}},"df":1}}}},"n":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0}},"df":1},"t":{"docs":{"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.0}},"df":1}}}}},"o":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/koka-lang/":{"tf":1.0}},"df":2}},"q":{"docs":{"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":1.0}},"df":1,"u":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/bip158 - compact block filters/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.0},"https://phlip9.com/notes/combinatorics/k-combinations of a multiset/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/marblerun/":{"tf":1.0},"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":1.4142135623730951},"https://phlip9.com/notes/devops/azure CLI/":{"tf":3.1622776601683795},"https://phlip9.com/notes/networking/ipv6 address space/":{"tf":1.7320508075688772},"https://phlip9.com/notes/networking/network interface card (NIC)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/postgres/types of scans/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.4142135623730951}},"df":14}},"t":{"docs":{"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":2.0},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/fuzzing/fuzzcheck-rs/":{"tf":1.0},"https://phlip9.com/notes/fuzzing/fuzzing/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/nix/links/":{"tf":1.0}},"df":6,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.0}},"df":1}}}}},"v":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"s":{"docs":{"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0},"https://phlip9.com/notes/lang/koka-lang/":{"tf":1.0},"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.0},"https://phlip9.com/notes/nvim/universal-ctags Notes/":{"tf":1.4142135623730951}},"df":5}}}},"x":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":2.449489742783178}},"df":2,"_":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{},"df":0,"p":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0}},"df":1}}}}}}}}}}}},"k":{"docs":{},"df":0,"n":{"docs":{},"df":0,"o":{"docs":{},"df":0,"w":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":2.23606797749979},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.7320508075688772},"https://phlip9.com/notes/lang/flutter/flutter setup/":{"tf":1.7320508075688772},"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.4142135623730951},"https://phlip9.com/notes/reproducible builds/nix/nix debug spurrious rebuilds/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":2.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":2.8284271247461903},"https://phlip9.com/notes/statistics probability/testing whether a coin is fair/":{"tf":1.0}},"df":8,"(":{"docs":{},"df":0,"1":{"docs":{},"df":0,"6":{"docs":{},"df":0,"3":{"docs":{},"df":0,"8":{"docs":{},"df":0,"8":{"docs":{"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0}},"df":1}}}}}}}}}}},"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"s":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/fastpay/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/submarine swaps/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0},"https://phlip9.com/notes/fuzzing/fuzzcheck-rs/":{"tf":1.0},"https://phlip9.com/notes/lang/gdb ref/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.0}},"df":7}}},"i":{"docs":{},"df":0,"k":{"docs":{"https://phlip9.com/notes/AI ML/Expectimax Search/":{"tf":1.0},"https://phlip9.com/notes/b l o c k c h a i n/fastpay/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/winsorize/":{"tf":1.0}},"df":4},"m":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.0}},"df":2}}}},"o":{"docs":{},"df":0,"c":{"docs":{},"df":0,"k":{"docs":{"https://phlip9.com/notes/android/root phone with magisk/":{"tf":1.0},"https://phlip9.com/notes/b l o c k c h a i n/fastpay/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0}},"df":3}}}},"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/secure time/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/self-referencing structs/":{"tf":1.0}},"df":2}}}}}},"p":{"docs":{},"df":0,"p":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"g":{"docs":{},"df":0,"u":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/confidential computing/intel TDX/":{"tf":1.4142135623730951}},"df":1}}}}}}}}},"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{},"df":0,"u":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.4142135623730951}},"df":1}}}}},"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/keyboards/moergo glove80/":{"tf":1.0},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0},"https://phlip9.com/notes/misc/setting up a headless raspbian boot image/":{"tf":1.0}},"df":3}}}}},"n":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0}},"df":1}}},"o":{"docs":{},"df":0,"f":{"docs":{},"df":0,"f":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/reproducible builds/nix/links/":{"tf":1.0}},"df":1}}}}},"p":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"m":{"docs":{"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.0}},"df":1}}}}},"p":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0}},"df":1}}}},"l":{"docs":{},"df":0,"u":{"docs":{},"df":0,"g":{"docs":{"https://phlip9.com/notes/keyboards/moergo glove80/":{"tf":1.4142135623730951}},"df":1}}},"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"p":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/management/relieve often - why generals were more successful in WWII/":{"tf":1.0}},"df":1}}}},"o":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":1.4142135623730951}},"df":1}}}}}}},"q":{"docs":{},"df":0,"i":{"docs":{},"df":0,"u":{"docs":{"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":1.0}},"df":1}}},"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{"https://phlip9.com/notes/combinatorics/k-combinations of a multiset/":{"tf":1.0},"https://phlip9.com/notes/crypto/TLS self-signed pubkey-only certs/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/rust verification tools/":{"tf":1.4142135623730951}},"df":3}}},"l":{"docs":{"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":1.7320508075688772},"https://phlip9.com/notes/reproducible builds/nix/nix debug spurrious rebuilds/":{"tf":1.0}},"df":2}},"o":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.4142135623730951},"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.0}},"df":2},"o":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/android/OTA updates for rooted android phone/":{"tf":1.0}},"df":1}}}},"s":{"docs":{},"df":0,"a":{"docs":{},"df":0,"f":{"docs":{"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.0}},"df":2},"n":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/misc/kintsugi/":{"tf":1.0}},"df":1}}},"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.0},"https://phlip9.com/notes/crypto/biscuit authz/":{"tf":1.4142135623730951}},"df":5}},"c":{"docs":{},"df":0,"u":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/confidential computing/marblerun/":{"tf":1.0}},"df":1}}}},"i":{"docs":{},"df":0,"g":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":2.6457513110645907},"https://phlip9.com/notes/confidential computing/gramine/":{"tf":1.0},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0}},"df":3}},"z":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0}},"df":1}},"p":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"i":{"docs":{},"df":0,"f":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.7320508075688772},"https://phlip9.com/notes/networking/ipv6 address space/":{"tf":1.0}},"df":2}}}}}},"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"b":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.0}},"df":1}}},"r":{"docs":{},"df":0,"u":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{},"df":0,"u":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/fuzzing/fuzzing/":{"tf":1.0}},"df":1}}}}}}},"u":{"docs":{},"df":0,"p":{"docs":{},"df":0,"p":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/WSL/WSL2 custom kernel/":{"tf":1.0}},"df":1}}}}}}},"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/btc-ln/breez lightning service providers/":{"tf":1.0}},"df":1}},"i":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/AI ML/Expectimax Search/":{"tf":1.0},"https://phlip9.com/notes/AI ML/Markov Decision Process (MDP)/":{"tf":1.0},"https://phlip9.com/notes/b l o c k c h a i n/fastpay/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":2.0},"https://phlip9.com/notes/btc-ln/atomic multipath payments (AMP)/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/secure time/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":1.0},"https://phlip9.com/notes/devops/deployment strategies/":{"tf":1.0},"https://phlip9.com/notes/devops/nomad/":{"tf":1.4142135623730951},"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":1.0},"https://phlip9.com/notes/keyboards/moergo glove80/":{"tf":1.0},"https://phlip9.com/notes/lang/lua/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/rust/rr with rust/":{"tf":2.0},"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":1.0},"https://phlip9.com/notes/misc/kintsugi/":{"tf":1.0},"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.4142135623730951}},"df":22},"t":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1}}},"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{"https://phlip9.com/notes/design/form design/":{"tf":1.0}},"df":1}}}},"r":{"docs":{},"df":0,"u":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/btc-ln/zero-conf channels/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":2.6457513110645907},"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.0}},"df":4,"w":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{},"df":0,"h":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/secure time/":{"tf":1.0}},"df":1}}}}}}}}}}},"u":{"docs":{},"df":0,"s":{"docs":{"https://phlip9.com/notes/btc-ln/breez lightning service providers/":{"tf":1.0},"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":1.0},"https://phlip9.com/notes/keyboards/moergo glove80/":{"tf":1.0}},"df":3}},"w":{"docs":{},"df":0,"i":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{},"df":0,"d":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.0}},"df":1}}}},"l":{"docs":{"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.4142135623730951}},"df":2}},"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"p":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.0}},"df":2}}}},"z":{"docs":{},"df":0,"i":{"docs":{},"df":0,"p":{"docs":{"https://phlip9.com/notes/android/android cli setup/":{"tf":1.4142135623730951}},"df":1}}}},"p":{"docs":{"https://phlip9.com/notes/android/ADB over TCP inside WSL2/":{"tf":1.0},"https://phlip9.com/notes/android/OTA updates for rooted android phone/":{"tf":1.0},"https://phlip9.com/notes/android/android cli setup/":{"tf":1.0},"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":2.23606797749979},"https://phlip9.com/notes/android/root phone with magisk/":{"tf":1.0},"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/foreign bank account report (FBAR)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.4142135623730951},"https://phlip9.com/notes/btc-ln/breez lightning service providers/":{"tf":1.4142135623730951},"https://phlip9.com/notes/btc-ln/lightning rod/":{"tf":1.4142135623730951},"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.4142135623730951},"https://phlip9.com/notes/btc-ln/submarine swaps/":{"tf":1.0},"https://phlip9.com/notes/combinatorics/k-combinations of a multiset/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/gramine/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.7320508075688772},"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.7320508075688772},"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":1.7320508075688772},"https://phlip9.com/notes/crypto/TLS self-signed pubkey-only certs/":{"tf":1.0},"https://phlip9.com/notes/design/form design/":{"tf":1.0},"https://phlip9.com/notes/devops/algo wireguard VPN server/":{"tf":1.0},"https://phlip9.com/notes/devops/docker compose/":{"tf":1.0},"https://phlip9.com/notes/devops/secrets/1password - secrets automation/":{"tf":1.0},"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":2.0},"https://phlip9.com/notes/ios/ios setup/":{"tf":1.4142135623730951},"https://phlip9.com/notes/keyboards/moergo glove80/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/flutter/flutter setup/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/sycamore x futures/":{"tf":1.0},"https://phlip9.com/notes/misc/kintsugi/":{"tf":2.449489742783178},"https://phlip9.com/notes/misc/pop_OS! tweaks/":{"tf":1.0},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":3.0},"https://phlip9.com/notes/misc/setting up a headless raspbian boot image/":{"tf":2.0},"https://phlip9.com/notes/networking/CIDR/":{"tf":1.0},"https://phlip9.com/notes/networking/network interface card (NIC)/":{"tf":1.0},"https://phlip9.com/notes/networking/network interfaces/":{"tf":2.8284271247461903},"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.0},"https://phlip9.com/notes/postgres/postgres performance tuning/":{"tf":1.4142135623730951},"https://phlip9.com/notes/postgres/snippets/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.7320508075688772},"https://phlip9.com/notes/reproducible builds/nix/nix auto-allocate-uids -> nixbld users/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/nix/nix debug broken package build/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/standard error/":{"tf":1.0}},"df":43,"/":{"docs":{},"df":0,"d":{"docs":{},"df":0,"o":{"docs":{},"df":0,"w":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/keyboards/moergo glove80/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/lightning router overview/":{"tf":1.0}},"df":2}}}}},"_":{"docs":{},"df":0,"b":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1,".":{"docs":{},"df":0,"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"w":{"docs":{},"df":0,"_":{"docs":{},"df":0,"p":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"s":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1}}}}}}}}}},"_":{"docs":{},"df":0,"p":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"s":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.4142135623730951}},"df":1}}}}}}}}}}}}},"d":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/AI ML/Markov Decision Process (MDP)/":{"tf":2.0},"https://phlip9.com/notes/WSL/WSL2 custom kernel/":{"tf":1.0},"https://phlip9.com/notes/android/OTA updates for rooted android phone/":{"tf":3.872983346207417},"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":3.1622776601683795},"https://phlip9.com/notes/android/root phone with magisk/":{"tf":2.0},"https://phlip9.com/notes/b l o c k c h a i n/btc utreexo - utxo accumulator/":{"tf":1.0},"https://phlip9.com/notes/b l o c k c h a i n/fastpay/":{"tf":1.7320508075688772},"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":2.449489742783178},"https://phlip9.com/notes/btc-ln/BOLT 7 - p2p node and channel discovery/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":2.449489742783178},"https://phlip9.com/notes/confidential computing/gramine/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/marblerun/":{"tf":1.4142135623730951},"https://phlip9.com/notes/crypto/(talk) authenticated data structures for stateless validation/":{"tf":1.0},"https://phlip9.com/notes/crypto/acme protocol/":{"tf":1.0},"https://phlip9.com/notes/devops/algo wireguard VPN server/":{"tf":1.7320508075688772},"https://phlip9.com/notes/devops/azure CLI/":{"tf":1.4142135623730951},"https://phlip9.com/notes/devops/deployment strategies/":{"tf":1.0},"https://phlip9.com/notes/devops/secrets/mozilla SOPS/":{"tf":1.0},"https://phlip9.com/notes/distributed systems/papers/(2020) Semi-Fast Byzantine-tolerant Shared Register without Reliable Broadcast/":{"tf":1.0},"https://phlip9.com/notes/keyboards/moergo glove80/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/understanding sycamore reactivity/":{"tf":1.0},"https://phlip9.com/notes/misc/pop_OS! tweaks/":{"tf":1.4142135623730951},"https://phlip9.com/notes/misc/prepping RPI for embedded dev/":{"tf":1.4142135623730951},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.4142135623730951},"https://phlip9.com/notes/postgres/snippets/":{"tf":2.23606797749979},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.4142135623730951},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":2.23606797749979},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":3.1622776601683795}},"df":29,"e":{"docs":{},"df":0,"(":{"docs":{},"df":0,"&":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{},"df":0,"p":{"docs":{},"df":0,";":{"docs":{},"df":0,"m":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":1.4142135623730951}},"df":1}}}}}}}},"2":{"docs":{},"df":0,"0":{"docs":{},"df":0,"2":{"docs":{},"df":0,"3":{"docs":{},"df":0,"/":{"docs":{},"df":0,"0":{"docs":{},"df":0,"7":{"docs":{},"df":0,"/":{"docs":{},"df":0,"1":{"docs":{},"df":0,"4":{"docs":{"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0}},"df":1}}}}}}}}}},"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{},"df":0,"f":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":2.8284271247461903}},"df":1}}}}},"_":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{},"df":0,"d":{"docs":{},"df":0,"_":{"docs":{},"df":0,"h":{"docs":{},"df":0,"t":{"docs":{},"df":0,"l":{"docs":{},"df":0,"c":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":2.23606797749979}},"df":1}}}}}}}},"f":{"docs":{},"df":0,"e":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.0}},"df":1}}},"a":{"docs":{},"df":0,"d":{"docs":{},"df":0,"d":{"docs":{},"df":0,"h":{"docs":{},"df":0,"t":{"docs":{},"df":0,"l":{"docs":{},"df":0,"c":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.0}},"df":1}}}}}}}}}}},"g":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":2.8284271247461903},"https://phlip9.com/notes/android/root phone with magisk/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/gramine/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.4142135623730951},"https://phlip9.com/notes/devops/algo wireguard VPN server/":{"tf":1.0},"https://phlip9.com/notes/devops/deployment strategies/":{"tf":1.0},"https://phlip9.com/notes/devops/nomad/":{"tf":1.0},"https://phlip9.com/notes/misc/pop_OS! tweaks/":{"tf":1.4142135623730951},"https://phlip9.com/notes/misc/prepping RPI for embedded dev/":{"tf":1.0}},"df":11}}}},"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/devops/azure CLI/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/lightning router overview/":{"tf":1.4142135623730951}},"df":3,"q":{"docs":{},"df":0,"u":{"docs":{},"df":0,"o":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"w":{"docs":{"https://phlip9.com/notes/router/lightning router/lightning router overview/":{"tf":1.0}},"df":1}}}}}}}}}},"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"x":{"docs":{},"df":0,"i":{"docs":{},"df":0,"m":{"docs":{},"df":0,"u":{"docs":{},"df":0,"m":{"docs":{"https://phlip9.com/notes/router/lightning router/lightning router overview/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}},"o":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/monetary instruments/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/lightning rod/":{"tf":1.0},"https://phlip9.com/notes/crypto/tls exported keying material/":{"tf":1.0},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/rust verification tools/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.7320508075688772},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":2.6457513110645907}},"df":7}},"p":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/AI ML/Expectimax Search/":{"tf":2.0},"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":1.0},"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.4142135623730951},"https://phlip9.com/notes/statistics probability/testing whether a coin is fair/":{"tf":1.0}},"df":4}}},"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/postgres/snippets/":{"tf":1.0}},"df":1}}},"i":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/performance/profiling/":{"tf":1.0}},"df":1}},"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{"https://phlip9.com/notes/lang/flutter/flutter setup/":{"tf":1.0},"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":1.4142135623730951},"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/reproducible-builds.org/":{"tf":1.0}},"df":4}}}}}},"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"m":{"docs":{"https://phlip9.com/notes/btc-ln/breez lightning service providers/":{"tf":1.0},"https://phlip9.com/notes/devops/AKS - azure kubernetes service/":{"tf":1.0},"https://phlip9.com/notes/misc/uptime to downtime conversion/":{"tf":1.7320508075688772}},"df":3,"e":{"docs":{},"df":0,"(":{"docs":{},"df":0,"a":{"docs":{},"df":0,"p":{"docs":{},"df":0,"p":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"x":{"docs":{"https://phlip9.com/notes/misc/uptime to downtime conversion/":{"tf":1.0}},"df":1}}}}}}}}}},"o":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.4142135623730951}},"df":1}}}},"r":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":2.0}},"df":2},"l":{"docs":{"https://phlip9.com/notes/crypto/acme protocol/":{"tf":1.4142135623730951},"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":2.0}},"df":5,"&":{"docs":{},"df":0,"g":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":2.0}},"df":1}}},"=":{"docs":{},"df":0,"h":{"docs":{},"df":0,"t":{"docs":{},"df":0,"t":{"docs":{},"df":0,"p":{"docs":{},"df":0,"s":{"docs":{},"df":0,":":{"docs":{},"df":0,"/":{"docs":{},"df":0,"/":{"docs":{},"df":0,"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"g":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,".":{"docs":{},"df":0,"e":{"docs":{},"df":0,"x":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{},"df":0,"p":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,".":{"docs":{},"df":0,"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{},"df":0,"/":{"docs":{},"df":0,"\"":{"docs":{},"df":0,"&":{"docs":{},"df":0,"g":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.0}},"df":2}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"t":{"docs":{"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/gramine/":{"tf":1.4142135623730951}},"df":2}},"s":{"docs":{"https://phlip9.com/notes/":{"tf":1.0},"https://phlip9.com/notes/AI ML/Expectimax Search/":{"tf":1.4142135623730951},"https://phlip9.com/notes/AI ML/Markov Decision Process (MDP)/":{"tf":2.6457513110645907},"https://phlip9.com/notes/WSL/WSL2 custom kernel/":{"tf":1.0},"https://phlip9.com/notes/android/ADB over TCP inside WSL2/":{"tf":1.4142135623730951},"https://phlip9.com/notes/android/android cli setup/":{"tf":1.4142135623730951},"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":2.0},"https://phlip9.com/notes/android/root phone with magisk/":{"tf":1.4142135623730951},"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/foreign bank account report (FBAR)/":{"tf":1.0},"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/money services business (MSB)/":{"tf":1.0},"https://phlip9.com/notes/b l o c k c h a i n/bip158 - compact block filters/":{"tf":1.0},"https://phlip9.com/notes/b l o c k c h a i n/btc utreexo - utxo accumulator/":{"tf":2.0},"https://phlip9.com/notes/b l o c k c h a i n/fastpay/":{"tf":2.23606797749979},"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":3.872983346207417},"https://phlip9.com/notes/btc-ln/BOLT 11 - invoices/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":3.1622776601683795},"https://phlip9.com/notes/btc-ln/BOLT 8 - secure noise transport/":{"tf":1.4142135623730951},"https://phlip9.com/notes/btc-ln/atomic multipath payments (AMP)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/btc-ln/breez lightning service providers/":{"tf":1.4142135623730951},"https://phlip9.com/notes/btc-ln/hosted channels/":{"tf":1.4142135623730951},"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":3.1622776601683795},"https://phlip9.com/notes/btc-ln/submarine swaps/":{"tf":1.4142135623730951},"https://phlip9.com/notes/combinatorics/k-combinations of a multiset/":{"tf":2.0},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":2.23606797749979},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":2.449489742783178},"https://phlip9.com/notes/confidential computing/gramine/":{"tf":2.449489742783178},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":4.898979485566356},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":3.3166247903554},"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":2.0},"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":2.0},"https://phlip9.com/notes/confidential computing/intel SGX/secure time/":{"tf":2.8284271247461903},"https://phlip9.com/notes/confidential computing/intel TDX/":{"tf":1.7320508075688772},"https://phlip9.com/notes/confidential computing/marblerun/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":2.23606797749979},"https://phlip9.com/notes/crypto/acme protocol/":{"tf":2.23606797749979},"https://phlip9.com/notes/crypto/biscuit authz/":{"tf":1.4142135623730951},"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":4.242640687119285},"https://phlip9.com/notes/crypto/smallstep - private online CA & ACME server/":{"tf":1.0},"https://phlip9.com/notes/crypto/tls exported keying material/":{"tf":1.0},"https://phlip9.com/notes/design/form design/":{"tf":2.23606797749979},"https://phlip9.com/notes/devops/azure CLI/":{"tf":1.4142135623730951},"https://phlip9.com/notes/devops/consul/":{"tf":1.4142135623730951},"https://phlip9.com/notes/devops/deployment strategies/":{"tf":1.0},"https://phlip9.com/notes/devops/docker compose/":{"tf":1.4142135623730951},"https://phlip9.com/notes/devops/kind (kubernetes in docker)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/devops/linkerd/":{"tf":1.0},"https://phlip9.com/notes/devops/minikube/":{"tf":1.0},"https://phlip9.com/notes/devops/nomad/":{"tf":1.4142135623730951},"https://phlip9.com/notes/devops/secrets/1password - secrets automation/":{"tf":1.0},"https://phlip9.com/notes/devops/secrets/ejson (Shopify)/":{"tf":1.0},"https://phlip9.com/notes/devops/secrets/ejson-kms (AWS)/":{"tf":2.8284271247461903},"https://phlip9.com/notes/devops/service mesh/":{"tf":1.0},"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":2.6457513110645907},"https://phlip9.com/notes/fuzzing/fuzzcheck-rs/":{"tf":2.0},"https://phlip9.com/notes/fuzzing/fuzzing/":{"tf":1.0},"https://phlip9.com/notes/keyboards/moergo glove80/":{"tf":1.0},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":4.58257569495584},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":5.291502622129181},"https://phlip9.com/notes/lang/flutter/flutter setup/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/gdb ref/":{"tf":1.0},"https://phlip9.com/notes/lang/lua/":{"tf":2.449489742783178},"https://phlip9.com/notes/lang/rust/rr with rust/":{"tf":1.7320508075688772},"https://phlip9.com/notes/lang/rust/rust verification tools/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/rust/sycamore x futures/":{"tf":2.23606797749979},"https://phlip9.com/notes/lang/rust/understanding sycamore reactivity/":{"tf":1.4142135623730951},"https://phlip9.com/notes/management/relieve often - why generals were more successful in WWII/":{"tf":1.0},"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":2.6457513110645907},"https://phlip9.com/notes/misc/kintsugi/":{"tf":2.449489742783178},"https://phlip9.com/notes/misc/optimization solvers/":{"tf":1.7320508075688772},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":2.8284271247461903},"https://phlip9.com/notes/misc/setting up a headless raspbian boot image/":{"tf":1.4142135623730951},"https://phlip9.com/notes/networking/CIDR/":{"tf":2.449489742783178},"https://phlip9.com/notes/networking/ipv6 address space/":{"tf":1.7320508075688772},"https://phlip9.com/notes/networking/network interface card (NIC)/":{"tf":1.0},"https://phlip9.com/notes/networking/network interfaces/":{"tf":2.23606797749979},"https://phlip9.com/notes/nvim/universal-ctags Notes/":{"tf":2.23606797749979},"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.0},"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.0},"https://phlip9.com/notes/performance/profiling/":{"tf":1.4142135623730951},"https://phlip9.com/notes/performance/simdjson talk/":{"tf":2.0},"https://phlip9.com/notes/postgres/postgres performance tuning/":{"tf":2.0},"https://phlip9.com/notes/postgres/types of scans/":{"tf":2.449489742783178},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":3.3166247903554},"https://phlip9.com/notes/reproducible builds/nix/links/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/nix/nix debug broken package build/":{"tf":1.4142135623730951},"https://phlip9.com/notes/reproducible builds/nix/nix debug spurrious rebuilds/":{"tf":1.4142135623730951},"https://phlip9.com/notes/reproducible builds/rebuilderd/":{"tf":1.4142135623730951},"https://phlip9.com/notes/reproducible builds/reproducible-builds.org/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":4.58257569495584},"https://phlip9.com/notes/router/lightning router/captive portal/arubanetworks captive portal/":{"tf":2.23606797749979},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":4.898979485566356},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":6.708203932499369},"https://phlip9.com/notes/router/lightning router/lightning router overview/":{"tf":2.0},"https://phlip9.com/notes/statistics probability/CDF confidence bands - DKW inequality/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/G-test - multinomial goodness-of-fit/":{"tf":2.449489742783178},"https://phlip9.com/notes/statistics probability/multinomial distribution/":{"tf":2.23606797749979},"https://phlip9.com/notes/statistics probability/p-value/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/standard error/":{"tf":1.4142135623730951},"https://phlip9.com/notes/statistics probability/testing whether a coin is fair/":{"tf":2.0},"https://phlip9.com/notes/statistics probability/winsorize/":{"tf":1.4142135623730951}},"df":100,"/":{"docs":{},"df":0,"a":{"docs":{},"df":0,"z":{"docs":{},"df":0,"u":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"/":{"docs":{},"df":0,"a":{"docs":{},"df":0,"z":{"docs":{},"df":0,"u":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/postgres/postgres performance tuning/":{"tf":1.0}},"df":1}}}}}}}}}},"p":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"g":{"docs":{},"df":0,"/":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"i":{"docs":{},"df":0,"l":{"docs":{},"df":0,"s":{"docs":{},"df":0,"/":{"docs":{},"df":0,"v":{"docs":{},"df":0,"i":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{},"df":0,"u":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}},"a":{"docs":{"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.4142135623730951}},"df":3,"b":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/lightning router overview/":{"tf":1.0}},"df":3}},"g":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/btc utreexo - utxo accumulator/":{"tf":1.0},"https://phlip9.com/notes/combinatorics/k-combinations of a multiset/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0},"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":1.0},"https://phlip9.com/notes/devops/secrets/1password - secrets automation/":{"tf":1.0},"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":1.0},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.4142135623730951},"https://phlip9.com/notes/router/lightning router/lightning router overview/":{"tf":2.23606797749979}},"df":12}},"b":{"docs":{"https://phlip9.com/notes/android/ADB over TCP inside WSL2/":{"tf":1.7320508075688772},"https://phlip9.com/notes/android/android cli setup/":{"tf":1.0},"https://phlip9.com/notes/android/linux ADB udev setup/":{"tf":1.4142135623730951},"https://phlip9.com/notes/android/root phone with magisk/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0},"https://phlip9.com/notes/keyboards/moergo glove80/":{"tf":1.7320508075688772},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":2.6457513110645907}},"df":7,"#":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"g":{"docs":{},"df":0,"d":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"v":{"docs":{"https://phlip9.com/notes/android/root phone with magisk/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}},"_":{"docs":{},"df":0,"c":{"docs":{},"df":0,"d":{"docs":{},"df":0,"c":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1}}},"h":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1}}},"m":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1}}}}}},"d":{"docs":{"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/foreign bank account report (FBAR)/":{"tf":1.7320508075688772}},"df":1},"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"2":{"docs":{},"df":0,")":{"docs":{},"df":0,"$":{"docs":{},"df":0,"/":{"docs":{},"df":0,"h":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.4142135623730951}},"df":1}}}}}}}}},"c":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{"https://phlip9.com/notes/combinatorics/k-combinations of a multiset/":{"tf":1.0}},"df":1}}},"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1}}}},"r":{"docs":{"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0},"https://phlip9.com/notes/b l o c k c h a i n/fastpay/":{"tf":3.3166247903554},"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.4142135623730951},"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/breez lightning service providers/":{"tf":4.242640687119285},"https://phlip9.com/notes/btc-ln/submarine swaps/":{"tf":2.0},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.7320508075688772},"https://phlip9.com/notes/confidential computing/gramine/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":2.23606797749979},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.7320508075688772},"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/marblerun/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":1.4142135623730951},"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":1.0},"https://phlip9.com/notes/design/form design/":{"tf":2.6457513110645907},"https://phlip9.com/notes/devops/algo wireguard VPN server/":{"tf":2.23606797749979},"https://phlip9.com/notes/devops/deployment strategies/":{"tf":2.6457513110645907},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0},"https://phlip9.com/notes/lang/koka-lang/":{"tf":1.0},"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":1.0},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.4142135623730951},"https://phlip9.com/notes/misc/setting up a headless raspbian boot image/":{"tf":1.4142135623730951},"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.0},"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.4142135623730951},"https://phlip9.com/notes/postgres/snippets/":{"tf":2.23606797749979},"https://phlip9.com/notes/postgres/types of scans/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/nix/links/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/nix/nix auto-allocate-uids -> nixbld users/":{"tf":3.1622776601683795},"https://phlip9.com/notes/reproducible builds/reproducible-builds.org/":{"tf":1.4142135623730951},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":3.3166247903554},"https://phlip9.com/notes/router/lightning router/captive portal/arubanetworks captive portal/":{"tf":2.23606797749979},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":4.242640687119285},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":4.898979485566356},"https://phlip9.com/notes/router/lightning router/lightning router overview/":{"tf":2.6457513110645907}},"df":36,"\"":{"docs":{},"df":0,".":{"docs":{},"df":0,"\"":{"docs":{},"df":0,"n":{"docs":{},"df":0,"o":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"_":{"docs":{},"df":0,"p":{"docs":{},"df":0,"k":{"docs":{"https://phlip9.com/notes/postgres/types of scans/":{"tf":1.0}},"df":1}}}}}}},"u":{"docs":{},"df":0,"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"_":{"docs":{},"df":0,"p":{"docs":{},"df":0,"k":{"docs":{"https://phlip9.com/notes/postgres/types of scans/":{"tf":1.0}},"df":1}}}}}}}},"n":{"docs":{},"df":0,"o":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"_":{"docs":{},"df":0,"p":{"docs":{},"df":0,"k":{"docs":{},"df":0,")":{"docs":{},"df":0,":":{"docs":{},"df":0,":":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"x":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/postgres/types of scans/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}},"'":{"docs":{"https://phlip9.com/notes/btc-ln/breez lightning service providers/":{"tf":1.0},"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.4142135623730951}},"df":3},"@":{"docs":{},"df":0,"h":{"docs":{},"df":0,"o":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"n":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{"https://phlip9.com/notes/android/android cli setup/":{"tf":1.0}},"df":1}}}}}}}},"_":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"_":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.0}},"df":1}}},"i":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.0}},"df":1}}}},"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"k":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.4142135623730951}},"df":1}}}}},"n":{"docs":{},"df":0,"o":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"_":{"docs":{},"df":0,"p":{"docs":{},"df":0,"k":{"docs":{},"df":0,"_":{"docs":{},"df":0,"k":{"docs":{},"df":0,"e":{"docs":{},"df":0,"y":{"docs":{"https://phlip9.com/notes/postgres/types of scans/":{"tf":1.0}},"df":1}}}}}}}}}}},"p":{"docs":{},"df":0,"k":{"docs":{"https://phlip9.com/notes/postgres/snippets/":{"tf":2.0},"https://phlip9.com/notes/postgres/types of scans/":{"tf":1.0}},"df":2}},"t":{"docs":{},"df":0,"y":{"docs":{},"df":0,"p":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,".":{"docs":{},"df":0,"h":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0}},"df":1}}}}}}}},"a":{"docs":{},"df":0,"d":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/reproducible builds/nix/nix auto-allocate-uids -> nixbld users/":{"tf":1.0}},"df":1}}},"d":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{"https://phlip9.com/notes/lang/lua/":{"tf":1.0}},"df":1}}}},"m":{"docs":{},"df":0,"o":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.0}},"df":1}}},"n":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{"https://phlip9.com/notes/misc/envsubst/":{"tf":1.4142135623730951}},"df":1,"e":{"docs":{},"df":0,"&":{"docs":{},"df":0,"g":{"docs":{},"df":0,"t":{"docs":{},"df":0,";":{"docs":{},"df":0,":":{"docs":{},"df":0,"&":{"docs":{},"df":0,"l":{"docs":{},"df":0,"t":{"docs":{},"df":0,";":{"docs":{},"df":0,"b":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}},"s":{"docs":{},"df":0,"/":{"docs":{},"df":0,"c":{"docs":{},"df":0,"u":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{"https://phlip9.com/notes/confidential computing/marblerun/":{"tf":1.0}},"df":1}}}}}}},"p":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":2.449489742783178},"https://phlip9.com/notes/networking/network interface card (NIC)/":{"tf":1.7320508075688772},"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.4142135623730951}},"df":3}}}},"’":{"docs":{"https://phlip9.com/notes/btc-ln/submarine swaps/":{"tf":1.0}},"df":1}}},"i":{"docs":{},"df":0,"z":{"docs":{"https://phlip9.com/notes/combinatorics/k-combinations of a multiset/":{"tf":1.0},"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":2.449489742783178},"https://phlip9.com/notes/statistics probability/G-test - multinomial goodness-of-fit/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/multinomial distribution/":{"tf":1.0}},"df":4}},"r":{"docs":{},"df":0,"/":{"docs":{},"df":0,"b":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"/":{"docs":{},"df":0,"g":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.4142135623730951}},"df":1}}}}}}},"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"b":{"docs":{},"df":0,"/":{"docs":{},"df":0,"s":{"docs":{},"df":0,"y":{"docs":{},"df":0,"s":{"docs":{},"df":0,"u":{"docs":{},"df":0,"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"s":{"docs":{},"df":0,".":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/android/linux ADB udev setup/":{"tf":1.0}},"df":1}}}}}}}}}}},"e":{"docs":{},"df":0,"x":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"/":{"docs":{},"df":0,"x":{"docs":{},"df":0,"p":{"docs":{},"df":0,"c":{"docs":{},"df":0,"p":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"x":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":2.23606797749979}},"df":1}}}}}}}}}}}}}}},"o":{"docs":{},"df":0,"c":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"/":{"docs":{},"df":0,"b":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"/":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"e":{"docs":{},"df":0,"e":{"docs":{},"df":0,"x":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,".":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}},"s":{"docs":{},"df":0,"h":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"/":{"docs":{},"df":0,"l":{"docs":{},"df":0,"u":{"docs":{},"df":0,"a":{"docs":{},"df":0,"/":{"docs":{},"df":0,"5":{"docs":{},"df":0,".":{"docs":{},"df":0,"2":{"docs":{},"df":0,"/":{"docs":{},"df":0,"?":{"docs":{},"df":0,".":{"docs":{},"df":0,"l":{"docs":{},"df":0,"u":{"docs":{},"df":0,"a":{"docs":{},"df":0,";":{"docs":{},"df":0,"/":{"docs":{},"df":0,"u":{"docs":{},"df":0,"s":{"docs":{},"df":0,"r":{"docs":{},"df":0,"/":{"docs":{},"df":0,"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"c":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"/":{"docs":{},"df":0,"s":{"docs":{},"df":0,"h":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"/":{"docs":{},"df":0,"l":{"docs":{},"df":0,"u":{"docs":{},"df":0,"a":{"docs":{},"df":0,"/":{"docs":{},"df":0,"5":{"docs":{},"df":0,".":{"docs":{},"df":0,"2":{"docs":{},"df":0,"/":{"docs":{},"df":0,"?":{"docs":{},"df":0,"/":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,".":{"docs":{},"df":0,"l":{"docs":{},"df":0,"u":{"docs":{},"df":0,"a":{"docs":{},"df":0,";":{"docs":{},"df":0,".":{"docs":{},"df":0,"/":{"docs":{},"df":0,"?":{"docs":{},"df":0,".":{"docs":{},"df":0,"l":{"docs":{},"df":0,"u":{"docs":{},"df":0,"a":{"docs":{"https://phlip9.com/notes/lang/lua/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"s":{"docs":{},"df":0,"b":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"/":{"docs":{},"df":0,"d":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.0}},"df":1}}}}},"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"w":{"docs":{},"df":0,"s":{"docs":{},"df":0,"y":{"docs":{},"df":0,"s":{"docs":{},"df":0,"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"g":{"docs":{"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.0}},"df":1}}}}}}}}}}}}},"h":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"/":{"docs":{},"df":0,"k":{"docs":{},"df":0,"e":{"docs":{},"df":0,"y":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"g":{"docs":{},"df":0,"s":{"docs":{},"df":0,"/":{"docs":{},"df":0,"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{},"df":0,"h":{"docs":{},"df":0,"l":{"docs":{},"df":0,"y":{"docs":{},"df":0,".":{"docs":{},"df":0,"g":{"docs":{},"df":0,"p":{"docs":{},"df":0,"g":{"docs":{"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}},"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"k":{"docs":{"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.0}},"df":1}}}},"u":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/":{"tf":1.0},"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.7320508075688772},"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":1.4142135623730951},"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":1.0},"https://phlip9.com/notes/devops/azure CLI/":{"tf":1.0},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/lua/":{"tf":1.0},"https://phlip9.com/notes/management/relieve often - why generals were more successful in WWII/":{"tf":1.4142135623730951},"https://phlip9.com/notes/misc/kintsugi/":{"tf":1.4142135623730951},"https://phlip9.com/notes/networking/ipv6 address space/":{"tf":1.0},"https://phlip9.com/notes/networking/network interface card (NIC)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.0},"https://phlip9.com/notes/postgres/types of scans/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.4142135623730951}},"df":20}},"r":{"docs":{},"df":0,"p":{"docs":{"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.0}},"df":1}}},"w":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"1":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.4142135623730951}},"df":1}}}}}},"t":{"docs":{},"df":0,"c":{"docs":{"https://phlip9.com/notes/WSL/WSL2 custom kernel/":{"tf":1.0},"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0}},"df":2},"f":{"docs":{"https://phlip9.com/notes/confidential computing/gramine/":{"tf":1.0},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0},"https://phlip9.com/notes/performance/simdjson talk/":{"tf":1.4142135623730951}},"df":3},"i":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/AI ML/Expectimax Search/":{"tf":1.4142135623730951},"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/mystikos/":{"tf":1.0},"https://phlip9.com/notes/devops/consul/":{"tf":1.0},"https://phlip9.com/notes/devops/secrets/ejson-kms (AWS)/":{"tf":1.0},"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":1.0},"https://phlip9.com/notes/lang/ATS/Install ATS2/":{"tf":1.0},"https://phlip9.com/notes/lang/operator fixity and precedence/":{"tf":1.0},"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.0}},"df":9}},"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"e":{"docs":{},"df":0,"x":{"docs":{},"df":0,"o":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/btc utreexo - utxo accumulator/":{"tf":2.0}},"df":1}}}}},"x":{"docs":{},"df":0,"o":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/bip158 - compact block filters/":{"tf":1.7320508075688772},"https://phlip9.com/notes/b l o c k c h a i n/btc utreexo - utxo accumulator/":{"tf":3.3166247903554},"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.0}},"df":4}}},"u":{"docs":{},"df":0,"_":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":2.23606797749979}},"df":1},"x":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.7320508075688772}},"df":1},"z":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":2.23606797749979}},"df":1}},"u":{"docs":{},"df":0,".":{"docs":{},"df":0,".":{"docs":{},"df":0,".":{"docs":{},"df":0,".":{"docs":{},"df":0,"x":{"docs":{},"df":0,"z":{"docs":{},"df":0,"e":{"docs":{},"df":0,".":{"docs":{},"df":0,".":{"docs":{},"df":0,".":{"docs":{"https://phlip9.com/notes/lang/gdb ref/":{"tf":1.0}},"df":1}}}}}}}}}}}},"x":{"docs":{"https://phlip9.com/notes/btc-ln/breez lightning service providers/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/submarine swaps/":{"tf":1.0}},"df":2}},"v":{"docs":{"https://phlip9.com/notes/AI ML/Markov Decision Process (MDP)/":{"tf":1.0},"https://phlip9.com/notes/android/ADB over TCP inside WSL2/":{"tf":1.0},"https://phlip9.com/notes/android/linux ADB udev setup/":{"tf":1.4142135623730951},"https://phlip9.com/notes/btc-ln/atomic multipath payments (AMP)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.7320508075688772},"https://phlip9.com/notes/devops/algo wireguard VPN server/":{"tf":1.0},"https://phlip9.com/notes/distributed systems/papers/(2020) Semi-Fast Byzantine-tolerant Shared Register without Reliable Broadcast/":{"tf":3.1622776601683795},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":4.0},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0},"https://phlip9.com/notes/lang/flutter/flutter setup/":{"tf":1.0},"https://phlip9.com/notes/lang/operator fixity and precedence/":{"tf":3.0},"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":1.0},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":3.1622776601683795},"https://phlip9.com/notes/performance/bit hacks/":{"tf":3.3166247903554},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.0}},"df":16,"&":{"docs":{},"df":0,"g":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0}},"df":1}}},".":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0}},"df":1},"x":{"docs":{"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0}},"df":1},"z":{"docs":{"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0}},"df":1}},"0":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1},"1":{"docs":{"https://phlip9.com/notes/devops/deployment strategies/":{"tf":1.4142135623730951}},"df":1,".":{"docs":{},"df":0,"1":{"docs":{},"df":0,"8":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0}},"df":1}},"2":{"docs":{},"df":0,"3":{"docs":{},"df":0,".":{"docs":{},"df":0,"1":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1}}}}}},"2":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0},"https://phlip9.com/notes/devops/deployment strategies/":{"tf":2.0}},"df":2,".":{"docs":{},"df":0,"2":{"docs":{},"df":0,"1":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0}},"df":1}}},"1":{"docs":{},"df":0,"4":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0}},"df":1}},"2":{"docs":{},"df":0,"8":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0}},"df":1}},"8":{"docs":{},"df":0,"3":{"docs":{},"df":0,"2":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0}},"df":1}}}},"3":{"docs":{"https://phlip9.com/notes/distributed systems/papers/(2021) Leaderless Consensus/":{"tf":1.0}},"df":1,"1":{"docs":{"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0}},"df":1,"8":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.4142135623730951}},"df":1}},"2":{"docs":{},"df":0,"1":{"docs":{},"df":0,"6":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.4142135623730951}},"df":1}}},"4":{"docs":{},"df":0,"8":{"docs":{},"df":0,"3":{"docs":{},"df":0,"8":{"docs":{},"df":0,"4":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.4142135623730951}},"df":1}}}}}},"4":{"docs":{"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0}},"df":1},"5":{"docs":{},"df":0,"s":{"docs":{},"df":0,"r":{"docs":{},"df":0,"2":{"docs":{},"df":0,"l":{"docs":{},"df":0,"c":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0}},"df":1},"d":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0}},"df":1},"e":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0}},"df":1},"f":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0}},"df":1},"g":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0}},"df":1},"h":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0}},"df":1},"j":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0}},"df":1},"k":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0}},"df":1},"l":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0}},"df":1},"m":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0}},"df":1},"n":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0}},"df":1}}}}}},"6":{"docs":{},"df":0,".":{"docs":{},"df":0,"1":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0}},"df":1}}},"7":{"docs":{},"df":0,"a":{"docs":{"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0}},"df":1}},"8":{"docs":{},"df":0,"a":{"docs":{"https://phlip9.com/notes/android/android cli setup/":{"tf":1.7320508075688772},"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0}},"df":2}},"^":{"docs":{},"df":0,"*":{"docs":{},"df":0,"(":{"docs":{"https://phlip9.com/notes/AI ML/Markov Decision Process (MDP)/":{"tf":2.0}},"df":1}},"\\":{"docs":{},"df":0,"p":{"docs":{},"df":0,"i":{"docs":{},"df":0,"(":{"docs":{"https://phlip9.com/notes/AI ML/Markov Decision Process (MDP)/":{"tf":1.0}},"df":1}}}}},"_":{"docs":{},"df":0,"0":{"docs":{"https://phlip9.com/notes/AI ML/Markov Decision Process (MDP)/":{"tf":1.0},"https://phlip9.com/notes/distributed systems/papers/(2020) Semi-Fast Byzantine-tolerant Shared Register without Reliable Broadcast/":{"tf":1.4142135623730951}},"df":2},"1":{"docs":{"https://phlip9.com/notes/btc-ln/atomic multipath payments (AMP)/":{"tf":1.0}},"df":1},"i":{"docs":{"https://phlip9.com/notes/btc-ln/atomic multipath payments (AMP)/":{"tf":1.0}},"df":1},"k":{"docs":{"https://phlip9.com/notes/AI ML/Markov Decision Process (MDP)/":{"tf":1.0}},"df":1,"(":{"docs":{"https://phlip9.com/notes/AI ML/Markov Decision Process (MDP)/":{"tf":1.4142135623730951}},"df":1}},"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"c":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/distributed systems/papers/(2020) Semi-Fast Byzantine-tolerant Shared Register without Reliable Broadcast/":{"tf":1.7320508075688772}},"df":1}}}}},"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"x":{"docs":{"https://phlip9.com/notes/distributed systems/papers/(2020) Semi-Fast Byzantine-tolerant Shared Register without Reliable Broadcast/":{"tf":1.7320508075688772}},"df":1}}},"n":{"docs":{"https://phlip9.com/notes/btc-ln/atomic multipath payments (AMP)/":{"tf":1.0}},"df":1},"{":{"docs":{},"df":0,"k":{"docs":{},"df":0,"+":{"docs":{},"df":0,"1":{"docs":{"https://phlip9.com/notes/AI ML/Markov Decision Process (MDP)/":{"tf":1.0}},"df":1,"}":{"docs":{},"df":0,"(":{"docs":{"https://phlip9.com/notes/AI ML/Markov Decision Process (MDP)/":{"tf":1.4142135623730951}},"df":1}}}}}}},"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"u":{"docs":{},"df":0,"u":{"docs":{},"df":0,"m":{"docs":{"https://phlip9.com/notes/misc/water distillation setup/":{"tf":1.4142135623730951}},"df":1}}}},"l":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":6.928203230275509},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.7320508075688772},"https://phlip9.com/notes/performance/simdjson talk/":{"tf":3.0}},"df":3,"+":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"_":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"s":{"docs":{},"df":0,"(":{"docs":{},"df":0,"_":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0}},"df":1}}}}}}}}}}},"~":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"_":{"docs":{},"df":0,"v":{"docs":{},"df":0,"t":{"docs":{},"df":0,"(":{"docs":{},"df":0,"x":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0}},"df":1}}}}}}}}}}}},"i":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/AI ML/Expectimax Search/":{"tf":1.0},"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.7320508075688772},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":2.0},"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.7320508075688772},"https://phlip9.com/notes/crypto/(talk) authenticated data structures for stateless validation/":{"tf":1.7320508075688772},"https://phlip9.com/notes/crypto/TLS self-signed pubkey-only certs/":{"tf":1.0},"https://phlip9.com/notes/crypto/acme protocol/":{"tf":1.7320508075688772},"https://phlip9.com/notes/reproducible builds/reproducible-builds.org/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":2.0}},"df":10,"_":{"docs":{},"df":0,"l":{"docs":{},"df":0,"f":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/networking/network interfaces/":{"tf":4.0}},"df":1}}}},"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"_":{"docs":{},"df":0,"a":{"docs":{},"df":0,"v":{"docs":{},"df":0,"r":{"docs":{},"df":0,"_":{"docs":{},"df":0,"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"g":{"docs":{},"df":0,"n":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"u":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0}},"df":1,"e":{"docs":{},"df":0,"(":{"docs":{},"df":0,"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{},"df":0,"f":{"docs":{},"df":0,".":{"docs":{},"df":0,"c":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{},"df":0,"_":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{},"df":0,"a":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"u":{"docs":{"https://phlip9.com/notes/AI ML/Expectimax Search/":{"tf":2.6457513110645907},"https://phlip9.com/notes/AI ML/Markov Decision Process (MDP)/":{"tf":5.385164807134504},"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/foreign bank account report (FBAR)/":{"tf":2.6457513110645907},"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/money services business (MSB)/":{"tf":2.0},"https://phlip9.com/notes/b l o c k c h a i n/fastpay/":{"tf":1.0},"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.7320508075688772},"https://phlip9.com/notes/btc-ln/BOLT 11 - invoices/":{"tf":1.7320508075688772},"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":2.8284271247461903},"https://phlip9.com/notes/btc-ln/BOLT 4 - onion routing protocol/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/atomic multipath payments (AMP)/":{"tf":2.0},"https://phlip9.com/notes/combinatorics/k-combinations of a multiset/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/gramine/":{"tf":2.23606797749979},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":2.8284271247461903},"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":3.7416573867739413},"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.4142135623730951},"https://phlip9.com/notes/crypto/(talk) authenticated data structures for stateless validation/":{"tf":1.0},"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":1.7320508075688772},"https://phlip9.com/notes/devops/algo wireguard VPN server/":{"tf":1.4142135623730951},"https://phlip9.com/notes/devops/azure CLI/":{"tf":1.0},"https://phlip9.com/notes/distributed systems/papers/(2020) Semi-Fast Byzantine-tolerant Shared Register without Reliable Broadcast/":{"tf":2.23606797749979},"https://phlip9.com/notes/fuzzing/fuzzcheck-rs/":{"tf":1.0},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":4.69041575982343},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":3.7416573867739413},"https://phlip9.com/notes/lang/lua/":{"tf":2.0},"https://phlip9.com/notes/lang/rust/understanding sycamore reactivity/":{"tf":2.6457513110645907},"https://phlip9.com/notes/misc/envsubst/":{"tf":1.4142135623730951},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.4142135623730951},"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.4142135623730951},"https://phlip9.com/notes/postgres/snippets/":{"tf":2.0},"https://phlip9.com/notes/postgres/types of scans/":{"tf":1.4142135623730951},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":2.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":2.8284271247461903},"https://phlip9.com/notes/statistics probability/CDF confidence bands - DKW inequality/":{"tf":1.4142135623730951},"https://phlip9.com/notes/statistics probability/G-test - multinomial goodness-of-fit/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/multinomial distribution/":{"tf":2.0},"https://phlip9.com/notes/statistics probability/p-value/":{"tf":3.0},"https://phlip9.com/notes/statistics probability/standard error/":{"tf":1.4142135623730951},"https://phlip9.com/notes/statistics probability/testing whether a coin is fair/":{"tf":2.23606797749979}},"df":38,"e":{"docs":{},"df":0,"+":{"docs":{},"df":0,"s":{"docs":{},"df":0,"v":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0}},"df":1}}}},"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"f":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/statistics probability/testing whether a coin is fair/":{"tf":1.0}},"df":1}}}}}},"s":{"docs":{},"df":0,"/":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"f":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/fuzzing/fuzzcheck-rs/":{"tf":1.0}},"df":1}}}}}}}}}}}}},"n":{"docs":{"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.4142135623730951}},"df":2},"r":{"docs":{"https://phlip9.com/notes/devops/secrets/doppler/":{"tf":1.0},"https://phlip9.com/notes/devops/secrets/envkey/":{"tf":1.0},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":3.1622776601683795},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":4.795831523312719},"https://phlip9.com/notes/lang/lua/":{"tf":1.4142135623730951},"https://phlip9.com/notes/misc/envsubst/":{"tf":1.7320508075688772}},"df":6,"(":{"docs":{},"df":0,"\\":{"docs":{},"df":0,"f":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"{":{"docs":{},"df":0,"\\":{"docs":{},"df":0,"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"g":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"}":{"docs":{},"df":0,"{":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/statistics probability/standard error/":{"tf":1.0}},"df":1}}}}}}}}}}}}}},"m":{"docs":{},"df":0,"u":{"docs":{},"df":0,"_":{"docs":{},"df":0,"x":{"docs":{"https://phlip9.com/notes/statistics probability/standard error/":{"tf":1.0}},"df":1}}}},"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"g":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{"https://phlip9.com/notes/statistics probability/standard error/":{"tf":1.4142135623730951}},"df":1}}}}}},"x":{"docs":{},"df":0,"_":{"docs":{},"df":0,"1":{"docs":{"https://phlip9.com/notes/statistics probability/standard error/":{"tf":1.0}},"df":1},"n":{"docs":{"https://phlip9.com/notes/statistics probability/standard error/":{"tf":1.0}},"df":1}}}},"/":{"docs":{},"df":0,"e":{"docs":{},"df":0,"m":{"docs":{},"df":0,"p":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/reproducible builds/nix/nix auto-allocate-uids -> nixbld users/":{"tf":1.0}},"df":1}}}}}},"i":{"docs":{"https://phlip9.com/notes/AI ML/Markov Decision Process (MDP)/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":1.4142135623730951},"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":1.4142135623730951}},"df":3,"a":{"docs":{},"df":0,"b":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":2.0},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.7320508075688772},"https://phlip9.com/notes/lang/gdb ref/":{"tf":1.0},"https://phlip9.com/notes/lang/lua/":{"tf":1.7320508075688772},"https://phlip9.com/notes/misc/envsubst/":{"tf":2.449489742783178},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0},"https://phlip9.com/notes/networking/CIDR/":{"tf":1.0},"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/nix/nix debug spurrious rebuilds/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/lightning router overview/":{"tf":1.4142135623730951},"https://phlip9.com/notes/statistics probability/multinomial distribution/":{"tf":1.0}},"df":12,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"o":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/router/lightning router/lightning router overview/":{"tf":1.0}},"df":1}}}}}},"n":{"docs":{},"df":0,"c":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":2.6457513110645907},"https://phlip9.com/notes/statistics probability/standard error/":{"tf":2.23606797749979}},"df":2,"e":{"docs":{},"df":0,"$":{"docs":{},"df":0,"v":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"(":{"docs":{},"df":0,"x":{"docs":{},"df":0,"_":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/statistics probability/multinomial distribution/":{"tf":1.0}},"df":1}}}}}}}}}},"t":{"docs":{"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/gramine/":{"tf":1.0},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.7320508075688772},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0}},"df":4}}},"e":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":2.0}},"df":2}}},"o":{"docs":{},"df":0,"u":{"docs":{"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/secure time/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":1.0},"https://phlip9.com/notes/devops/service mesh/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/arubanetworks captive portal/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.0}},"df":7}}}},"u":{"docs":{},"df":0,"l":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/devops/secrets/1password - secrets automation/":{"tf":1.4142135623730951},"https://phlip9.com/notes/devops/secrets/sy - share secrets safely/":{"tf":1.0}},"df":2}}}},"c":{"docs":{},"df":0,"p":{"docs":{},"df":0,"u":{"docs":{"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":2.0}},"df":1}}},"e":{"docs":{},"df":0,"c":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/lua/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.0}},"df":3,"&":{"docs":{},"df":0,"l":{"docs":{},"df":0,"t":{"docs":{},"df":0,";":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{},"df":0,"d":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"s":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"c":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"p":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"&":{"docs":{},"df":0,"g":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 7 - p2p node and channel discovery/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}},"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"h":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"h":{"docs":{},"df":0,"o":{"docs":{},"df":0,"p":{"docs":{},"df":0,"&":{"docs":{},"df":0,"g":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 11 - invoices/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}},"t":{"docs":{},"df":0,"&":{"docs":{},"df":0,"g":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/combinatorics/k-combinations of a multiset/":{"tf":2.0}},"df":1}}}},"u":{"docs":{},"df":0,"8":{"docs":{},"df":0,"&":{"docs":{},"df":0,"g":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":2.449489742783178},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":2.0},"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":1.4142135623730951}},"df":3}}}}}}}}},"3":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.7320508075688772}},"df":1,"(":{"docs":{},"df":0,"t":{"docs":{},"df":0,"h":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,".":{"docs":{},"df":0,"x":{"docs":{"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0}},"df":1}}}}}},"x":{"docs":{"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0}},"df":1}}}},":":{"docs":{},"df":0,":":{"docs":{},"df":0,"w":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"h":{"docs":{},"df":0,"_":{"docs":{},"df":0,"c":{"docs":{},"df":0,"a":{"docs":{},"df":0,"p":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"y":{"docs":{},"df":0,"(":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":1.0}},"df":1}}},"s":{"docs":{"https://phlip9.com/notes/performance/simdjson talk/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}},"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"q":{"docs":{},"df":0,"u":{"docs":{},"df":0,"e":{"docs":{},"df":0,"&":{"docs":{},"df":0,"l":{"docs":{},"df":0,"t":{"docs":{},"df":0,";":{"docs":{},"df":0,"v":{"docs":{},"df":0,"&":{"docs":{},"df":0,"g":{"docs":{},"df":0,"t":{"docs":{},"df":0,";":{"docs":{},"df":0,"&":{"docs":{},"df":0,"g":{"docs":{},"df":0,"t":{"docs":{},"df":0,";":{"docs":{},"df":0,"&":{"docs":{},"df":0,"g":{"docs":{},"df":0,"t":{"docs":{},"df":0,";":{"docs":{},"df":0,"&":{"docs":{},"df":0,"g":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}},"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/AI ML/Expectimax Search/":{"tf":1.0},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0},"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.4142135623730951},"https://phlip9.com/notes/performance/simdjson talk/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/CDF confidence bands - DKW inequality/":{"tf":1.0}},"df":5,"i":{"docs":{},"df":0,"o":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.4142135623730951}},"df":1,".":{"docs":{},"df":0,"c":{"docs":{},"df":0,"i":{"docs":{},"df":0,"r":{"docs":{},"df":0,"c":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.4142135623730951}},"df":1}}}}}}}}}}}},"n":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0}},"df":1}},"o":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0},"https://phlip9.com/notes/crypto/acme protocol/":{"tf":1.0},"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.4142135623730951}},"df":6,"'":{"docs":{"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.0}},"df":1},"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"v":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"p":{"docs":{},"df":0,"u":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}},"m":{"docs":{},"df":0,"o":{"docs":{"https://phlip9.com/notes/btc-ln/breez lightning service providers/":{"tf":1.0}},"df":1}},"v":{"docs":{"https://phlip9.com/notes/confidential computing/gramine/":{"tf":1.4142135623730951}},"df":1,"/":{"docs":{},"df":0,"g":{"docs":{},"df":0,"s":{"docs":{},"df":0,"c":{"docs":{"https://phlip9.com/notes/confidential computing/gramine/":{"tf":1.0}},"df":1,"/":{"docs":{},"df":0,"b":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"/":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"v":{"docs":{"https://phlip9.com/notes/confidential computing/gramine/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}},"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"r":{"docs":{},"df":0,"u":{"docs":{},"df":0,"z":{"docs":{"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":1.0}},"df":1}}}}},"b":{"docs":{},"df":0,"o":{"docs":{},"df":0,"s":{"docs":{"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.4142135623730951},"https://phlip9.com/notes/postgres/types of scans/":{"tf":1.0}},"df":2}}},"i":{"docs":{"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/money services business (MSB)/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/lightning libs/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/lightning rod/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":1.0},"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":1.0},"https://phlip9.com/notes/fuzzing/fuzzcheck-rs/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/koka-lang/":{"tf":1.0},"https://phlip9.com/notes/misc/kintsugi/":{"tf":1.0},"https://phlip9.com/notes/misc/optimization solvers/":{"tf":1.0},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.4142135623730951},"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.0},"https://phlip9.com/notes/performance/simdjson talk/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.4142135623730951},"https://phlip9.com/notes/statistics probability/testing whether a coin is fair/":{"tf":1.4142135623730951}},"df":20,"f":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/fastpay/":{"tf":1.0},"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":2.8284271247461903},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":2.0},"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.7320508075688772},"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":2.0},"https://phlip9.com/notes/crypto/biscuit authz/":{"tf":1.0},"https://phlip9.com/notes/devops/deployment strategies/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/rust/rust verification tools/":{"tf":1.7320508075688772},"https://phlip9.com/notes/reproducible builds/rebuilderd/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/reproducible-builds.org/":{"tf":1.0}},"df":10,"i":{"docs":{"https://phlip9.com/notes/android/android cli setup/":{"tf":1.0},"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.4142135623730951},"https://phlip9.com/notes/b l o c k c h a i n/btc utreexo - utxo accumulator/":{"tf":1.7320508075688772},"https://phlip9.com/notes/b l o c k c h a i n/fastpay/":{"tf":2.23606797749979},"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":3.872983346207417},"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":2.0},"https://phlip9.com/notes/btc-ln/BOLT 7 - p2p node and channel discovery/":{"tf":2.0},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/gramine/":{"tf":1.7320508075688772},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":3.7416573867739413},"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":3.4641016151377544},"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/marblerun/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":2.23606797749979},"https://phlip9.com/notes/crypto/TLS self-signed pubkey-only certs/":{"tf":1.0},"https://phlip9.com/notes/crypto/acme protocol/":{"tf":1.0},"https://phlip9.com/notes/crypto/biscuit authz/":{"tf":1.0},"https://phlip9.com/notes/devops/algo wireguard VPN server/":{"tf":1.4142135623730951},"https://phlip9.com/notes/devops/deployment strategies/":{"tf":1.0},"https://phlip9.com/notes/lang/flutter/flutter setup/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/rust verification tools/":{"tf":1.4142135623730951},"https://phlip9.com/notes/reproducible builds/rebuilderd/":{"tf":1.4142135623730951}},"df":23,"c":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"/":{"docs":{},"df":0,"b":{"docs":{},"df":0,"l":{"docs":{},"df":0,"u":{"docs":{"https://phlip9.com/notes/devops/deployment strategies/":{"tf":1.0}},"df":1}}}}}}}}}}},"y":{"docs":{},"df":0,"(":{"docs":{},"df":0,"&":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{},"df":0,"p":{"docs":{},"df":0,";":{"docs":{},"df":0,"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{},"df":0,"f":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0}},"df":1}}}}}}}}}},"_":{"docs":{},"df":0,"b":{"docs":{},"df":0,"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"b":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.4142135623730951}},"df":1}}}}}}}},"s":{"docs":{},"df":0,"a":{"docs":{"https://phlip9.com/notes/btc-ln/submarine swaps/":{"tf":1.0}},"df":1},"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/WSL/WSL2 custom kernel/":{"tf":1.0},"https://phlip9.com/notes/android/android cli setup/":{"tf":2.449489742783178},"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":2.449489742783178},"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":2.6457513110645907},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":2.6457513110645907},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":2.0},"https://phlip9.com/notes/confidential computing/gramine/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":3.3166247903554},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":3.4641016151377544},"https://phlip9.com/notes/confidential computing/intel TDX/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":1.0},"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":1.0},"https://phlip9.com/notes/devops/azure CLI/":{"tf":1.4142135623730951},"https://phlip9.com/notes/devops/deployment strategies/":{"tf":2.23606797749979},"https://phlip9.com/notes/devops/nomad/":{"tf":1.4142135623730951},"https://phlip9.com/notes/devops/secrets/ejson-kms (AWS)/":{"tf":1.0},"https://phlip9.com/notes/devops/secrets/envkey/":{"tf":1.0},"https://phlip9.com/notes/devops/service mesh/":{"tf":1.0},"https://phlip9.com/notes/distributed systems/papers/(2020) Semi-Fast Byzantine-tolerant Shared Register without Reliable Broadcast/":{"tf":2.23606797749979},"https://phlip9.com/notes/distributed systems/papers/(2021) Leaderless Consensus/":{"tf":1.0},"https://phlip9.com/notes/ios/ios setup/":{"tf":1.4142135623730951},"https://phlip9.com/notes/keyboards/moergo glove80/":{"tf":1.0},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0},"https://phlip9.com/notes/lang/flutter/flutter setup/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/lua/":{"tf":1.4142135623730951},"https://phlip9.com/notes/misc/pop_OS! tweaks/":{"tf":1.4142135623730951},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.4142135623730951},"https://phlip9.com/notes/networking/ipv6 address space/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/nix/nix auto-allocate-uids -> nixbld users/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":2.0}},"df":34,"\"":{"docs":{},"df":0,":":{"docs":{},"df":0,"2":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.0}},"df":1}}},".":{"docs":{},"df":0,"v":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"s":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0}},"df":1}}}}},"y":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"y":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0}},"df":1}}},"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"p":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.4142135623730951}},"df":1}}}}}}}}}}},"t":{"docs":{},"df":0,"h":{"docs":{"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.0}},"df":1,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.4142135623730951}},"df":1}}}}}}}},"i":{"docs":{"https://phlip9.com/notes/lang/gdb ref/":{"tf":1.7320508075688772}},"df":1,"a":{"docs":{"https://phlip9.com/notes/android/android cli setup/":{"tf":1.7320508075688772},"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0},"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.7320508075688772},"https://phlip9.com/notes/btc-ln/BOLT 11 - invoices/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/BOLT 4 - onion routing protocol/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/BOLT 7 - p2p node and channel discovery/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/breez lightning service providers/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/lightning rod/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":2.23606797749979},"https://phlip9.com/notes/confidential computing/gramine/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":2.449489742783178},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.7320508075688772},"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel SGX/secure time/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/marblerun/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/mystikos/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":1.4142135623730951},"https://phlip9.com/notes/devops/azure CLI/":{"tf":1.0},"https://phlip9.com/notes/devops/nomad/":{"tf":1.4142135623730951},"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":1.0},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":2.0},"https://phlip9.com/notes/misc/optimization solvers/":{"tf":1.0},"https://phlip9.com/notes/misc/setting up a headless raspbian boot image/":{"tf":1.0},"https://phlip9.com/notes/networking/network interface card (NIC)/":{"tf":1.7320508075688772},"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.0},"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/nix/links/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/reproducible-builds.org/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.0}},"df":31,"b":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/lang/operator fixity and precedence/":{"tf":1.0}},"df":1}}},"c":{"docs":{},"df":0,"e":{"docs":{"https://phlip9.com/notes/btc-ln/submarine swaps/":{"tf":1.0}},"df":1}},"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"o":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/marblerun/":{"tf":1.0},"https://phlip9.com/notes/crypto/(talk) authenticated data structures for stateless validation/":{"tf":1.0},"https://phlip9.com/notes/design/form design/":{"tf":1.0},"https://phlip9.com/notes/distributed systems/papers/(2020) Semi-Fast Byzantine-tolerant Shared Register without Reliable Broadcast/":{"tf":1.0},"https://phlip9.com/notes/distributed systems/papers/(2021) Leaderless Consensus/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/rust x SGX/":{"tf":1.0},"https://phlip9.com/notes/misc/kintsugi/":{"tf":1.7320508075688772},"https://phlip9.com/notes/router/lightning router/lightning router overview/":{"tf":1.0}},"df":9}}},"e":{"docs":{},"df":0,"w":{"docs":{"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.0},"https://phlip9.com/notes/devops/azure CLI/":{"tf":1.0},"https://phlip9.com/notes/devops/docker compose/":{"tf":1.0},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":4.69041575982343},"https://phlip9.com/notes/lang/gdb ref/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/understanding sycamore reactivity/":{"tf":2.0},"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":1.0},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0},"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.4142135623730951},"https://phlip9.com/notes/performance/profiling/":{"tf":2.449489742783178},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.0}},"df":12,"@":{"docs":{},"df":0,"(":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0}},"df":1},"x":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.4142135623730951}},"df":1},"z":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0}},"df":1}}},"a":{"docs":{},"df":0,"b":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/devops/secrets/mozilla SOPS/":{"tf":1.0}},"df":1}}},"t":{"docs":{},"df":0,"0":{"docs":{},"df":0,"y":{"docs":{},"df":0,"p":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.4142135623730951}},"df":1}}},"@":{"docs":{},"df":0,"y":{"docs":{},"df":0,"p":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.4142135623730951}},"df":1}}},"y":{"docs":{},"df":0,"p":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":3.605551275463989}},"df":1,"e":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"f":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0}},"df":1}}}}}}}}},"m":{"docs":{"https://phlip9.com/notes/keyboards/moergo glove80/":{"tf":1.0},"https://phlip9.com/notes/misc/prepping RPI for embedded dev/":{"tf":1.0}},"df":2},"n":{"docs":{},"df":0,"c":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/distributed systems/papers/(2021) Leaderless Consensus/":{"tf":1.0}},"df":1}}}},"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"g":{"docs":{"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.7320508075688772}},"df":1}}}},"o":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/foreign bank account report (FBAR)/":{"tf":2.23606797749979},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/CDF confidence bands - DKW inequality/":{"tf":1.0}},"df":3}},"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"c":{"docs":{"https://phlip9.com/notes/reproducible builds/reproducible-builds.org/":{"tf":1.0}},"df":1}}}}},"p":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/lang/rust/rust verification tools/":{"tf":1.0}},"df":1}}},"r":{"docs":{},"df":0,"t":{"docs":{},"df":0,"u":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/android/ADB over TCP inside WSL2/":{"tf":1.4142135623730951},"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.4142135623730951},"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/foreign bank account report (FBAR)/":{"tf":2.23606797749979},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":2.449489742783178},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel TDX/":{"tf":1.7320508075688772},"https://phlip9.com/notes/confidential computing/marblerun/":{"tf":1.0},"https://phlip9.com/notes/devops/azure CLI/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/rr with rust/":{"tf":1.0},"https://phlip9.com/notes/networking/network interfaces/":{"tf":3.605551275463989},"https://phlip9.com/notes/performance/simdjson talk/":{"tf":1.0}},"df":12,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"v":{"docs":{"https://phlip9.com/notes/devops/algo wireguard VPN server/":{"tf":1.7320508075688772}},"df":1}}},"h":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.0}},"df":1}}}}}}}},"u":{"docs":{"https://phlip9.com/notes/reproducible builds/nix/links/":{"tf":1.0}},"df":1}},"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"b":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/android/ADB over TCP inside WSL2/":{"tf":1.0},"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0},"https://phlip9.com/notes/ios/ios setup/":{"tf":1.0},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.7320508075688772},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0},"https://phlip9.com/notes/lang/lua/":{"tf":1.0}},"df":6}},"t":{"docs":{"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.0}},"df":1}},"u":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/rr with rust/":{"tf":1.0},"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.0}},"df":3}}}}},"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/networking/network interfaces/":{"tf":3.7416573867739413}},"df":1,"0":{"docs":{"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.0}},"df":1},"2":{"docs":{"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.0}},"df":1}}},"s":{"docs":{},"df":0,"m":{"docs":{"https://phlip9.com/notes/networking/CIDR/":{"tf":1.0}},"df":1}}},"m":{"docs":{"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":2.449489742783178},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":2.23606797749979},"https://phlip9.com/notes/confidential computing/gramine/":{"tf":2.23606797749979},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel TDX/":{"tf":2.0},"https://phlip9.com/notes/devops/azure CLI/":{"tf":2.449489742783178},"https://phlip9.com/notes/devops/nomad/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/rr with rust/":{"tf":1.4142135623730951},"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.4142135623730951},"https://phlip9.com/notes/reproducible builds/nix/nix auto-allocate-uids -> nixbld users/":{"tf":1.0}},"df":11,"e":{"docs":{},"df":0,"x":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.0}},"df":1}}}},"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"f":{"docs":{},"df":0,"o":{"docs":{},"df":0,":":{"docs":{},"df":0,":":{"docs":{},"df":0,":":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{},"df":0,"_":{"docs":{},"df":0,"f":{"docs":{},"df":0,"a":{"docs":{},"df":0,"u":{"docs":{},"df":0,"l":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.4142135623730951}},"df":1}}}}}}}}},"v":{"docs":{},"df":0,"m":{"docs":{},"df":0,"_":{"docs":{},"df":0,"f":{"docs":{},"df":0,"a":{"docs":{},"df":0,"u":{"docs":{},"df":0,"l":{"docs":{},"df":0,"t":{"docs":{},"df":0,"_":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,":":{"docs":{},"df":0,"p":{"docs":{},"df":0,"g":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}},"m":{"docs":{"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":3.0},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel TDX/":{"tf":1.0}},"df":3,")":{"docs":{},"df":0,"/":{"docs":{},"df":0,"h":{"docs":{},"df":0,"y":{"docs":{},"df":0,"p":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"v":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/confidential computing/intel TDX/":{"tf":1.0}},"df":1}}}}}}}}}}}},"/":{"docs":{},"df":0,"h":{"docs":{},"df":0,"y":{"docs":{},"df":0,"p":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"v":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/confidential computing/intel TDX/":{"tf":1.0}},"df":1}}}}}}}}}}}},"w":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{"https://phlip9.com/notes/lang/rust/rr with rust/":{"tf":1.0}},"df":1}}}}},"o":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0}},"df":1},"d":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":3.0},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":2.8284271247461903}},"df":2},"p":{"docs":{"https://phlip9.com/notes/btc-ln/lightning rod/":{"tf":1.4142135623730951},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.0}},"df":2}},"l":{"docs":{},"df":0,"u":{"docs":{},"df":0,"m":{"docs":{"https://phlip9.com/notes/android/root phone with magisk/":{"tf":1.0},"https://phlip9.com/notes/devops/AKS - azure kubernetes service/":{"tf":1.0},"https://phlip9.com/notes/devops/linkerd/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/lightning router overview/":{"tf":1.7320508075688772}},"df":5,"e":{"docs":{},"df":0,"/":{"docs":{},"df":0,"b":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{},"df":0,"w":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{},"df":0,"t":{"docs":{},"df":0,"h":{"docs":{"https://phlip9.com/notes/router/lightning router/lightning router overview/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}},"p":{"docs":{},"df":0,"c":{"docs":{"https://phlip9.com/notes/devops/AKS - azure kubernetes service/":{"tf":1.0},"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.4142135623730951},"https://phlip9.com/notes/performance/simdjson talk/":{"tf":1.0}},"df":3},"e":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"g":{"docs":{},"df":0,"o":{"docs":{},"df":0,"/":{"docs":{},"df":0,"s":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"p":{"docs":{},"df":0,"c":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/secure time/":{"tf":1.0}},"df":1}}}}}}}}}}}},"n":{"docs":{"https://phlip9.com/notes/devops/algo wireguard VPN server/":{"tf":1.7320508075688772},"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.7320508075688772}},"df":2,"'":{"docs":{"https://phlip9.com/notes/devops/algo wireguard VPN server/":{"tf":1.0}},"df":1},"1":{"docs":{"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.0}},"df":1}}},"s":{"docs":{"https://phlip9.com/notes/AI ML/Expectimax Search/":{"tf":1.0},"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.4142135623730951},"https://phlip9.com/notes/b l o c k c h a i n/btc utreexo - utxo accumulator/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/breez lightning service providers/":{"tf":1.7320508075688772},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":1.0},"https://phlip9.com/notes/fuzzing/fuzzing/":{"tf":1.0},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0},"https://phlip9.com/notes/management/relieve often - why generals were more successful in WWII/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.4142135623730951},"https://phlip9.com/notes/router/lightning router/lightning router overview/":{"tf":1.0}},"df":11},"t":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":2.0}},"df":1,"0":{"docs":{},"df":0,"y":{"docs":{},"df":0,"p":{"docs":{},"df":0,"e":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.4142135623730951}},"df":1}}}},"b":{"docs":{},"df":0,"o":{"docs":{},"df":0,"x":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.4142135623730951}},"df":1}}},"f":{"docs":{},"df":0,"l":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.4142135623730951}},"df":1}}},"y":{"docs":{},"df":0,"p":{"docs":{},"df":0,"e":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.4142135623730951}},"df":1,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"f":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0}},"df":1}}}}}}},"u":{"docs":{},"df":0,"l":{"docs":{},"df":0,"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/reproducible-builds.org/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.4142135623730951}},"df":6}}}}},"v":{"docs":{},"df":0,"_":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":2.0}},"df":1},"x":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.7320508075688772}},"df":1},"z":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":2.0}},"df":1}},"v":{"docs":{},"df":0,"v":{"docs":{},"df":0,"v":{"docs":{},"df":0,"v":{"docs":{},"df":0,"v":{"docs":{},"df":0,"v":{"docs":{"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.4142135623730951}},"df":1}}}}}}},"|":{"docs":{},"df":0,"|":{"docs":{},"df":0,"^":{"docs":{},"df":0,"2":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1}}}}},"w":{"docs":{"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/":{"tf":1.0},"https://phlip9.com/notes/b l o c k c h a i n/bip158 - compact block filters/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.7320508075688772},"https://phlip9.com/notes/btc-ln/BOLT 8 - secure noise transport/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/breez lightning service providers/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/gramine/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/marblerun/":{"tf":2.449489742783178},"https://phlip9.com/notes/devops/secrets/mozilla SOPS/":{"tf":1.0},"https://phlip9.com/notes/distributed systems/papers/(2020) Semi-Fast Byzantine-tolerant Shared Register without Reliable Broadcast/":{"tf":3.3166247903554},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":2.23606797749979},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":2.23606797749979},"https://phlip9.com/notes/misc/setting up a headless raspbian boot image/":{"tf":1.7320508075688772},"https://phlip9.com/notes/networking/ipv6 address space/":{"tf":1.4142135623730951},"https://phlip9.com/notes/performance/bit hacks/":{"tf":3.3166247903554},"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.0},"https://phlip9.com/notes/performance/simdjson talk/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/nix/links/":{"tf":1.7320508075688772},"https://phlip9.com/notes/router/lightning router/lightning router overview/":{"tf":1.0}},"df":18,".":{"docs":{},"df":0,"p":{"docs":{"https://phlip9.com/notes/AI ML/Markov Decision Process (MDP)/":{"tf":1.0}},"df":1}},"/":{"docs":{},"df":0,"\\":{"docs":{},"df":0,"\"":{"docs":{},"df":0,"x":{"docs":{},"df":0,"x":{"docs":{},"df":0,"x":{"docs":{},"df":0,"x":{"docs":{},"df":0,"x":{"docs":{},"df":0,"x":{"docs":{"https://phlip9.com/notes/devops/azure CLI/":{"tf":1.0}},"df":1}}}}}}}},"e":{"docs":{"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0},"https://phlip9.com/notes/devops/nomad/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/sycamore x futures/":{"tf":1.0}},"df":3},"o":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/btc utreexo - utxo accumulator/":{"tf":1.0},"https://phlip9.com/notes/b l o c k c h a i n/fastpay/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":1.0},"https://phlip9.com/notes/distributed systems/papers/(2020) Semi-Fast Byzantine-tolerant Shared Register without Reliable Broadcast/":{"tf":1.0},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.7320508075688772},"https://phlip9.com/notes/lang/lua/":{"tf":1.0}},"df":6}},"3":{"docs":{},"df":0,"c":{"docs":{"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.7320508075688772},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":2.449489742783178}},"df":2}},"a":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0}},"df":1}},"i":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/android/OTA updates for rooted android phone/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":2.23606797749979},"https://phlip9.com/notes/btc-ln/zero-conf channels/":{"tf":1.7320508075688772},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/secure time/":{"tf":1.0},"https://phlip9.com/notes/distributed systems/papers/(2020) Semi-Fast Byzantine-tolerant Shared Register without Reliable Broadcast/":{"tf":1.7320508075688772},"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":2.449489742783178},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.4142135623730951},"https://phlip9.com/notes/misc/setting up a headless raspbian boot image/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.4142135623730951}},"df":11}},"l":{"docs":{"https://phlip9.com/notes/postgres/postgres performance tuning/":{"tf":1.7320508075688772}},"df":1,"k":{"docs":{"https://phlip9.com/notes/design/form design/":{"tf":1.0}},"df":1},"l":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.0}},"df":2,"e":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/btc-ln/breez lightning service providers/":{"tf":2.8284271247461903},"https://phlip9.com/notes/btc-ln/hosted channels/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/submarine swaps/":{"tf":1.7320508075688772}},"df":3,"/":{"docs":{},"df":0,"e":{"docs":{},"df":0,"x":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"g":{"docs":{"https://phlip9.com/notes/btc-ln/breez lightning service providers/":{"tf":1.0}},"df":1}}}}}}}}},"y":{"docs":{"https://phlip9.com/notes/android/ADB over TCP inside WSL2/":{"tf":1.0},"https://phlip9.com/notes/android/root phone with magisk/":{"tf":2.0}},"df":2}},"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{},"df":0,"p":{"docs":{"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.4142135623730951}},"df":1}}}}}}}}}}},"n":{"docs":{"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.0}},"df":1,"@":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{},"df":0,"h":{"docs":{},"df":0,"0":{"docs":{"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.0}},"df":1}}}}},"t":{"docs":{"https://phlip9.com/notes/AI ML/Markov Decision Process (MDP)/":{"tf":1.0},"https://phlip9.com/notes/WSL/WSL2 custom kernel/":{"tf":1.0},"https://phlip9.com/notes/android/ADB over TCP inside WSL2/":{"tf":1.0},"https://phlip9.com/notes/android/OTA updates for rooted android phone/":{"tf":1.0},"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0},"https://phlip9.com/notes/android/root phone with magisk/":{"tf":1.0},"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.4142135623730951},"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.0},"https://phlip9.com/notes/combinatorics/k-combinations of a multiset/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/gramine/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/secure time/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/marblerun/":{"tf":1.4142135623730951},"https://phlip9.com/notes/devops/nomad/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0},"https://phlip9.com/notes/lang/flutter/flutter setup/":{"tf":1.0},"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":1.4142135623730951},"https://phlip9.com/notes/misc/kintsugi/":{"tf":2.0},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":2.0},"https://phlip9.com/notes/networking/network interface card (NIC)/":{"tf":1.0},"https://phlip9.com/notes/performance/bit hacks/":{"tf":2.449489742783178},"https://phlip9.com/notes/statistics probability/multinomial distribution/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/testing whether a coin is fair/":{"tf":1.0}},"df":27}},"r":{"docs":{},"df":0,"m":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0}},"df":1},"n":{"docs":{"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.4142135623730951},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.0}},"df":3},"p":{"docs":{"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":2.0}},"df":1,"2":{"docs":{},"df":0,"s":{"docs":{},"df":0,"c":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1,"(":{"docs":{},"df":0,"s":{"docs":{},"df":0,"c":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1}}}}}}}}}}}}}},"s":{"docs":{},"df":0,"c":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1,"(":{"docs":{},"df":0,"s":{"docs":{},"df":0,"c":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1}}}}}}}}}}}}}},"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.4142135623730951}},"df":2}}}},"e":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.0}},"df":1}}}},"s":{"docs":{},"df":0,"h":{"docs":{"https://phlip9.com/notes/btc-ln/submarine swaps/":{"tf":1.0},"https://phlip9.com/notes/misc/kintsugi/":{"tf":1.7320508075688772}},"df":2},"i":{"docs":{"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":2.0}},"df":1},"m":{"docs":{"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":2.0},"https://phlip9.com/notes/crypto/biscuit authz/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.0}},"df":3,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"m":{"docs":{"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.0}},"df":1}}}},"n":{"docs":{},"df":0,"'":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/fuzzing/fuzzcheck-rs/":{"tf":1.0},"https://phlip9.com/notes/ios/ios setup/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/nix/nix debug spurrious rebuilds/":{"tf":1.0}},"df":3}}},"t":{"docs":{"https://phlip9.com/notes/combinatorics/k-combinations of a multiset/":{"tf":1.0},"https://phlip9.com/notes/misc/kintsugi/":{"tf":1.0}},"df":2}},"t":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.4142135623730951},"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.0},"https://phlip9.com/notes/misc/kintsugi/":{"tf":1.0}},"df":3,"d":{"docs":{},"df":0,"o":{"docs":{},"df":0,"g":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1}}}}},"e":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/foreign bank account report (FBAR)/":{"tf":2.0},"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":2.0},"https://phlip9.com/notes/misc/kintsugi/":{"tf":1.0},"https://phlip9.com/notes/misc/water distillation setup/":{"tf":1.4142135623730951}},"df":4}}},"v":{"docs":{},"df":0,"e":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.4142135623730951}},"df":1},"i":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1}},"y":{"docs":{"https://phlip9.com/notes/AI ML/Expectimax Search/":{"tf":1.0},"https://phlip9.com/notes/AI ML/Markov Decision Process (MDP)/":{"tf":1.0},"https://phlip9.com/notes/b l o c k c h a i n/fastpay/":{"tf":1.0},"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/atomic multipath payments (AMP)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/btc-ln/breez lightning service providers/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/lightning rod/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/submarine swaps/":{"tf":1.0},"https://phlip9.com/notes/combinatorics/k-combinations of a multiset/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.7320508075688772},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.0},"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":1.4142135623730951},"https://phlip9.com/notes/fuzzing/fuzzcheck-rs/":{"tf":1.0},"https://phlip9.com/notes/fuzzing/fuzzing/":{"tf":1.0},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.7320508075688772},"https://phlip9.com/notes/lang/koka-lang/":{"tf":1.0},"https://phlip9.com/notes/lang/operator fixity and precedence/":{"tf":1.0},"https://phlip9.com/notes/misc/water distillation setup/":{"tf":1.0},"https://phlip9.com/notes/networking/CIDR/":{"tf":1.0},"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.7320508075688772},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/nix/links/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/reproducible-builds.org/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/winsorize/":{"tf":1.0}},"df":27,"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/reproducible builds/nix/links/":{"tf":1.0}},"df":1}}}},"p":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.0}},"df":1}}}}}},"c":{"docs":{"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.0}},"df":1},"d":{"docs":{"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.4142135623730951}},"df":2},"e":{"docs":{},"df":0,"'":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":1.4142135623730951}},"df":1},"l":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/android/ADB over TCP inside WSL2/":{"tf":1.4142135623730951},"https://phlip9.com/notes/android/root phone with magisk/":{"tf":1.7320508075688772},"https://phlip9.com/notes/btc-ln/lightning rod/":{"tf":1.0},"https://phlip9.com/notes/combinatorics/k-combinations of a multiset/":{"tf":1.7320508075688772},"https://phlip9.com/notes/confidential computing/intel SGX/secure time/":{"tf":1.0},"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":1.0},"https://phlip9.com/notes/devops/azure CLI/":{"tf":1.0},"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":1.4142135623730951},"https://phlip9.com/notes/misc/prepping RPI for embedded dev/":{"tf":1.0},"https://phlip9.com/notes/networking/CIDR/":{"tf":1.4142135623730951},"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.0},"https://phlip9.com/notes/performance/simdjson talk/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/standard error/":{"tf":1.0}},"df":13}},"r":{"docs":{"https://phlip9.com/notes/AI ML/Expectimax Search/":{"tf":1.0},"https://phlip9.com/notes/AI ML/Markov Decision Process (MDP)/":{"tf":1.0},"https://phlip9.com/notes/WSL/WSL2 custom kernel/":{"tf":1.0},"https://phlip9.com/notes/android/ADB over TCP inside WSL2/":{"tf":1.0},"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0},"https://phlip9.com/notes/b l o c k c h a i n/fastpay/":{"tf":1.0},"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.4142135623730951},"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.0},"https://phlip9.com/notes/combinatorics/k-combinations of a multiset/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/gramine/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/marblerun/":{"tf":1.0},"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":1.0},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.0},"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.0},"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.0},"https://phlip9.com/notes/performance/simdjson talk/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/p-value/":{"tf":1.0}},"df":22},"v":{"docs":{"https://phlip9.com/notes/AI ML/Expectimax Search/":{"tf":1.0},"https://phlip9.com/notes/android/root phone with magisk/":{"tf":1.0},"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.4142135623730951},"https://phlip9.com/notes/combinatorics/k-combinations of a multiset/":{"tf":1.7320508075688772},"https://phlip9.com/notes/reproducible builds/nix/nix auto-allocate-uids -> nixbld users/":{"tf":1.0}},"df":5}},"a":{"docs":{},"df":0,"k":{"docs":{"https://phlip9.com/notes/statistics probability/CDF confidence bands - DKW inequality/":{"tf":1.0}},"df":1,"e":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/CDF confidence bands - DKW inequality/":{"tf":1.0}},"df":2}}},"t":{"docs":{},"df":0,"h":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1}}}}},"b":{"docs":{"https://phlip9.com/notes/confidential computing/marblerun/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":1.7320508075688772},"https://phlip9.com/notes/crypto/acme protocol/":{"tf":2.8284271247461903},"https://phlip9.com/notes/lang/flutter/flutter setup/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/sycamore x futures/":{"tf":1.4142135623730951},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":2.23606797749979},"https://phlip9.com/notes/router/lightning router/captive portal/arubanetworks captive portal/":{"tf":1.7320508075688772},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":4.58257569495584},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":3.1622776601683795}},"df":9,"a":{"docs":{},"df":0,"s":{"docs":{},"df":0,"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"m":{"docs":{},"df":0,"b":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":2.0}},"df":1}}}}}}},"d":{"docs":{},"df":0,"a":{"docs":{},"df":0,"v":{"docs":{"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":2.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":2.8284271247461903}},"df":2}}},"f":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"g":{"docs":{"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":2.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":2.8284271247461903}},"df":2,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"p":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.4142135623730951}},"df":2}}}}}}}}}}}}}},"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"v":{"docs":{"https://phlip9.com/notes/crypto/acme protocol/":{"tf":1.4142135623730951}},"df":1}}},"i":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/rebuilderd/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.7320508075688772}},"df":4}}}},"d":{"docs":{"https://phlip9.com/notes/WSL/WSL2 custom kernel/":{"tf":1.0}},"df":1},"e":{"docs":{},"df":0,"k":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/fuzzing/fuzzing/":{"tf":1.0}},"df":1}},"s":{"docs":{},"df":0,"/":{"docs":{},"df":0,"m":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"h":{"docs":{"https://phlip9.com/notes/crypto/acme protocol/":{"tf":1.0}},"df":1}}}}}}}}},"i":{"docs":{},"df":0,"g":{"docs":{},"df":0,"h":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/multinomial distribution/":{"tf":1.4142135623730951}},"df":2}}},"r":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/android/root phone with magisk/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.4142135623730951}},"df":3}}},"l":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{"https://phlip9.com/notes/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/arubanetworks captive portal/":{"tf":1.4142135623730951},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.0}},"df":3}}},"l":{"docs":{"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0},"https://phlip9.com/notes/b l o c k c h a i n/fastpay/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/BOLT 8 - secure noise transport/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0},"https://phlip9.com/notes/devops/deployment strategies/":{"tf":1.4142135623730951},"https://phlip9.com/notes/devops/secrets/ejson (Shopify)/":{"tf":1.0},"https://phlip9.com/notes/fuzzing/fuzzing/":{"tf":1.0},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/rust verification tools/":{"tf":1.0},"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":1.0},"https://phlip9.com/notes/misc/kintsugi/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/reproducible-builds.org/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.4142135623730951},"https://phlip9.com/notes/statistics probability/CDF confidence bands - DKW inequality/":{"tf":1.0}},"df":17}},"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"'":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/fuzzing/fuzzcheck-rs/":{"tf":1.0}},"df":1}}}}},"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"u":{"docs":{"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/gramine/":{"tf":1.0},"https://phlip9.com/notes/devops/azure CLI/":{"tf":2.0}},"df":3}}},"’":{"docs":{},"df":0,"l":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.0}},"df":1}}}},"g":{"docs":{"https://phlip9.com/notes/devops/algo wireguard VPN server/":{"tf":2.23606797749979}},"df":1,".":{"docs":{},"df":0,"p":{"docs":{},"df":0,"h":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"p":{"docs":{},"df":0,"9":{"docs":{},"df":0,".":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{"https://phlip9.com/notes/devops/algo wireguard VPN server/":{"tf":3.605551275463989}},"df":1}}}}}}}}}}},"0":{"docs":{"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.7320508075688772}},"df":1},"e":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/android/android cli setup/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":2.0},"https://phlip9.com/notes/confidential computing/gramine/":{"tf":1.7320508075688772},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":4}}},"h":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"'":{"docs":{"https://phlip9.com/notes/reproducible builds/nix/nix debug spurrious rebuilds/":{"tf":1.0}},"df":1},"e":{"docs":{},"df":0,"v":{"docs":{"https://phlip9.com/notes/android/android cli setup/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.0},"https://phlip9.com/notes/keyboards/moergo glove80/":{"tf":1.4142135623730951},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0},"https://phlip9.com/notes/postgres/snippets/":{"tf":1.0}},"df":5}},"s":{"docs":{},"df":0,"a":{"docs":{},"df":0,"p":{"docs":{},"df":0,"p":{"docs":{"https://phlip9.com/notes/btc-ln/breez lightning service providers/":{"tf":1.0}},"df":1}}}}}},"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/lang/operator fixity and precedence/":{"tf":1.0}},"df":1}},"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"v":{"docs":{"https://phlip9.com/notes/android/ADB over TCP inside WSL2/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0},"https://phlip9.com/notes/lang/flutter/flutter setup/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/understanding sycamore reactivity/":{"tf":1.4142135623730951}},"df":4}},"v":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/lang/rust/understanding sycamore reactivity/":{"tf":1.0}},"df":1}}}},"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"a":{"docs":{"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.0}},"df":1},"v":{"docs":{"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.0}},"df":1}}},"t":{"docs":{},"df":0,"h":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/financial instituion/":{"tf":1.0},"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/foreign bank account report (FBAR)/":{"tf":1.0},"https://phlip9.com/notes/b l o c k c h a i n/bip158 - compact block filters/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/secure time/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/marblerun/":{"tf":1.0},"https://phlip9.com/notes/crypto/TLS self-signed pubkey-only certs/":{"tf":1.0},"https://phlip9.com/notes/devops/deployment strategies/":{"tf":1.0},"https://phlip9.com/notes/fuzzing/fuzzing/":{"tf":1.7320508075688772},"https://phlip9.com/notes/networking/CIDR/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/reproducible-builds.org/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/lightning router overview/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/testing whether a coin is fair/":{"tf":1.4142135623730951}},"df":16}}}}},"i":{"docs":{},"df":0,"l":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/reproducible builds/reproducible-builds.org/":{"tf":1.4142135623730951}},"df":1}}},"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"b":{"docs":{},"df":0,"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"w":{"docs":{"https://phlip9.com/notes/reproducible builds/reproducible-builds.org/":{"tf":1.0}},"df":1}}}}}}}},"t":{"docs":{},"df":0,"e":{"docs":{"https://phlip9.com/notes/fuzzing/fuzzing/":{"tf":1.0},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.0}},"df":3,"b":{"docs":{},"df":0,"o":{"docs":{},"df":0,"x":{"docs":{"https://phlip9.com/notes/fuzzing/fuzzing/":{"tf":1.0}},"df":1}}},"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.4142135623730951},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.0}},"df":4}}}},"s":{"docs":{},"df":0,"p":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.0},"https://phlip9.com/notes/design/form design/":{"tf":2.0},"https://phlip9.com/notes/nvim/universal-ctags Notes/":{"tf":1.0}},"df":3}}}}}}},"o":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/btc utreexo - utxo accumulator/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/breez lightning service providers/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/marblerun/":{"tf":1.0},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0},"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":1.0},"https://phlip9.com/notes/networking/CIDR/":{"tf":1.0},"https://phlip9.com/notes/networking/network interface card (NIC)/":{"tf":1.0},"https://phlip9.com/notes/postgres/types of scans/":{"tf":1.7320508075688772},"https://phlip9.com/notes/statistics probability/winsorize/":{"tf":1.0}},"df":11}},"s":{"docs":{},"df":0,"e":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0},"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":1.0}},"df":2}}}},"i":{"docs":{"https://phlip9.com/notes/android/android cli setup/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":3.3166247903554}},"df":2,"d":{"docs":{},"df":0,"e":{"docs":{"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/rust verification tools/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.4142135623730951}},"df":5,"r":{"docs":{"https://phlip9.com/notes/misc/kintsugi/":{"tf":1.0}},"df":1}},"g":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":2.23606797749979},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":3.1622776601683795}},"df":3}}},"t":{"docs":{},"df":0,"h":{"docs":{"https://phlip9.com/notes/WSL/WSL2 custom kernel/":{"tf":1.0},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":3.872983346207417},"https://phlip9.com/notes/networking/CIDR/":{"tf":1.7320508075688772}},"df":3,"=":{"docs":{},"df":0,"6":{"docs":{},"df":0,"4":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1},"5":{"docs":{"https://phlip9.com/notes/postgres/types of scans/":{"tf":1.0}},"df":1}}}}}},"f":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/android/android cli setup/":{"tf":1.0},"https://phlip9.com/notes/devops/algo wireguard VPN server/":{"tf":1.0},"https://phlip9.com/notes/misc/setting up a headless raspbian boot image/":{"tf":1.7320508075688772},"https://phlip9.com/notes/networking/network interface card (NIC)/":{"tf":1.0},"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/lightning router overview/":{"tf":1.0}},"df":7}},"k":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.4142135623730951}},"df":1,"p":{"docs":{},"df":0,"e":{"docs":{},"df":0,"d":{"docs":{},"df":0,"i":{"docs":{},"df":0,"a":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0},"https://phlip9.com/notes/networking/network interface card (NIC)/":{"tf":1.0},"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.7320508075688772}},"df":6}}}}},"w":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/statistics probability/CDF confidence bands - DKW inequality/":{"tf":1.4142135623730951},"https://phlip9.com/notes/statistics probability/MAD - median absolute deviation/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/multinomial distribution/":{"tf":1.7320508075688772}},"df":3}}}}}},"l":{"docs":{},"df":0,"f":{"docs":{},"df":0,"u":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/foreign bank account report (FBAR)/":{"tf":1.0}},"df":1}}},"l":{"docs":{"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/foreign bank account report (FBAR)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":2.23606797749979},"https://phlip9.com/notes/btc-ln/zero-conf channels/":{"tf":1.0},"https://phlip9.com/notes/crypto/acme protocol/":{"tf":1.0}},"df":4}},"n":{"docs":{"https://phlip9.com/notes/AI ML/Expectimax Search/":{"tf":2.23606797749979},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.4142135623730951},"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.7320508075688772}},"df":3,"1":{"docs":{},"df":0,"1":{"docs":{"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.4142135623730951}},"df":1}},"d":{"docs":{},"df":0,"o":{"docs":{},"df":0,"w":{"docs":{"https://phlip9.com/notes/WSL/WSL2 custom kernel/":{"tf":1.0},"https://phlip9.com/notes/android/ADB over TCP inside WSL2/":{"tf":1.7320508075688772},"https://phlip9.com/notes/android/android cli setup/":{"tf":1.0},"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.7320508075688772},"https://phlip9.com/notes/android/root phone with magisk/":{"tf":2.0},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":3.1622776601683795},"https://phlip9.com/notes/lang/rust/sycamore x futures/":{"tf":1.0},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.4142135623730951},"https://phlip9.com/notes/misc/setting up a headless raspbian boot image/":{"tf":1.0},"https://phlip9.com/notes/networking/network interfaces/":{"tf":2.0}},"df":10,".":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{},"df":0,"(":{"docs":{},"df":0,"\"":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"f":{"docs":{},"df":0,"i":{"docs":{},"df":0,"r":{"docs":{},"df":0,"m":{"docs":{"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}},"s":{"docs":{},"df":0,"1":{"docs":{},"df":0,"1":{"docs":{"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.4142135623730951}},"df":1}}}}}},"s":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/statistics probability/winsorize/":{"tf":2.449489742783178}},"df":1,"i":{"docs":{},"df":0,"z":{"docs":{},"df":0,"e":{"docs":{},"df":0,"(":{"docs":{},"df":0,"x":{"docs":{"https://phlip9.com/notes/statistics probability/winsorize/":{"tf":1.0}},"df":1}},"u":{"docs":{},"df":0,"n":{"docs":{},"df":0,"s":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/statistics probability/winsorize/":{"tf":1.4142135623730951}},"df":1}}}}}}}}}}}}},"p":{"docs":{"https://phlip9.com/notes/reproducible builds/nix/links/":{"tf":1.0}},"df":1},"r":{"docs":{},"df":0,"e":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":2.8284271247461903},"https://phlip9.com/notes/networking/network interface card (NIC)/":{"tf":1.0},"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.4142135623730951}},"df":4,"g":{"docs":{},"df":0,"u":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/secure time/":{"tf":1.0},"https://phlip9.com/notes/devops/algo wireguard VPN server/":{"tf":2.23606797749979},"https://phlip9.com/notes/networking/network interfaces/":{"tf":2.0}},"df":3,"'":{"docs":{"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.0}},"df":1}}}}}},"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"s":{"docs":{"https://phlip9.com/notes/android/ADB over TCP inside WSL2/":{"tf":1.7320508075688772},"https://phlip9.com/notes/android/android cli setup/":{"tf":1.7320508075688772},"https://phlip9.com/notes/lang/flutter/flutter setup/":{"tf":1.0},"https://phlip9.com/notes/networking/ipv6 address space/":{"tf":1.0},"https://phlip9.com/notes/networking/network interface card (NIC)/":{"tf":1.0},"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.4142135623730951},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.0}},"df":7}}}}}},"s":{"docs":{},"df":0,"e":{"docs":{"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0},"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.4142135623730951}},"df":2},"h":{"docs":{"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.0},"https://phlip9.com/notes/crypto/acme protocol/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/reproducible-builds.org/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.4142135623730951},"https://phlip9.com/notes/statistics probability/testing whether a coin is fair/":{"tf":1.0}},"df":7,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/misc/kintsugi/":{"tf":1.0}},"df":1}}}}},"p":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.0}},"df":1}}},"t":{"docs":{"https://phlip9.com/notes/distributed systems/papers/(2020) Semi-Fast Byzantine-tolerant Shared Register without Reliable Broadcast/":{"tf":1.7320508075688772}},"df":1,"h":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/AI ML/Markov Decision Process (MDP)/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":2.23606797749979},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.0},"https://phlip9.com/notes/devops/consul/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/testing whether a coin is fair/":{"tf":1.0}},"df":8}},"o":{"docs":{},"df":0,"b":{"docs":{},"df":0,"j":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/lang/operator fixity and precedence/":{"tf":1.0}},"df":1}}}}},"u":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/AI ML/Markov Decision Process (MDP)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/android/ADB over TCP inside WSL2/":{"tf":1.0},"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/monetary instruments/":{"tf":1.0},"https://phlip9.com/notes/b l o c k c h a i n/fastpay/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/atomic multipath payments (AMP)/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/breez lightning service providers/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/submarine swaps/":{"tf":2.0},"https://phlip9.com/notes/combinatorics/k-combinations of a multiset/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":2.0},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.7320508075688772},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.7320508075688772},"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":1.0},"https://phlip9.com/notes/crypto/acme protocol/":{"tf":1.0},"https://phlip9.com/notes/crypto/biscuit authz/":{"tf":1.0},"https://phlip9.com/notes/design/form design/":{"tf":1.0},"https://phlip9.com/notes/devops/linkerd/":{"tf":1.0},"https://phlip9.com/notes/distributed systems/papers/(2020) Semi-Fast Byzantine-tolerant Shared Register without Reliable Broadcast/":{"tf":1.4142135623730951},"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":1.0},"https://phlip9.com/notes/fuzzing/fuzzcheck-rs/":{"tf":1.0},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/operator fixity and precedence/":{"tf":1.4142135623730951},"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":2.0},"https://phlip9.com/notes/misc/setting up a headless raspbian boot image/":{"tf":1.0},"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.0},"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.0},"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.4142135623730951},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/arubanetworks captive portal/":{"tf":1.4142135623730951},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.7320508075688772},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.4142135623730951},"https://phlip9.com/notes/router/lightning router/lightning router overview/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/winsorize/":{"tf":1.4142135623730951}},"df":34}}},"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/misc/kintsugi/":{"tf":1.0}},"df":1}}}}}}},"z":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"d":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.0}},"df":1}}}}}}},"l":{"docs":{},"df":0,"_":{"docs":{},"df":0,"c":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{},"df":0,"_":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{},"df":0,"a":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0}},"df":1,"_":{"docs":{},"df":0,"s":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.4142135623730951}},"df":1}}}}}}}}}}}}},"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"0":{"docs":{"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.0}},"df":1},"1":{"docs":{"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.0}},"df":1},"2":{"docs":{"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.0}},"df":1},"3":{"docs":{"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.0}},"df":1}}}},"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"'":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/fastpay/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0},"https://phlip9.com/notes/lang/gdb ref/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/rr with rust/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/understanding sycamore reactivity/":{"tf":1.0},"https://phlip9.com/notes/misc/kintsugi/":{"tf":1.4142135623730951},"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.0},"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.0}},"df":13}},"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.0}},"df":1}}}},"o":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/misc/kintsugi/":{"tf":1.0}},"df":1}}}},"r":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/btc utreexo - utxo accumulator/":{"tf":1.0},"https://phlip9.com/notes/combinatorics/k-combinations of a multiset/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":1.0},"https://phlip9.com/notes/design/form design/":{"tf":1.4142135623730951},"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":1.0},"https://phlip9.com/notes/keyboards/moergo glove80/":{"tf":1.0},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":2.23606797749979},"https://phlip9.com/notes/lang/operator fixity and precedence/":{"tf":1.0},"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":1.0},"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.4142135623730951},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":2.23606797749979},"https://phlip9.com/notes/statistics probability/standard error/":{"tf":1.0}},"df":14,"i":{"docs":{"https://phlip9.com/notes/design/form design/":{"tf":1.0}},"df":1}},"k":{"docs":{"https://phlip9.com/notes/":{"tf":1.0},"https://phlip9.com/notes/WSL/WSL2 custom kernel/":{"tf":1.4142135623730951},"https://phlip9.com/notes/android/ADB over TCP inside WSL2/":{"tf":1.0},"https://phlip9.com/notes/android/OTA updates for rooted android phone/":{"tf":1.0},"https://phlip9.com/notes/android/android cli setup/":{"tf":1.0},"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":2.6457513110645907},"https://phlip9.com/notes/android/root phone with magisk/":{"tf":1.4142135623730951},"https://phlip9.com/notes/b l o c k c h a i n/fastpay/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":2.6457513110645907},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/gramine/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/marblerun/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":1.0},"https://phlip9.com/notes/crypto/(talk) authenticated data structures for stateless validation/":{"tf":1.0},"https://phlip9.com/notes/crypto/biscuit authz/":{"tf":1.4142135623730951},"https://phlip9.com/notes/devops/nomad/":{"tf":1.0},"https://phlip9.com/notes/fuzzing/fuzzcheck-rs/":{"tf":1.0},"https://phlip9.com/notes/ios/ios setup/":{"tf":1.0},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":2.0},"https://phlip9.com/notes/lang/gdb ref/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/rr with rust/":{"tf":1.7320508075688772},"https://phlip9.com/notes/lang/rust/sycamore x futures/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/understanding sycamore reactivity/":{"tf":1.0},"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":2.449489742783178},"https://phlip9.com/notes/misc/kintsugi/":{"tf":1.7320508075688772},"https://phlip9.com/notes/misc/pop_OS! tweaks/":{"tf":1.4142135623730951},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.7320508075688772},"https://phlip9.com/notes/misc/setting up a headless raspbian boot image/":{"tf":1.0},"https://phlip9.com/notes/networking/CIDR/":{"tf":1.0},"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.0},"https://phlip9.com/notes/performance/simdjson talk/":{"tf":1.7320508075688772},"https://phlip9.com/notes/postgres/postgres performance tuning/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/nix/nix auto-allocate-uids -> nixbld users/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.7320508075688772},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":2.8284271247461903},"https://phlip9.com/notes/statistics probability/winsorize/":{"tf":1.0}},"df":40,"e":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/sycamore x futures/":{"tf":3.1622776601683795}},"df":2}},"f":{"docs":{},"df":0,"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"w":{"docs":{"https://phlip9.com/notes/fuzzing/fuzzing/":{"tf":1.4142135623730951}},"df":1}}}},"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0},"https://phlip9.com/notes/devops/k3s/":{"tf":1.0},"https://phlip9.com/notes/devops/nomad/":{"tf":2.23606797749979}},"df":4}}}},"o":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/confidential computing/gramine/":{"tf":1.0}},"df":1}},"q":{"docs":{},"df":0,"_":{"docs":{},"df":0,"k":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"n":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{},"df":0,"u":{"docs":{},"df":0,"r":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.0}},"df":1}}}}}}}}}}}},"s":{"docs":{},"df":0,"h":{"docs":{},"df":0,"o":{"docs":{},"df":0,"p":{"docs":{"https://phlip9.com/notes/fuzzing/fuzzing/":{"tf":1.7320508075688772}},"df":1}}},"p":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{"https://phlip9.com/notes/reproducible builds/nix/nix debug spurrious rebuilds/":{"tf":1.4142135623730951}},"df":1}}}}},"l":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/confidential computing/gramine/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/mystikos/":{"tf":1.0},"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.4142135623730951},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.4142135623730951},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":2.449489742783178},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.4142135623730951}},"df":7}},"r":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/confidential computing/marblerun/":{"tf":1.0},"https://phlip9.com/notes/devops/azure CLI/":{"tf":1.0},"https://phlip9.com/notes/misc/kintsugi/":{"tf":1.0},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.0}},"df":5}},"s":{"docs":{"https://phlip9.com/notes/crypto/(talk) authenticated data structures for stateless validation/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/sycamore x futures/":{"tf":1.0}},"df":2,"t":{"docs":{"https://phlip9.com/notes/AI ML/Expectimax Search/":{"tf":1.0},"https://phlip9.com/notes/misc/kintsugi/":{"tf":1.0}},"df":2}},"t":{"docs":{},"df":0,"h":{"docs":{"https://phlip9.com/notes/fuzzing/fuzzing/":{"tf":1.0}},"df":1,"i":{"docs":{"https://phlip9.com/notes/btc-ln/zero-conf channels/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/reproducible-builds.org/":{"tf":1.0}},"df":2}}}},"u":{"docs":{},"df":0,"l":{"docs":{},"df":0,"d":{"docs":{},"df":0,"n":{"docs":{},"df":0,"'":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/fuzzing/fuzzcheck-rs/":{"tf":1.0}},"df":1}}}}}}},"p":{"docs":{},"df":0,"a":{"docs":{},"df":0,"_":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"y":{"docs":{},"df":0,"=":{"docs":{},"df":0,"u":{"docs":{"https://phlip9.com/notes/misc/setting up a headless raspbian boot image/":{"tf":1.0}},"df":1}}}}}}}}},"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{},"df":0,"=":{"docs":{},"df":0,"\"":{"docs":{},"df":0,"&":{"docs":{},"df":0,"l":{"docs":{},"df":0,"t":{"docs":{},"df":0,";":{"docs":{},"df":0,".":{"docs":{},"df":0,".":{"docs":{},"df":0,"&":{"docs":{},"df":0,"g":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/misc/setting up a headless raspbian boot image/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}},"p":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{},"df":0,"s":{"docs":{},"df":0,"w":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"d":{"docs":{},"df":0,"=":{"docs":{},"df":0,"\"":{"docs":{},"df":0,"&":{"docs":{},"df":0,"l":{"docs":{},"df":0,"t":{"docs":{},"df":0,";":{"docs":{},"df":0,".":{"docs":{},"df":0,".":{"docs":{},"df":0,"&":{"docs":{},"df":0,"g":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/misc/setting up a headless raspbian boot image/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}},"s":{"docs":{},"df":0,"u":{"docs":{},"df":0,"p":{"docs":{},"df":0,"p":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,".":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"f":{"docs":{"https://phlip9.com/notes/misc/setting up a headless raspbian boot image/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}},"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"p":{"docs":{"https://phlip9.com/notes/confidential computing/gramine/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/marblerun/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":1.0},"https://phlip9.com/notes/devops/secrets/ejson-kms (AWS)/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/understanding sycamore reactivity/":{"tf":1.4142135623730951},"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.4142135623730951},"https://phlip9.com/notes/postgres/snippets/":{"tf":1.0}},"df":7,"_":{"docs":{},"df":0,"i":{"docs":{},"df":0,"v":{"docs":{"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.0}},"df":1}},"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.0}},"df":1}}},"t":{"docs":{},"df":0,"k":{"docs":{"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.0}},"df":1}}},"p":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/lang/rust/rr with rust/":{"tf":1.0}},"df":1,".":{"docs":{},"df":0,"p":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"p":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0}},"df":1}}}}}}}}}}}}}},"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{"https://phlip9.com/notes/android/root phone with magisk/":{"tf":1.0},"https://phlip9.com/notes/combinatorics/k-combinations of a multiset/":{"tf":1.7320508075688772},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0},"https://phlip9.com/notes/crypto/TLS self-signed pubkey-only certs/":{"tf":1.7320508075688772},"https://phlip9.com/notes/crypto/dex - open-source OIDC & OAuth 2.0 provider/":{"tf":1.0},"https://phlip9.com/notes/devops/algo wireguard VPN server/":{"tf":1.0},"https://phlip9.com/notes/devops/secrets/ejson (Shopify)/":{"tf":1.0},"https://phlip9.com/notes/distributed systems/papers/(2020) Semi-Fast Byzantine-tolerant Shared Register without Reliable Broadcast/":{"tf":1.4142135623730951},"https://phlip9.com/notes/fuzzing/fuzzcheck-rs/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0},"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":1.0},"https://phlip9.com/notes/misc/prepping RPI for embedded dev/":{"tf":1.0},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0},"https://phlip9.com/notes/misc/setting up a headless raspbian boot image/":{"tf":1.0},"https://phlip9.com/notes/networking/CIDR/":{"tf":2.0},"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.4142135623730951},"https://phlip9.com/notes/postgres/postgres performance tuning/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.4142135623730951},"https://phlip9.com/notes/reproducible builds/nix/links/":{"tf":1.0}},"df":19,"(":{"docs":{"https://phlip9.com/notes/distributed systems/papers/(2020) Semi-Fast Byzantine-tolerant Shared Register without Reliable Broadcast/":{"tf":1.0}},"df":1},"r":{"docs":{"https://phlip9.com/notes/distributed systems/papers/(2020) Semi-Fast Byzantine-tolerant Shared Register without Reliable Broadcast/":{"tf":2.23606797749979}},"df":1,".":{"docs":{},"df":0,"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"x":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/crypto/TLS self-signed pubkey-only certs/":{"tf":1.0}},"df":1,"(":{"docs":{},"df":0,")":{"docs":{},"df":0,".":{"docs":{},"df":0,"w":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"_":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"(":{"docs":{},"df":0,"&":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{},"df":0,"p":{"docs":{},"df":0,";":{"docs":{},"df":0,"t":{"docs":{},"df":0,"b":{"docs":{},"df":0,"s":{"docs":{},"df":0,"_":{"docs":{},"df":0,"c":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{},"df":0,"_":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"_":{"docs":{},"df":0,"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/crypto/TLS self-signed pubkey-only certs/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"w":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"_":{"docs":{},"df":0,"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"q":{"docs":{},"df":0,"u":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"c":{"docs":{},"df":0,"e":{"docs":{},"df":0,"(":{"docs":{},"df":0,"|":{"docs":{},"df":0,"w":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/crypto/TLS self-signed pubkey-only certs/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}},"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/btc-ln/lightning libs/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.7320508075688772},"https://phlip9.com/notes/crypto/biscuit authz/":{"tf":1.0},"https://phlip9.com/notes/fuzzing/fuzzing/":{"tf":1.0},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0},"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":1.0},"https://phlip9.com/notes/misc/optimization solvers/":{"tf":1.0},"https://phlip9.com/notes/networking/CIDR/":{"tf":1.4142135623730951},"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/reproducible-builds.org/":{"tf":1.0}},"df":11}}}}},"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"g":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0}},"df":1}}},"t":{"docs":{"https://phlip9.com/notes/btc-ln/breez lightning service providers/":{"tf":1.0}},"df":1}},"s":{"docs":{"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0}},"df":1,"l":{"docs":{"https://phlip9.com/notes/WSL/":{"tf":1.0},"https://phlip9.com/notes/WSL/WSL2 custom kernel/":{"tf":3.0},"https://phlip9.com/notes/android/ADB over TCP inside WSL2/":{"tf":1.0},"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":2.23606797749979},"https://phlip9.com/notes/confidential computing/gramine/":{"tf":1.0},"https://phlip9.com/notes/misc/setting up a headless raspbian boot image/":{"tf":1.0},"https://phlip9.com/notes/networking/network interfaces/":{"tf":3.0}},"df":7,"2":{"docs":{"https://phlip9.com/notes/WSL/WSL2 custom kernel/":{"tf":3.0},"https://phlip9.com/notes/android/ADB over TCP inside WSL2/":{"tf":4.123105625617661},"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":2.449489742783178},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":2.0},"https://phlip9.com/notes/devops/azure CLI/":{"tf":1.0},"https://phlip9.com/notes/performance/profiling/":{"tf":1.0}},"df":6}}},"t":{"docs":{},"df":0,"f":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0},"https://phlip9.com/notes/lang/gdb ref/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.0}},"df":3}},"w":{"docs":{},"df":0,"_":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":2.449489742783178}},"df":1},"x":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":2.0}},"df":1},"z":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":2.449489742783178}},"df":1}},"i":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/management/relieve often - why generals were more successful in WWII/":{"tf":2.0}},"df":1}},"w":{"docs":{},"df":0,".":{"docs":{},"df":0,"b":{"docs":{},"df":0,"b":{"docs":{},"df":0,"c":{"docs":{},"df":0,".":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{"https://phlip9.com/notes/router/lightning router/captive portal/arubanetworks captive portal/":{"tf":2.0}},"df":1}}}}}}},"e":{"docs":{},"df":0,"x":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{},"df":0,"p":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,".":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":2.0}},"df":2}}}}}}}}}}}}}}},"x":{"docs":{"https://phlip9.com/notes/AI ML/Expectimax Search/":{"tf":2.449489742783178},"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.7320508075688772},"https://phlip9.com/notes/b l o c k c h a i n/sui/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/zero-conf channels/":{"tf":1.0},"https://phlip9.com/notes/combinatorics/k-combinations of a multiset/":{"tf":1.7320508075688772},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.7320508075688772},"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":1.4142135623730951},"https://phlip9.com/notes/distributed systems/papers/(2021) Leaderless Consensus/":{"tf":2.23606797749979},"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":1.7320508075688772},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":5.291502622129181},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":4.242640687119285},"https://phlip9.com/notes/lang/gdb ref/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/lua/":{"tf":4.0},"https://phlip9.com/notes/lang/operator fixity and precedence/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/rr with rust/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/rust x SGX/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/rust/sycamore x futures/":{"tf":1.4142135623730951},"https://phlip9.com/notes/misc/kintsugi/":{"tf":1.7320508075688772},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":5.5677643628300215},"https://phlip9.com/notes/misc/setting up a headless raspbian boot image/":{"tf":1.0},"https://phlip9.com/notes/misc/water distillation setup/":{"tf":1.0},"https://phlip9.com/notes/performance/bit hacks/":{"tf":7.0710678118654755},"https://phlip9.com/notes/performance/simdjson talk/":{"tf":2.23606797749979},"https://phlip9.com/notes/postgres/snippets/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/lightning router overview/":{"tf":1.4142135623730951},"https://phlip9.com/notes/statistics probability/herbie - float error fixer/":{"tf":1.4142135623730951},"https://phlip9.com/notes/statistics probability/multinomial distribution/":{"tf":2.23606797749979},"https://phlip9.com/notes/statistics probability/p-value/":{"tf":2.0},"https://phlip9.com/notes/statistics probability/winsorize/":{"tf":5.0990195135927845}},"df":31,"'":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0}},"df":1,"0":{"docs":{},"df":0,"1":{"docs":{},"df":0,"a":{"docs":{},"df":0,"b":{"docs":{},"df":0,"e":{"docs":{},"df":0,"f":{"docs":{},"df":0,"f":{"docs":{},"df":0,"f":{"docs":{"https://phlip9.com/notes/postgres/snippets/":{"tf":1.0}},"df":1}}}}}}}}},"*":{"docs":{},"df":0,"*":{"docs":{},"df":0,"2":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1}},"x":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1}},".":{"docs":{},"df":0,"5":{"docs":{},"df":0,"0":{"docs":{},"df":0,"9":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0},"https://phlip9.com/notes/crypto/smallstep - private online CA & ACME server/":{"tf":1.0}},"df":2}}},"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"_":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.4142135623730951}},"df":1}}}}}}}},"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"g":{"docs":{},"df":0,"_":{"docs":{},"df":0,"z":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.0}},"df":1}}}}}}}}}}}},"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"_":{"docs":{},"df":0,"b":{"docs":{},"df":0,"e":{"docs":{},"df":0,"_":{"docs":{},"df":0,"b":{"docs":{},"df":0,"y":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"(":{"docs":{},"df":0,")":{"docs":{},"df":0,".":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"_":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"(":{"docs":{},"df":0,")":{"docs":{},"df":0,".":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"k":{"docs":{},"df":0,"e":{"docs":{},"df":0,"_":{"docs":{},"df":0,"w":{"docs":{},"df":0,"h":{"docs":{},"df":0,"i":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"(":{"docs":{},"df":0,"|":{"docs":{},"df":0,"&":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{},"df":0,"p":{"docs":{},"df":0,";":{"docs":{},"df":0,"b":{"docs":{"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"_":{"docs":{},"df":0,"b":{"docs":{},"df":0,"y":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/performance/bit hacks/":{"tf":2.0}},"df":1,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"(":{"docs":{},"df":0,")":{"docs":{},"df":0,".":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"_":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.0}},"df":1,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"(":{"docs":{},"df":0,")":{"docs":{},"df":0,".":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"k":{"docs":{},"df":0,"e":{"docs":{},"df":0,"_":{"docs":{},"df":0,"w":{"docs":{},"df":0,"h":{"docs":{},"df":0,"i":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"(":{"docs":{},"df":0,"|":{"docs":{},"df":0,"&":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{},"df":0,"p":{"docs":{},"df":0,";":{"docs":{},"df":0,"b":{"docs":{"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"_":{"docs":{},"df":0,"b":{"docs":{},"df":0,"y":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.4142135623730951}},"df":1,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"(":{"docs":{},"df":0,")":{"docs":{},"df":0,".":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"_":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.0}},"df":1,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"(":{"docs":{},"df":0,")":{"docs":{},"df":0,".":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"y":{"docs":{},"df":0,"(":{"docs":{},"df":0,"|":{"docs":{},"df":0,"b":{"docs":{"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"i":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"g":{"docs":{},"df":0,"_":{"docs":{},"df":0,"z":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.0}},"df":1}}}}}}}}}}}}},"w":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"p":{"docs":{},"df":0,"p":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"g":{"docs":{},"df":0,"_":{"docs":{},"df":0,"s":{"docs":{},"df":0,"u":{"docs":{},"df":0,"b":{"docs":{},"df":0,"(":{"docs":{},"df":0,"0":{"docs":{},"df":0,"x":{"docs":{},"df":0,"0":{"docs":{},"df":0,"1":{"docs":{},"df":0,"0":{"docs":{},"df":0,"1":{"docs":{},"df":0,"_":{"docs":{},"df":0,"0":{"docs":{},"df":0,"1":{"docs":{},"df":0,"0":{"docs":{},"df":0,"1":{"docs":{"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.0}},"df":1}}}}}}}}},"1":{"docs":{},"df":0,"1":{"docs":{},"df":0,"1":{"docs":{},"df":0,"1":{"docs":{},"df":0,"_":{"docs":{},"df":0,"1":{"docs":{},"df":0,"1":{"docs":{},"df":0,"1":{"docs":{},"df":0,"1":{"docs":{"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.0}},"df":1}}}}}}}}}}},"1":{"docs":{"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.0}},"df":1},"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{},"df":0,"k":{"docs":{"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.4142135623730951}},"df":1}}}}}}}}}}}}}}}}}},"0":{"docs":{"https://phlip9.com/notes/statistics probability/winsorize/":{"tf":3.3166247903554}},"df":1,"1":{"docs":{},"df":0,"a":{"docs":{},"df":0,"b":{"docs":{},"df":0,"e":{"docs":{},"df":0,"f":{"docs":{"https://phlip9.com/notes/postgres/snippets/":{"tf":1.0}},"df":1}}}}}},"1":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.4142135623730951},"https://phlip9.com/notes/statistics probability/winsorize/":{"tf":3.3166247903554}},"df":2,"1":{"docs":{"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.7320508075688772}},"df":1}},"2":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.4142135623730951}},"df":1,")":{"docs":{},"df":0,"$":{"docs":{},"df":0,"1":{"docs":{},"df":0,"0":{"docs":{},"df":0,"h":{"docs":{},"df":0,"t":{"docs":{},"df":0,"t":{"docs":{},"df":0,"p":{"docs":{},"df":0,"s":{"docs":{},"df":0,":":{"docs":{},"df":0,"/":{"docs":{},"df":0,"/":{"docs":{},"df":0,"w":{"docs":{},"df":0,"w":{"docs":{},"df":0,"w":{"docs":{},"df":0,".":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"z":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,".":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"/":{"docs":{},"df":0,"q":{"docs":{},"df":0,"w":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"k":{"docs":{"https://phlip9.com/notes/misc/water distillation setup/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"5":{"docs":{},"df":0,"5":{"docs":{},"df":0,"1":{"docs":{},"df":0,"9":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0}},"df":1}}}}},"5":{"docs":{},"df":0,")":{"docs":{},"df":0,"$":{"docs":{},"df":0,"8":{"docs":{},"df":0,"h":{"docs":{},"df":0,"t":{"docs":{},"df":0,"t":{"docs":{},"df":0,"p":{"docs":{},"df":0,"s":{"docs":{},"df":0,":":{"docs":{},"df":0,"/":{"docs":{},"df":0,"/":{"docs":{},"df":0,"w":{"docs":{},"df":0,"w":{"docs":{},"df":0,"w":{"docs":{},"df":0,".":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"z":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,".":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"/":{"docs":{},"df":0,"u":{"docs":{},"df":0,"x":{"docs":{},"df":0,"c":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/misc/water distillation setup/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"0":{"docs":{},"df":0,"9":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/gramine/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":2.0},"https://phlip9.com/notes/crypto/(talk) authenticated data structures for stateless validation/":{"tf":1.0},"https://phlip9.com/notes/crypto/TLS self-signed pubkey-only certs/":{"tf":1.0}},"df":5}}},"6":{"docs":{},"df":0,"4":{"docs":{"https://phlip9.com/notes/lang/flutter/flutter setup/":{"tf":1.0}},"df":1}},"8":{"docs":{},"df":0,"6":{"docs":{"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.0}},"df":2,"_":{"docs":{},"df":0,"6":{"docs":{},"df":0,"4":{"docs":{"https://phlip9.com/notes/WSL/WSL2 custom kernel/":{"tf":2.449489742783178},"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":2.449489742783178},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":2.0},"https://phlip9.com/notes/misc/setting up a headless raspbian boot image/":{"tf":1.4142135623730951}},"df":4}}}},"7":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0}},"df":1}},"=":{"docs":{},"df":0,"0":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.4142135623730951}},"df":1,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"1":{"docs":{},"df":0,"1":{"docs":{},"df":0,"1":{"docs":{},"df":0,"0":{"docs":{},"df":0,"1":{"docs":{"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.0}},"df":1}},"1":{"docs":{},"df":0,"0":{"docs":{"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.0}},"df":1}}}}}},"1":{"docs":{},"df":0,"0":{"docs":{},"df":0,"1":{"docs":{},"df":0,"0":{"docs":{},"df":0,"1":{"docs":{},"df":0,"1":{"docs":{"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.0}},"df":1}}}}}}}}},"[":{"docs":{},"df":0,"\"":{"docs":{},"df":0,"f":{"docs":{},"df":0,"o":{"docs":{},"df":0,"o":{"docs":{"https://phlip9.com/notes/lang/lua/":{"tf":1.0}},"df":1}}}},"i":{"docs":{},"df":0,",":{"docs":{},"df":0,"j":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.4142135623730951}},"df":1}}}},"_":{"docs":{},"df":0,"1":{"docs":{"https://phlip9.com/notes/AI ML/Expectimax Search/":{"tf":1.7320508075688772},"https://phlip9.com/notes/distributed systems/papers/(2021) Leaderless Consensus/":{"tf":1.4142135623730951},"https://phlip9.com/notes/statistics probability/standard error/":{"tf":1.0}},"df":3},"2":{"docs":{"https://phlip9.com/notes/AI ML/Expectimax Search/":{"tf":1.7320508075688772}},"df":1},"3":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0}},"df":1},"i":{"docs":{"https://phlip9.com/notes/distributed systems/papers/(2021) Leaderless Consensus/":{"tf":1.0},"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/multinomial distribution/":{"tf":1.4142135623730951},"https://phlip9.com/notes/statistics probability/standard error/":{"tf":1.0}},"df":4,"j":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0}},"df":1}},"j":{"docs":{"https://phlip9.com/notes/statistics probability/multinomial distribution/":{"tf":1.0}},"df":1},"k":{"docs":{"https://phlip9.com/notes/statistics probability/multinomial distribution/":{"tf":1.0}},"df":1},"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"x":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.4142135623730951}},"df":1}},"i":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1}}},"n":{"docs":{"https://phlip9.com/notes/distributed systems/papers/(2021) Leaderless Consensus/":{"tf":1.7320508075688772},"https://phlip9.com/notes/statistics probability/multinomial distribution/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/standard error/":{"tf":1.0}},"df":3,"}":{"docs":{},"df":0,"{":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/statistics probability/standard error/":{"tf":1.0}},"df":1}}}},"s":{"docs":{},"df":0,"q":{"docs":{},"df":0,"u":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1}}}}}},"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"g":{"docs":{"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":1.4142135623730951}},"df":1}}},"c":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"c":{"docs":{"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0}},"df":1}}},"o":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{"https://phlip9.com/notes/ios/ios setup/":{"tf":2.0}},"df":1,"b":{"docs":{},"df":0,"u":{"docs":{},"df":0,"i":{"docs":{},"df":0,"l":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/ios/ios setup/":{"tf":1.0}},"df":1}}}}}}}}},"e":{"docs":{},"df":0,"/":{"docs":{},"df":0,"n":{"docs":{},"df":0,"i":{"docs":{},"df":0,"x":{"docs":{},"df":0,"o":{"docs":{"https://phlip9.com/notes/reproducible builds/nix/links/":{"tf":1.0}},"df":1}}}},"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/reproducible builds/nix/links/":{"tf":1.0}},"df":1}}}},"n":{"docs":{"https://phlip9.com/notes/lang/rust/rr with rust/":{"tf":1.0}},"df":1},"o":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.7320508075688772}},"df":1,"®":{"docs":{},"df":0,"e":{"docs":{},"df":0,"3":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":3.3166247903554}},"df":1}}}}}},"f":{"docs":{},"df":0,"r":{"docs":{},"df":0,"m":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":2.6457513110645907}},"df":1}}},"k":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 8 - secure noise transport/":{"tf":1.0}},"df":1},"m":{"docs":{},"df":0,"1":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.4142135623730951}},"df":1},"l":{"docs":{"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.4142135623730951}},"df":3,"s":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{},"df":0,"e":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0}},"df":1}}}}}}}},"o":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/AI ML/Expectimax Search/":{"tf":1.0},"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0},"https://phlip9.com/notes/performance/simdjson talk/":{"tf":2.0}},"df":4}},"p":{"docs":{},"df":0,"1":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1},"c":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/lang/lua/":{"tf":1.0}},"df":1}}}}},"r":{"docs":{"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0},"https://phlip9.com/notes/misc/setting up a headless raspbian boot image/":{"tf":1.0}},"df":2},"s":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":5.0990195135927845},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.4142135623730951},"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/winsorize/":{"tf":4.123105625617661}},"df":4,".":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"p":{"docs":{},"df":0,"(":{"docs":{},"df":0,"|":{"docs":{},"df":0,"x":{"docs":{"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0}},"df":1}}}}}}},"1":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":3.605551275463989}},"df":1},"2":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":2.0}},"df":1},"?":{"docs":{},"df":0,"[":{"docs":{},"df":0,"1":{"docs":{"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0}},"df":1}}},"[":{"docs":{},"df":0,"1":{"docs":{"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0}},"df":1},"3":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0}},"df":1},"4":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0}},"df":1}},"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"s":{"docs":{},"df":0,"a":{"docs":{},"df":0,"2":{"docs":{},"df":0,"0":{"docs":{"https://phlip9.com/notes/devops/secrets/ejson-kms (AWS)/":{"tf":1.4142135623730951}},"df":1}}}}},"v":{"docs":{},"df":0,"e":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0}},"df":1}}}},"t":{"docs":{"https://phlip9.com/notes/confidential computing/intel TDX/":{"tf":1.0}},"df":1,"i":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"f":{"docs":{},"df":0,"g":{"docs":{},"df":0,"(":{"docs":{},"df":0,"0":{"docs":{},"df":0,"x":{"docs":{},"df":0,"2":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0}},"df":1}}}}}}}}}}},"d":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"(":{"docs":{},"df":0,"0":{"docs":{},"df":0,"x":{"docs":{},"df":0,"4":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}},"x":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 8 - secure noise transport/":{"tf":1.0},"https://phlip9.com/notes/devops/azure CLI/":{"tf":2.449489742783178}},"df":2,".":{"docs":{},"df":0,"x":{"docs":{},"df":0,"x":{"docs":{},"df":0,".":{"docs":{},"df":0,"x":{"docs":{},"df":0,"x":{"docs":{},"df":0,".":{"docs":{},"df":0,"x":{"docs":{},"df":0,"x":{"docs":{"https://phlip9.com/notes/devops/azure CLI/":{"tf":1.4142135623730951}},"df":1}}}}}}}}},"d":{"docs":{"https://phlip9.com/notes/lang/gdb ref/":{"tf":1.7320508075688772}},"df":1},"x":{"docs":{"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.4142135623730951}},"df":1,"x":{"docs":{"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.7320508075688772},"https://phlip9.com/notes/confidential computing/gramine/":{"tf":1.7320508075688772},"https://phlip9.com/notes/devops/azure CLI/":{"tf":3.872983346207417}},"df":3,"x":{"docs":{},"df":0,"/":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"r":{"docs":{},"df":0,"c":{"docs":{},"df":0,"e":{"docs":{},"df":0,"g":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"p":{"docs":{},"df":0,"s":{"docs":{},"df":0,"/":{"docs":{},"df":0,"m":{"docs":{},"df":0,"y":{"docs":{},"df":0,"g":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"p":{"docs":{"https://phlip9.com/notes/devops/azure CLI/":{"tf":1.0}},"df":1,"/":{"docs":{},"df":0,"p":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"v":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"s":{"docs":{},"df":0,"/":{"docs":{},"df":0,"m":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"s":{"docs":{},"df":0,"o":{"docs":{},"df":0,"f":{"docs":{},"df":0,"t":{"docs":{},"df":0,".":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"p":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"/":{"docs":{},"df":0,"v":{"docs":{},"df":0,"i":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{},"df":0,"u":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"/":{"docs":{},"df":0,"m":{"docs":{},"df":0,"y":{"docs":{},"df":0,"v":{"docs":{},"df":0,"m":{"docs":{"https://phlip9.com/notes/devops/azure CLI/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"x":{"docs":{"https://phlip9.com/notes/devops/azure CLI/":{"tf":1.7320508075688772}},"df":1,"/":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"r":{"docs":{},"df":0,"c":{"docs":{},"df":0,"e":{"docs":{},"df":0,"g":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"p":{"docs":{},"df":0,"s":{"docs":{},"df":0,"/":{"docs":{},"df":0,"m":{"docs":{},"df":0,"y":{"docs":{},"df":0,"g":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"p":{"docs":{},"df":0,"/":{"docs":{},"df":0,"p":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"v":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"s":{"docs":{},"df":0,"/":{"docs":{},"df":0,"m":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"s":{"docs":{},"df":0,"o":{"docs":{},"df":0,"f":{"docs":{},"df":0,"t":{"docs":{},"df":0,".":{"docs":{},"df":0,"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{},"df":0,"w":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"k":{"docs":{},"df":0,"/":{"docs":{},"df":0,"p":{"docs":{},"df":0,"u":{"docs":{},"df":0,"b":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"i":{"docs":{},"df":0,"p":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{},"df":0,"d":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"/":{"docs":{},"df":0,"m":{"docs":{},"df":0,"y":{"docs":{},"df":0,"g":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"p":{"docs":{"https://phlip9.com/notes/devops/azure CLI/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"x":{"docs":{},"df":0,"x":{"docs":{},"df":0,"x":{"docs":{},"df":0,"/":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"r":{"docs":{},"df":0,"c":{"docs":{},"df":0,"e":{"docs":{},"df":0,"g":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"p":{"docs":{},"df":0,"s":{"docs":{},"df":0,"/":{"docs":{},"df":0,"s":{"docs":{},"df":0,"g":{"docs":{},"df":0,"x":{"docs":{"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/gramine/":{"tf":1.0}},"df":2}}}}}}}}}}}}}}}}}}}}}}}}}}},"y":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.4142135623730951}},"df":1,".":{"docs":{},"df":0,"0":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.7320508075688772}},"df":1},"1":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.7320508075688772}},"df":1}}},"z":{"docs":{},"df":0,"v":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.4142135623730951}},"df":1}}},"y":{"docs":{"https://phlip9.com/notes/AI ML/Expectimax Search/":{"tf":2.0},"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/":{"tf":1.0},"https://phlip9.com/notes/combinatorics/k-combinations of a multiset/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/gramine/":{"tf":1.0},"https://phlip9.com/notes/devops/algo wireguard VPN server/":{"tf":1.7320508075688772},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":3.4641016151377544},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":4.123105625617661},"https://phlip9.com/notes/lang/lua/":{"tf":2.6457513110645907},"https://phlip9.com/notes/lang/operator fixity and precedence/":{"tf":1.4142135623730951},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":6.244997998398398},"https://phlip9.com/notes/performance/bit hacks/":{"tf":5.656854249492381},"https://phlip9.com/notes/reproducible builds/nix/links/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/kelly criterion + ELO/":{"tf":1.7320508075688772},"https://phlip9.com/notes/statistics probability/winsorize/":{"tf":2.449489742783178}},"df":14,"*":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1}},".":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"_":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"_":{"docs":{},"df":0,"b":{"docs":{},"df":0,"y":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.0}},"df":1}}}}}}}}},"w":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"p":{"docs":{},"df":0,"p":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"g":{"docs":{},"df":0,"_":{"docs":{},"df":0,"m":{"docs":{},"df":0,"u":{"docs":{},"df":0,"l":{"docs":{},"df":0,"(":{"docs":{},"df":0,"0":{"docs":{},"df":0,"x":{"docs":{},"df":0,"0":{"docs":{},"df":0,"1":{"docs":{},"df":0,"0":{"docs":{},"df":0,"1":{"docs":{},"df":0,"_":{"docs":{},"df":0,"0":{"docs":{},"df":0,"1":{"docs":{},"df":0,"0":{"docs":{},"df":0,"1":{"docs":{"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}},"0":{"docs":{"https://phlip9.com/notes/performance/bit hacks/":{"tf":3.1622776601683795}},"df":1},"1":{"docs":{"https://phlip9.com/notes/performance/bit hacks/":{"tf":3.0}},"df":1},"2":{"docs":{"https://phlip9.com/notes/performance/bit hacks/":{"tf":3.1622776601683795}},"df":1},"3":{"docs":{"https://phlip9.com/notes/performance/bit hacks/":{"tf":2.6457513110645907}},"df":1},"=":{"docs":{},"df":0,"0":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.4142135623730951}},"df":1}},"a":{"docs":{},"df":0,"m":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/devops/docker compose/":{"tf":1.0}},"df":1}},"s":{"docs":{},"df":0,"n":{"docs":{},"df":0,"a":{"docs":{},"df":0,":":{"docs":{},"df":0,":":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"y":{"docs":{},"df":0,"_":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"u":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{},"df":0,"_":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"(":{"docs":{},"df":0,"|":{"docs":{},"df":0,"w":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/crypto/TLS self-signed pubkey-only certs/":{"tf":1.4142135623730951}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}},"x":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{},"df":0,"/":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"g":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"i":{"docs":{},"df":0,"x":{"docs":{"https://phlip9.com/notes/reproducible builds/nix/links/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}},"e":{"docs":{"https://phlip9.com/notes/android/android cli setup/":{"tf":1.0},"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/foreign bank account report (FBAR)/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/lightning rod/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.0}},"df":5,"a":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/foreign bank account report (FBAR)/":{"tf":1.7320508075688772},"https://phlip9.com/notes/crypto/acme protocol/":{"tf":1.4142135623730951},"https://phlip9.com/notes/management/relieve often - why generals were more successful in WWII/":{"tf":1.4142135623730951},"https://phlip9.com/notes/misc/uptime to downtime conversion/":{"tf":1.4142135623730951},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.0}},"df":5}},"l":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0}},"df":1}}},"i":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0},"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.0}},"df":3}}},"k":{"docs":{},"df":0,"e":{"docs":{"https://phlip9.com/notes/performance/simdjson talk/":{"tf":1.0}},"df":1}}},"m":{"docs":{},"df":0,"1":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":2.0}},"df":1}},"o":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"k":{"docs":{"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/monetary instruments/":{"tf":1.0}},"df":1}}},"k":{"docs":{},"df":0,"e":{"docs":{"https://phlip9.com/notes/lang/rust/self-referencing structs/":{"tf":1.0}},"df":1}},"u":{"docs":{},"df":0,"'":{"docs":{},"df":0,"l":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/combinatorics/k-combinations of a multiset/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.0},"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":1.0},"https://phlip9.com/notes/misc/kintsugi/":{"tf":2.0},"https://phlip9.com/notes/networking/network interface card (NIC)/":{"tf":1.0},"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.0},"https://phlip9.com/notes/postgres/types of scans/":{"tf":1.0}},"df":9}},"r":{"docs":{"https://phlip9.com/notes/WSL/WSL2 custom kernel/":{"tf":1.0},"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/foreign bank account report (FBAR)/":{"tf":1.0},"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/money services business (MSB)/":{"tf":1.4142135623730951},"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.4142135623730951},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":2.0},"https://phlip9.com/notes/confidential computing/gramine/":{"tf":1.0},"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":1.0},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0},"https://phlip9.com/notes/lang/gdb ref/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/rust/rr with rust/":{"tf":1.4142135623730951},"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":1.0},"https://phlip9.com/notes/misc/kintsugi/":{"tf":1.0},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0},"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/lightning router overview/":{"tf":1.0}},"df":15},"v":{"docs":{"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0},"https://phlip9.com/notes/lang/flutter/flutter setup/":{"tf":1.0},"https://phlip9.com/notes/management/relieve often - why generals were more successful in WWII/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.0}},"df":4}},"_":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"q":{"docs":{},"df":0,"u":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"d":{"docs":{},"df":0,"_":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"_":{"docs":{},"df":0,"j":{"docs":{},"df":0,"o":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"_":{"docs":{},"df":0,"t":{"docs":{},"df":0,"h":{"docs":{},"df":0,"e":{"docs":{},"df":0,"_":{"docs":{},"df":0,"g":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"p":{"docs":{"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}},"r":{"docs":{},"df":0,"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{},"df":0,"f":{"docs":{"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":1.4142135623730951}},"df":1}}}}},"t":{"docs":{},"df":0,"u":{"docs":{},"df":0,"b":{"docs":{"https://phlip9.com/notes/router/lightning router/lightning router overview/":{"tf":1.4142135623730951}},"df":1}}},"’":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.0}},"df":1}}}},"p":{"docs":{},"df":0,"1":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":2.0}},"df":1}},"r":{"docs":{"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/foreign bank account report (FBAR)/":{"tf":1.0}},"df":1},"s":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":3.1622776601683795},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/winsorize/":{"tf":1.4142135623730951}},"df":3},"y":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":2.23606797749979}},"df":1}}},"z":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.4142135623730951},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":3.605551275463989},"https://phlip9.com/notes/lang/operator fixity and precedence/":{"tf":1.7320508075688772},"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.7320508075688772},"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":1.0},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":2.449489742783178},"https://phlip9.com/notes/performance/bit hacks/":{"tf":3.872983346207417},"https://phlip9.com/notes/statistics probability/testing whether a coin is fair/":{"tf":3.0}},"df":8,"*":{"docs":{},"df":0,"z":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1}},"3":{"docs":{"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.0}},"df":1},"a":{"docs":{},"df":0,"b":{"docs":{},"df":0,"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"t":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/distributed systems/papers/(2021) Leaderless Consensus/":{"tf":1.0}},"df":1}}}}}}},"g":{"docs":{"https://phlip9.com/notes/design/form design/":{"tf":1.0}},"df":1}},"b":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/misc/scanning QR codes on desktop/":{"tf":1.0}},"df":1,"i":{"docs":{},"df":0,"m":{"docs":{},"df":0,"g":{"docs":{"https://phlip9.com/notes/misc/scanning QR codes on desktop/":{"tf":1.0}},"df":1}}}}}},"e":{"docs":{},"df":0,"f":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/fastpay/":{"tf":1.0}},"df":1},"k":{"docs":{},"df":0,"u":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/aptos/":{"tf":1.0}},"df":1}}},"n":{"docs":{"https://phlip9.com/notes/lang/rust/rr with rust/":{"tf":1.0}},"df":1},"r":{"docs":{},"df":0,"o":{"docs":{"https://phlip9.com/notes/AI ML/Expectimax Search/":{"tf":1.0},"https://phlip9.com/notes/AI ML/Markov Decision Process (MDP)/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/breez lightning service providers/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/submarine swaps/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/zero-conf channels/":{"tf":2.449489742783178},"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":1.0},"https://phlip9.com/notes/crypto/zkdocs/":{"tf":1.0},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0},"https://phlip9.com/notes/lang/operator fixity and precedence/":{"tf":1.0},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0},"https://phlip9.com/notes/misc/setting up a headless raspbian boot image/":{"tf":1.4142135623730951},"https://phlip9.com/notes/networking/CIDR/":{"tf":1.0},"https://phlip9.com/notes/performance/bit hacks/":{"tf":2.6457513110645907}},"df":13}}},"h":{"docs":{},"df":0,"a":{"docs":{},"df":0,"o":{"docs":{},"df":0,"f":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"g":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"/":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"l":{"docs":{},"df":0,"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"a":{"docs":{"https://phlip9.com/notes/reproducible builds/nix/links/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}},"i":{"docs":{},"df":0,"g":{"docs":{"https://phlip9.com/notes/design/form design/":{"tf":1.0}},"df":1},"m":{"docs":{},"df":0,"b":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"m":{"docs":{"https://phlip9.com/notes/reproducible builds/nix/links/":{"tf":1.0}},"df":1}}}}},"p":{"docs":{"https://phlip9.com/notes/android/android cli setup/":{"tf":1.0},"https://phlip9.com/notes/android/root phone with magisk/":{"tf":1.4142135623730951},"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.4142135623730951},"https://phlip9.com/notes/statistics probability/G-test - multinomial goodness-of-fit/":{"tf":1.0}},"df":4,"(":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,".":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"_":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/combinatorics/k-combinations of a multiset/":{"tf":1.0}},"df":1}}}}}}}}}}}},"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{},"df":0,"k":{"docs":{},"df":0,".":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"_":{"docs":{},"df":0,"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"_":{"docs":{},"df":0,"b":{"docs":{},"df":0,"y":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"(":{"docs":{},"df":0,")":{"docs":{},"df":0,".":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"_":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.4142135623730951}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}},"u":{"docs":{},"df":0,"3":{"docs":{},"df":0,"2":{"docs":{},"df":0,"_":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"_":{"docs":{},"df":0,"n":{"docs":{},"df":0,"i":{"docs":{},"df":0,"b":{"docs":{},"df":0,"_":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"(":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{},"df":0,"k":{"docs":{},"df":0,")":{"docs":{},"df":0,".":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"_":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.4142135623730951}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"y":{"docs":{},"df":0,".":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"_":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"_":{"docs":{},"df":0,"b":{"docs":{},"df":0,"y":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"(":{"docs":{},"df":0,")":{"docs":{},"df":0,".":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"_":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.4142135623730951}},"df":1}}}}}}}}}}}}}}}}}}}}}}}},":":{"docs":{},"df":0,":":{"docs":{},"df":0,"f":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"(":{"docs":{},"df":0,"p":{"docs":{"https://phlip9.com/notes/statistics probability/G-test - multinomial goodness-of-fit/":{"tf":1.0}},"df":1,")":{"docs":{},"df":0,".":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{},"df":0,"(":{"docs":{},"df":0,"q":{"docs":{},"df":0,")":{"docs":{},"df":0,".":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"l":{"docs":{},"df":0,"(":{"docs":{},"df":0,"|":{"docs":{},"df":0,"&":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{},"df":0,"p":{"docs":{},"df":0,";":{"docs":{},"df":0,"p":{"docs":{},"df":0,"_":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/statistics probability/G-test - multinomial goodness-of-fit/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"k":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/fastpay/":{"tf":1.0}},"df":1,"d":{"docs":{},"df":0,"o":{"docs":{},"df":0,"c":{"docs":{"https://phlip9.com/notes/crypto/zkdocs/":{"tf":1.7320508075688772}},"df":1}}}},"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"b":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1}}},"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"e":{"docs":{"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/gramine/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0},"https://phlip9.com/notes/devops/azure CLI/":{"tf":1.4142135623730951},"https://phlip9.com/notes/statistics probability/testing whether a coin is fair/":{"tf":1.0}},"df":5}}},"s":{"docs":{"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.4142135623730951}},"df":1},"w":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0}},"df":1,".":{"docs":{},"df":0,"0":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0}},"df":1},"1":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0}},"df":1}}}}}},"title":{"root":{"docs":{},"df":0,"1":{"docs":{},"df":0,"1":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 11 - invoices/":{"tf":1.0}},"df":1},"p":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{},"df":0,"s":{"docs":{},"df":0,"w":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/devops/secrets/1password - secrets automation/":{"tf":1.0}},"df":1}}}}}}}}},"2":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.0}},"df":1,".":{"docs":{},"df":0,"0":{"docs":{"https://phlip9.com/notes/crypto/dex - open-source OIDC & OAuth 2.0 provider/":{"tf":1.0}},"df":1}},"0":{"docs":{},"df":0,"2":{"docs":{},"df":0,"0":{"docs":{"https://phlip9.com/notes/distributed systems/papers/(2020) Semi-Fast Byzantine-tolerant Shared Register without Reliable Broadcast/":{"tf":1.0}},"df":1},"1":{"docs":{"https://phlip9.com/notes/distributed systems/papers/(2021) Leaderless Consensus/":{"tf":1.0}},"df":1}}}},"4":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 4 - onion routing protocol/":{"tf":1.0}},"df":1},"6":{"docs":{},"df":0,"5":{"docs":{},"df":0,"8":{"docs":{},"df":0,"5":{"docs":{"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0}},"df":1}}}},"7":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 7 - p2p node and channel discovery/":{"tf":1.0}},"df":1},"8":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 8 - secure noise transport/":{"tf":1.0}},"df":1},"_":{"docs":{},"df":0,"_":{"docs":{},"df":0,"p":{"docs":{},"df":0,"u":{"docs":{},"df":0,"b":{"docs":{"https://phlip9.com/notes/__pub/":{"tf":1.0}},"df":1}}}},"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"x":{"docs":{"https://phlip9.com/notes/":{"tf":1.0}},"df":1}}}}}},"a":{"docs":{},"df":0,"b":{"docs":{},"df":0,"s":{"docs":{},"df":0,"o":{"docs":{},"df":0,"l":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/statistics probability/MAD - median absolute deviation/":{"tf":1.0}},"df":1}}}}}},"c":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/foreign bank account report (FBAR)/":{"tf":1.0}},"df":1}}}},"u":{"docs":{},"df":0,"m":{"docs":{},"df":0,"u":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/btc utreexo - utxo accumulator/":{"tf":1.0}},"df":1}}}}},"m":{"docs":{"https://phlip9.com/notes/crypto/acme protocol/":{"tf":1.0},"https://phlip9.com/notes/crypto/smallstep - private online CA & ACME server/":{"tf":1.0}},"df":2}},"d":{"docs":{},"df":0,"b":{"docs":{"https://phlip9.com/notes/android/ADB over TCP inside WSL2/":{"tf":1.0},"https://phlip9.com/notes/android/linux ADB udev setup/":{"tf":1.0}},"df":2},"d":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0}},"df":1}},"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"s":{"docs":{"https://phlip9.com/notes/networking/ipv6 address space/":{"tf":1.0}},"df":1}}}}}},"i":{"docs":{"https://phlip9.com/notes/AI ML/":{"tf":1.0}},"df":1},"k":{"docs":{"https://phlip9.com/notes/devops/AKS - azure kubernetes service/":{"tf":1.0}},"df":1},"l":{"docs":{},"df":0,"g":{"docs":{},"df":0,"o":{"docs":{"https://phlip9.com/notes/devops/algo wireguard VPN server/":{"tf":1.0}},"df":1}},"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"c":{"docs":{"https://phlip9.com/notes/reproducible builds/nix/nix auto-allocate-uids -> nixbld users/":{"tf":1.0}},"df":1}}}},"m":{"docs":{},"df":0,"p":{"docs":{"https://phlip9.com/notes/btc-ln/atomic multipath payments (AMP)/":{"tf":1.0}},"df":1}},"n":{"docs":{},"df":0,"d":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/android/":{"tf":1.0},"https://phlip9.com/notes/android/OTA updates for rooted android phone/":{"tf":1.0},"https://phlip9.com/notes/android/android cli setup/":{"tf":1.0},"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0}},"df":4}}}}}},"p":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/aptos/":{"tf":1.0}},"df":1}}},"r":{"docs":{},"df":0,"m":{"docs":{"https://phlip9.com/notes/misc/arm target triples/":{"tf":1.0}},"df":1},"u":{"docs":{},"df":0,"b":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{},"df":0,"w":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"k":{"docs":{"https://phlip9.com/notes/router/lightning router/captive portal/arubanetworks captive portal/":{"tf":1.0}},"df":1}}}}}}}}}}},"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{"https://phlip9.com/notes/btc-ln/atomic multipath payments (AMP)/":{"tf":1.0}},"df":1}},"s":{"docs":{},"df":0,"2":{"docs":{"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0},"https://phlip9.com/notes/lang/ATS/Install ATS2/":{"tf":1.0}},"df":2}},"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":1.0}},"df":2}}}}},"u":{"docs":{},"df":0,"t":{"docs":{},"df":0,"h":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/crypto/(talk) authenticated data structures for stateless validation/":{"tf":1.0}},"df":1}}},"z":{"docs":{"https://phlip9.com/notes/crypto/biscuit authz/":{"tf":1.0}},"df":1}},"o":{"docs":{"https://phlip9.com/notes/reproducible builds/nix/nix auto-allocate-uids -> nixbld users/":{"tf":1.0}},"df":1,"m":{"docs":{"https://phlip9.com/notes/devops/secrets/1password - secrets automation/":{"tf":1.0}},"df":1}}}},"w":{"docs":{"https://phlip9.com/notes/devops/secrets/ejson-kms (AWS)/":{"tf":1.0}},"df":1},"z":{"docs":{},"df":0,"u":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/devops/AKS - azure kubernetes service/":{"tf":1.0},"https://phlip9.com/notes/devops/azure CLI/":{"tf":1.0}},"df":2}}}},"b":{"docs":{"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/":{"tf":1.0},"https://phlip9.com/notes/b l o c k c h a i n/":{"tf":1.0}},"df":2,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"k":{"docs":{},"df":0,"p":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"s":{"docs":{},"df":0,"u":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":1.0}},"df":1}}}}}}}}},"n":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/statistics probability/CDF confidence bands - DKW inequality/":{"tf":1.0}},"df":1},"k":{"docs":{"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/foreign bank account report (FBAR)/":{"tf":1.0}},"df":1}}},"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.0}},"df":1}}}},"p":{"docs":{},"df":0,"1":{"docs":{},"df":0,"5":{"docs":{},"df":0,"8":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/bip158 - compact block filters/":{"tf":1.0}},"df":1}}}},"s":{"docs":{},"df":0,"c":{"docs":{},"df":0,"u":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/crypto/biscuit authz/":{"tf":1.0}},"df":1}}}}},"t":{"docs":{"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.0}},"df":1}},"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"c":{"docs":{},"df":0,"k":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/bip158 - compact block filters/":{"tf":1.0}},"df":1}}}},"o":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{"https://phlip9.com/notes/fuzzing/bolero - fuzzing + property testing/":{"tf":1.0}},"df":1}}},"t":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 11 - invoices/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/BOLT 4 - onion routing protocol/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/BOLT 7 - p2p node and channel discovery/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/BOLT 8 - secure noise transport/":{"tf":1.0}},"df":5}},"o":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/misc/setting up a headless raspbian boot image/":{"tf":1.0}},"df":1}}},"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"e":{"docs":{},"df":0,"z":{"docs":{"https://phlip9.com/notes/btc-ln/breez lightning service providers/":{"tf":1.0}},"df":1}}},"o":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{},"df":0,"c":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/distributed systems/papers/(2020) Semi-Fast Byzantine-tolerant Shared Register without Reliable Broadcast/":{"tf":1.0}},"df":1}}}}}},"k":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/reproducible builds/nix/nix debug broken package build/":{"tf":1.0}},"df":1}}}}},"t":{"docs":{},"df":0,"c":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/btc utreexo - utxo accumulator/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/":{"tf":1.0}},"df":2}},"u":{"docs":{},"df":0,"i":{"docs":{},"df":0,"l":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/nix/nix debug broken package build/":{"tf":1.0}},"df":3,"s":{"docs":{},"df":0,".":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"g":{"docs":{"https://phlip9.com/notes/reproducible builds/reproducible-builds.org/":{"tf":1.0}},"df":1}}}},"/":{"docs":{},"df":0,"n":{"docs":{},"df":0,"i":{"docs":{},"df":0,"x":{"docs":{"https://phlip9.com/notes/reproducible builds/nix/":{"tf":1.0}},"df":1}}}}}}}},"s":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/money services business (MSB)/":{"tf":1.0}},"df":1}}},"y":{"docs":{},"df":0,"z":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/distributed systems/papers/(2020) Semi-Fast Byzantine-tolerant Shared Register without Reliable Broadcast/":{"tf":1.0}},"df":1}}}}}}}},"c":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/":{"tf":1.4142135623730951}},"df":1,"a":{"docs":{"https://phlip9.com/notes/crypto/smallstep - private online CA & ACME server/":{"tf":1.0}},"df":1,"p":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"v":{"docs":{"https://phlip9.com/notes/router/lightning router/captive portal/arubanetworks captive portal/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.0}},"df":3}}}},"r":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/networking/network interface card (NIC)/":{"tf":1.0}},"df":1}}},"d":{"docs":{},"df":0,"f":{"docs":{"https://phlip9.com/notes/statistics probability/CDF confidence bands - DKW inequality/":{"tf":1.0}},"df":1}},"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/crypto/TLS self-signed pubkey-only certs/":{"tf":1.0}},"df":1}}},"h":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/BOLT 7 - p2p node and channel discovery/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/hosted channels/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/zero-conf channels/":{"tf":1.0}},"df":4}}}}},"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/statistics probability/cheat sheet/":{"tf":1.0}},"df":1}}}},"i":{"docs":{},"df":0,"d":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/networking/CIDR/":{"tf":1.0}},"df":1}}},"l":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/android/android cli setup/":{"tf":1.0},"https://phlip9.com/notes/devops/azure CLI/":{"tf":1.0}},"df":2}},"o":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{"https://phlip9.com/notes/misc/scanning QR codes on desktop/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0}},"df":2}},"i":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/statistics probability/testing whether a coin is fair/":{"tf":1.0}},"df":1}},"m":{"docs":{},"df":0,"b":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/combinatorics/k-combinations of a multiset/":{"tf":1.0}},"df":1,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/combinatorics/":{"tf":1.0}},"df":1}}}}}}},"p":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/bip158 - compact block filters/":{"tf":1.0}},"df":1}}},"o":{"docs":{},"df":0,"s":{"docs":{"https://phlip9.com/notes/devops/docker compose/":{"tf":1.0}},"df":1}},"u":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/confidential computing/":{"tf":1.0}},"df":1,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"g":{"docs":{},"df":0,"/":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/":{"tf":1.0}},"df":1}}}}}}}}}}}}},"n":{"docs":{},"df":0,"f":{"docs":{"https://phlip9.com/notes/btc-ln/zero-conf channels/":{"tf":1.0}},"df":1,"i":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/statistics probability/CDF confidence bands - DKW inequality/":{"tf":1.0}},"df":1,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/confidential computing/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/":{"tf":1.0}},"df":2}}}}}}},"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"s":{"docs":{},"df":0,"u":{"docs":{"https://phlip9.com/notes/distributed systems/papers/(2021) Leaderless Consensus/":{"tf":1.0}},"df":1}}}},"u":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/devops/consul/":{"tf":1.0}},"df":1}}},"v":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"s":{"docs":{"https://phlip9.com/notes/misc/uptime to downtime conversion/":{"tf":1.0}},"df":1}}}}}},"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/statistics probability/kelly criterion + ELO/":{"tf":1.0}},"df":1}}}}}}},"y":{"docs":{},"df":0,"p":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{"https://phlip9.com/notes/crypto/":{"tf":1.0}},"df":1}}}}},"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"g":{"docs":{"https://phlip9.com/notes/nvim/universal-ctags Notes/":{"tf":1.0}},"df":1}}},"u":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{"https://phlip9.com/notes/WSL/WSL2 custom kernel/":{"tf":1.0}},"df":1}}}}}},"d":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0}},"df":1}},"t":{"docs":{},"df":0,"a":{"docs":{"https://phlip9.com/notes/crypto/(talk) authenticated data structures for stateless validation/":{"tf":1.0}},"df":1}}},"e":{"docs":{},"df":0,"b":{"docs":{},"df":0,"u":{"docs":{},"df":0,"g":{"docs":{"https://phlip9.com/notes/reproducible builds/nix/nix debug broken package build/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/nix/nix debug spurrious rebuilds/":{"tf":1.0}},"df":2}}},"c":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{"https://phlip9.com/notes/AI ML/Markov Decision Process (MDP)/":{"tf":1.0}},"df":1}}},"p":{"docs":{},"df":0,"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"y":{"docs":{"https://phlip9.com/notes/devops/deployment strategies/":{"tf":1.0}},"df":1}}}},"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"g":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/design/":{"tf":1.0},"https://phlip9.com/notes/design/form design/":{"tf":1.0}},"df":2}}},"k":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"p":{"docs":{"https://phlip9.com/notes/misc/scanning QR codes on desktop/":{"tf":1.0}},"df":1}}}}},"v":{"docs":{"https://phlip9.com/notes/misc/prepping RPI for embedded dev/":{"tf":1.0}},"df":1,"i":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/statistics probability/MAD - median absolute deviation/":{"tf":1.0}},"df":1}}},"o":{"docs":{},"df":0,"p":{"docs":{"https://phlip9.com/notes/devops/":{"tf":1.0}},"df":1,"s":{"docs":{},"df":0,"/":{"docs":{},"df":0,"o":{"docs":{},"df":0,"1":{"docs":{},"df":0,"1":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/devops/o11y/":{"tf":1.0}},"df":1}}}},"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/devops/secrets/":{"tf":1.0}},"df":1}}}}}}}}}}},"x":{"docs":{"https://phlip9.com/notes/crypto/dex - open-source OIDC & OAuth 2.0 provider/":{"tf":1.0}},"df":1}},"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"v":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 7 - p2p node and channel discovery/":{"tf":1.0}},"df":1}}}}}},"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/misc/water distillation setup/":{"tf":1.0}},"df":1}},"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"b":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/distributed systems/":{"tf":1.0},"https://phlip9.com/notes/distributed systems/papers/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/multinomial distribution/":{"tf":1.0}},"df":3}}}}}}}},"k":{"docs":{},"df":0,"w":{"docs":{"https://phlip9.com/notes/statistics probability/CDF confidence bands - DKW inequality/":{"tf":1.0}},"df":1}},"o":{"docs":{},"df":0,"c":{"docs":{},"df":0,"k":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/devops/docker compose/":{"tf":1.0},"https://phlip9.com/notes/devops/kind (kubernetes in docker)/":{"tf":1.0}},"df":2}}}},"p":{"docs":{},"df":0,"p":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/devops/secrets/doppler/":{"tf":1.0}},"df":1}}}}},"w":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"m":{"docs":{"https://phlip9.com/notes/misc/uptime to downtime conversion/":{"tf":1.0}},"df":1}}}}}},"s":{"docs":{},"df":0,"m":{"docs":{"https://phlip9.com/notes/devops/secrets/fortanix DSM/":{"tf":1.0}},"df":1}},"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"e":{"docs":{"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.0}},"df":1}}}}}},"e":{"docs":{"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/":{"tf":1.4142135623730951}},"df":1,"2":{"docs":{"https://phlip9.com/notes/devops/o11y/jaeger oss e2e tracing/":{"tf":1.0}},"df":1},"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{},"df":0,"h":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/reproducible builds/earthly/":{"tf":1.0}},"df":1}}}}}},"j":{"docs":{},"df":0,"s":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/devops/secrets/ejson (Shopify)/":{"tf":1.0},"https://phlip9.com/notes/devops/secrets/ejson-kms (AWS)/":{"tf":1.0}},"df":2}}}},"l":{"docs":{},"df":0,"o":{"docs":{"https://phlip9.com/notes/statistics probability/kelly criterion + ELO/":{"tf":1.0}},"df":1}},"m":{"docs":{},"df":0,"b":{"docs":{},"df":0,"e":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/misc/prepping RPI for embedded dev/":{"tf":1.0}},"df":1}}}},"n":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"x":{"docs":{"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.0}},"df":1}}},"v":{"docs":{},"df":0,"k":{"docs":{},"df":0,"e":{"docs":{},"df":0,"y":{"docs":{"https://phlip9.com/notes/devops/secrets/envkey/":{"tf":1.0}},"df":1}}},"s":{"docs":{},"df":0,"u":{"docs":{},"df":0,"b":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/misc/envsubst/":{"tf":1.0}},"df":1}}}}}}},"r":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/statistics probability/herbie - float error fixer/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/standard error/":{"tf":1.0}},"df":2}}}},"x":{"docs":{},"df":0,"p":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"x":{"docs":{"https://phlip9.com/notes/AI ML/Expectimax Search/":{"tf":1.0}},"df":1}}}}}}},"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/crypto/tls exported keying material/":{"tf":1.0}},"df":1}}}}}},"f":{"docs":{},"df":0,"a":{"docs":{},"df":0,"i":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/statistics probability/testing whether a coin is fair/":{"tf":1.0}},"df":1}},"s":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/distributed systems/papers/(2020) Semi-Fast Byzantine-tolerant Shared Register without Reliable Broadcast/":{"tf":1.0}},"df":1,"p":{"docs":{},"df":0,"a":{"docs":{},"df":0,"y":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/fastpay/":{"tf":1.0}},"df":1}}}}}},"b":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/foreign bank account report (FBAR)/":{"tf":1.0}},"df":1}}},"i":{"docs":{},"df":0,"l":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/bip158 - compact block filters/":{"tf":1.0}},"df":1}}}},"n":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"c":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/financial instituion/":{"tf":1.0}},"df":1}}}}},"t":{"docs":{"https://phlip9.com/notes/statistics probability/G-test - multinomial goodness-of-fit/":{"tf":1.0}},"df":1},"x":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/statistics probability/herbie - float error fixer/":{"tf":1.0}},"df":1}},"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/lang/operator fixity and precedence/":{"tf":1.0}},"df":1}}}}},"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/statistics probability/herbie - float error fixer/":{"tf":1.0}},"df":1}}},"u":{"docs":{},"df":0,"t":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/lang/flutter/flutter setup/":{"tf":1.0}},"df":1}}}}}},"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"i":{"docs":{},"df":0,"g":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/foreign bank account report (FBAR)/":{"tf":1.0}},"df":1}}}},"m":{"docs":{"https://phlip9.com/notes/design/form design/":{"tf":1.0}},"df":1},"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"i":{"docs":{},"df":0,"x":{"docs":{"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0},"https://phlip9.com/notes/devops/secrets/fortanix DSM/":{"tf":1.0}},"df":2}}}}}}},"u":{"docs":{},"df":0,"t":{"docs":{},"df":0,"u":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/lang/rust/sycamore x futures/":{"tf":1.0}},"df":1}}},"z":{"docs":{},"df":0,"z":{"docs":{"https://phlip9.com/notes/fuzzing/":{"tf":1.0},"https://phlip9.com/notes/fuzzing/bolero - fuzzing + property testing/":{"tf":1.0},"https://phlip9.com/notes/fuzzing/fuzzing/":{"tf":1.0}},"df":3,"c":{"docs":{},"df":0,"h":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"k":{"docs":{"https://phlip9.com/notes/fuzzing/fuzzcheck-rs/":{"tf":1.0}},"df":1}}}}}}}}},"g":{"docs":{"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/":{"tf":1.4142135623730951},"https://phlip9.com/notes/statistics probability/G-test - multinomial goodness-of-fit/":{"tf":1.0}},"df":2,"d":{"docs":{},"df":0,"b":{"docs":{"https://phlip9.com/notes/lang/gdb ref/":{"tf":1.0}},"df":1}},"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/management/relieve often - why generals were more successful in WWII/":{"tf":1.0}},"df":1}}}},"i":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":1.0}},"df":1}},"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"v":{"docs":{},"df":0,"e":{"docs":{},"df":0,"8":{"docs":{},"df":0,"0":{"docs":{"https://phlip9.com/notes/keyboards/moergo glove80/":{"tf":1.0}},"df":1}}}}}},"o":{"docs":{},"df":0,"o":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/statistics probability/G-test - multinomial goodness-of-fit/":{"tf":1.0}},"df":1}}},"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/confidential computing/gramine/":{"tf":1.0}},"df":1}}}}}},"h":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/":{"tf":1.0}},"df":1,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"k":{"docs":{"https://phlip9.com/notes/performance/bit hacks/":{"tf":1.0}},"df":1}}},"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"s":{"docs":{"https://phlip9.com/notes/misc/setting up a headless raspbian boot image/":{"tf":1.0}},"df":1}}}}}},"r":{"docs":{},"df":0,"b":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/statistics probability/herbie - float error fixer/":{"tf":1.0}},"df":1}}}},"k":{"docs":{},"df":0,"d":{"docs":{},"df":0,"f":{"docs":{"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":1.0}},"df":1}}},"o":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/btc-ln/hosted channels/":{"tf":1.0}},"df":1}}},"t":{"docs":{},"df":0,"t":{"docs":{},"df":0,"p":{"docs":{"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0}},"df":1}}}},"i":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"g":{"docs":{"https://phlip9.com/notes/misc/setting up a headless raspbian boot image/":{"tf":1.0}},"df":1}}},"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"q":{"docs":{},"df":0,"u":{"docs":{"https://phlip9.com/notes/statistics probability/CDF confidence bands - DKW inequality/":{"tf":1.0}},"df":1}}},"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/android/ADB over TCP inside WSL2/":{"tf":1.0}},"df":1}},"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/lang/ATS/Install ATS2/":{"tf":1.0}},"df":1}},"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"u":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/financial instituion/":{"tf":1.0}},"df":1}}}}}},"r":{"docs":{},"df":0,"u":{"docs":{},"df":0,"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/monetary instruments/":{"tf":1.0}},"df":1}}}}}}}},"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/confidential computing/intel TDX/":{"tf":1.0}},"df":1},"r":{"docs":{},"df":0,"f":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{"https://phlip9.com/notes/networking/network interface card (NIC)/":{"tf":1.0},"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.0}},"df":2}}}}}},"v":{"docs":{},"df":0,"o":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 11 - invoices/":{"tf":1.0}},"df":1}}}}},"o":{"docs":{"https://phlip9.com/notes/ios/":{"tf":1.0},"https://phlip9.com/notes/ios/ios setup/":{"tf":1.0}},"df":2},"p":{"docs":{},"df":0,"v":{"docs":{},"df":0,"6":{"docs":{"https://phlip9.com/notes/networking/ipv6 address space/":{"tf":1.0}},"df":1}}}},"j":{"docs":{},"df":0,"a":{"docs":{},"df":0,"e":{"docs":{},"df":0,"g":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/devops/o11y/jaeger oss e2e tracing/":{"tf":1.0}},"df":1}}}}}},"k":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/":{"tf":1.0},"https://phlip9.com/notes/combinatorics/k-combinations of a multiset/":{"tf":1.0}},"df":2,"3":{"docs":{"https://phlip9.com/notes/devops/k3s/":{"tf":1.0}},"df":1},"e":{"docs":{},"df":0,"l":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/statistics probability/kelly criterion + ELO/":{"tf":1.0}},"df":1}}},"r":{"docs":{},"df":0,"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/WSL/WSL2 custom kernel/":{"tf":1.0}},"df":1}}}},"y":{"docs":{"https://phlip9.com/notes/crypto/tls exported keying material/":{"tf":1.0}},"df":1,"b":{"docs":{},"df":0,"o":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/keyboards/":{"tf":1.0}},"df":1}}}}}}},"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/devops/kind (kubernetes in docker)/":{"tf":1.0}},"df":1},"t":{"docs":{},"df":0,"s":{"docs":{},"df":0,"u":{"docs":{},"df":0,"g":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/misc/kintsugi/":{"tf":1.0}},"df":1}}}}}}},"m":{"docs":{"https://phlip9.com/notes/devops/secrets/ejson-kms (AWS)/":{"tf":1.0}},"df":1},"o":{"docs":{},"df":0,"k":{"docs":{},"df":0,"a":{"docs":{"https://phlip9.com/notes/lang/koka-lang/":{"tf":1.0}},"df":1}}},"u":{"docs":{},"df":0,"b":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/devops/AKS - azure kubernetes service/":{"tf":1.0},"https://phlip9.com/notes/devops/kind (kubernetes in docker)/":{"tf":1.0},"https://phlip9.com/notes/devops/kubernetes/":{"tf":1.0}},"df":3}}}}}}}},"l":{"docs":{"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/":{"tf":1.4142135623730951},"https://phlip9.com/notes/b l o c k c h a i n/":{"tf":1.0}},"df":2,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"g":{"docs":{"https://phlip9.com/notes/lang/":{"tf":1.0},"https://phlip9.com/notes/lang/flutter/dart lang/":{"tf":1.0},"https://phlip9.com/notes/lang/koka-lang/":{"tf":1.0}},"df":3,"/":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/lang/ATS/":{"tf":1.0}},"df":1}},"f":{"docs":{},"df":0,"l":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/lang/flutter/":{"tf":1.0}},"df":1}}}}},"r":{"docs":{},"df":0,"u":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/lang/rust/":{"tf":1.0}},"df":1}}}}}}}},"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"s":{"docs":{"https://phlip9.com/notes/distributed systems/papers/(2021) Leaderless Consensus/":{"tf":1.0}},"df":1}}}}}}}}},"i":{"docs":{},"df":0,"b":{"docs":{"https://phlip9.com/notes/btc-ln/lightning libs/":{"tf":1.0}},"df":1},"g":{"docs":{},"df":0,"h":{"docs":{},"df":0,"t":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/btc-ln/breez lightning service providers/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/lightning libs/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/lightning network notes/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/lightning rod/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/lightning router overview/":{"tf":1.0}},"df":6,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"g":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"v":{"docs":{},"df":0,"k":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.0}},"df":1}}}}}}}}}}}}},"n":{"docs":{},"df":0,"g":{"docs":{},"df":0,"o":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0}},"df":1}},"k":{"docs":{"https://phlip9.com/notes/reproducible builds/nix/links/":{"tf":1.0}},"df":1,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/devops/linkerd/":{"tf":1.0}},"df":1}}}},"u":{"docs":{},"df":0,"x":{"docs":{"https://phlip9.com/notes/android/linux ADB udev setup/":{"tf":1.0}},"df":1}}}},"n":{"docs":{"https://phlip9.com/notes/btc-ln/":{"tf":1.0}},"df":1},"u":{"docs":{},"df":0,"a":{"docs":{"https://phlip9.com/notes/lang/lua/":{"tf":1.0}},"df":1}}},"m":{"docs":{"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/":{"tf":1.0}},"df":1,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{"https://phlip9.com/notes/performance/dtrace on macOS/":{"tf":1.0}},"df":1}},"d":{"docs":{"https://phlip9.com/notes/statistics probability/MAD - median absolute deviation/":{"tf":1.0}},"df":1},"g":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"k":{"docs":{"https://phlip9.com/notes/android/root phone with magisk/":{"tf":1.0}},"df":1}}}},"n":{"docs":{},"df":0,"a":{"docs":{},"df":0,"g":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.0},"https://phlip9.com/notes/management/":{"tf":1.0}},"df":2}}},"r":{"docs":{},"df":0,"b":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"u":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/confidential computing/marblerun/":{"tf":1.0}},"df":1}}}}}},"k":{"docs":{},"df":0,"o":{"docs":{},"df":0,"v":{"docs":{"https://phlip9.com/notes/AI ML/Markov Decision Process (MDP)/":{"tf":1.0}},"df":1}}}},"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/crypto/tls exported keying material/":{"tf":1.0}},"df":1}}}}},"d":{"docs":{},"df":0,"p":{"docs":{"https://phlip9.com/notes/AI ML/Markov Decision Process (MDP)/":{"tf":1.0}},"df":1}},"e":{"docs":{},"df":0,"d":{"docs":{},"df":0,"i":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/statistics probability/MAD - median absolute deviation/":{"tf":1.0}},"df":1}}}},"s":{"docs":{},"df":0,"h":{"docs":{"https://phlip9.com/notes/devops/service mesh/":{"tf":1.0}},"df":1}}},"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"i":{"docs":{},"df":0,"k":{"docs":{},"df":0,"u":{"docs":{},"df":0,"b":{"docs":{"https://phlip9.com/notes/devops/minikube/":{"tf":1.0}},"df":1}}}}},"s":{"docs":{},"df":0,"c":{"docs":{"https://phlip9.com/notes/misc/":{"tf":1.0}},"df":1}}},"l":{"docs":{"https://phlip9.com/notes/AI ML/":{"tf":1.0}},"df":1},"o":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"g":{"docs":{},"df":0,"o":{"docs":{"https://phlip9.com/notes/keyboards/moergo glove80/":{"tf":1.0}},"df":1}}}},"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/monetary instruments/":{"tf":1.0}},"df":1}}}},"y":{"docs":{"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/money services business (MSB)/":{"tf":1.0}},"df":1}},"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"p":{"docs":{},"df":0,"o":{"docs":{"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":1.0}},"df":1}}}}}},"r":{"docs":{},"df":0,"e":{"docs":{"https://phlip9.com/notes/management/relieve often - why generals were more successful in WWII/":{"tf":1.0}},"df":1}},"z":{"docs":{},"df":0,"i":{"docs":{},"df":0,"l":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{"https://phlip9.com/notes/devops/secrets/mozilla SOPS/":{"tf":1.0}},"df":1}}}}}},"s":{"docs":{},"df":0,"b":{"docs":{"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/money services business (MSB)/":{"tf":1.0}},"df":1}},"u":{"docs":{},"df":0,"l":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/statistics probability/G-test - multinomial goodness-of-fit/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/multinomial distribution/":{"tf":1.0}},"df":2}}}},"p":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"h":{"docs":{"https://phlip9.com/notes/btc-ln/atomic multipath payments (AMP)/":{"tf":1.0}},"df":1}}}},"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"p":{"docs":{},"df":0,"o":{"docs":{"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"tf":1.0}},"df":1}}}},"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/combinatorics/k-combinations of a multiset/":{"tf":1.0}},"df":1}}}}}}},"y":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"k":{"docs":{},"df":0,"o":{"docs":{"https://phlip9.com/notes/confidential computing/mystikos/":{"tf":1.0}},"df":1}}}}}}},"n":{"docs":{"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/":{"tf":1.4142135623730951},"https://phlip9.com/notes/b l o c k c h a i n/":{"tf":1.0}},"df":2,"e":{"docs":{},"df":0,"t":{"docs":{},"df":0,"w":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"k":{"docs":{"https://phlip9.com/notes/btc-ln/lightning network notes/":{"tf":1.0},"https://phlip9.com/notes/networking/":{"tf":1.0},"https://phlip9.com/notes/networking/network interface card (NIC)/":{"tf":1.0},"https://phlip9.com/notes/networking/network interfaces/":{"tf":1.0}},"df":4}}}}}},"i":{"docs":{},"df":0,"c":{"docs":{"https://phlip9.com/notes/networking/network interface card (NIC)/":{"tf":1.0}},"df":1},"x":{"docs":{"https://phlip9.com/notes/devops/secrets/sops-nix/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/nix/nix auto-allocate-uids -> nixbld users/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/nix/nix debug broken package build/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/nix/nix debug spurrious rebuilds/":{"tf":1.0}},"df":4,"b":{"docs":{},"df":0,"l":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/reproducible builds/nix/nix auto-allocate-uids -> nixbld users/":{"tf":1.0}},"df":1}}}}},"o":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 7 - p2p node and channel discovery/":{"tf":1.0}},"df":1}},"i":{"docs":{},"df":0,"s":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 8 - secure noise transport/":{"tf":1.0}},"df":1}},"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/devops/nomad/":{"tf":1.0}},"df":1}}},"t":{"docs":{},"df":0,"e":{"docs":{"https://phlip9.com/notes/btc-ln/lightning network notes/":{"tf":1.0},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"tf":1.0},"https://phlip9.com/notes/nvim/universal-ctags Notes/":{"tf":1.0}},"df":3}}},"v":{"docs":{},"df":0,"i":{"docs":{},"df":0,"m":{"docs":{"https://phlip9.com/notes/nvim/":{"tf":1.0}},"df":1}}}},"o":{"docs":{"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/":{"tf":1.4142135623730951},"https://phlip9.com/notes/b l o c k c h a i n/":{"tf":1.0}},"df":2,"a":{"docs":{},"df":0,"s":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"tf":1.0}},"df":1}},"u":{"docs":{},"df":0,"t":{"docs":{},"df":0,"h":{"docs":{"https://phlip9.com/notes/crypto/dex - open-source OIDC & OAuth 2.0 provider/":{"tf":1.0}},"df":1}}}},"i":{"docs":{},"df":0,"d":{"docs":{},"df":0,"c":{"docs":{"https://phlip9.com/notes/crypto/dex - open-source OIDC & OAuth 2.0 provider/":{"tf":1.0}},"df":1}}},"n":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 4 - onion routing protocol/":{"tf":1.0}},"df":1}}},"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/crypto/smallstep - private online CA & ACME server/":{"tf":1.0}},"df":1}}}},"p":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/crypto/dex - open-source OIDC & OAuth 2.0 provider/":{"tf":1.0}},"df":1},"r":{"docs":{"https://phlip9.com/notes/lang/operator fixity and precedence/":{"tf":1.0}},"df":1}},"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"m":{"docs":{"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.0},"https://phlip9.com/notes/misc/optimization solvers/":{"tf":1.0}},"df":2}}}},"s":{"docs":{},"df":0,"s":{"docs":{"https://phlip9.com/notes/devops/o11y/jaeger oss e2e tracing/":{"tf":1.0}},"df":1}},"t":{"docs":{},"df":0,"a":{"docs":{"https://phlip9.com/notes/android/OTA updates for rooted android phone/":{"tf":1.0}},"df":1}},"v":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/android/ADB over TCP inside WSL2/":{"tf":1.0}},"df":1,"v":{"docs":{},"df":0,"i":{"docs":{},"df":0,"e":{"docs":{},"df":0,"w":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/lightning router overview/":{"tf":1.0}},"df":2}}}}}}}},"p":{"docs":{"https://phlip9.com/notes/statistics probability/p-value/":{"tf":1.0}},"df":1,"2":{"docs":{},"df":0,"p":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 7 - p2p node and channel discovery/":{"tf":1.0}},"df":1}},"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"k":{"docs":{},"df":0,"a":{"docs":{},"df":0,"g":{"docs":{"https://phlip9.com/notes/reproducible builds/nix/nix debug broken package build/":{"tf":1.0}},"df":1}}}},"y":{"docs":{},"df":0,"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/btc-ln/atomic multipath payments (AMP)/":{"tf":1.0}},"df":1}}}}}},"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"f":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"m":{"docs":{"https://phlip9.com/notes/performance/":{"tf":1.0},"https://phlip9.com/notes/postgres/postgres performance tuning/":{"tf":1.0}},"df":2}}}}}},"h":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"e":{"docs":{"https://phlip9.com/notes/android/OTA updates for rooted android phone/":{"tf":1.0},"https://phlip9.com/notes/android/root phone with magisk/":{"tf":1.0}},"df":2}}}},"o":{"docs":{},"df":0,"p":{"docs":{},"df":0,"_":{"docs":{},"df":0,"o":{"docs":{"https://phlip9.com/notes/misc/pop_OS! tweaks/":{"tf":1.0}},"df":1}}},"r":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/router/lightning router/captive portal/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/arubanetworks captive portal/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"tf":1.0}},"df":4}}}},"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"g":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/postgres/":{"tf":1.0},"https://phlip9.com/notes/postgres/postgres performance tuning/":{"tf":1.0}},"df":2}}}}},"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"e":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/lang/operator fixity and precedence/":{"tf":1.0}},"df":1}}},"p":{"docs":{"https://phlip9.com/notes/misc/prepping RPI for embedded dev/":{"tf":1.0}},"df":1}},"i":{"docs":{},"df":0,"v":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/crypto/smallstep - private online CA & ACME server/":{"tf":1.0}},"df":1}}}},"o":{"docs":{},"df":0,"b":{"docs":{},"df":0,"a":{"docs":{},"df":0,"b":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/statistics probability/":{"tf":1.0}},"df":1}}}},"c":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"s":{"docs":{"https://phlip9.com/notes/AI ML/Markov Decision Process (MDP)/":{"tf":1.0}},"df":1}}}},"f":{"docs":{},"df":0,"i":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/performance/profiling/":{"tf":1.0}},"df":1}}},"p":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/fuzzing/bolero - fuzzing + property testing/":{"tf":1.0}},"df":1}}}}},"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/BOLT 4 - onion routing protocol/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":1.0},"https://phlip9.com/notes/crypto/acme protocol/":{"tf":1.0}},"df":4}}}}},"v":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/btc-ln/breez lightning service providers/":{"tf":1.0},"https://phlip9.com/notes/crypto/dex - open-source OIDC & OAuth 2.0 provider/":{"tf":1.0}},"df":2}}}}},"u":{"docs":{},"df":0,"b":{"docs":{},"df":0,"k":{"docs":{},"df":0,"e":{"docs":{},"df":0,"y":{"docs":{"https://phlip9.com/notes/crypto/TLS self-signed pubkey-only certs/":{"tf":1.0}},"df":1}}}}}},"q":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/misc/scanning QR codes on desktop/":{"tf":1.0}},"df":1}},"r":{"docs":{"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/":{"tf":1.0}},"df":1,"a":{"docs":{},"df":0,"s":{"docs":{},"df":0,"p":{"docs":{},"df":0,"b":{"docs":{},"df":0,"i":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/misc/setting up a headless raspbian boot image/":{"tf":1.0}},"df":1}}}}}}},"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"v":{"docs":{"https://phlip9.com/notes/lang/rust/understanding sycamore reactivity/":{"tf":1.0}},"df":1}}}}},"b":{"docs":{},"df":0,"u":{"docs":{},"df":0,"i":{"docs":{},"df":0,"l":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/reproducible builds/nix/nix debug spurrious rebuilds/":{"tf":1.0}},"df":1,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/reproducible builds/rebuilderd/":{"tf":1.0}},"df":1}}}}}}}},"f":{"docs":{"https://phlip9.com/notes/lang/gdb ref/":{"tf":1.0}},"df":1,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"c":{"docs":{"https://phlip9.com/notes/lang/rust/self-referencing structs/":{"tf":1.0}},"df":1}}}}}},"g":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/distributed systems/papers/(2020) Semi-Fast Byzantine-tolerant Shared Register without Reliable Broadcast/":{"tf":1.0}},"df":1}}}},"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"a":{"docs":{},"df":0,"b":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/distributed systems/papers/(2020) Semi-Fast Byzantine-tolerant Shared Register without Reliable Broadcast/":{"tf":1.0}},"df":1}}},"e":{"docs":{},"df":0,"v":{"docs":{"https://phlip9.com/notes/management/relieve often - why generals were more successful in WWII/":{"tf":1.0}},"df":1}}}},"m":{"docs":{},"df":0,"o":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"tf":1.0}},"df":2}}},"p":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/foreign bank account report (FBAR)/":{"tf":1.0}},"df":1}}},"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"d":{"docs":{},"df":0,"u":{"docs":{},"df":0,"c":{"docs":{"https://phlip9.com/notes/reproducible builds/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/nix/":{"tf":1.0},"https://phlip9.com/notes/reproducible builds/reproducible-builds.org/":{"tf":1.0}},"df":3}}}}}}},"f":{"docs":{},"df":0,"c":{"docs":{"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0}},"df":1}},"g":{"docs":{},"df":0,"b":{"docs":{},"df":0,"x":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{"https://phlip9.com/notes/misc/rgbxmas/":{"tf":1.0}},"df":1}}}}},"o":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/btc-ln/lightning rod/":{"tf":1.0}},"df":1},"o":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/android/OTA updates for rooted android phone/":{"tf":1.0},"https://phlip9.com/notes/android/root phone with magisk/":{"tf":1.0}},"df":2}},"u":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 4 - onion routing protocol/":{"tf":1.0}},"df":1,"e":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/router/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/lightning router overview/":{"tf":1.0}},"df":3,"/":{"docs":{},"df":0,"c":{"docs":{},"df":0,"a":{"docs":{},"df":0,"p":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/router/lightning router/captive portal/":{"tf":1.0}},"df":1}}}},"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"g":{"docs":{},"df":0,"h":{"docs":{},"df":0,"t":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/router/lightning router/":{"tf":1.0},"https://phlip9.com/notes/router/lightning router/captive portal/":{"tf":1.0}},"df":2}}}}}}}}}}}},"p":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/misc/prepping RPI for embedded dev/":{"tf":1.0}},"df":1}},"r":{"docs":{"https://phlip9.com/notes/lang/rust/rr with rust/":{"tf":1.0}},"df":1},"s":{"docs":{"https://phlip9.com/notes/fuzzing/fuzzcheck-rs/":{"tf":1.0}},"df":1},"u":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/rr with rust/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/rust verification tools/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/rust x SGX/":{"tf":1.0}},"df":5}}}},"s":{"docs":{},"df":0,"a":{"docs":{},"df":0,"f":{"docs":{},"df":0,"e":{"docs":{"https://phlip9.com/notes/devops/secrets/sy - share secrets safely/":{"tf":1.0}},"df":1}}},"c":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/misc/scanning QR codes on desktop/":{"tf":1.0},"https://phlip9.com/notes/postgres/types of scans/":{"tf":1.0}},"df":2}}},"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"tf":1.0}},"df":1},"r":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{"https://phlip9.com/notes/AI ML/Expectimax Search/":{"tf":1.0}},"df":1}}}},"c":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/devops/secrets/1password - secrets automation/":{"tf":1.0},"https://phlip9.com/notes/devops/secrets/sy - share secrets safely/":{"tf":1.0}},"df":2}}},"u":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 8 - secure noise transport/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/secure time/":{"tf":1.0}},"df":2}}},"l":{"docs":{},"df":0,"f":{"docs":{"https://phlip9.com/notes/crypto/TLS self-signed pubkey-only certs/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/self-referencing structs/":{"tf":1.0}},"df":2}},"m":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/distributed systems/papers/(2020) Semi-Fast Byzantine-tolerant Shared Register without Reliable Broadcast/":{"tf":1.0}},"df":1}},"r":{"docs":{},"df":0,"v":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/crypto/smallstep - private online CA & ACME server/":{"tf":1.0},"https://phlip9.com/notes/devops/algo wireguard VPN server/":{"tf":1.0}},"df":2}},"i":{"docs":{},"df":0,"c":{"docs":{"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/money services business (MSB)/":{"tf":1.0},"https://phlip9.com/notes/btc-ln/breez lightning service providers/":{"tf":1.0},"https://phlip9.com/notes/devops/AKS - azure kubernetes service/":{"tf":1.0},"https://phlip9.com/notes/devops/service mesh/":{"tf":1.0}},"df":4}}}},"t":{"docs":{"https://phlip9.com/notes/misc/setting up a headless raspbian boot image/":{"tf":1.0}},"df":1,"u":{"docs":{},"df":0,"p":{"docs":{"https://phlip9.com/notes/android/android cli setup/":{"tf":1.0},"https://phlip9.com/notes/android/linux ADB udev setup/":{"tf":1.0},"https://phlip9.com/notes/ios/ios setup/":{"tf":1.0},"https://phlip9.com/notes/lang/flutter/flutter setup/":{"tf":1.0},"https://phlip9.com/notes/misc/water distillation setup/":{"tf":1.0}},"df":5}}}},"g":{"docs":{},"df":0,"x":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/":{"tf":1.0},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/rust x SGX/":{"tf":1.0}},"df":3}},"h":{"docs":{},"df":0,"a":{"docs":{},"df":0,"2":{"docs":{},"df":0,"5":{"docs":{},"df":0,"6":{"docs":{"https://phlip9.com/notes/crypto/hkdf-sha256/":{"tf":1.0}},"df":1}}},"r":{"docs":{},"df":0,"e":{"docs":{"https://phlip9.com/notes/devops/secrets/sy - share secrets safely/":{"tf":1.0},"https://phlip9.com/notes/distributed systems/papers/(2020) Semi-Fast Byzantine-tolerant Shared Register without Reliable Broadcast/":{"tf":1.0}},"df":2}}},"e":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/statistics probability/cheat sheet/":{"tf":1.0}},"df":1}}},"o":{"docs":{},"df":0,"p":{"docs":{},"df":0,"i":{"docs":{},"df":0,"f":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/devops/secrets/ejson (Shopify)/":{"tf":1.0}},"df":1}}}}}},"i":{"docs":{},"df":0,"g":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/crypto/TLS self-signed pubkey-only certs/":{"tf":1.0}},"df":1,"a":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0}},"df":1}}}},"m":{"docs":{},"df":0,"d":{"docs":{},"df":0,"j":{"docs":{},"df":0,"s":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/performance/simdjson talk/":{"tf":1.0}},"df":1}}}}}},"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":1.0}},"df":1}}},"z":{"docs":{},"df":0,"e":{"docs":{"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"tf":1.0}},"df":1}}},"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"l":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"p":{"docs":{"https://phlip9.com/notes/crypto/smallstep - private online CA & ACME server/":{"tf":1.0}},"df":1}}}}}}}},"n":{"docs":{},"df":0,"i":{"docs":{},"df":0,"p":{"docs":{},"df":0,"p":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/postgres/snippets/":{"tf":1.0}},"df":1}}}}}},"o":{"docs":{},"df":0,"l":{"docs":{},"df":0,"v":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/misc/optimization solvers/":{"tf":1.0}},"df":1}}}},"n":{"docs":{},"df":0,"g":{"docs":{"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"tf":1.0}},"df":1}},"p":{"docs":{"https://phlip9.com/notes/devops/secrets/mozilla SOPS/":{"tf":1.0},"https://phlip9.com/notes/devops/secrets/sops-nix/":{"tf":1.0}},"df":2},"u":{"docs":{},"df":0,"r":{"docs":{},"df":0,"c":{"docs":{"https://phlip9.com/notes/crypto/dex - open-source OIDC & OAuth 2.0 provider/":{"tf":1.0}},"df":1}}}},"p":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"e":{"docs":{"https://phlip9.com/notes/networking/ipv6 address space/":{"tf":1.0}},"df":1}}},"u":{"docs":{},"df":0,"r":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"u":{"docs":{"https://phlip9.com/notes/reproducible builds/nix/nix debug spurrious rebuilds/":{"tf":1.0}},"df":1}}}}}}},"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/statistics probability/standard error/":{"tf":1.0}},"df":1}}}}},"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"s":{"docs":{"https://phlip9.com/notes/crypto/(talk) authenticated data structures for stateless validation/":{"tf":1.0}},"df":1}}}}},"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/statistics probability/":{"tf":1.0}},"df":1}}},"u":{"docs":{"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"tf":1.0}},"df":1}}},"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"g":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/devops/deployment strategies/":{"tf":1.0}},"df":1}}}}},"u":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/lang/rust/self-referencing structs/":{"tf":1.0}},"df":1,"u":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/crypto/(talk) authenticated data structures for stateless validation/":{"tf":1.0}},"df":1}}}}}}},"u":{"docs":{},"df":0,"b":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/btc-ln/submarine swaps/":{"tf":1.0}},"df":1}}}}}},"c":{"docs":{},"df":0,"c":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"s":{"docs":{"https://phlip9.com/notes/management/relieve often - why generals were more successful in WWII/":{"tf":1.0}},"df":1}}}}},"i":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/sui/":{"tf":1.0}},"df":1}},"w":{"docs":{},"df":0,"a":{"docs":{},"df":0,"p":{"docs":{"https://phlip9.com/notes/btc-ln/submarine swaps/":{"tf":1.0}},"df":1}}},"y":{"docs":{"https://phlip9.com/notes/devops/secrets/sy - share secrets safely/":{"tf":1.0}},"df":1,"c":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/lang/rust/sycamore x futures/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/understanding sycamore reactivity/":{"tf":1.0}},"df":2}}}}},"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"m":{"docs":{"https://phlip9.com/notes/distributed systems/":{"tf":1.0}},"df":1,"s":{"docs":{},"df":0,"/":{"docs":{},"df":0,"p":{"docs":{},"df":0,"a":{"docs":{},"df":0,"p":{"docs":{"https://phlip9.com/notes/distributed systems/papers/":{"tf":1.0}},"df":1}}}}}}}}}}},"t":{"docs":{"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/":{"tf":1.0}},"df":1,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"k":{"docs":{"https://phlip9.com/notes/crypto/(talk) authenticated data structures for stateless validation/":{"tf":1.0},"https://phlip9.com/notes/performance/simdjson talk/":{"tf":1.0}},"df":2}},"r":{"docs":{},"df":0,"g":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/misc/arm target triples/":{"tf":1.0}},"df":1}}}}},"c":{"docs":{},"df":0,"p":{"docs":{"https://phlip9.com/notes/android/ADB over TCP inside WSL2/":{"tf":1.0}},"df":1}},"d":{"docs":{},"df":0,"x":{"docs":{"https://phlip9.com/notes/confidential computing/intel TDX/":{"tf":1.0}},"df":1}},"e":{"docs":{},"df":0,"e":{"docs":{"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.0}},"df":1},"s":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/fuzzing/bolero - fuzzing + property testing/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/G-test - multinomial goodness-of-fit/":{"tf":1.0},"https://phlip9.com/notes/statistics probability/testing whether a coin is fair/":{"tf":1.0}},"df":3}}},"i":{"docs":{},"df":0,"m":{"docs":{},"df":0,"e":{"docs":{"https://phlip9.com/notes/confidential computing/intel SGX/secure time/":{"tf":1.0}},"df":1}}},"l":{"docs":{"https://phlip9.com/notes/crypto/TLS self-signed pubkey-only certs/":{"tf":1.0},"https://phlip9.com/notes/crypto/tls exported keying material/":{"tf":1.0}},"df":2},"o":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/distributed systems/papers/(2020) Semi-Fast Byzantine-tolerant Shared Register without Reliable Broadcast/":{"tf":1.0}},"df":1}}},"o":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/lang/rust/rust verification tools/":{"tf":1.0}},"df":1}}},"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"e":{"docs":{"https://phlip9.com/notes/devops/o11y/jaeger oss e2e tracing/":{"tf":1.0}},"df":1}},"n":{"docs":{},"df":0,"s":{"docs":{},"df":0,"p":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/btc-ln/BOLT 8 - secure noise transport/":{"tf":1.0}},"df":1}}}}}}},"i":{"docs":{},"df":0,"p":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/misc/arm target triples/":{"tf":1.0}},"df":1}}}},"u":{"docs":{},"df":0,"n":{"docs":{},"df":0,"e":{"docs":{"https://phlip9.com/notes/postgres/postgres performance tuning/":{"tf":1.0}},"df":1}},"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"tf":1.0}},"df":1}}}}},"w":{"docs":{},"df":0,"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"k":{"docs":{"https://phlip9.com/notes/misc/pop_OS! tweaks/":{"tf":1.0}},"df":1}}}},"y":{"docs":{},"df":0,"p":{"docs":{},"df":0,"e":{"docs":{"https://phlip9.com/notes/postgres/types of scans/":{"tf":1.0}},"df":1}}}},"u":{"docs":{"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/":{"tf":1.0}},"df":1,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"v":{"docs":{"https://phlip9.com/notes/android/linux ADB udev setup/":{"tf":1.0}},"df":1}}},"i":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/reproducible builds/nix/nix auto-allocate-uids -> nixbld users/":{"tf":1.0}},"df":1}},"n":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/lang/rust/understanding sycamore reactivity/":{"tf":1.0}},"df":1}}}}}}}},"i":{"docs":{},"df":0,"v":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"s":{"docs":{"https://phlip9.com/notes/nvim/universal-ctags Notes/":{"tf":1.0}},"df":1}}}}}},"p":{"docs":{"https://phlip9.com/notes/misc/setting up a headless raspbian boot image/":{"tf":1.0}},"df":1,"d":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/android/OTA updates for rooted android phone/":{"tf":1.0}},"df":1}}},"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"m":{"docs":{"https://phlip9.com/notes/misc/uptime to downtime conversion/":{"tf":1.0}},"df":1}}}},"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/reproducible builds/nix/nix auto-allocate-uids -> nixbld users/":{"tf":1.0}},"df":1}}},"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"e":{"docs":{},"df":0,"x":{"docs":{},"df":0,"o":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/btc utreexo - utxo accumulator/":{"tf":1.0}},"df":1}}}}},"x":{"docs":{},"df":0,"o":{"docs":{"https://phlip9.com/notes/b l o c k c h a i n/btc utreexo - utxo accumulator/":{"tf":1.0}},"df":1}}}},"v":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/crypto/(talk) authenticated data structures for stateless validation/":{"tf":1.0}},"df":1}},"u":{"docs":{"https://phlip9.com/notes/statistics probability/p-value/":{"tf":1.0}},"df":1}}},"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"f":{"docs":{"https://phlip9.com/notes/lang/rust/rust verification tools/":{"tf":1.0}},"df":1}}}},"p":{"docs":{},"df":0,"n":{"docs":{"https://phlip9.com/notes/devops/algo wireguard VPN server/":{"tf":1.0}},"df":1}}},"w":{"docs":{"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/":{"tf":1.0}},"df":1,"a":{"docs":{},"df":0,"s":{"docs":{},"df":0,"m":{"docs":{"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"tf":1.0}},"df":1}},"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/misc/water distillation setup/":{"tf":1.0}},"df":1}}}},"h":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{},"df":0,"h":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/statistics probability/testing whether a coin is fair/":{"tf":1.0}},"df":1}}}}}},"i":{"docs":{},"df":0,"k":{"docs":{},"df":0,"i":{"docs":{},"df":0,"p":{"docs":{},"df":0,"e":{"docs":{},"df":0,"d":{"docs":{},"df":0,"i":{"docs":{},"df":0,"a":{"docs":{"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"tf":1.0}},"df":1}}}}}}},"n":{"docs":{},"df":0,"s":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{"https://phlip9.com/notes/statistics probability/winsorize/":{"tf":1.0}},"df":1}}}},"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"g":{"docs":{},"df":0,"u":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"d":{"docs":{"https://phlip9.com/notes/devops/algo wireguard VPN server/":{"tf":1.0}},"df":1}}}}}}},"t":{"docs":{},"df":0,"h":{"docs":{},"df":0,"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{"https://phlip9.com/notes/distributed systems/papers/(2020) Semi-Fast Byzantine-tolerant Shared Register without Reliable Broadcast/":{"tf":1.0}},"df":1}}}}}},"s":{"docs":{},"df":0,"l":{"docs":{"https://phlip9.com/notes/WSL/":{"tf":1.0}},"df":1,"2":{"docs":{"https://phlip9.com/notes/WSL/WSL2 custom kernel/":{"tf":1.0},"https://phlip9.com/notes/android/ADB over TCP inside WSL2/":{"tf":1.0},"https://phlip9.com/notes/android/building signal-android in WSL2/":{"tf":1.0}},"df":3}}},"w":{"docs":{},"df":0,"i":{"docs":{},"df":0,"i":{"docs":{"https://phlip9.com/notes/management/relieve often - why generals were more successful in WWII/":{"tf":1.0}},"df":1}}}},"x":{"docs":{"https://phlip9.com/notes/lang/rust/rust x SGX/":{"tf":1.0},"https://phlip9.com/notes/lang/rust/sycamore x futures/":{"tf":1.0}},"df":2},"y":{"docs":{"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/":{"tf":1.0}},"df":1},"z":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{"https://phlip9.com/notes/btc-ln/zero-conf channels/":{"tf":1.0}},"df":1}}},"k":{"docs":{},"df":0,"d":{"docs":{},"df":0,"o":{"docs":{},"df":0,"c":{"docs":{"https://phlip9.com/notes/crypto/zkdocs/":{"tf":1.0}},"df":1}}}}}}}},"documentStore":{"save":true,"docs":{"https://phlip9.com/notes/":{"body":"hey! welcome to my notes\n\nmy name's philip. i do stuff. it's usually related to oneof { Rust, Cryptography, Distributed Systems, Blockchains }.\ni used to work on Libra Diem Aptos.\nmy current project's TBA, but it's Lightning Network related : )\n","id":"https://phlip9.com/notes/","title":"_index"},"https://phlip9.com/notes/AI ML/":{"body":"","id":"https://phlip9.com/notes/AI ML/","title":"AI ML"},"https://phlip9.com/notes/AI ML/Expectimax Search/":{"body":"expectimax search\n\n\nAdversarial search algorithm (two competitive agents)\nNon-deterministic Environment (actions can have randomness)\nExpectimax is like Minimax but for non-deterministic games.\nHave Player1, Player2, and Chance node levels in our search tree.\nUnlike minimax which only requires evaluation functions to preserve ordering, expectimax requires that our evaluation function $f(\\text{leaf-state})$ must be a Positive Linear Operator on the win probability (so it must also preserves positive-ness) to be optimal.\n\nRecall: the evaluation function scores terminal states (game end) and depth-pruned states (states exceeding a depth limit).\n\n\n\nPruning + State & Q-State Cache\n \n #\n \n\n\nSee also: 2007 - Effective Use of Transposition Tables in Stochastic Game Tree Search\nFor a chance node, we're taking the mean of each possible outcome.\nAs we explore branches from the chance node, our upper and lower bound estimates of the mean slowly tighten, until we explore all branches and the mean becomes an exact value.\nWe can think of the lower bounds as taking the current exact value plus the sum of the rest of the probabilities times the worst possible outcome. Likewise the upper bound is the current exact value plus the sum of the rest of the probabilities times the best possible value.\nWith a naive alpha-beta pruning and q-state caching strategy, we might prune a branch but still cache the current estimate. However, this would only be a valid estimate for another path if the alpha-beta bounds are tighter.\nInstead of just recording a single value, we record an enum with two cases\nCase 1: the exact value, meaning we've fully explored all branches of this chance node.\nCase 2: an upper and lower bound and a thunk(?) to resume exploration of this node, meaning there are still more branches to explore.\nIn this way, we don't lose any information when we place a q-state into the cache. If another path has looser alpha-beta bounds (maybe we hit the q-state again on a higher level in the next branch) then it can explore the q-state some more before it decides to possibly prune or not.\nWhat about min- and max-state caching?\n \n #\n \n\n\nWe presumably do the same thing with only upper xor lower bounds resp. vs exact value plus resumable exploration thunk.\nHow do we prune?\n \n #\n \n\n\nAt a given chance node we have the bound $[\\alpha, \\beta]$ from our parent node, showing the best case known for the max (alpha) and best case known for the min (beta).\nAs we explore this chance node, we continually refine down our current best estimate bounds $[a, b]$ as we explore more branches. As soon as we see the bound intervals $[a, b]$ and $[\\alpha, \\beta]$ no longer intersect, we can prune.\nAppendix\n \n #\n \n\n\nPositive Linear Operator\n \n #\n \n\n\nsource: https://www.wikiwand.com/en/Positive_linear_operator\nFor scalar spaces, positive linear operators are functions of the form:\n\\[\nf(x) = a_1 \\cdot x + a_2 \\qquad \\text{where } a_1 > 0\n\\]\nMore generally, let $(X, \\le_X)$ and $(Y, \\le_Y)$ be vector spaces with preorder operators $\\le_X$ and $\\le_Y$ resp.\nLet $f \\;:\\; X \\mapsto Y$ be a function from $X$ to $Y$. The function $f$ is a positve linear operator if:\n\nIt preserves positive-ness, i.e., positive elements in $X$ are all mapped to positive elements in $Y$.\nIt preserves the preordering (homomorphic?), i.e., if $x_1 \\le_X x_2$, then $f(x_1) \\le_Y f(x_2)$.\n\nFormally, $f$ is a positive linear operator if\n\\[\n\\begin{align*}\n\t\\forall \\; x_1,\\, x_2 \\in X, &\\text{ where } 0 \\le_X x_1, x_2 \\; : & \\\\\n\t\\\\\n\t&0 \\le_Y f(x_1) \\text{ and } 0 \\le_Y f(x_2) &\\text{(1.) preserves positive-ness} \\\\\n\t&f(x_1) \\le_Y f(x_2) &\\text{(2.) preserves the preordering}\n\\end{align*}\n\\]\nFor example, consider a simple zero-sum game where agents $A$ and $B$ have utility functions\n\\[\n\\begin{align*}\n\tU_A\n\t&= p_w \\cdot r + (1 - p_w) \\cdot -r \\\\\n\t&= r \\cdot (2 \\cdot p_w - 1) \\\\\n\t&= 2 r \\cdot p_w - r \\\\\n\tU_B\n\t&= (1 - p_w) \\cdot r + p_w \\cdot -r \\\\\n\t&= p_l \\cdot r + (1 - p_l) \\cdot -r \\\\\n\t&= 2r \\cdot p_l - r\n\\end{align*}\n\\]\nwhere $p_w$ is the probability agent $A$ wins and $p_l$ is just the probability agent $A$ loses and agent $B$ wins.\nNotice that these simple utility functions are both positive linear transformations of each agent's win probability $p_w$ and $p_l$ resp. This property makes them both equivalent to using the normalized score (i.e., win probability) in an expectimax search.\n","id":"https://phlip9.com/notes/AI ML/Expectimax Search/","title":"Expectimax Search"},"https://phlip9.com/notes/AI ML/Markov Decision Process (MDP)/":{"body":"markov decision process (MDP)\n\n\\[\n\\renewcommand{\\Pr}[1]{\\text{Pr}\\left[ #1 \\right]}\n\\renewcommand{\\E}[1]{\\mathbb{E}\\left[ #1 \\right]}\n\\renewcommand{\\argmax}{\\text{argmax}}\n\\]\nOverview\n \n #\n \n\n\nA Markov Decision Process (MDP) is a 4-tuple, $(S, A, P_a, R_a)$, where:\n\n$S$ is the State space\n$A$ is the Action space (or $A = \\set{ A_s \\;|\\; s \\in S}$, where $A_s$ are the actions available at state $s$)\n$P(s', s, a) = \\Pr{s' \\;|\\; s, a}$ is the transition probability from states $s$ to $s'$ given the agent took action $a$.\n\nThe transition probabilities must be Markovian (i.e., \"memoryless\"); they must not depend on prior states (other than the most recent).\nRecall that we can always engineer \"memorylessness\" into a process by just redefining each new process state as the complete history of states to the given state, though this is often prohibitively expensive.\n\n\n$R(s, s', a)$ is the immediate (or expected immediate) reward when going from states $s$ to $s'$ using action $a$.\n\nWe also have policy functions $\\pi : S \\mapsto A$ which take a state and output which action to take at that state.\nIf we fix a policy function $\\pi$ for a given MDP, we actually get a standard markov chain (since there's no more pesky non-linear max in there). This markov chain has state transition probabilities\n\\[\n\\Pr{s_{t+1} = s' \\;|\\; s_t = s} = P(s', s, \\pi(s))\n\\]\nOur objective for an MDP is to find an optimal policy $\\pi^*$ that maximizes the expected (discounted) sum of rewards\n\\[\n\\E{\\sum_{t=0}^\\infty \\gamma^t \\cdot R(s_t,\\, s_{t+1},\\, \\pi^*(s_t))}\n\\]\nwhere $0 \\le \\gamma \\le 1$ is a discounting factor.\nThe hyperparameter $\\gamma$ is a quantity we control. It reflects how much we value short-term rewards over long-term rewards. $\\gamma$ values closer to zero are miopic (prioritize short-term rewards). $\\gamma$ values closer to one produce more optimal policies, but may prevent our learning algorithm from converging within a reasonable time.\nSimulator models\n \n #\n \n\n\nLearning the optimal policy $\\pi^*$ means first choosing an algorithm appropriate for our process. Different algorithms require different assumptions about the process and require varying levels of simulator model fidelity.\nHere are three popular algorithms in decreasing order of required simulator model fidelity:\n\nDynamic Programming (e.g. Value Iteration): requires an explicit model of the MDP. This explicit model contains the complete transition probability function and reward function. For certain games, the transition and reward functions could be discrete and infinitely large, ruling out this approach.\nMCTS (Monte Carlo Tree Search): requires a generative model, which means you can generate samples of the next state and reward given a prior state and action. If you can efficiently simulate a single turn of your game without knowing the complete dynamics, MCTS may be an option.\nReinforcement Learning (RL): only requires an episodic simulator. In this case, all we need are samples of full episodes (e.g. full game rollouts like $[(s_0, a_0, r_0),\\; (s_1, a_1, r_1,\\; \\ldots,\\; (s_k, a_k, r_k))]$). For instance, AlphaStar (which uses RL) trains on full Starcraft replays as opposed to extracting the core game logic to simulate single game ticks in isolation.\n\nAlgorithms\n \n #\n \n\n\nPreliminaries\n \n #\n \n\n\nBefore we dive into the algorithms, let's first take a look at some different ways we can express the value of states and q-states under the optimal policy $\\pi^*$:\n\\[\n\\begin{align*}\n\tQ^*(s, a)\n\t&= \\sum_{s'} P(s', s, a) \\cdot (R(s', s, a) + \\gamma \\cdot V^*(s')) & \\text{(1.)} \\\\\n\t&= \\sum_{s'} P(s', s, a) \\cdot (R(s', s, a) + \\gamma \\cdot \\max_{a' \\in A_{s'}} Q^*(s', a')) & \\text{(2.)} \\\\\n\t\\\\\n\tV^*(s)\n\t&= \\max_{a \\in A_s} Q^*(s, a) \\\\\n\t&= \\max_a \\sum_{s'} P(s', s, a) \\cdot (R(s', s, a) + \\gamma \\cdot V^*(s')) & \\text{(3.)} \\\\\n\t\\\\\n\tV^\\pi(s)\n\t&= Q^\\pi(s, \\pi(s)) \\\\\n\t&= \\sum_{s'} P(s', s, \\pi(s)) \\cdot (R(s', s, \\pi(s)) + \\gamma \\cdot V^*(s')) & \\text{(4.)} \\\\\n\t\\\\\n\t\\pi(s)\n\t&= \\underset{a \\in A_s}{\\argmax} \\; Q^\\pi(s, a) & \\text{(5.)} \\\\\n\\end{align*}\n\\]\n\nThis is the standard Q-state value formulation under the optimal policy (also called a Q-value).\nThe Q-values expressed only in terms of other Q-values. Used in Q-value iteration.\nThe state value under the optimal policy expressed in terms of other state values. Used in value iteration.\nThe state value given an explicit policy. Used in policy iteration.\nThe policy update equation. For each state, look at all the actions, evaluate them based on the previous policy, then set the new policy action to the best action. Used in policy iteration.\n\nDynamic Programming\n \n #\n \n\n\nValue Iteration\n \n #\n \n\n\nValue iteration (as the name implies) iteratively improves our estimate of the optimal state values $V^*$ until convergence.\nWe start with an initial estimate $V_0$ of all the state values. We then iterate from $k = 0, 1, 2, \\ldots$, updating our next estimate of the state values $V_{k+1}$ from the current estimate $V_k$. For each iteration, we loop through all the possible states $s \\in S$ and update $V_{k+1}(s)$ like so\n\\[\nV_{k+1}(s) \\gets \\max_a \\sum_{s'} P(s', s, a) \\cdot (R(s', s, a) + \\gamma \\cdot V_k(s'))\n\\]\nNotice that we're not learning an explicit policy function $\\pi$ here. Instead, the policy is implicit in the $\\max$. If we want to recover an explicit policy function for our current estimate, $\\pi_{k+1}(s)$, we simply look at all actions $a$ from state $s$ and choose the one with the greatest expected reward\n\\[\n\\pi_{k+1}(s) = \\underset{a}{\\argmax} \\sum_{s'} P(s', s, a) \\cdot (R(s', s, a) + \\gamma \\cdot V_k(s'))\n\\]\nThere are some proofs that this converges, so long as certain properties are true. For our purposes, we just care about the required properties:\n\nIf the game is finite, then value iteration always converges regardless of $\\gamma$.\nIf the game is infinite but has absorbing states that are reached w.p. 1 as $k \\rightarrow \\infty$ then value iteration converges regardless of $\\gamma$.\nOtherwise, for an infinite game, without absorbing states, we need a discounting value $0 \\le \\gamma < 1$ and a bounded maximum state transition reward $R_\\text{max}$. You can see that with $\\gamma < 1$ and a bounded reward, the maximum possible reward sum is bounded by\n\n\\[\nR(s_1, s_0, a) + \\gamma \\cdot R(s_2, s_1, a) + \\gamma^2 \\cdot R(s_3, s_2, a) + \\cdots \\le \\sum_{t = 0}^\\infty \\gamma^t \\cdot R_\\text{max} = \\frac{1}{1 - \\gamma} \\cdot R_\\text{max}\n\\]\nQ-value Iteration\n \n #\n \n\n\nWe can also do value iteration, but store Q-values instead of state-values. For some games, the space of Q-states $(s, a)$ (action $a$ applied to state $s$) might be significantly smaller than the original state space.\nIn these cases, we use Q-value Iteration over Value Iteration. The Q-value Iteration update equation looks nearly identical, except we just swap the order of the mean and max\n\\[\nQ_{k+1}(s, a) = \\sum_{s'} P(s', s, a) \\cdot (R(s', s, a) + \\gamma \\cdot \\max_{a'} Q_{k}(s', a')\n\\]\nFinally, our recovered policy\n\\[\n\\pi_{k+1}(s) = \\underset{a}{\\argmax} \\; Q_{k}(s, a)\n\\]\n","id":"https://phlip9.com/notes/AI ML/Markov Decision Process (MDP)/","title":"Markov Decision Process (MDP)"},"https://phlip9.com/notes/WSL/":{"body":"","id":"https://phlip9.com/notes/WSL/","title":"WSL"},"https://phlip9.com/notes/WSL/WSL2 custom kernel/":{"body":"WSL2 custom kernel\n\nWhy\n \n #\n \n\n\nI want to run perf inside WSL. My current WSL2 kernel doesn't appear to support hardware performance counters. The HEAD WSL2 kernel supports hardware performance counters (apparently). So I will compile the HEAD kernel and use that.\nHow\n \n #\n \n\n\nBefore\n$ uname -a\nLinux phlipdesk 5.10.60.1-microsoft-standard-WSL2 #1 SMP Wed Aug 25 23:20:18 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux\n\nInstall deps, clone kernel, build\n$ sudo apt install build-essential flex bison dwarves libssl-dev libelf-dev\n$ git clone git@github.com:microsoft/WSL2-Linux-Kernel.git\n$ cd WSL2-Linux-Kernel\n$ make -j12 KCONFIG_CONFIG=Microsoft/config-wsl\n\nCopy built kernel\n$ cp ./arch/x86/boot/bzImage /mnt/c/Users/phlip9/linux-kernel-wsl-5.10.93.2-bzImage\n\nAdd this line to C:\\Users\\phlip9\\.wslconfig\n# Settings apply across all Linux distros running on WSL 2\n[wsl2]\n\n# ..\n\n# Point us to a custom kernel image so `perf` works : )\nkernel=C:\\\\Users\\\\phlip9\\\\linux-kernel-wsl-5.10.93.2-bzImage\n\nRestart WSL (in Powershell)\nPS > wsl --shutdown\n\nConfirm that we're running the new kernel : )\n$ uname -a\nLinux phlipdesk 5.10.93.2-microsoft-standard-WSL2+ #1 SMP Mon Feb 7 20:04:04 PST 2022 x86_64 x86_64 x86_64 GNU/Linux\n\nHmm not seeing any change in the performance events...\n$ dmesg | grep -i perf\n[ 0.043340] Performance Events: unsupported p6 CPU model 158 no PMU driver, software events only.\n\nTo get perf counters showing, I needed to install WSL from the Microsoft Store, which apparently gets updates faster?\nMeta Key > Microsoft Store > Search \"windows subsystem for linux\" > Get\nConfirm working inside WSL\n$ dmesg | grep -i perf\n[ 0.272452] Performance Events: Skylake events, 32-deep LBR, full-width counters, Intel PMU driver.\n\nperf\n \n #\n \n\n\nNote: you need to build perf against the exact kernel version you're on.\nBuild perf\n$ sudo apt install libdw-dev libunwind-dev asciidoc\n$ cd WSL2-Linux-Kernel/tools/perf\n$ make -j12\n$ cp ./perf ~/.local/bin\n$ make install-man\n\nTo run perf we need to tell the kernel to stfu and not be paranoid\n$ sudo -- bash -c \"echo -1 > /proc/sys/kernel/perf_event_paranoid\"\n\nRelevant options\n$ perf record --help\n\n\t-F, --freq=\n\t Profile at this frequency (samples/sec)\n\n\t-g\n\t\tEnables call-graph recording\n\n\t--call-graph\n\t\tSetup and enable call-graph recording (implies -g)\n\n$ perf script --help\n\n\t-F, --fields\n\t\tcomma separated list of fields to print\n\n\t--no-inline\n\t\tIgnore inlined functions in call stacks\n\nInstall rustfilt for Rust symbol demangling\n$ RUSTFLAGS=\"-C target-cpu=native\" c install rustfilt\n\nRecord profile\n$ perf record --call-graph dwarf --freq=1000 program options\n\nConvert to text format and demangle\n$ perf script -F +pid | rustfilt > perf.data.perf\n\nOpen in (https://profiler.firefox.com/) or (https://www.speedscope.app/). More details: profiling.\n","id":"https://phlip9.com/notes/WSL/WSL2 custom kernel/","title":"WSL2 custom kernel"},"https://phlip9.com/notes/__pub/":{"body":"","id":"https://phlip9.com/notes/__pub/","title":"__pub"},"https://phlip9.com/notes/android/":{"body":"","id":"https://phlip9.com/notes/android/","title":"android"},"https://phlip9.com/notes/android/ADB over TCP inside WSL2/":{"body":"ADB over TCP inside WSL2\n\nProblem\n \n #\n \n\n\nThere are two problems with WSL2 that make connecting to an Android device over adb challenging. First, the network interface inside WSL2 is behind a NAT and not exposed to the LAN. This means we can't directly connect to any devices (like our phone) on the LAN. Second, any connected USB devices aren't visible inside WSL2.\nPossible Approaches\n \n #\n \n\n\n\n\n(Chosen) Create a socat tunnel inside Windows pointing at the phone.\n\n\nChange the WSL2 virtual network from NAT to Bridge mode (looks sketchy)\nhttps://develmonk.com/2021/06/05/easiest-wsl2-bridge-network-without-hyper-v-virtual-network-manager/\n\n\nHack some stuff to make USB devices forward to WSL2? (looks sketchy)\nhttps://devblogs.microsoft.com/commandline/connecting-usb-devices-to-wsl/\n\n\nOverview\n \n #\n \n\n\nSince we can't connect directly from WSL2 to our device, we're going to set up a TCP tunnel running on the Windows side, pointing to the device. We'll then run all our adb operations over this tunnel.\nProcess\n \n #\n \n\n\n\n\nInstall socat inside MSYS2 in Windows.\nmsys$ pacman -S socat\n\n\n\nOn the Android device, enable \"Wireless debugging\" inside the Developer options.\n\n\nIn the \"Wireless debugging\" menu, hit \"Pair device with pairing code\". This will generate a random code and bind the phone adb daemon to a random port. This port is only used temporarily for the pairing process.\n\n\nInside MSYS2, setup a temporary tunnel pointing to the device IP and port for the WSL2 adb to pair on.\nmsys$ socat tcp4-listen:2205,reuseaddr,fork,nodelay tcp4-connect:192.168.2.242:43148,nodelay\n\n\n\nInside WSL2, pair with the android device over our temporary socat tunnel.\nwsl2$ ifconfig\neth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500\n inet 172.19.160.252 netmask 255.255.240.0 broadcast 172.19.175.255\n\nwsl2$ adb pair 172.19.160.1:2205\n\n\n\nClose the temporary socat tunnel.\n\n\nNote the long-term wireless debugging port, in this case 38654.\n\n\nInside MSYS2, setup a new tunnel pointing at the device IP and long-term port. Keep in mind that we'll always need this tunnel running whenever we want to use adb inside WSL2.\nmsys$ socat tcp4-listen:2205,reuseaddr,fork,nodelay tcp4-connect:192.168.2.242:38654,nodelay\n\n\n\nInside WSL2, connect to the android device over our tunnel.\nwsl2$ adb connect 172.19.160.1.:2205\n\n\n\nMake sure it works.\nwsl2$ adb shell\nwalleye:/ $\n\n\n\n","id":"https://phlip9.com/notes/android/ADB over TCP inside WSL2/","title":"ADB over TCP inside WSL2"},"https://phlip9.com/notes/android/OTA updates for rooted android phone/":{"body":"OTA updates for rooted android phone\n\nEDIT(2022-04-06): clearly needs updating b/c it didn't work...\nMake sure automatic OTA updates are set OFF in the developer settings. We need to do the right steps in order to update successfully.\nWhen you finally get an OTA update, make sure you don't run it yet. Instead:\n\nMake sure Magisk is up-to-date. That means update the (1) App and (2) Magisk install. To update the Magisk install, open the updated app and hit Update next to \"Magisk\". Of the available install methods, choose Direct Install, wait for it to complete, then hit the Reboot button.\nNext, we want to temporarily uninstall Magisk. In Magisk Manager, hit the red \"Uninstall Magisk\" button. There are two options, Complete Uninstall and something called \"Restore Images\". Choose the restore images one.\nPlug in your device and actually run the OTA update. DO NOT REBOOT YET.\nGo back into Magisk Manager and hit Install > Install to inactive slot. It should automatically detect the updated images in the inactive slot and patch magisk into it.\nFinally, reboot the phone. You should now have a successfully updated phone that still has root and Magisk Manager in it.\n\nUnrooting?\n \n #\n \n\n\nDownload latest OTA update image: https://developers.google.com/android/ota#barbet\nReboot into recovery + sideload\n$ adb reboot sideload\n\nSideload OTA update\n$ adb sideload ota.zip\n\nSelect Reboot\n","id":"https://phlip9.com/notes/android/OTA updates for rooted android phone/","title":"OTA updates for rooted android phone"},"https://phlip9.com/notes/android/android cli setup/":{"body":"android cli setup\n\ninstall java (via sdkman)\n \n #\n \n\n\n\nwhen you run sdk list java, there's a bunch of different options; I just installed whatever https://whichjdk.com/ recommended (11.0.17-tem) and it seems to work.\n\n# ensure `.bashrc` contains these lines:\n#\n# ```\n# export SDKMAN_DIR=\"$HOME/.local/sdkman\"\n#\n# [[ -s \"$SDKMAN_DIR/bin/sdkman-init.sh\" ]] \\\n# \t&& source \"$SDKMAN_DIR/bin/sdkman-init.sh\"\n# ```\n\n# download the sdkman install script\n$ cd ~/.local/\n$ curl --proto '=https' --tlsv1.3 -sSf \"https://get.sdkman.io?rcupdate=false\" > sdkman-install.sh\n$ sha256sum sdkman-install.sh\n419762944a301418a6c68021c5c864f54a3ce3e013571bd38da448439695f582\n\n# install sdkman\n$ chmod a+x ./sdkman-install.sh\n$ ./sdkman-install.sh\n$ rm sdkman-install.sh\n\n# reload $PATH\n$ source ~/.bashrc\n\n# install JDK\n$ sdk list java\n$ sdk install java 11.0.17-tem\n\n# sanity check\n$ which javac\n/home/phlip9/.local/sdkman/candidates/java/current/bin/javac\n$ javac --version\njavac 11.0.17\n\ninstall android cmdline-tools\n \n #\n \n\n\n\nDownload the command-line tools only package: https://developer.android.com/studio#command-line-tools-only\n\n$ cd ~/.local/\n\n# (linux) download\n$ wget https://dl.google.com/android/repository/commandlinetools-linux-9123335_latest.zip -O commandlinetools.zip\n$ sha256sum commandlinetools.zip\n0bebf59339eaa534f4217f8aa0972d14dc49e7207be225511073c661ae01da0a\n\n# (macOS) download\n$ wget https://dl.google.com/android/repository/commandlinetools-mac-9123335_latest.zip -O commandlinetools.zip\n$ sha256sum commandlinetools.zip\nd0192807f7e1cd4a001d13bb1e5904fc287b691211648877258aa44d1fa88275\n\n# see zip file structure\n$ unzip -l commandlinetools.zip\ncmdline-tools/bin/...\ncmdline-tools/lib/...\ncmdline-tools/...\n\n# install into ~/.local/android/cmdline-tools/latest\n$ mkdir -p android/cmdline-tools/latest\n$ unzip commandlinetools.zip -d android/cmdline-tools/latest\n$ mv android/cmdline-tools/latest/cmdline-tools/* android/cmdline-tools/latest/\n$ rmdir android/cmdline-tools/latest/cmdline-tools\n$ rm commandlinetools.zip\n\n# ensure .bashrc contains these lines:\n#\n# ```\n# # Android\n# export ANDROID_HOME=$HOME/.local/android\n# ANDROID_SDK_VERSION=33.0.1\n# ANDROID_PATH=$ANDROID_HOME/cmdline-tools/latest/bin\n# ANDROID_PATH=$ANDROID_PATH:$ANDROID_HOME/build-tools/$ANDROID_SDK_VERSION\n# ANDROID_PATH=$ANDROID_PATH:$ANDROID_HOME/platform-tools\n#\n# export PATH=$PATH:$ANDROID_PATH\n# ```\n\n# sanity check\n$ which sdkmanager\n/home/phlip9/.local/android/cmdline-tools/latest/bin/sdkmanager\n$ sdkmanager --version\n8.0\n\ninstall android SDK via sdkmanager\n \n #\n \n\n\n# let's blindly accept all licenses : )\n$ yes | sdkmanager --licenses\n\n# check out the available SDK packages\n$ sdkmanager --list\nadd-ons;addon-google_apis-google-24\nbuild-tools;33.0.1\ncmake;3.22.1\ncmdline-tools;latest\nemulator\nextras;android;m2repository\nextras;google;auto\nextras;google;google_play_services\nextras;google;instantapps\nextras;google;m2repository\nextras;google;market_apk_expansion\nextras;google;market_licensing\nextras;google;simulators\nextras;google;webdriver\nextras;m2repository;com;android;support;constraint;constraint-layout-solver;1.0.0\nextras;m2repository;com;android;support;constraint;constraint-layout-extras;m2repository;com;android;support;constraint;constraint-layout-solver;1.0.2\nextras;m2repository;com;android;support;constraint;constraint-layout;1.0.2\nndk-bundle\nndk;25.1.8937393\npatcher;v4\nplatform-tools\nplatforms;android-33\nplatforms;android-TiramisuPrivacySandbox\nskiaparser;3\nsources;android-33\nsystem-images;android-33;google_apis;arm64-v8a\nsystem-images;android-33;google_apis;x86_64\nsystem-images;android-33;google_apis_playstore;arm64-v8a\nsystem-images;android-33;google_apis_playstore;x86_64\nsystem-images;android-TiramisuPrivacySandbox;google_apis_playstore;arm64-v8a\nsystem-images;android-TiramisuPrivacySandbox;google_apis_playstore;x86_64\n\n# .. this goes on for a while\n\n# install these. probably use the most recent versions?\n$ sdkmanager --install \\\n\t\"build-tools;33.0.1\" \\\n\t\"platform-tools\" \\\n\t\"platforms;android-33\" \\\n\t\"sources;android-33\" \\\n\t\"ndk;25.1.8937393\"\n\n# sanity check\n$ adb version\nAndroid Debug Bridge version 1.0.41\nVersion 33.0.3-8952118\nInstalled as /home/phlip9/.local/android/platform-tools/adb\n\n(optional) setup wireless debugging on device\n \n #\n \n\n\nConnecting to your device via USB sucks. Here's how to develop for any local wifi-connected Android device.\n\nDevice > Settings > Developer options > Wireless debugging > enable\nDevice > Settings > Developer options > Wireless debugging (tap on the text, not the toggle button) > Pair device with pairing code\n\nThe device will then generate a pairing code and bind to a temporary port just for pairing. You should see a modal window pop up with the pairing info:\n\n\n\nWi-Fi pairing code\n772405\n\nIP address & Port\n10.69.69.129:37269\n\n\nHost > run adb pair to pair with the device:\n\n$ adb pair 10.69.69.129:37269 772405\n\nYou should see the host user@hostname under the \"Paired Devices\" section.\n\nHost > connect to the device:\n\nTo connect use the fixed device adb port:\n$ adb connect phlipphone.lan:42835\nconnected to phlipphone.lan:42835\n\n\nVerify the device is actually attached:\n\n$ adb devices\nList of devices attached\nphlipphone.lan:42835 device\n\n","id":"https://phlip9.com/notes/android/android cli setup/","title":"android cli setup"},"https://phlip9.com/notes/android/building signal-android in WSL2/":{"body":"building signal-android in WSL2\n\nBe warned, these instructions are more devlog, less polished tutorial.\nBuild\n \n #\n \n\n\n\n\nswtich from non-existant motherboard-connected TPM to integrated Intel CPU TPM\n+ restart > BIOS > Advanced\\PCH > TPM -> Firmware TPM\n\n\nWindows PC Health Check says machine meets all requirements, but windows update incorrectly refuses to upgrade\n+ Manually run Windows11 Installation Assistant (https://www.microsoft.com/software-download/windows11)\n\n\nWindows11 Installation Assistant errors with cryptic error code 0x8007007f\n+ Need to explicitly run as administrator\n\n\nUpdate Nvidia GeForce drivers to 510 (https://developer.nvidia.com/cuda/wsl)\n\n\nUpdate wsl\n# In Powershell/cmd (run as admin)\n$ wsl --update\n$ wsl --shutdown\n\n\n\ntest GUI apps (in WSL)\n$ sudo apt-get install x11-apps\n$ xcalc\n\nThis should run an x11 calculator GUI app in windows.\n\n\nInstall android sdks (https://developer.android.com/studio)\n+ Download android studio and extract into ~/android-studio.\nProbably copy these snippets that I have in my ~/.bashrc\n# file: ~/.bashrc\n\n# ..\n\n# Java SDKMAN\nexport SDKMAN_DIR=\"$HOME/.sdkman\"\n\n# Android\nexport ANDROID_SDK_ROOT=$HOME/android\nANDROID_STUDIO=$HOME/android-studio\nANDROID_SDK_VERSION=31.0.0\nANDROID_PATH=$ANDROID_SDK_ROOT/cmdline-tools/latest/bin\nANDROID_PATH=$ANDROID_PATH:$ANDROID_SDK_ROOT/build-tools/$ANDROID_SDK_VERSION\nANDROID_PATH=$ANDROID_PATH:$ANDROID_SDK_ROOT/tools\nANDROID_PATH=$ANDROID_PATH:$ANDROID_SDK_ROOT/tools/bin\nANDROID_PATH=$ANDROID_PATH:$ANDROID_SDK_ROOT/platform-tools\n\n# ..\n\n# PATH\nexport PATH=$PATH:$ANDROID_PATH\n\n# ..\n\n# Java SDKMAN\n[[ -s \"$HOME/.sdkman/bin/sdkman-init.sh\" ]] && source \"$HOME/.sdkman/bin/sdkman-init.sh\"\n\n\n\nInstall some missing x11 lib needed to run android studio.\n$ sudo apt-get install libxtst6\n\n\n\nInstall JDK 1.8 (version required by Signal) and JDK 11 (version required by gradle)\n$ curl --proto '=https' --tlsv1.2 -sSf \"https://get.sdkman.io?rcupdate=false\" | bash\n$ source ~/.bashrc\n$ sdk install java 8.0.302-open\n$ sdk install java 11.0.12-open\n\n\n\nOpen android studio\n$ ~/android-studio/bin/studio.sh\n\nEnsure you choose the newly installed JDK1.8 when following initial setup.\nDownload generic SDK, SDK v31, and device emulator into $HOME/android directory. My bashrc should already have $PATHs setup for this.\n\n\nUpdate android studio plugins. Try building a sample app (I chose Sunflower)\n\n\nInstall additional SDK libs\n$ sdkmanager --sdk_root=\"${ANDROID_HOME}\" --update\n$ sdkmanager --sdk_root=\"${ANDROID_HOME}\" --install \\\n\t\"cmdline-tools;latest\" \\\n\t\"extras;google;m2repository\" \\\n\t\"extras;android;m2repository\" \\\n\t\"extras;google;google_play_services\"\n\n\n\nTry building Signal-Android\n$ git clone ..\n$ cd Signal-Android\n$ ./gradlew clean assemblePlayProdRelease\n\n$ cd app/build/outputs/apk/playProd/release/\n$ ls\nSignal-Android-play-prod-arm64-v8a-release-unsigned-5.27.13.apk Signal-Android-play-prod-x86-release-unsigned-5.27.13.apk\nSignal-Android-play-prod-armeabi-v7a-release-unsigned-5.27.13.apk Signal-Android-play-prod-x86_64-release-unsigned-5.27.13.apk\nSignal-Android-play-prod-universal-release-unsigned-5.27.13.apk output-metadata.json\n# Sign apk so we can install\n# Since I already built/installed a sample app, there's already debug\n# keys generated from android studio in `~/.android/debug.keystore`.\n# Note: the default password is \"android\"\n# EDIT: doesn't work $ jarsigner -verbose -keystore ~/.android/debug.keystore Signal-Android-play-prod-x86_64-release-unsigned-5.27.13.apk androiddebugkey\n$ apksigner sign \\\n\t--verbose \\\n\t--v4-signing-enabled \\\n\t--ks ~/.android/debug.keystore \\\n\t--ks-pass pass:android \\\n\t--in Signal-Android-play-prod-x86_64-release-unsigned-5.27.13.apk \\\n\t--out Signal-Android-play-prod-x86_64-release-signed-5.27.13.apk\n\n\n\nSetting up virtual device\n$ sudo adduser $USER kvm\n\n# in WSL2 need to do this every restart...\n$ sudo chgrp kvm /dev/kvm && sudo chmod g+rw /dev/kvm\n\n# verify\n$ ls -la /dev/kvm\ncrw------- 1 root kvm 10, 232 Dec 8 11:46 /dev/kvm\n\nIn the IDE AVD Manager, choose an image to download. IDK what is good lmao\n+If avdmanager list returns Exception .. NoClassDefFoundError .. XmlSchema\n+ Default platform-tools fail when run with java 11 but not java 8\n+ Works with the cmdline-tools/latest versions. Those are now set higher prio in my $PATH\nInstalling random missing dependencies\n$ sudo apt-get install libnss3 libxcomposite1\n\ncan verify kvm should work\n$ sudo apt-get install cpu-checker\n$ kvm-ok\nINFO: /dev/kvm exists\nKVM acceleration can be used\n\nTesting emulator on cli\n# Why does it fail when run outside of this directory?????\n$ cd ~/android/emulator\n$ ./emulator -avd Pixel_2_API_31\n\nHoly shit it actually worked lmao. It complains a bit about \"nested emulation\" not supported well.\nIt's not clear that this made any sort of difference?\n# file: /mnt/c/Users/phlip9/.wslconfig\n# Settings apply across all Linux distros running on WSL 2\n[wsl2]\n# Enable nested virtualization\n# I believe this will improve perf when running an Android emulator inside WSL2?\nnestedVirtualization=true\n\nReporting error connecting to adb daemon on some port 5XXX. Dunno if this is important or not.\nSuccessfully ran \"Sunflower\" sample app on emulator!! :D\n\n\nTesting Signal-Android on emulator\nCheck that device is visible from adb and we can connect\n$ adb devices\nList of devices attached\nemulator-5554\tdevice\n\n$ adb -s emulator-5554 shell\nemulator64_x86_64_arm64:/ $ uname -a\nLinux localhost 5.10.43-android12-9-00031-g02d62d5cece1-ab7792588 #1 SMP PREEMPT Mon Oct 4 21:48:11 UTC 2021 x86_64\n\n$ adb -s emulator-5554 install -r Signal-Android-play-prod-x86_64-release-signed-5.27.13.apk\n\nRun the Signal app\nIt works!! Need working phone SIM I think to get past setup screen...\n\n\nSetup google voice (https://voice.google.com) number and use it to get past setup screen\n\n\nAndroid Studio / IDEA setup for Signal Android\n$ cd Signal-Android\n# generates .idea project files\n$ ./gradlew idea\n\nThen start Android Studio and open ~/dev/Signal-Android project directory.\nHit > Load Gradle Project and then > Trust Project\nGradle will complain about some partially supported distributionSha256Sum option in gradle-wrapper.properties. Tell it to STFU and keep going (first option).\nEverything should finish first build successfully.\n\n\nUnderstanding Signal build variants\nIn the base build.gradle you can see they define a bunch of different build variants, which end up generating a billion different gradle tasks and really complicating my life.\nTLDR; target PlayStagingDebug\nAFAICT, there's effectively { Play, Website, Nightly, Study } x { Prod, Staging } x { Debug, Release, Flipper, Perf, Mock } targets +/- some cases.\nFor developing, I think we want Debug, which uses the debug.keystore for signing (vs actual keys for pushing to Play store).\nI'm not sure what Study is, maybe a mock UI or something. Probably target Play or Website.\nIt looks like Flipper refers to https://fbflipper.com/ which is some nice app UI/UX debug/development thing. IDK how to use it yet tho.\nDuring development, we probably target Staging so don't accidentally fuck up Signal's prod services. You can also see the MobileCoin config switches to testnet on Staging vs Prod. Need to see if hitting Staging works with a real phone #.\nBuilding PlayStagingDebug and then installing onto device/emulator:\nIn CLI:\n./gradlew installPlayStagingDebug\n\nIn IDE:\n(gradle tasks must be synced) Gradle Tab > Signal > Tasks > install > installPlayStagingDebug\n\n\nUnderstanding Android x Gradle\n\nWhen you make changes to any build.gradle or w/e you need to re-sync Gradle in the IDE.\nI also enabled \"update Gradle tasks during sync option\"\nDefault project structure:\n\n\nSignal-Android/app/src/test: local unit tests. these are actually run on your local machine and must have no dependency on the Android framework (or only mocks).\nSignal-Android/app/src/androidTest: on-device instrumented tests. these tests must run on a device or emulator. they also have an app Context and access to the Instrumentation API for manipulating UIs etc...\nI'm having a lot of trouble building + deploying to the emulator via the IDE. Dunno if this is some local config/setup issue but for now going to try just doing all build+deploy from the cli.\nRun local unit tests\n$ ./gradlew testPlayStagingDebugUnitTest\n\nRun specific test (more filter rules: https://docs.gradle.org/current/userguide/java_testing.html#test_filtering)\n$ ./gradlew testPlayStagingDebugUnitTest --tests *.myTestMethod\n\nContinuously run tests (or any task)\n$ ./gradlew --continuous testPlayStagingDebugUnitTest\n\n\n\nActually running the unit tests\n$ ./gradlew testPlayStagingDebugUnitTest\n\nUnfortunately I got like 33 errors initially, claiming the following:\norg.thoughtcrime.securesms.database.model.GroupsV2UpdateMessageProducerTest > you_requested_to_join_the_group FAILED\n\n\t\tjava.lang.UnsatisfiedLinkError:\n\t\t\t/tmp/resource8597950725831998403.so: /lib/x86_64-linux-gnu/libm.so.6: version 'GLIBC_2.29' not found (required by /tmp/resource8597950725831998403.so)\n\nThis means the installed libc version is too outdated compared to the compiled library's requirements. In this case, I needed to update Ubuntu from a fairly old version (18.04) to the next LTS (20.04).\n# Confirm that we're on ubuntu 18.04 right now\n$ lsb_release -a\nNo LSB modules are available.\nDistributor ID: Ubuntu\nDescription: Ubuntu 18.04.6 LTS\nRelease: 18.04\nCodename: bionic\n\n# For some reason need to do this o/w upgrade silently aborts\n$ sudo apt purge snapd\n\n# Upgrade and clean up everything before upgrading\n$ sudo apt update\n$ sudo apt list --upgradable\n$ sudo apt upgrade\n$ sudo apt --purge autoremove\n\n# Begin the upgrade\n$ sudo apt install update-manager-core\n$ sudo do-release-upgrade\n\n# also needed to rebuild tmux after this????\n\nAfter finishing that, all local unit tests completed successfully :^)\n$ ./gradlew testPlayStagingDebugUnitTest\n# ..\nBUILD SUCCESSFUL in 2m 20s\n194 actionable tasks: 186 executed, 8 up-to-date\n\n\n\nDeploying to real device\nFirst setup ADB over TCP inside WSL2, then simply\n$ ./gradlew installPlayStagingDebug\n\n\n\nTODO\n \n #\n \n\n\n\n\nlook into \"Configure hardware acceleration for the Android Emulator\" (https://developer.android.com/studio/run/emulator-acceleration)\n\n","id":"https://phlip9.com/notes/android/building signal-android in WSL2/","title":"building signal-android in WSL2"},"https://phlip9.com/notes/android/linux ADB udev setup/":{"body":"linux ADB udev setup\n\nIf you connect the device over USB and adb doesn't see it, this may be necessary. Make sure you try a few different USB cables first before reaching for this step.\n$ git clone --depth=1 https://github.com/M0Rf30/android-udev-rules.git\n$ sudo cp -v 51-android.rules /etc/udev/rules.d/\n$ sudo cp -v android-udev.conf /usr/lib/sysusers.d/\n$ sudo systemd-sysusers\n$ sudo gpasswd -a phlip9 adbusers\n$ sudo udevadm control --reload-rules\n$ sudo systemctl restart systemd-udevd.service\n$ adb kill-server\n\n","id":"https://phlip9.com/notes/android/linux ADB udev setup/","title":"linux ADB udev setup"},"https://phlip9.com/notes/android/root phone with magisk/":{"body":"root phone with magisk\n\nWe'll be rooting our device with Magisk Manager by patching a stock boot.img and then reflashing that image onto the device. Once completed, we should have a fully rooted device that can install adblock, use f.lux, run busybox cli tools, and so on.\nNote: this assumes we've already unlocked our bootloader, since we need to flash a patched boot partition.\nCaveats\n \n #\n \n\n\nWe can't automatically install OTA updates, otherwise we'll lose root. To preserve root, follow OTA updates for rooted android phone.\nInstall\n \n #\n \n\n\n\n\n(Windows) Download the Google Windows USB driver and extract somewhere. Right click -> Install.\n\n\n(Windows) Follow the instructions https://developer.android.com/studio/run/oem-usb#InstallingDriver to install the driver software or upgrade it.\n\n\nDownload the basic sdk platform-tools and extract somewhere https://developer.android.com/studio/releases/platform-tools.\nMake sure we can see our device:\n$ adb devices\nList of devices attached\nFA7AL1A02016 device\n\n\n\n(Linux) If adb doesn't detect the device, try linux ADB udev setup.\n\n\nFind our device (Pixel 2 - walleye) and the factory image corresponding with our current build (RP1A.201005.004.A1, Dec 2020) here (https://developers.google.com/android/images#walleye). Download the zip file under \"Link\". The file's pretty big, but we really only need the boot.img (inside another inner zip lol). Put that somewhere.\n\n\nNow we need to push the boot.img onto our device so Magisk Manager can patch it.\n(Windows) For some weird reason this command fails when run inside Git bash shell, so we need to run it in good ol' CMD lmao.\n$ adb push images/pixel2-walleye-rp1a.201005.004.a1/boot.img /sdcard/Download\n\n\n\nBack on our device, open up Magisk Manager, hit Magisk -> Install -> Select and Patch a File, and choose our /sdcard/Download/boot.img. This step should patch the boot.img and produce a file like magisk_patched-23000_Oin7Q.img.\n\n\n(Pixel 5a - 2022/01/15) Didn't work the first time with stable Magisk; needed to install the latest canary from https://github.com/topjohnwu/magisk-files/blob/master/canary.json\n\n\nPull the patched boot.img off our device.\n$ adb pull /sdcard/Download/magisk_patched-23000_Oin7Q.img images/pixel2-walleye-rp1a.201005.004.a1/\n\n\n\nNow we want to flash our patched boot.img onto our phone. Reboot the phone into fastboot mode (Restart -> Hold Volume Down or adb reboot bootloader). fastboot should detect the device now:\n$ fastboot devices\nFA7AL1A02016 fastboot\n\nFinally, flash the patched boot.img.\n$ fastboot flash boot images/pixel2-walleye-rp1a.201005.004.a1/magisk_patched-23000_Oin7Q.img\nSending 'boot_b' (32768 KB) OKAY [ 0.733s]\nWriting 'boot_b' OKAY [ 0.533s]\nFinished. Total time: 1.396s\n\nRestart the phone normally. Opening Magisk Manager should now detect the device as fully rooted!\n\n\nPost-Install\n \n #\n \n\n\n\nMake sure automatic OTA updates are set OFF in the developer settings so it doesn't silently update and clobber our root.\nIn order for our device to run certain apps that disallow root, we'll need to pass Google SafetyNet. To see our current status, hit \"Check SafetyNet\" in Magisk Manager. By default, our device will probably fail to pass Attestation. Unfortunately, this is even trickier for more recent devices which will run attestations inside a secure enclave. I believe there are some more sophisticated work-arounds to circumvent this.\nTo pass SafetyNet, let's first enable \"MagiskHide\" in the settings.\nAlso enable \"Hide the Magisk app\" and give it a different name. I called it \"M A G I S K M A N A G E R\" lmao.\nUnfortunately, my phone still doesn't pass the ctsProfile check even after the above. I don't need to hide right now, so maybe figure this out later...\nAdBlocking: Install AdAway from F-Droid. Enable \"Systemless hosts\" in Magisk Manager and then Reboot. Inside AdAway, use the Root-based AdBlock and then Reboot again.\n\n","id":"https://phlip9.com/notes/android/root phone with magisk/","title":"root phone with magisk"},"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/":{"body":"","id":"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/","title":"b i g m o n e y l a w r e g u l a t i o n"},"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/financial instituion/":{"body":"financial instituion\n\nThe following are considered financial institutions by FinCEN\n\nBanks (except bank credit card systems)\nBrokers or dealers in securities\nmoney services business (MSB)\nTelegraph companies\nCasinos (with gross gaming revenue >$1M)\nCard club, gaming club, card room, gaming room, etc... (with gross gaming revenue >$1M)\nAnyone subject to supervision by any bank supervisory authority, whether state or federal\nFutures commision merchants\nIntroduction brokers in commodities\nMutual funds\n\nLinks\n \n #\n \n\n\n\nFinCEN - 31 CFR § 1010.100\n\n","id":"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/financial instituion/","title":"financial instituion"},"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/foreign bank account report (FBAR)/":{"body":"foreign bank account report (FBAR)\n\nThe FBAR is a form you must submit to the IRS for your calendar year tax returns if\n\nYou're a US person.\nDuring the calendar year you had a financial interest or signature authority over a non-US financial account with an aggregate maximum account value over $10,000.\n\nAn FBAR is a disclosure form. It doesn't affect the amount of tax you must pay.\nMy guess is that it's a tool used by FinCEN, who receives the data from the IRS, to track money laundering (AML) and sanctions violations (speculation).\nWho is a US \"person\"?\n \n #\n \n\n\nUS person\n \n #\n \n\n\n\na US citizen\na US resident\nan entity (read. corporation, partnership, or LLC) created or organized in the US\na trust or estate formed in the US\n\nWhat is \"financial interest\" in a financial account?\n \n #\n \n\n\nfinancial interest\n \n #\n \n\n\n\nYou are the owner of record or holder of legal title. This applies regardless of whether the account is maintained for your benefit or the benefit of another.\nYou also have financial interest in a financial account owned by either (1) an entity that you control >50% ownership or (2) a trust where you are a >50% beneficiary.\n\nWhat is a \"financial account\"?\n \n #\n \n\n\nfinancial account\n \n #\n \n\n\n\nA securities, brokerage, savings, checking, deposit, etc... account maintained at a financial instituion.\nA commodity futures or options account, an insurance policy with cash value (like life insurance), an annuity policy with a cash value, or shares in a mutual fund.\nA retirement savings account or other types of government retiree or pensioner programs.\n\nDo \"virtual currency\" accounts need to be reported?\n \n #\n \n\n\nTL;DR: No, but probably Yes soon.\nNo: (2019-06) The Tax Adviser - Virtual currency not FBAR reportable (at least for now)\nNo: (2020-02) FinCEN - Report of Foreign Bank and Financial Accounts (FBAR) Filing Requirement for Virtual Currency\n\nHowever, FinCEN intends to propose to amend the regulations implementing the Bank Secrecy Act (BSA) regarding reports of foreign financial accounts (FBAR) to include virtual currency as a type of reportable account under 31 CFR 1010.350.\n\nNo: (2022-01) RicheyMay - Virtual Currency FBAR Filings in 2022\n\nAt the time of this article, the current guidance does not reflect this change; however, there is no doubt FinCEN is attempting to amplify the reach of the FBAR requirements with the objective of finding fraud, money laundering, and other financial crimes the forms are intended to detect.\n\nWhat is \"signature authority\" over a financial account?\n \n #\n \n\n\nsignature authority\n \n #\n \n\n\n\nYou (alone or in conjuction with another) have authority to control the assets in an account by direct communication with the holding financial instituion that maintains the account.\n\nHow does one determine the aggregate maximum account value?\n \n #\n \n\n\naggregate maximum account value\n \n #\n \n\n\n\nDetermine the max currency held in the account during the year, called the \"high-water mark\".\nConvert the high-water mark currency value to USD if necessary.\nIf the USD high-water mark is >$10k, then you must file an FBAR.\n\nWhen is the FBAR due?\n \n #\n \n\n\nApril 15 for residents. June 15 for expats. Either can ask for a deadline extension to October 15.\nWhat is the penalty for failing to file?\n \n #\n \n\n\nWillful violations: $100k or 50% of the total balance of the foreign account. Non-willful violations: $10k per violation.\nWilfull violations may also face prison terms of up to 10 yr and criminal penalties up to $500k.\nWhat information is needed for the FBAR?\n \n #\n \n\n\nFor each foreign account, you need:\n\nthe account number\nthe name and address of the foreign financial instituion\nthe high-water mark account value in USD\n(if the account is jointly owned) the joint owner's identity\n(if the account is one you have signature authority) the account owner's identity\n\nReferences\n \n #\n \n\n\n\nhttps://ustax.bz/fyi-fbar-faq/\n\n","id":"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/foreign bank account report (FBAR)/","title":"foreign bank account report (FBAR)"},"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/monetary instruments/":{"body":"monetary instruments\n\nThese are instruments where an intermediate bearer or holder can yoink the cash money.\n\nCurrency\nTravelers checks in any form\nAll negotiable instruments\n\nPersonal checks, business checks, official bank checks, caashier's checks, third-party checks, promissory notes, and money orders.\nMust be in bearer form or endorsed without restriction or in such a form that title passes upon delivery.\n\n\nIncomplete instruments\n\nSame as (3.) but signed with the payee's name omitted.\n\n\nSecurities or stock in bearer form\n\n","id":"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/monetary instruments/","title":"monetary instruments"},"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/money services business (MSB)/":{"body":"money services business (MSB)\n\nMSBs are considered financial instituions. Businesses in the following areas are MSBs:\n\nCurrency dealer or exchanger\nCheck casher\nIssuer of traveler's checks, money orders, or stored value\nSeller or redeemer of traveler's checkes, money orders, or stored value\nProvider of prepaid access\nMoney transmitter\nU.S. Postal Service\n\nMy very likely inaccurate summary of this list: MSBs are (1) currency exchangers and (2) money transmission intermediaries who hold custodial, depository, or bearer privileges.\nCurrency dealer or exchanger\n \n #\n \n\n\nBusinesses that accept monetary instruments in exchange for monetary instruments.\nCheck casher\n \n #\n \n\n\nA person that accepts checks or other monetary instruments in exchange for currency or monetary instruments.\nMoney transmitter\n \n #\n \n\n\nA person that provides \"money transmission services\". These are services where a business accepts currency, funds, or other monetary instruments from one person and transmits the currency, funds, or other monetary instruments to another by any means.\n\"Any means\" includes, but is not limited to transmission through\n\na financial agency or financial instituion\na Federal Reserve bank\nan electric funds transfer network\nan informal value transfer system\nany other person who is a Money transmitter\n\nMoney transmitter exclusions\n \n #\n \n\n\nThere are specific cases where a business is not considered a Money transmitter, despite otherwise handling currency, funds, or other monetary instruments. These are businesses that only\n\nProvide delivery, communication, or network access services used to support money transmission services.\nAct as a payment processor through a clearance and settlement system by agreement with the creditor or seller.\nOperate a clearance and settlement system or otherwise acts as an intermediary soley between BSA regulated institutions. This includes, but is not limited to\n\nthe Fedwire system\nelectronic funds transfer networks\nregistered clearning agencies regulated by the SEC\nderivatives clearing orgs or clearing house arrangements\n\n\nPhysically transport currency, other monetary instruments, commercial paper, or other value that substitutes for currency as a person primarily engaged in such business, like an armored car. This transport is only between the same person from one physical location to another.\nProvides pre-paid access\nAccepts and transmits funds only integral to the sale of goods or services (other than monetary transmission services) by the person who is accepting and transmitting the funds.\n\nActivity Threshold\n \n #\n \n\n\nThere is an activity threshold under which a business is not an MSB. Engaging in one of the above activities in amounts greater than $1000 per person per day in any number of transactions, qualifies that business as an MSB.\nNote that each activity is considered separately, so you can simulataneously not be an MSB for cashing checks if you're under the threshold, but be an MSB for currency exchange if you're over the threshold.\nNo activity threshold applies to the definition of money transmitter. Thus, a person who engages as a business in the transfer of funds is an MSB as a money transmitter, regardless of the amount of money transmission activity.\nNot an MSB\n \n #\n \n\n\nThe following are not included as MSBs:\n\nBanks\nPersons or entities regulated by the SEC or CFTC\n\nLinks\n \n #\n \n\n\n\nFinCEN - Money Services Business Definition\nFinCEN - 31 CFR § 1010.100 - (ff) Money services business\n\n","id":"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/money services business (MSB)/","title":"money services business (MSB)"},"https://phlip9.com/notes/b l o c k c h a i n/":{"body":"","id":"https://phlip9.com/notes/b l o c k c h a i n/","title":"b l o c k c h a i n"},"https://phlip9.com/notes/b l o c k c h a i n/aptos/":{"body":"aptos\n\n\nGithub: https://github.com/aptos-labs/aptos-core\nPeople I know: Avery, David, Josh, Greg, Zekun, Rustie, Sherry, Max\n\nSummary\n \n #\n \n\n\nAptos = Permission-less Diem = Diem - DiemAssociation - PoA + PoS + on-chain governance contracts\n","id":"https://phlip9.com/notes/b l o c k c h a i n/aptos/","title":"aptos"},"https://phlip9.com/notes/b l o c k c h a i n/bip158 - compact block filters/":{"body":"bip158 - compact block filters\n\n\nbip: https://github.com/bitcoin/bips/blob/master/bip-0158.mediawiki\nblog: https://blog.trezor.io/bip158-compact-block-filters-9b813b07a878\nuses Golomb Coded Sets over Bloom Filters since they're more compact.\nfull nodes build a unique CBF per block. each filter commits to the set of UTXOs that block consumes.\nlight clients, rather than registering their personal UTXOs w/ a full node (bad for privacy), instead request the CBF for a block and check whether the block touches any of their UTXOs.\n\n","id":"https://phlip9.com/notes/b l o c k c h a i n/bip158 - compact block filters/","title":"bip158 - compact block filters"},"https://phlip9.com/notes/b l o c k c h a i n/btc utreexo - utxo accumulator/":{"body":"btc utreexo - utxo accumulator\n\n\npaper: https://eprint.iacr.org/2019/611.pdf\ngithub: https://github.com/mit-dci/utreexo\nrelated (2016 - delayed txo commitments): https://petertodd.org/2016/delayed-txo-commitments\ncurrent compressed UTXO set size ~4 GiB\nbtc full nodes would like to verify txns w/o storing full history + UTXO set (need to actually download more data though).\ninstead, build UTXO set accumulator and have transactors present inclusion proofs for their txn inputs in the UTXO set, so you (the full node) can verify the txn.\nutreexo: use a dynamic accumulator to commit to the current UTXO set.\nlog(n): forest of perfect merkle trees. log n trees, where n is # UTXOs\ndynamic: efficient batch removal\ndifferent than merkle accumulator we used for txn history in diem (a merkle mountain range (MMR)), which was append-only with efficient inclusion, non-inclusion, and batch update proofs but no removals (used jellyfish sparse merkle tree for that).\naccumulator isn't commited to in consensus / block header / block. have to sync the whole thing from scratch lol.\noptimizes for min. persisted space vs max. bandwidth usage.\nper Tadge's words: \"not a commitment\", though you can certainly (ab)use it as one.\nnew block producer (or bridge node) can add aggregated UTXO accumulator insert/remove ops to get utreexo nodes to verify block.\ntransactors (or the full node they use to propagate) need to store the partial UTXO set accumulator, containing their UTXOs, so they can produce inclusion proofs.\n\n","id":"https://phlip9.com/notes/b l o c k c h a i n/btc utreexo - utxo accumulator/","title":"btc utreexo - utxo accumulator"},"https://phlip9.com/notes/b l o c k c h a i n/fastpay/":{"body":"fastpay\n\n\n\nDate: 2020-11-03\n\n\nPaper: https://arxiv.org/pdf/2003.11506.pdf\n\n\nAuthors: Mathieu, George, and Alberto (prev. colleagues)\n\n\ncan be used standalone or as a sidechain (well, secondary system since FP is not a blockchain)\n\n\nwhen used as a secondary, assume there is some nice, consistent primary system (like a blockchain, probably distributed, but maybe slow).\n\n\nunlike standard blockchains which use BFT Consensus, FP uses BFT Consistent Broadcast which is faster and simpler to implement (but obv. doesn't provide the full range of benefits as BFT Consensus).\n\n\nstate\n \n #\n \n\n\nauthorities\n \n #\n \n\n\n\nname\nkeys\ncomittee information\naccounts information\nlast primary tx index. See: user funding FP account.\n\nFor tailing funding txns on the primary system FP smart contract.\n\n\n\naccounts\n \n #\n \n\n\n\nverification key\nbalance\nsequence number\nlast transfer order\nlist of certificates and synchronization orders\n\nclients\n \n #\n \n\n\nClients need some persistent state:\n\naccount address\nsecret key\ncomittee information\nlast sequence number\nlast signed transfer order\n\npayment flow\n \n #\n \n\n\nThree entities:\n\nSender\nReceiver\nComittee\n\nFlow:\n\nSender -> broadcast -> Committee: signed transfer order to Receiver\nCommittee: verify statement (balance exists, sig checks, seqnum checks, etc...)\nEach Committee Member -> respond -> Sender: counter-signed transfer order certificate\nSender: now have at least 2f+1 signed transfer order certificates.\nAt least one of:\n\nSender -> broadcast -> Committee: aggregate STO certificate\nSender -> Receiver -> broadcast -> Committee: aggregate STO certificates\n\n\nCommittee: observe and verify aggregate STO certificate, update account balances, increment sender seqnum, etc...\n\nsharding\n \n #\n \n\n\n\nThe last update-account step, (6.), can be implemented in a sharded way for horizontal scalability.\nA single FastPay committee member can shard its user accounts across multiple machines (all in the same trust boundary).\n(1.) Sender connects to shard responsible for their account (how?)\n(6.) When Receiver account lives on a separate shard, we need a single cross-shard txn that just says payment is finalized and Receiver needs balance increased.\n\ninterfacing with primary system\n \n #\n \n\n\n\nWhen we're in the primary/secondary system model, Committee runs a smart contract on the primary system for users:\n\nto get money into/out of the FP secondary\nobtain recent Committee info (pubkeys, network addrs)\nread total funds in system\nread last primary tx index (?)\nread redeem log (?)\n\n\n\nuser funding FP account (primary -> secondary)\n \n #\n \n\n\n\nUser sends funding txn to FP Smart Contract on primary system (totally ordered).\nCommittee members read all funding txns made to FP Smart Contract since last_primary_txn_index (so we don't accidentally replay or forget some funding txns).\n\nFor each funding txn: add money to corresponding user balance in FP system.\n\n\n\nuser redeem FP account (secondary -> primary)\n \n #\n \n\n\nSender user needs to execute a redeem operation in FP, which is similar to transfer op:\n\nSender -> broadcast -> Committee: redeem balance request to address on primary system. This locks the account.\nCommittee: verify statement (balance exists, sig checks, seqnum checks, etc...)\nEach Committee Member -> respond -> Sender: counter-signed transfer order certificate\nSender: now have at least 2f+1 signed redeem order certificates.\nSender -> broadcast -> Committee: aggregate SRO certificate\nCommittee: observe and verify aggregate SRO certificate, update account balance, increment seqnum, etc.... Then unlock the account.\nSender -> primary system -> FP Smart Contract: post aggregate SRO certificate\nFP Smart Contract: verify certificate and send some of FP Smart Contract balance to user address.\n\n\nWhat if Sender only posts primary on-chain redeem txn w/o notifying Committee?\n\nFP account is locked until they notify.\nIf they only notify subset of Committee, they still won't be able to spend in the future unless they notify Quorum majority (2f+1) members.\n\n\nWhat if Sender posts primary on-chain redeem txn multiple times?\n\nRedeem log tracks every FP users' last redeemed seqnum to prevent double spend.\nRequires O(N) smart contract state where N is number of FP users : (\n\n\n\nimplementation\n \n #\n \n\n\nOriginal: novifinancial/fastpay\n\nRust\nTokio + UDP\n\nUDP for min. latency\nAll messages are idempotent so can always safely retry\nAll messages designed to fit in one UDP frame\n\n\n\nissues / further work\n \n #\n \n\n\n\ncheckpointing?\n\nnot clear how to accomplish without some kind of agreement.\n\n\nreconfiguration / changing committee?\n\nnot clear how to accomplish with just BFT Consistent Broadcast.\nprobably need to use FP Smart Contract.\n\n\nprivacy?\n\nIs it possible to have sender/receiver privacy?\nIs it possible to have value privacy?\nSee: zef ZK payments protocol (todo: link)\n\n\n\n","id":"https://phlip9.com/notes/b l o c k c h a i n/fastpay/","title":"fastpay"},"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"body":"oasis\n\nSite: https://oasisprotocol.org/\nGithub: https://github.com/oasisprotocol/, oasis-sdk, oasis-core\nLots of interesting/useful SGX-related stuff\nOasis Run a Node Process (Setting up SGX)\nRun an Intel Attestation Service (IAS) proxy\nTODO: enclave rpc\nCore Oasis Runtime Model\n \n #\n \n\n\nOasis Core Compute Nodes run user executables inside SGX enclaves.\n ____________________\n\t\t\t | ________________ |\n | | Runtime Loader | |\n\t\t\t | '----------------' |\n\t\t\t | Enclave\t |\n ______ | ________________ |\n| Node |<------>| Runtime Bin | |\n'______' | '----------------' |\n '--------------------'\n\n\nThe Rust oasis-core/runtime is the in-enclave runtime. This is \"Runtime Loader\" and \"Runtime Bin\" in the above diagram.\nThe Go oasis-core/go/runtime/host is responsible for provisioning enclaves and then communicating with them. This is part of \"Node\" in the above diagram.\nThe Node and Runtime communicate via\n\nNode <-> Unix Socket <-> Enclave Runner <-> Fortanix shared-memory FIFO queue <-> Enclave Runtime Binary\n\n\n\noasis-core Runtime Loader\n \n #\n \n\n\nhttps://github.com/oasisprotocol/oasis-core/tree/master/runtime-loader\nInputs:\n\nRuntime Filename\nSignature\nhost-socket\n\nSgxsLoader\n\nOpens the SGX kernel devices for loading enclaves.\nOpens client connection to AESM service for the EINITTOKEN provider.\nBuild enclave from file, SIGSTRUCT signature, and their custom adapter, which just routes connect syscalls from the enclave to a local Unix Domain Socket (UDS). This connection is the bidirectional arrow between Node and Runtime Bin in the above diagram.\n\n/// SGX runtime loader.\npub struct SgxsLoader;\n\nimpl Loader for SgxsLoader {\n fn run(\n &self,\n filename: String,\n signature_filename: Option<&str>,\n host_socket: String,\n ) -> Fallible<()> {\n let sig = match signature_filename {\n Some(f) => f,\n None => {\n return Err(format_err!(\"signature file is required\"));\n }\n };\n\n // Spawn the SGX enclave.\n let mut device = IsgxDevice::new()?\n .einittoken_provider(AesmClient::new())\n .build();\n\n let mut enclave_builder = EnclaveBuilder::new(filename.as_ref());\n enclave_builder.signature(sig)?;\n enclave_builder.usercall_extension(HostService::new(host_socket));\n let enclave = enclave_builder.build(&mut device)?;\n\n enclave.run()\n }\n}\n\noasis-core Host\n \n #\n \n\n\n// Manifest is a deserialized runtime bundle manifest.\ntype Manifest struct {\n\t// Name is the optional human readable runtime name.\n\tName string `json:\"name,omitempty\"`\n\n\t// ID is the runtime ID.\n\tID common.Namespace `json:\"id\"`\n\n\t// Version is the runtime version.\n\tVersion version.Version `json:\"version,omitempty\"`\n\n\t// Executable is the name of the runtime ELF executable file.\n\tExecutable string `json:\"executable\"`\n\n\t// SGX is the SGX specific manifest metadata if any.\n\tSGX *SGXMetadata `json:\"sgx,omitempty\"`\n\n\t// Digests is the cryptographic digests of the bundle contents,\n\t// excluding the manifest.\n\tDigests map[string]hash.Hash `json:\"digests\"`\n}\n\n// SGXMetadata is the SGX specific manifest metadata.\ntype SGXMetadata struct {\n\t// Executable is the name of the SGX enclave executable file.\n\tExecutable string `json:\"executable\"`\n\n\t// Signature is the name of the SGX enclave signature file.\n\tSignature string `json:\"signature\"`\n}\n\n// Bundle is a runtime bundle instance.\ntype Bundle struct {\n\tManifest *Manifest\n\tData map[string][]byte\n}\n\n\n// RuntimeBundle is a exploded runtime bundle ready for execution.\ntype RuntimeBundle struct {\n\t*bundle.Bundle\n\n\t// Exeuctable is the path to the extracted ELF or TEE executable.\n\tPath string\n}\n\n// Config contains common configuration for the provisioned runtime.\ntype Config struct {\n\t// Bundle is the runtime bundle.\n\tBundle *RuntimeBundle\n\n\t// Extra is an optional provisioner-specific configuration.\n\tExtra interface{}\n\n\t// MessageHandler is the message handler for the Runtime Host Protocol messages.\n\tMessageHandler protocol.Handler\n\n\t// LocalConfig is the node-local runtime configuration.\n\tLocalConfig map[string]interface{}\n}\n\nRuntime Host Protocol\n \n #\n \n\n\nThis is the core API layer available for executables running inside an SGX enclave. Nodes communicate bidirectionalyl with the running user binary via a bespoke length-prefixed CBOR message stream protocol.\nConnection Lifecycle\n \n #\n \n\n\n\nUninitialized - Newly created connection. Must be initialized before use.\nInititalizing - Parties exchange version and feature info.\nReady - The versions and features are negotiated; however, we first need to perform remote attestation before running stuff in the enclave.\nClosed - Connection is closed.\n\nRemote Attestation\n \n #\n \n\n\nHost attestation flow - oasis-core/go/runtime/host/sgx/sgx.go\n\n(Host) get the Quoting Enclave (QE)'s QuoteInfo from the AESM.\n(Host) get the Service Provider ID (SPID) from the Intel Attestation Services (IAS) cache.\n(Host) send a RuntimeCapabilityTEERakInitRequest { QuoteInfo.TargetInfo } request to the enclave.\n(Enclave) receive the request. initialize the Runtime Attestation Key (RAK) with the TargetInfo and then generate a new ephemeral RAK keypair (if one doesn't exist already).\n(Host) ask the IAS cache for the latest EPID revocation list (since Oasis uses EPID).\n(Host) send a RuntimeCapabilityTEERakReportRequest {} to the enclave.\n(Enclave) receive the request.\n\nSample a random nonce.\nGenerate report_body = H(RAK_pub). This binds the RAK pubkey to the report.\nSet report_data = report_body || nonce.\nGenerate report = Report::for_target(target_info, report_data) from the enclave EREPORT instruction. See: Report (EREPORT).\nReturn the RAK public key, report, and nonce to the host.\n\n\n(Host) Request a Quote from the AESM using the report, SPID, and sigRL revocation list. For some reason the nonce is empty here? Not sure what the nonce here is for...\n(Host) Verify that the quote.Report contains a MRENCLAVE and MRSIGNER that we expect. This ensures we're talking to the right application enclave.\n(Host) Verify that the Quote.Report.Attributes.is_debug == config.is_debug. That way we don't trust debug enclaves in production and don't use production enclaves in testing.\n(Host) Ask the IAS to Verify Evidence { quote, nonce }. IAS will return an Attestation Verification Report (AVR) to us.\n(Host) send a RuntimeCapabilityTEERakAvrRequest { avr } request to the enclave, to pass it the AVR.\n\n(Q: why does the enclave need to verify the AVR? shouldn't the client do this? I suppose we already checked that the enclave is the one we expect; in which case, we trust it to verify the AVR correctly.)\n\n\n(Enclave) receive the AVR in the request.\n\nExpect the nonce in the AVR to match the one we generated above in step (7.1).\nSee Enclave Attestation Verification Report AVR handling.\nVerify the current measured Report's enclave identity matches the enclave identity in the AVR.\nVerify that the RAK pubkey matches the one in the AVR.report_data.\nVerify that the nonce also matches the one in the AVR.report_data.\nRatchet our internal timestamp from the one we've observed.\n\n\n(Host) we've now fully verified the enclave. package up the RAK pubkey and AVR into a capabilityTEE.\n\nOther nodes can also verify the capabilityTEE by\n\nchecking the AVR against the Intel Trust Root CA\nchecking the MRENCLAVE/MRSIGNER are what we expect\nchecking that the AVR.Quote.Report.ReportData includes the expected RAK pubkey\n\ntype SPIDInfo struct {\n\tSPID ias.SPID\n\tQuoteSignatureType ias.SignatureType\n}\n\n// A deserialized AVRBundle from IAS.\ntype AttestationVerificationReport struct {\n\tID string `json:\"id\"`\n\tTimestamp string `json:\"timestamp\"`\n\tVersion int `json:\"version\"`\n\tISVEnclaveQuoteStatus ISVEnclaveQuoteStatus `json:\"isvEnclaveQuoteStatus\"`\n\tISVEnclaveQuoteBody []byte `json:\"isvEnclaveQuoteBody\"`\n\tRevocationReason *CRLReason `json:\"revocationReason\"`\n\tPSEManifestStatus *PSEManifestStatus `json:\"pseManifestStatus\"`\n\tPSEManifestHash string `json:\"pseManifestHash\"`\n\tPlatformInfoBlob string `json:\"platformInfoBlob\"`\n\tNonce string `json:\"nonce\"`\n\tEPIDPseudonym []byte `json:\"epidPseudonym\"`\n\tAdvisoryURL string `json:\"advisoryURL\"`\n\tAdvisoryIDs []string `json:\"advisoryIDs\"`\n}\n\nSee: Quoting Enclave's QuoteInfo\nEnclave Attestation Verification Report (AVR) handling\n \n #\n \n\n\nhttps://github.com/oasisprotocol/oasis-core/blob/master/runtime/src/common/sgx/avr.rs\n// AVR signature validation constants.\nconst IAS_TRUST_ANCHOR_PEM: Vec<u8> = parse_x509_pem(\n\tr#\"-----BEGIN CERTIFICATE-----\n\tMIIFSzCCA7OgAwIBAgIJANEHdl0yo7CUMA0GCSqGSIb3DQEBCwUAMH4xCzAJBgNV\n\t..\n\tDD+gT9sSpssq0ascmvH49MOgjt1yoysLtdCtJW/9FZpoOypaHx0R+mJTLwPXVMrv\n\tDaVzWh5aiEx+idkSGMnX\n\t-----END CERTIFICATE-----\"#\n).unwrap();\nconst PEM_CERTIFICATE_LABEL: &str = \"CERTIFICATE\";\nconst IAS_TS_FMT: &str = \"%FT%T%.6f\";\n\n/// Attestation verification report.\n#[derive(Debug, Clone, cbor::Encode, cbor::Decode)]\npub struct AVR {\n\t// json blob\n\t//\n\t// { \"isvEnclaveQuoteStatues\": __\n\t// , \"isvEnclaveQuoteBody\": __\n\t// , \"timestamp\": __\n\t// , \"nonce\": __\n // }\n pub body: Vec<u8>,\n pub signature: Vec<u8>,\n pub certificate_chain: Vec<u8>,\n}\n\n/// Enclave identity.\n#[derive(Debug, Clone, Hash, Eq, PartialEq, cbor::Encode, cbor::Decode)]\npub struct EnclaveIdentity {\n pub mr_enclave: MrEnclave,\n pub mr_signer: MrSigner,\n}\n\n/// Authenticated information obtained from validating an AVR.\n#[derive(Debug, Clone)]\npub struct AuthenticatedAVR {\n pub report_data: Vec<u8>,\n // TODO: add other av report/quote body/report fields we want to give\n\t// the consumer\n pub identity: EnclaveIdentity,\n pub timestamp: i64,\n pub nonce: String,\n}\n\n/// Decoded quote body.\n#[derive(Default, Debug)]\nstruct QuoteBody {\n version: u16,\n signature_type: u16,\n gid: u32,\n isv_svn_qe: u16,\n isv_svn_pce: u16,\n basename: [u8; 32],\n report_body: Report,\n}\n\nimpl AVR {\n\tpub fn verify(&self) -> Result<AuthenticatedAVR> {\n\t\t// 1. read configs if we should skip verification during\n\t\t// fuzzing/testing.\n\t\t// 2. validate_avr_signature(self.cert_chain, self.body,\n\t\t// self.sig. time::now())\n\t\t// 3. check if timestamp in AVR is too old\n\t\t// 4. verify ISV Enclave Quote Status == OK | SW_HARDENING_NEEDED\n\t\t// if lax verification enabled, also allow some other errors\n\t\t// 5. base64 decode ISV Enclave Quote Body, then decode to `QuoteBody`\n\t\t// 6. Possibly allow debug enclaves if appropriate config.\n\t\t// 7. They appear to use the IAS timestamp as a semi-trusted source\n\t\t// and ratchet their local clock forward if the IAS timestamp is\n\t\t// farther ahead.\n\t}\n}\n\nfn validate_avr_signature(\n\tcert_chain: &[u8],\n\tmessage: &[u8],\n\tsignature: &[u8],\n\tunix_timestamp: u64,\n) -> Result<()> {\n\t// * They note that they're doing some funky process that barely resembles\n\t// the standard cert verification process.\n\t// * Don't do cert revocation checks.\n\t// * Intel Docs: The AVR is signed by the Report Signing Key using\n\t// RSA-SHA256\n\t// * Intel Docs: The Report Signing pubkey is distributed via an x509\n\t// cert. This cert is a leaf cert issued by the \"Attestation Report\n\t// Signing CA\".\n\t// * A PEM-encoded cert chain is (1) the Report Signing Key Cert and (2)\n\t// the Report Signing CA.\n\n\t// 1. PEM decode the cert chain to DER. Check that each cert has the\n\t// \"CERTIFICATE\" label.\n\t// 2. Check that only two certs were returned.\n\t// 3. Ensure the last cert is the Report Signing CA (IAS_TRUST_ANCHOR).\n\t// 4. Ensure the CA cert is not expired, is a CA cert, is self-signed.\n\t// 5. Parse the leaf cert, verify the usual stuff, check CA sig.\n\t// 6. Pull out the leaf pubkey. Verify `signature` on `message`. The\n\t// pubkey should be an RSA PKCS1 DER-encoded pubkey. The sig should be\n\t// RSA-SHA256 PKCS1v15.\n}\n\nRuntime Attestation Key (RAK)\n \n #\n \n\n\nRAK is the identity of the enclave, used to sign remote attestations.\n/// The runtime attestation key (RAK) represents the identity of the enclave\n/// and can be used to sign remote attestations. Its purpose is to avoid\n/// round trips to IAS for each verification as the verifier can instead\n/// verify the RAK signature and the signature on the provided AVR which\n/// RAK to the enclave.\npub struct RAK {\n inner: RwLock<Inner>,\n}\n\nstruct Inner {\n private_key: Option<PrivateKey>,\n avr: Option<Arc<avr::AVR>>,\n avr_timestamp: Option<i64>,\n #[allow(unused)]\n enclave_identity: Option<avr::EnclaveIdentity>,\n #[allow(unused)]\n target_info: Option<Targetinfo>,\n #[allow(unused)]\n nonce: Option<String>,\n}\n\nEGETKEY\n \n #\n \n\n\nhttps://github.com/oasisprotocol/oasis-core/blob/master/runtime/src/common/sgx/egetkey.rs\n\nKMac: SHA3-256 Keccak MAC\n\n/// egetkey returns a 256 bit key suitable for sealing secrets to the\n/// enclave in cold storage, derived from the results of the `EGETKEY`\n/// instruction. The `context` field is a domain separation tag.\n///\n/// Note: The key can also be used for other things (eg: as an X25519\n/// private key).\npub fn egetkey(key_policy: Keypolicy, context: &[u8]) -> [u8; 32] {\n let mut k = [0u8; 32];\n\n // Obtain the per-CPU package SGX sealing key, with the requested\n // policy.\n let master_secret = egetkey_impl(key_policy, context);\n\n // Expand the 128 bit EGETKEY result into a 256 bit key, suitable\n // for use with our MRAE primitives.\n let mut kdf = KMac::new_kmac256(\n\t\t&master_secret,\n\t\tb\"Ekiden Expand SGX Seal Key\",\n\t);\n kdf.update(context);\n kdf.finalize(&mut k);\n\n k\n}\n\n/// The SGX impl\nfn egetkey_impl(\n\t// MRSIGNER or MRENCLAVE\n\tkey_policy: Keypolicy,\n\t// the domain separation value\n\tcontext: &[u8],\n) -> [u8; 16] {\n\t// As we can see, using the Keyrequest::default() means oasis-core doesn't\n\t// bind the key\n let mut req = Keyrequest::default();\n req.keyname = Keyname::Seal as u16;\n req.keypolicy = key_policy;\n\n let mut sha3 = Sha3::v256();\n sha3.update(context);\n let mut k = [0; 32];\n sha3.finalize(&mut k);\n req.keyid = k;\n\n // Fucking sgx_isa::Attributes doesn't have a -> [u64;2].\n\t// SGX_FLAGS_INITTED | SGX_FLAGS_DEBUG | SGX_FLAGS_MODE64BIT\n req.attributemask[0] = 1 | 2 | 4;\n\t// SGX_XFRM_LEGACY\n req.attributemask[1] = 3;\n\n match req.egetkey() {\n Err(e) => panic!(\"EGETKEY failed: {:?}\", e),\n Ok(k) => k,\n }\n}\n\nSealing\n \n #\n \n\n\nhttps://github.com/oasisprotocol/oasis-core/blob/master/runtime/src/common/sgx/seal.rs\n\nDeoxysII - Some new symmetric key AEAD cipher that uses AESNI. Not sure why they use this and not just like AES-GCM or AES-SIV. Maybe safer nonce reuse protection?\n\n/// Query the enclave for sealing key material with the current context and\n/// key policy, then generate a DeoxysII symmetric key using the key material.\nfn new_d2(key_policy: Keypolicy, context: &[u8]) -> DeoxysII {\n let mut seal_key = egetkey(key_policy, context);\n let d2 = DeoxysII::new(&seal_key);\n seal_key.zeroize();\n\n d2\n}\n\n/// Seal a secret to the enclave.\npub fn seal(\n\t/// MRSIGNER or MRENCLAVE\n\tkey_policy: Keypolicy,\n\t/// The domain separation value\n\tcontext: &[u8],\n\t/// The plaintext data we want to seal\n\tdata: &[u8],\n) -> Vec<u8> {\n let mut rng = OsRng {};\n\n let mut nonce = [0u8; NONCE_SIZE];\n rng.fill(&mut nonce);\n let d2 = new_d2(key_policy, context);\n let mut ciphertext = d2.seal(&nonce, data.to_vec(), vec![]);\n ciphertext.extend_from_slice(&nonce);\n\n\t// ciphertext = [ E_k[data] || MAC tag || nonce ]\n ciphertext\n}\n\n\n\n/// Unseal a previously sealed secret to the enclave.\n///\n/// # Panics\n///\n/// All parsing and authentication errors of the ciphertext are fatal and\n/// will result in a panic.\npub fn unseal(\n\t/// MRSIGNER or MRENCLAVE\n\tkey_policy: Keypolicy,\n\t/// The domain separation value\n\tcontext: &[u8],\n\t/// Previously sealed data\n\tciphertext: &[u8],\n) -> Option<Vec<u8>> {\n let ct_len = ciphertext.len();\n if ct_len == 0 {\n return None;\n }\n assert!(\n ct_len >= TAG_SIZE + NONCE_SIZE,\n \"ciphertext is corrupted, invalid size\"\n );\n let ct_len = ct_len - NONCE_SIZE;\n\n // split: ciphertext = [ E_k[data] || MAC tag || nonce ]\n let mut nonce = [0u8; NONCE_SIZE];\n nonce.copy_from_slice(&ciphertext[ct_len..]);\n let ciphertext = &ciphertext[..ct_len];\n\n let d2 = new_d2(key_policy, context);\n let plaintext = d2\n .open(&nonce, ciphertext.to_vec(), vec![])\n .expect(\"ciphertext is corrupted\");\n\n Some(plaintext)\n}\n\nKey Manager Enclaves\n \n #\n \n\n\nThey have some keymanager enclave, which appears to manually handle delegating access to individual enclave seal keys.\n\nThey use MRENCLAVE for each indiviual enclave (so the key is bound to the machine) then the enclave can register the actual key with the keymanager along with a policy to mediate access more granularly.\nTheir current policy format allows you to explicitly enumerate which enclaves (MRENCLAVE + MRSIGNER) may query private key material and which enclaves may replicate the \"master secret\" (something consensus related?).\n\n","id":"https://phlip9.com/notes/b l o c k c h a i n/oasis/","title":"oasis"},"https://phlip9.com/notes/b l o c k c h a i n/sui/":{"body":"sui\n\n\nGithub: https://github.com/MystenLabs/sui\nPaper: https://github.com/MystenLabs/sui/blob/main/doc/paper/sui.pdf\nPeople I know: Sam, George, Alberto, Francois, Kostas, Brandon, Todd, Evan, Adeniyi\n\nSummary\n \n #\n \n\n\nsui = fastpay x { Move - accounts + fine-grained objects } : )\n","id":"https://phlip9.com/notes/b l o c k c h a i n/sui/","title":"sui"},"https://phlip9.com/notes/btc-ln/":{"body":"","id":"https://phlip9.com/notes/btc-ln/","title":"btc-ln"},"https://phlip9.com/notes/btc-ln/BOLT 11 - invoices/":{"body":"BOLT 11 - invoices\n\nSee: LDK - lightning-invoice crate\n\nbech32 encoded\n\nFields with known tags: lightning-invoice::TaggedField\npub enum TaggedField {\n\tPaymentHash(Sha256),\n\tDescription(Description),\n\tPayeePubKey(PayeePubKey),\n\tDescriptionHash(Sha256),\n\tExpiryTime(ExpiryTime),\n\tMinFinalCltvExpiry(MinFinalCltvExpiry),\n\tFallback(Fallback),\n\tPrivateRoute(PrivateRoute),\n\tPaymentSecret(PaymentSecret),\n\tFeatures(InvoiceFeatures),\n}\n\nRouting hints\n \n #\n \n\n\nPrivate nodes behind a public LSP can still accept payments via Routing Hints. Here, the private node advertises an invoice with the final LSP -> Private Node hop encoded into the invoice, so other nodes can still route to the Private Node even though they're not publicly advertised or otherwise reachable.\nlightning-invoice::PrivateRoute\n/// Private routing information\n///\n/// # Invariants\n/// The encoded route has to be <1024 5bit characters\n/// long (<=639 bytes or <=12 hops)\npub struct PrivateRoute(RouteHint);\n\nln::routing::router::RouteHint\n/// A list of hops along a payment path terminating\n/// with a channel to the recipient.\npub struct RouteHint(pub Vec<RouteHintHop>);\n\nln::routing::router::RouteHintHop\n/// A channel descriptor for a hop along a payment path.\npub struct RouteHintHop {\n\t/// The node_id of the non-target end of the route\n\tpub src_node_id: PublicKey,\n\t/// The short_channel_id of this channel\n\tpub short_channel_id: u64,\n\t/// The fees which must be paid to use this channel\n\tpub fees: RoutingFees,\n\t/// The difference in CLTV values between this\n\t/// node and the next node.\n\tpub cltv_expiry_delta: u16,\n\t/// The minimum value, in msat, which must be\n\t/// relayed to the next hop.\n\tpub htlc_minimum_msat: Option<u64>,\n\t/// The maximum value in msat available for\n\t/// routing with a single HTLC.\n\tpub htlc_maximum_msat: Option<u64>,\n}\n\n","id":"https://phlip9.com/notes/btc-ln/BOLT 11 - invoices/","title":"BOLT 11 - invoices"},"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"body":"BOLT 2 - channel management protocol\n\nSource: https://github.com/lightning/bolts/blob/master/02-peer-protocol.md\nThis BOLT describes the bilateral messaging protocol for (1) establishing, (2) operating, and (3) closing lightning payment channels between two LN peers.\ndef: channel_id: [u8; 32]\n \n #\n \n\n\nChannels are identified by a channel_id, which is derived from the funding tx id and index.\nBefore the channel is funded, the channel_id is random.\nPre-funded channels are not yet uniquely identified. Use (src_node_id, dest_node_id, channel_id) for identification.\nParties can also offer \"short channel id\" (SCID) aliases (size = u64), which we can use instead of the actual channel_id to avoid leaking the on-chain funding UTXO.\nChannel Establishment\n \n #\n \n\n\nChannels may be established after a secure connection is authenticated and features negotiated.\nThe establishment process goes through 3 phases: (1-2) negotiate the channel parameters, (3-4) create the funding tx, (5-6) lock in the channel once the funding tx is confirmed on-chain.\n funder fundee\n+-------+ +-------+\n| |--(1)--- open_channel ----->| | <\n| |<-(2)-- accept_channel -----| | <\n| | | | < temporary channel id\n| A |--(3)-- funding_created --->| B | <\n| |<-(4)-- funding_signed -----| | <\n| | | | ---\n| |--(5)--- funding_locked ---->| | <\n| |<-(6)--- funding_locked -----| | < real channel id\n+-------+ +-------+ <\n\ndef: open_channel wire message\n \n #\n \n\n\nThe channel funder sends an open_channel message to the channel fundee. Here, funder and fundee are negotiating the channel parameters for their new channel contract. A few of the important channel parameters:\n\nthe channel size (amount to be funded or max liquidity)\noptional initial payment to fundee\nchannel fee rate\nsupported channel features\nbounds: minimum HTLC size, dust limits, max num. HTLCs, max in-flight value\non-chain confirmations-to-finality\n\nThe channel id is just a random nonce at this point.\nSee: msgs::OpenChannel\n/// An open_channel message to be sent or received from a peer\npub struct OpenChannel {\n\t/// The genesis hash of the blockchain where the channel is to be opened\n\tpub chain_hash: BlockHash,\n\t/// A temporary channel ID, until the funding outpoint is announced\n\tpub temporary_channel_id: [u8; 32],\n\t/// The channel value\n\tpub funding_satoshis: u64,\n\t/// The amount to push to the counterparty as part of the open, in\n\t/// milli-satoshi\n\tpub push_msat: u64,\n\t/// The threshold below which outputs on transactions broadcast by\n\t/// sender will be omitted\n\tpub dust_limit_satoshis: u64,\n\t/// The maximum inbound HTLC value in flight towards sender, in\n\t/// milli-satoshi\n\tpub max_htlc_value_in_flight_msat: u64,\n\t/// The minimum value unencumbered by HTLCs for the counterparty\n\t/// to keep in the channel\n\tpub channel_reserve_satoshis: u64,\n\t/// The minimum HTLC size incoming to sender, in milli-satoshi\n\tpub htlc_minimum_msat: u64,\n\t/// The feerate per 1000-weight of sender generated transactions,\n\t/// until updated by update_fee\n\tpub feerate_per_kw: u32,\n\t/// The number of blocks which the counterparty will have to wait\n\t/// to claim on-chain funds if they broadcast a commitment transaction\n\tpub to_self_delay: u16,\n\t/// The maximum number of inbound HTLCs towards sender\n\tpub max_accepted_htlcs: u16,\n\t/// The sender's key controlling the funding transaction\n\tpub funding_pubkey: PublicKey,\n\t/// Used to derive a revocation key for transactions broadcast\n\t/// by counterparty\n\tpub revocation_basepoint: PublicKey,\n\t/// A payment key to sender for transactions broadcast by counterparty\n\tpub payment_point: PublicKey,\n\t/// Used to derive a payment key to sender for transactions\n\t/// broadcast by sender\n\tpub delayed_payment_basepoint: PublicKey,\n\t/// Used to derive an HTLC payment key to sender\n\tpub htlc_basepoint: PublicKey,\n\t/// The first to-be-broadcast-by-sender transaction's per\n\t/// commitment point\n\tpub first_per_commitment_point: PublicKey,\n\t/// Channel flags\n\tpub channel_flags: u8,\n\t/// Optionally, a request to pre-set the to-sender output's\n\t/// scriptPubkey for when we collaboratively close\n\tpub shutdown_scriptpubkey: OptionalField<Script>,\n\t/// The channel type that this channel will represent. If none is\n\t/// set, we derive the channel type from the intersection of our\n\t/// feature bits with our counterparty's feature bits from the\n\t/// Init message.\n\tpub channel_type: Option<ChannelTypeFeatures>,\n}\n\nfunder flow\n \n #\n \n\n\nChannelManager::create_channel\nfundee flow\n \n #\n \n\n\nChannelManager::internal_open_channel\nChannel::accept_inbound_channel\n(If configured for user-level authorization) Generate Event::OpenChannelRequest\ndef: accept_channel wire message\n \n #\n \n\n\nThe fundee can choose to accept a new channel proposal by responding with an accept_channel message.\nThe channel id is still the same random nonce.\nSee: https://github.com/lightningdevkit/rust-lightning/blob/711bcefbcc0999543d9622c030ff7dc8118fc26f/lightning/src/ln/msgs.rs#L181\n/// An accept_channel message to be sent or received from a peer\npub struct AcceptChannel {\n\t/// A temporary channel ID, until the funding outpoint is announced\n\tpub temporary_channel_id: [u8; 32],\n\t/// The threshold below which outputs on transactions broadcast\n\t/// by sender will be omitted\n\tpub dust_limit_satoshis: u64,\n\t/// The maximum inbound HTLC value in flight towards sender,\n\t/// in milli-satoshi\n\tpub max_htlc_value_in_flight_msat: u64,\n\t/// The minimum value unencumbered by HTLCs for the counterparty\n\t/// to keep in the channel\n\tpub channel_reserve_satoshis: u64,\n\t/// The minimum HTLC size incoming to sender, in milli-satoshi\n\tpub htlc_minimum_msat: u64,\n\t/// Minimum depth of the funding transaction before the channel\n\t/// is considered open\n\tpub minimum_depth: u32,\n\t/// The number of blocks which the counterparty will have to wait\n\t/// to claim on-chain funds if they broadcast a commitment transaction\n\tpub to_self_delay: u16,\n\t/// The maximum number of inbound HTLCs towards sender\n\tpub max_accepted_htlcs: u16,\n\t/// The sender's key controlling the funding transaction\n\tpub funding_pubkey: PublicKey,\n\t/// Used to derive a revocation key for transactions broadcast\n\t/// by counterparty\n\tpub revocation_basepoint: PublicKey,\n\t/// A payment key to sender for transactions broadcast by counterparty\n\tpub payment_point: PublicKey,\n\t/// Used to derive a payment key to sender for transactions\n\t/// broadcast by sender\n\tpub delayed_payment_basepoint: PublicKey,\n\t/// Used to derive an HTLC payment key to sender for transactions\n\t/// broadcast by counterparty\n\tpub htlc_basepoint: PublicKey,\n\t/// The first to-be-broadcast-by-sender transaction's per\n\t/// commitment point\n\tpub first_per_commitment_point: PublicKey,\n\t/// Optionally, a request to pre-set the to-sender output's\n\t/// scriptPubkey for when we collaboratively close\n\tpub shutdown_scriptpubkey: OptionalField<Script>,\n\t/// The channel type that this channel will represent. If none is\n\t/// set, we derive the channel type from the intersection of our\n\t/// feature bits with our counterparty's feature bits from the\n\t/// Init message.\n\t///\n\t/// This is required to match the equivalent field in\n\t/// [`OpenChannel::channel_type`].\n\tpub channel_type: Option<ChannelTypeFeatures>,\n}\n\nfundee flow\n \n #\n \n\n\nIf accept: Channel::generate_accept_channel_message\nfunder flow\n \n #\n \n\n\nChannelManager::internal_accept_channel\nChannel::accept_channel\nGenerate Event::FundingGenerationReady\ndef: funding_created wire message\n \n #\n \n\n\nThe funder crafts a funding transaction, signs it, and sends it to the fundee for their signature.\nThe channel id is still a random nonce.\nSee: https://github.com/lightningdevkit/rust-lightning/blob/711bcefbcc0999543d9622c030ff7dc8118fc26f/lightning/src/ln/msgs.rs#L222\n/// A funding_created message to be sent or received from a peer\npub struct FundingCreated {\n\t/// A temporary channel ID, until the funding is established\n\tpub temporary_channel_id: [u8; 32],\n\t/// The funding transaction ID\n\tpub funding_txid: Txid,\n\t/// The specific output index funding this channel\n\tpub funding_output_index: u16,\n\t/// The signature of the channel initiator (funder) on the\n\t/// initial commitment transaction\n\tpub signature: Signature,\n}\n\nfunder flow\n \n #\n \n\n\nChannelManager::funding_transaction_generated\nChannelManager::funding_transaction_generated_intern\nUpdates the channel state and creates the FundingCreated p2p msg: Channel::get_outbound_funding_created\nfundee flow\n \n #\n \n\n\nChannelManager::internal_funding_created\nFundee verifies, signs, returns FundingSigned msg: Channel::funding_created\nFundee finally signs here: Channel::funding_created_signature\nFundee adds channel monitor hook to watch for confirmations. Responds with FundingSigned message.\ndef: funding_signed wire message\n \n #\n \n\n\nThe fundee responds with their signature on the funding tx. With this signature, the funding tx is now ready for propagation by the funder.\nThis is the first message where we refer to the channel by its real channel id and not the random nonce.\nSee: https://github.com/lightningdevkit/rust-lightning/blob/711bcefbcc0999543d9622c030ff7dc8118fc26f/lightning/src/ln/msgs.rs#L235\n/// A funding_signed message to be sent or received from a peer\npub struct FundingSigned {\n\t/// The channel ID\n\tpub channel_id: [u8; 32],\n\t/// The signature of the channel acceptor (fundee) on the\n\t/// initial commitment transaction\n\tpub signature: Signature,\n}\n\nfundee flow\n \n #\n \n\n\nFundee responds with FundingSigned message in tail-end of Channel::funding_created\nfunder flow\n \n #\n \n\n\nVerify, hook channel monitor on tx, and broadcast funding tx: ChannelManager::internal_funding_signed\nVerify, build funding tx & tx monitor: Channel::funding_signed\nBroadcast funding tx: chaininterface::BroadcasterInterface::broadcast_transaction\ndef: funding_locked wire message\n \n #\n \n\n\nEach node watches the chain, waiting for the funding tx to confirm. Once a node sees the funding tx confirm, they send a msgs::FundingLocked message to the other peer.\nOnly once both peers have seen and verified that the funding tx has confirmed, and both peers have received each other's FundingLocked message, can the channel finally enter normal operating mode.\nThe peers use the real channel id here.\nSee: https://github.com/lightningdevkit/rust-lightning/blob/711bcefbcc0999543d9622c030ff7dc8118fc26f/lightning/src/ln/msgs.rs#L244\n/// A funding_locked message to be sent or received from a peer\npub struct FundingLocked {\n\t/// The channel ID\n\tpub channel_id: [u8; 32],\n\t/// The per-commitment point of the second commitment transaction\n\tpub next_per_commitment_point: PublicKey,\n\t/// If set, provides a short_channel_id alias for this channel.\n\t/// The sender will accept payments to be forwarded over this\n\t/// SCID and forward them to this messages' recipient.\n\tpub short_channel_id_alias: Option<u64>,\n}\n\nfunder & fundee flow\n \n #\n \n\n\nOn funding tx confirmation\n \n #\n \n\n\nThe ChannelManager on both sides will get poked when the funding tx is sufficiently confirmed. There appear to be several different possible interfaces, depending on how the chain listening is setup, like whether we're connected to a full node or light node, or if we have some block filtering etc...\nThe two I can see right off the bat are the traits chain::Listen (whole new blocks) and chain::Confirm (only specific txs we're interested in, only block headers).\nYou choose chain::Listen if you're connected to a full node and chain::Confirm if you're connected to a light node (my speculation).\nThese interfaces are impl'd by ChannelManager, who will eventually call ChannelManager::do_chain_event with a callback, which can possibly generate a FundingLocked msg for sending to the other peer.\nEach channel handles the tx confirm update in Channel::transactions_confirmed. Check if the tx is relevant and sufficiently confirmed, then generate the FundingLocked msg in Channel::check_get_funding_locked.\nIf the Channel::is_usable (both sides confirmed), then also Channel::get_announcement_sigs, which generates a msgs::AccountmentSignatures for sending, announcing the new channel.\nOnce the channel is_usable, we enter Normal Channel Operation.\nOn remote funding_locked msg rx\n \n #\n \n\n\nRx peer's funding_locked msg: ChannelManager::internal_funding_locked\nUpdate the channel state w/ Channel::funding_locked.\nLike before, if the channel is now usable (both sides confirmed), is configured for announcement, and is announcable, then generate, sign, and send the msg::AnnouncementSignatures.\n(not clear to me yet when these are announced)\nOnce the channel is_usable, we enter Normal Channel Operation.\nCooperative Channel Close\n \n #\n \n\n\nBoth nodes can agree to graceful close a channel. This process consumes less fees and lets both sides access their funds immediately.\nThe other alternatives are unilateral close (maybe someone crashed) and revoked transaction close (the counterparty deliberately cheats and broadcasts an old state).\nOne side begins active shutdown of the channel and indicates how/where they want to be paid. The passive shutdown side responds similarly. Once a side has observed a shutdown, they will no longer accept new HTLCs on this channel. Once the shutdown is begun, both sides will wait for all pending HTLCs to resolve pending HTLCs to fail backwards. Once all HTLCs have resolved, both sides negotiate a final fee amount and broadcast the channel closure tx.\nProtocol Diagram\n+-------+ +-------+\n| |--(1)----- shutdown ------->| |\n| |<-(2)----- shutdown --------| |\n| | | |\n| | <complete all pending HTLCs> | |\n| A | ... | B |\n| | | |\n| |--(3)-- closing_signed F1--->| |\n| |<-(4)-- closing_signed F2----| |\n| | ... | |\n| |--(?)-- closing_signed Fn--->| |\n| |<-(?)-- closing_signed Fn----| |\n+-------+ +-------+\n\ndef: shutdown wire message\n \n #\n \n\n\nSee: https://github.com/lightningdevkit/rust-lightning/blob/711bcefbcc0999543d9622c030ff7dc8118fc26f/lightning/src/ln/msgs.rs#L256\n/// A shutdown message to be sent or received from a peer\npub struct Shutdown {\n\t/// The channel ID\n\tpub channel_id: [u8; 32],\n\t/// The destination of this peer's funds on closing.\n\t/// Must be in one of these forms: p2pkh, p2sh, p2wpkh, p2wsh.\n\tpub scriptpubkey: Script,\n}\n\nactive closer\n \n #\n \n\n\nChannelManager::close_channel which immediately calls ChannelManager::close_channel_internal. chanmgr grabs the channel, moves it into shutdown mode, maybe updates monitor w/ new shutdown script, sends shutdown msg to peer. Then fails all pending HTLCs backwards: ChannelManager::fail_htlc_backwards. I guess we don't wait for HTLCs to resolve, just notify that they should fail.\nBegin channel shutdown, craft Shutdown message, return failed HTLCs: Channel::get_shutdown\npassive closer\n \n #\n \n\n\nNotify the channel about the remote shutdown. Maybe update the monitor w/ shutdown script. Send the shutdown response msg. Fail any pending HTLCs. ChannelManager::internal_shutdown\nChannel rx'd shutdown msg from remote peer; maybe generate a shutdown response msg: Channel::shutdown\ndef: closing_signed wire message\n \n #\n \n\n\nThe channel is officially shutdown and all pending HTLCs are resolved or failed. Now both peers must negotiate a fee for the closing transaction.\nThere are two negotiation methods: (1) the \"old\" method, where nodes go back and forth proposing a \"fair\" fee and either accepting or rejecting with their new fee, and (2) the \"modern\" method, where the funder proposes a permissible fee range, and the fundee chooses a value from the range.\nSee: https://github.com/lightningdevkit/rust-lightning/blob/711bcefbcc0999543d9622c030ff7dc8118fc26f/lightning/src/ln/msgs.rs#L279\n/// A closing_signed message to be sent or received from a peer\npub struct ClosingSigned {\n\t/// The channel ID\n\tpub channel_id: [u8; 32],\n\t/// The proposed total fee for the closing transaction\n\tpub fee_satoshis: u64,\n\t/// A signature on the closing transaction\n\tpub signature: Signature,\n\t/// The minimum and maximum fees which the sender is willing\n\t/// to accept, provided only by new nodes.\n\tpub fee_range: Option<ClosingSignedFeeRange>,\n}\n\n/// The minimum and maximum fees which the sender is willing to place\n/// on the closing transaction. This is provided in [`ClosingSigned`]\n/// by both sides to indicate the fee range they are willing to use.\npub struct ClosingSignedFeeRange {\n\t/// The minimum absolute fee, in satoshis, which the sender is\n\t/// willing to place on the closing transaction.\n\tpub min_fee_satoshis: u64,\n\t/// The maximum absolute fee, in satoshis, which the sender is\n\t/// willing to place on the closing transaction.\n\tpub max_fee_satoshis: u64,\n}\n\nNormal Channel Operation\n \n #\n \n\n\nProtocol Diagram\n+-------+ +-------+\n| |--(1)---- update_add_htlc ---->| |\n| |--(2)---- update_add_htlc ---->| |\n| |<-(3)---- update_add_htlc -----| |\n| | | |\n| |--(4)--- commitment_signed --->| |\n| A |<-(5)---- revoke_and_ack ------| B |\n| | | |\n| |<-(6)--- commitment_signed ----| |\n| |--(7)---- revoke_and_ack ----->| |\n| | | |\n| |--(8)--- commitment_signed --->| |\n| |<-(9)---- revoke_and_ack ------| |\n+-------+ +-------+\n\nTODO(philiphayes): finish this section\ndef: update_add_htlc wire message\n \n #\n \n\n\n/// An update_add_htlc message to be sent or received from a peer\npub struct UpdateAddHTLC {\n\t/// The channel ID\n\tpub channel_id: [u8; 32],\n\t/// The HTLC ID\n\tpub htlc_id: u64,\n\t/// The HTLC value in milli-satoshi\n\tpub amount_msat: u64,\n\t/// The payment hash, the pre-image of which controls HTLC redemption\n\tpub payment_hash: PaymentHash,\n\t/// The expiry height of the HTLC\n\tpub cltv_expiry: u32,\n\tpub(crate) onion_routing_packet: OnionPacket,\n}\n\n","id":"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/","title":"BOLT 2 - channel management protocol"},"https://phlip9.com/notes/btc-ln/BOLT 4 - onion routing protocol/":{"body":"BOLT 4 - onion routing protocol\n\nSource: https://github.com/lightning/bolts/blob/master/04-onion-routing.md\nTerminology\n \n #\n \n\n\n\nOrigin Node\nIntermediate Node, a.k.a. Hop\nFinal Node\nRoute: list of Hops, constructed by Origin Node\n\nOverview\n \n #\n \n\n\n\nRoute payment HTLC from origin node to final node via many intermediate nodes.\nBased on (2009) Sphinx - A Compact and Provably Secure Mix Format (co-authored by old colleague George Danezis :)), extended with a per-hop payload.\nIntermediate nodes can't learn (1) origin, (2) other hops (except pred- and succ- hops), (3) route length, or (4) position in route.\nOrigin node must pre-compute full route. Must learn pubkey of each intermediate (and final) node.\nIntermediate nodes advertise their fee schema.\n\nFees are just (flat base rate + proportional rate).\nIf nodes advertise new fee rates, they must continue to accept their stale fee rates for a little while longer to account for propagation delay.\n\n\nOrigin node also effectively decides the fee each hop will pay. If an intermediate node deviates (forwards less than advertised) then subsequent nodes must reject.\nEach hop sees a hop payload consisting of\n\n(1) amount to forward: u64\n(2) outgoing cltv value: u32\n(3) short channel id\n(4) payment data: (payment secret, total msat)\n(5): payment metadata: bytes\n\n\n\n","id":"https://phlip9.com/notes/btc-ln/BOLT 4 - onion routing protocol/","title":"BOLT 4 - onion routing protocol"},"https://phlip9.com/notes/btc-ln/BOLT 7 - p2p node and channel discovery/":{"body":"BOLT 7 - p2p node and channel discovery\n\nSource: https://github.com/lightning/bolts/blob/master/07-routing-gossip.md#htlc-fees\nOverview\n \n #\n \n\n\n\nNode Discovery\n\nNodes advertise their ID, host {oneof: IPv4/6, TORv3}, port\nOther nodes must be able to open connections with you\n\n\nChannel Discovery\n\nNodes advertise their currently open channels so others can route through them\n\n\nGossip Messages\n\nnode_announcement: nodes exchange these for node discovery\nchannel_announcement: nodes exchange these to announce new channels between some nodes. Should only ever be one per channel.\nchannel_update: Advertise updates to a channel. Dissemninated. At least two expected per channel.\n\n\n\nshort_channel_id: u64\n \n #\n \n\n\n\nA compact descriptor pointing to a channel funding tx.\n\nshort_channel_id: {\n\tblock_height: u24,\n\tblock_tx_idx: u24,\n\ttx_output_idx: u16,\n}\n\nnode_announcement Message\n \n #\n \n\n\nnode_announcement: {\n\tsignature,\n\tfeatures_len: u16,\n\tfeatures: bytes,\n\ttimestamp: u32,\n\tnode_id,\n\trgb_color: (u8, u8, u8),\n\talias: [u8; 32],\n\taddrlen: u16, // serialized length of addresses\n\taddresses: Vec<AddressDescriptor>,\n}\n\nenum AddressDescriptor {\n\tIpv4(addr, port),\n\tIpv6(addr, port),\n\tTorv3(onion_addr, port)\n}\n\nchannel_announcement Message\n \n #\n \n\n\nnodes must prove that there is actually a channel btw node 1 and node 2\n\nprove a funding tx that pays to btc_key_1 and btc_key_2\n\nverify via short_channel_id -> chain lookup\n\n\nprove node 1 owns btc_key_1\n\nverify btc_sig_1\n\n\nprove node 2 owns btc_key_2\n\nverify btc_sig_2\n\n\nprove both node 1 and node 2 agree to this announcement message\n\nverify node_sig_1 and node_sig_2 (signing over the rest of the announcement)\n\n\n\nchannel_announcement: {\n\tnode_sig_1: sig,\n\tnode_sig_2: sig,\n\tbtc_sig_1: sig,\n\tbtc_sig_2: sig,\n\tfeatures_len: u16,\n\tfeatures: bytes,\n\tchain_hash,\n\tshort_channel_id,\n\tnode_id_1: pubkey,\n\tnode_id_2: pubkey,\n\tbtc_key_1: pubkey,\n\tbtc_key_2: pubkey,\n}\n\nchannel_update Message\n \n #\n \n\n\nAfter announcement, each side independently announces their fees, supported features, etc\nchannel_update: {\n\tsignature,\n\tchain_hash,\n\tshort_channel_id,\n\ttimestamp: u32,\n\tmessage_flags: bytes,\n\tchannel_flags: bytes,\n\tcltv_expiry_delta: u16,\n\thtlc_min_msat: u64,\n\tfee_base_msat: u32,\n\tfee_proportional_mills: u32,\n\thtlc_max_msat: u64,\n}\n\n","id":"https://phlip9.com/notes/btc-ln/BOLT 7 - p2p node and channel discovery/","title":"BOLT 7 - p2p node and channel discovery"},"https://phlip9.com/notes/btc-ln/BOLT 8 - secure noise transport/":{"body":"BOLT 8 - secure noise transport\n\nSource: https://github.com/lightning/bolts/blob/master/08-transport.md\nSummary\n \n #\n \n\n\nLightning connections use a 1.5 RTT Noise_XK handshake, which means the listener pubkey is pinned and the dialer pubkey is negotiated in-band.\nIn contrast, we moved from Noise_XX to a 1 RTT Noise_IK handshake in diem's secure transport. Privacy was not a requirement, but minimizing responder DH ops (two) and network messages (none) before authentication rejection (had a well-defined list of acceptable inbound pubkeys) was more important to reduce DDoS surface for liveness-sensitive consensus protocol. We also tried to mitigate handshake replays, which isn't possible w/ XK or XX.\nThe lightning Noise messages also use an encrypted message length, which needs its own separate MAC.\nThe max ln message length is u16::MAX == 65535. The max ln packet size is\n|msg len| + |msg len MAC| + |ln msg| + |ln msg MAC|\n= 2 + 16 + 65535 + 16\n= 65569\n\n","id":"https://phlip9.com/notes/btc-ln/BOLT 8 - secure noise transport/","title":"BOLT 8 - secure noise transport"},"https://phlip9.com/notes/btc-ln/atomic multipath payments (AMP)/":{"body":"atomic multipath payments (AMP)\n\nTODO: can apparently use AMP for non-interactive payments?\n1-share AMP = spontaneous payment\nSetup\n \n #\n \n\n\nAlice has two payment channels open with Bob (or some path to Bob), each with outbound capacity of 1 BTC. Alice wants to pay Bob 2 BTC.\nflowchart LR;\n\tA[Alice] -->|1:0| B;\n\tA[Alice] -->|1:0| B;\n\n\tB[Bob];\n\nProblem\n \n #\n \n\n\nNaively, Alice could pay Bob in two separate payments:\nPayment 1:\nflowchart LR;\n\tA[Alice] -->|0:1| B;\n\tA[Alice] -->|1:0| B;\n\n\tB[Bob];\n\nPayment 2:\nflowchart LR;\n\tA[Alice] -->|0:1| B;\n\tA[Alice] -->|0:1| B;\n\n\tB[Bob];\n\nHowever, if the second payment fails, the total 2 BTC payment is only paritally fulfilled and Alice has no way of getting the initial 1 BTC back without trust/coordination.\nSolution\n \n #\n \n\n\nAtomic Multipath Payments let you split a payment to a recipient and send each piece over completely separate routes, yet the recipient can only fully receive the payment if all pieces complete successfully.\nDesired Properties:\n+ Atomicity: Bob doesn't receive any money until all pieces of the payment come through.\n+ Avoid Payment Hash Reuse: Each payment piece has a distinct payment hash. (Why is this useful?)\n+ Order Invariance: The payment pieces can fulfill in any order.\n+ Non-interactive Setup: Bob doesn't have to know the transaction is an AMP.\nProtocol Sketch\n \n #\n \n\n\nlet ID = random value to identify the overall AMP\nlet V = total payment value\nlet n = # payments/routes\nlet v_1, .., v_n = V partitioned n ways, (exact values not important here)\nAlice needs to generate a base preimage (BP) to encumber the overall payment. When Bob eventually learns BP, the payment should be 100% complete.\nTo construct BP, Alice samples n partial shares s_1, .., s_n. BP is then the sum of all partial shares, BP = s_1 ^ .. ^ s_n.\nAlice then needs to construct n partial payments. For each payment, Alice constructs a partial payment preimage r_i = H(BP || i), which encumbers the i'th payment. The public partial payment hash h_i = H(r_i).\nAlice then initiates each partial payment by constructing a route to the destination with value v_i and payment hash h_i. Alice also includes some info (ID, n, s_i) to identify the overall AMP and this partial payment's additive share.\nFinally, when Bob receives all n payments, he can reconstruct BP = s_1 ^ .. ^ s_n. With BP, Bob can then reconstruct each partial payment preimage, which competes the total payment.\n","id":"https://phlip9.com/notes/btc-ln/atomic multipath payments (AMP)/","title":"atomic multipath payments (AMP)"},"https://phlip9.com/notes/btc-ln/breez lightning service providers/":{"body":"breez lightning service providers\n\nSource: https://medium.com/breez-technology/introducing-lightning-service-providers-fe9fb1665d5f\nRequirements for mainstream\n \n #\n \n\n\n\nminimize onboarding friction\n\nfriend asks \"do you accept lightning?\": 1st time inbound receive\n\nIDEAL USE CASE FOR LSPs IMO\n\n\nfriend asks \"can you pay me w/ lightning?\": 1st time outbound send\n\nuser onboards initial balance via fiat onramp\n\nI suppose user can just pay LSP directly huh!\n\n\nuser already has BTC in some wallet/exchange (low probability)\n\n\n\n\nhide complexity from user\n\nusers should not have to understand channels, channel management, HTLCs, etc...\nzero configuration\nonly a single balance (should be no BTC vs LN balance distinction)\n\nSee (https://blockonomi.com/submarine-swaps/)\n\n\nauto-rebalance channels in the background\n\nA user might have capacity spread across multiple channels (is there some way to just merge them all as more capacity is added?)\nEach channel might only have 20% of the total outbound capacity; we need to rebalance if the user wants to make a payment > 20% of their total capacity. (Or this is just an AMP?)\n\n\n\n\npredictable and low fee structure\n\nunfortunately, I think this is one downside w/ this approach.\nimagine user with low inbound liquidity recveives money from friend. the LSP needs on-chain TX to top up and will probably also add additional inbound capacity (to amortize) (right?). suddenly user gets \"unexpected\" cost, since they probably don't understand or can't see channel capacities and on-chain tx fees.\n\n\n\nProblems\n \n #\n \n\n\n\nWallet needs to be open and online in order to receive payments\nRecovering wallet on new device. Must ensure old Signal app/LN wallet stops running\n\ndefine: LSP == Lightning Service Providers\nLightning is to LSP as Internet is to ISP\nNetwork hub, centralizing liquidity is more efficient\nSee also: https://www.bitrefill.com/thor-lightning-network-channels/?hl=en\nand https://lnbig.com/#/open-channel\n\nLSPs front initial inbound liquidity to users\n\ncurrently Breez defaults to ~$50 initial inbound liquidity per user\n\n\nLSPs are the sole counterparty for wallet users. LSPs take on all of the complexity in managing the channel capacity, closing unused channels, fronting initial liquidity, accepting fiat to top-up channels, etc...\nLSPs handle ensuring connectivity and liquidity out to the rest of the LN, hiding this complexity from normal users.\nLSPs rebalance funds across their channels to ensure liquidity for users.\nLSPs can focus on reliability to ensure consistent uptime vs user-run wallets.\nTbh \"non-custodial\" is a bit of a misdirection, since in this case the LSP controls the wallet code :p.\n\nOf course, this doesn't seem to be a problem for everyone using Venmo, Whatsapp, etc... but those also run on fiat rails, which can revert fraud.\nApp cannot be compromised or all users' funds at risk\nLSP can be compromised (assuming no non-consensual send APIs exposed) without risking user funds (but can they? how are channel closes handled if we can't assume the users' LND clients are always live?).\nWhy even bother running a whole ass LND on each user's phone and instead just do fully custodial lightning? (definitely bad optics)\nFrom SEC perspective, ideal setup has clear separation b/w LND wallet and Signal app. From UX perspective, prev. is untenable wrt. complexity. Wallet must be integrated.\n\n\nMost LSPs have 30 channel maintainence guarantee, may close if inactive longer.\nLSP needs initial fee to charge for (1) initial channel open tx, (2) capital cost, (3) channel close tx, (4) small profit. Breez was ~$1 vs $50 fronted, almost 2% fee.\nLSPs also can charge fee on (1) lightning txs, (2) fiat onboarding.\n\n","id":"https://phlip9.com/notes/btc-ln/breez lightning service providers/","title":"breez lightning service providers"},"https://phlip9.com/notes/btc-ln/hosted channels/":{"body":"hosted channels\n\nHosted Channels (HC) are a new channel type that aren't backed by an on-chain HTLC. The Host side holds the money and the Client side trusts the host.\nHCs aren't enforceable on-chain but can still be advertised to the LN. They're more capital efficient and other nodes can use the public HCs.\nLooks like Simple Bitcoin Wallet is using Hosted Channels for first-time inbound receive?\n","id":"https://phlip9.com/notes/btc-ln/hosted channels/","title":"hosted channels"},"https://phlip9.com/notes/btc-ln/lightning libs/":{"body":"lightning libs\n\nImmortan is a minimal, privacy-focused, opinionated LN protocol implementation aimed to specifically power lite LN nodes which are mostly to be found on mobile phones or desktop computers and only run private channels.\nhttps://github.com/btcontract/IMMORTAN\nhttps://github.com/btcontract/wallet\nEclair (French for Lightning) is a Scala implementation of the Lightning Network.\nhttps://github.com/ACINQ/eclair\nBreez is a Lightning Network mobile client and a hub. It provides a platform for simple, instantaneous bitcoin payments.\nhttps://github.com/breez/breez\nhttps://github.com/breez/breezmobile\nhttps://github.com/breez/server\nrust-lightning LDK is a Lightning library written in Rust, with many modular pieces which are intended to be mixed and matched to enable Lightning functionality in many different kinds of projects.\nhttps://github.com/lightningdevkit/rust-lightning\ncloudhead/nakamoto: a privacy preserving BTC light client in Rust. Very modular. IO-free core protocol.\nhttps://github.com/cloudhead/nakamoto\n","id":"https://phlip9.com/notes/btc-ln/lightning libs/","title":"lightning libs"},"https://phlip9.com/notes/btc-ln/lightning network notes/":{"body":"lightning network notes\n\nHTLCs must clear quickly\n \n #\n \n\n\n\nHTLCs should clear quickly (like at most 30sec)\nEach pending HTLC adds an extra txout to your (refund?) tx, which costs you on-chain fees if you have to revoke.\nGood quality nodes should almost never (?) hold HTLCs for a long time.\nRustie proposal (offhand comment from Tadje circa 2019) means nodes will try to ascribe blame if an HTLC doesn't clear quickly.\n\nIf the path looks like A -> B -> C, and A sees HTLC pass some timeout, A will request proof (proof that B closed channel B <-> C with pending HTLC containing image of R) from B that he has also punished C for not publishing R (preimage) or A will punish B (by closing their channel A <-> B).\n\n\n\n","id":"https://phlip9.com/notes/btc-ln/lightning network notes/","title":"lightning network notes"},"https://phlip9.com/notes/btc-ln/lightning rod/":{"body":"lightning rod\n\nTODO, looks like some way to do offline payments via a trustless intermediary who will hold onto some state.\nhttps://medium.com/breez-technology/introducing-lightning-rod-2e0a40d3e44a\n\nCarl: What ended up happening to the LR offline?\nRoy (Breez): Didn't end up implementing it then b/c there's a limit to the number of HTLCs you can hodl, and in some nodes the limit is very low. There are other issues, like mobile notifications are not very reliable and if the payer doesn't connect afterwards it leads to channel being closed. All these can be mitigated, so it's possible we'll revisit now the network is a bit more stable.\n\n\nCarl: Signal is a VoIP app.\nCarl: VoIP applications have special privilege in iOS-land, so they can run a snippet of code upon notification\nPhilip: hmm so on iOS you can send a notification, which would trigger the Signal app to like check their channels or receive an async payment?\nCarl: yes I think so\n\n","id":"https://phlip9.com/notes/btc-ln/lightning rod/","title":"lightning rod"},"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"body":"lightningdevkit - rust-lightning\n\nGithub: https://github.com/lightningdevkit/rust-lightning/\nldk-sample node impl\n \n #\n \n\n\nhttps://github.com/lightningdevkit/ldk-sample\nrun:\n$ cargo run <bitcoind-rpc-username>:<bitcoind-rpc-password>@<bitcoind-rpc-host>:<bitcoind-rpc-port? <ldk_storage_directory_path> [<ldk-peer-listening-port>] [bitcoin-network] [announced-listen-addr announced-node-name]\n\ndeps:\n\n\nlightning\n\n\nlightning-block-sync = { features = [ \"rpc-client\" ] }\n\n\nlightning-invoice\n\n\nlightning-net-tokio\n\n\nlightning-persister\n\n\nlightning-background-processor\n\n\nbitcoin\n\n\nbitcoin-bech32\n\n\ntokio\n\n\nlooks like the sample assumes some bitcoind node running locally/accessible via rpc\nmain\n \n #\n \n\n\nSimplified and annotated\n// primary crate-specific logic\nuse crate::bitcoind_client::BitcoindClient;\nuse crate::disk::FilesystemLogger;\n\n// ..\n\n// Is this like the in-memory storage?\n// it says \"TODO: persist payment into to disk\" loe\npub(crate) type PaymentInfoStorage = Arc<Mutex<HashMap<PaymentHash, PaymentInfo>>>;\n\n// what is FilesystemPersister doing here? some extra indexed\n// data?\ntype ChainMonitor = chainmonitor::ChainMonitor<\n\tInMemorySigner,\n\tArc<dyn Filter + Send + Sync>,\n\tArc<BitcoindClient>,\n\tArc<BitcoindClient>,\n\tArc<FilesystemLogger>,\n\tArc<FilesystemPersister>,\n>;\n\npub(crate) type PeerManager = SimpleArcPeerManager<\n\tSocketDescriptor,\n\tChainMonitor,\n\tBitcoindClient,\n\tBitcoindClient,\n\tdyn chain::Access + Send + Sync,\n\tFilesystemLogger,\n>;\n\n// ok, this uses ChainMonitor, and chanmgr def needs to persist\n// so maybe that's why ChainMonitor has persistance?\npub(crate) type ChannelManager = SimpleArcChannelManager<\n\tChainMonitor,\n\tBitcoindClient,\n\tBitcoindClient,\n\tFilesystemLogger\n>;\n\n// what is E?\npub(crate) type InvoicePayer<E> = payment::InvoicePayer<\n\tArc<ChannelManager>,\n\tRouter,\n\tArc<Mutex<Scorer>>,\n\tArc<FilesystemLogger>,\n\tE,\n>;\n\n// this is Lightning Network router?\ntype Router = DefaultRouter<Arc<NetworkGraph>, Arc<FilesystemLogger>>;\n\n// ..\n\nasync fn handle_ldk_events(\n\tchannel_manager: Arc<ChannelManager>,\n\tbitcoind_client: Arc<BitcoindClient>,\n\tkeys_manager: Arc<KeysManager>,\n\tinbound_payments: PaymentInfoStorage,\n\toutbound_payments: PaymentInfoStorage,\n\tnetwork: Network,\n\tevent: &Event,\n) {\n\tmatch event {\n\n\t// client should gen a funding tx, then call\n\t// chanmgr::funding_transaction_generated. event generated in chanmgr.\n\tFundingGenerationReady {\n\t\ttemp_chan_id,\n\t \tchan_out_value,\n\t\tout_script,\n\t\tuser_chan_id (or 0 for inbound)\n\t} => {\n\t\tlet raw_tx = bitcoind.create_raw_transaction(outputs).await;\n\t\tlet funded_tx = bitcoind.fund_raw_transaction(raw_tx).await;\n\t\tlet signed_tx =\n\t\t\tbitcoind.sign_raw_transaction_with_wallet(funded_tx.hex).await;\n\t\tlet final_tx = encode::deserialize(signed_tx.hex);\n\t\tchanmgr.funding_transaction_generated(temp_chan_id, final_tx);\n\t}\n\n\t// got that cash money babyyy\n\t// need to find the payment preimage and feed it to chanmgr::claim_funds\n\t// if we can't find it, hit up chanmgr::fail_htlc_backwards\n\t// note: might get multiple events for a single inbound payment :O\n\tPaymentReceived { payment_hash, purpose, amt, .. } => {\n\t\tlet mut payments = inbound_payments.lock();\n\t\tlet (preimage, secret) = match purpose {\n\t\t\t// \t\t\t\t\t vvvvvvvv can be None?\n\t\t\tPaymentPurpose::Invoice { preimage, secret } => { /*..*/ }\n\t\t\tPaymentPurpose::Spontaneous(preimage) => { (preimage, None) }\n\t\t};\n\t\t// vvvvvvvv unwrap????\n\t\tlet status = chanmgr.claim_funds(preimage.unwrap());\n\t\tlet status = if status { HTLCStatus::Succeeded } else { Failed };\n\t\tpayments.upsert(payment_hash, { status, preimage, secret, amt });\n\t}\n\n\t// outbound payment succeeded! made its way to the target and we got\n\t// the preimage back!\n\tPaymentSent { preimage, payment_hash, fee_paid, .. } => {\n\t\tlet mut payments = inbound_payments.lock();\n\t\tif let Some(payment) = payments.find_mut(payment_hash) {\n\t\t\tpayment.preimage = Some(preimage);\n\t\t\tpayment.status = Succeeded;\n\t\t}\n\t}\n\n\t// outbound payment failed. PaymentPathFailed events provide extra info\n\t// also for each individual path in a MPP. provided when payment no\n\t// longer retryable (either b/c of many timeouts or\n\t// called chanmgr::abandon_payment).\n\tPaymentFailed { hash, .. } => {\n\t\tif let Some(payment) = inbound_payments.lock().get_mut(hash) {\n\t\t\tpayment.status = Failed;\n\t\t}\n\t}\n\n\t// gen'd when we successfully forward a payment through our node and\n\t// earn a forwarding fee\n\tPaymentForwarded { fee_earned, claim_from_onchain_tx } => {\n\t\tlog(/* .. */);\n\t}\n\n\t// you should call chanmgr::process_pending_htlc_forwards some time\n\t// in the future\n\tPendingHTLCsForwardable { time_forwardable } => {\n\t\tlet min = time_forwardable.as_millis();\n\t\t// spawns a task that calls chanmgr::process_pending_htlc_forwards\n\t\t// after random time in range [min, 5*min]\n\t}\n\n\t// some of your tx outputs were confirmed on-chain and are now spendable.\n\t// you _must_ store & spend these outputs asap (?).\n\tSpendableOutputs { outputs } => {\n\t\tlet spending_tx = keysmgr.spend_spendable_outputs(outputs, /* .. */);\n\t\tbitcoind.broadcast_tx(spending_tx);\n\t}\n\n\t// one of our channels is being closed. e.g., force close, coop close,\n\t// funding tx timeout, d/c'd peer.\n\tChannelClosed { chanid, reason, user_chanid } => { /* log */ }\n\n\t// we can abandon the funding tx and recycle inputs for another purpose\n\tDiscardFunding { chanid, tx } => {\n\t\t// A \"real\" node should probably \"lock\" the UTXOs spent in funding\n\t\t// transactions until the funding transaction either confirms, or\n\t\t// this event is generated.\n\t}\n\n\t// a path for an outbound payment succeeded. useful for scoring nodes\n\t// on the path?\n\tPaymentPathSuccessful { /* ignore? */ }\n\n\t// an outbound HTLC failed. probably someone dropped us on the floor.\n\t// might be able to retry with a different route.\n\t// Note: doesn't indicate failure for a MPP payment.\n\tPaymentPathFailed => { /* ignore? */ }\n\n\t}\n}\n\nasync fn start_ldk() {\n\t// 1. create data directory\n\t// 2. connect to bitcoind rpc\n\t// 3. check we're on same network as bitcoind\n\t// 4. init broadcaster interface (uses bitcoind)\n\t// 5. init persistance (FilesystemPersister(dir))\n\t// 6. init chain monitor (uses bitcoind + fs persister)\n\t// 7. init keys manager (uses a 32B seed file to derive other keys)\n\t// 8. read channel monitor state from disk (could be empty?)\n\n\t// 9. init channel manager\n\t//\t 9.a. if no dir/manager file, then fresh node\n\t// 9.a.1. use latest block hash/height and freash chan manager\n\t// 9.b. read chan manager state from fs\n\n\t// 10. sync chan mons and chan mgr to chain tip (if restarting node)\n\t// 10.a. go through each chan mon and sync\n\t// (via init::synchronize_listeners)\n\n\t// 11. tell chain mon to watch each chan\n\t// 12. try to read any persisted network graph state\n\t// 13. spawn a task that persists the network graph every 10min\n\t// \t (note: not safety critical, can always just re-gossip)\n\t// 14. init peer mgr (needs node secret, ln msg handler uses chan mgr\n\t// \t and route handler (NetGraphMsgHandler))\n\t// 15. init inbound net\n\t//\t 15.a. bind to port.\n\t// 15.b. spawn a lightning_net_tokio::setup_inbound(peermgr) task for\n\t// every inbound connection.\n\t// 16. spawn a task that polls the best chain tip every 1s.\n\t// 17. spawn a task that persists the scorer (used for scoring channels\n\t// \t to find lowest fee path) every 10min.\n\t// 18. init main event handler (top-level app events you should handle)\n\t// 19. init InvoicePayer (utility for paying Invoices and sending pymts)\n\t// \t this takes the event handler, router, chanmgr, and scorer\n\t// 20. init BackgroundProcessor (this fwds events to the InvoicePayer,\n\t//\t periodically backs up chanmgr, drives clock on chanmgr and\n\t// \t and peermgr, periodically clear stale chans in net graph)\n\t// 21. spawn a task that tries to reconnect with channel peers every 1s\n\t// 22. spawn a task that broadcasts our node_announcement every 1min\n}\n\n","id":"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/","title":"lightningdevkit - rust-lightning"},"https://phlip9.com/notes/btc-ln/submarine swaps/":{"body":"submarine swaps\n\nProblem\n \n #\n \n\n\nIt is crucial for UX that there is no distinction b/w on-chain BTC and off-chain LN capacity. Transfers b/w on-chain BTC and off-chain LN wallets should also happen in one step and with minimal fees.\nWithout submarine swaps you need an intermediate step where you first transfer LN funds to an on-chain BTC wallet, then pay the BTC. Another way to look at BTC -> LN is for topping up an existing LN channel.\nNote: a submarine swap can't increase the total channel capacity, just fill your inbound/outbound side sending/receiving on-chain BTC (unless you are a client of an LSP who will open a zero-conf channel to your node).\nSubmarine Swaps claim to solve this problem.\nDefine\n \n #\n \n\n\n\nSubmarine swaps transfer funds between the base-layer chain and the second-layer Lightning Network through (paid) intermediaries — importantly — without trust. In effect, Submarine Swaps can bridge users’ on-chain and off-chain balances. Source\n\n\nSubmarine swaps are atomic on-chain to off-chain swaps (and vice-versa) of cryptocurrencies. Source\n\nSubmarine swaps rely on a trustless intermediary or \"swap provider\".\nProtocol\n \n #\n \n\n\non-chain BTC -> off-chain LN channel\n\n\nUser sends on-chain BTC contract + LN invoice to the swap provider.\nThis swap contract is an HTLC; if the swap provider fails to execute in time, the user can reclaim their funds.\n\n\nThe preimage in the swap contract is used by the swap provider as proof of payment to claim the on-chain BTC at the swap address.\nThe swap provider will not know the preimage unless the LN invoice is paid.\n\n\nIf successful, the off-chain LN channel will be filled with the corresponding amount and the swap provider can claim the funds in the HTLC.\n\n\nMisc\n \n #\n \n\n\nActually execute a swap (0.20% fee as of 2021/12/12): https://submarineswaps.org/\nSee src for a swaps service: https://github.com/submarineswaps/swaps-service\n\nBreez uses Submarine Swaps to move on-chain bitcoin directly to the user’s Lightning node without the need to send the funds to a local bitcoin wallet first. As a result, users only see and manage their Lightning balance without a need to manage a separate on-chain balance.\n\nCan execute Submarine Swaps across chains (i.e., spend on-chain ETH to fill off-chain LN channel)\nAdded privacy benefit: with a submarine swap, you effectively wash the BTC and receive uncorrelated Lightning.\n","id":"https://phlip9.com/notes/btc-ln/submarine swaps/","title":"submarine swaps"},"https://phlip9.com/notes/btc-ln/zero-conf channels/":{"body":"zero-conf channels\n\nhttps://medium.com/breez-technology/lightning-payment-channels-a-flavor-for-every-palette-53cb975907ea\n[bitcoin-dev] [Opt-in full-RBF] Zero-conf apps in immediate danger\ndef: zero-conf app\nAccepts on-chain payment from untrusted party and possibly delivers product/service depending on risk factors.\nRisk Analysis:\n\nIf incoming txn is RBF (direct or inherited)\n\nthen the txn is too risky; wait for 1+ conf, since it can be replaced at any time\n\n\nIf the payment amount is for an amount greater than X\n\nthen the txn is too risky; wait for 1+ conf, since the amount is worthy of a sophisticated attacker\n\n\nElse\n\nwait for txn to propagate through mempool\nIf there's no double-spend attempt, then accept zero-conf.\n\n\n\nIf receiving from fully untrusted third parties, zero-conf apps should be willing to tolerate an expected loss.\nhttps://github.com/lightning/bolts/issues/565#issuecomment-460601680\nhttps://bitcoinops.org/en/topics/zero-conf-channels/\n","id":"https://phlip9.com/notes/btc-ln/zero-conf channels/","title":"zero-conf channels"},"https://phlip9.com/notes/combinatorics/":{"body":"","id":"https://phlip9.com/notes/combinatorics/","title":"combinatorics"},"https://phlip9.com/notes/combinatorics/k-combinations of a multiset/":{"body":"k-combinations of a multiset\n\ndef: Multiset\n \n #\n \n\n\nA multiset is just a set that may contain duplicates. For example, [a, a, b, b, b, c] is a multiset in a flattened, array-like representation. We could just as easily write it in a compact, map-like representation: { a: 2, b: 3, c: 1 }. Here, we take each unique element and associate it with its number of occurances in the multiset.\nMultisets are a natural representation for many common objects in combinatorics, and are often used to model rolling multiple dice, counting cards by suite, and so on.\nWhen representing multisets computationally, it's often convenient to represent them as a sorted array. That way, we'll have exactly one canonical representative for each multiset. This trick can enable further optimizations for us to exploit.\ndef: k-Combinations of a Multiset\n \n #\n \n\n\nThe k-combinations of a multiset are all k-length combinations drawn from the given multiset. Since these are combinations and not permutations, the order is not important (so the permutations [1, 1, 2, 2] and [1, 2, 1, 2] and [2, 2, 1, 1] and ... are all equivalent).\nThe elements are also drawn without replacement, so an element only appearing twice in the multiset should only ever appear at most twice in any combination.\nTo get a better idea of what we're talking about, suppose we've just rolled 6 dice and they come up as [1, 1, 2, 2, 2, 3]. How many different ways can we select 4 of the 6 dice to re-roll? As you can probably guess, these are just the 4-combinations of the above multiset.\nListing out the 4-combinations of mset = [1, 1, 2, 2, 2, 3] in lexicographic order:\n[1, 1, 2, 2]\n[1, 1, 2, 3]\n[1, 2, 2, 2]\n[1, 2, 2, 3]\n[2, 2, 2, 3]\n\nInsight\n \n #\n \n\n\nIf you stare at the list above for a bit, you might notice something interesting. If we list out the combinations in sorted order, the first combination is always mset[0..k] and the last combination is always mset[n-k..n], where mset the multiset, k is the length of each combination, n is the number of elements in the multiset mset, and a..b is Rust range syntax for integers between a (inclusive) and b (exclusive).\nThis property will come in handy in a moment when we write an algorithm to generate the k-combinations, since these two k-combinations give us our start and end points. In other words, we'll start generating combinations from mset[0..k] and we'll know we've finished when the current combination equals mset[n-k..n]\nI'll leave the general proof as an exercise for the reader : )\nAlgorithm\n \n #\n \n\n\nSee also: http://www.martinbroadhurst.com/combinations-of-a-multiset.html\nHere is the core function, which takes mset, a sorted multiset slice, and arr the previous generated combination. We modify arr in-place to the next combination.\nIf there are no combinations left to generate, the function returns true.\nfn next_mset_comb<T>(\n\t// this is the original multiset in flattened,\n\t// array-like representation\n\tmset: &[T],\n\t// this is the _previous_ combination, also in flattened\n\t// array-like representation\n\tarr: &mut [T],\n) -> bool\nwhere\n T: Clone + PartialOrd,\n{\n\tlet n = mset.len();\n\tlet k = arr.len();\n\n\tlet last = &mset[(n-k)..n];\n\n\t// find the rightmost element in `arr` that is less\n\t// than the \"max\" value it can have (which is the\n\t// same as the element in the final combination at the\n\t// same index)\n\tlet maybe_next_idx = (&*arr).into_iter()\n\t\t.zip(last.into_iter())\n\t\t.rposition(|(x, l)| x < l);\n\n\tlet (i, x) = match maybe_next_idx {\n\t\tSome(i) => (i, &arr[i]),\n\t\tNone => return true, // done!\n\t};\n\n\t// find the successor element (the next element in the\n\t// multiset greater than arr[i])\n\tlet maybe_succ_idx = mset.into_iter().position(|y| x < y);\n\n\tlet j = match maybe_succ_idx {\n\t\tSome(j) => j,\n\t\t// since we've already checked we're not at the end,\n\t\t// it cannot happen that there is no successor.\n\t\tNone => unreachable!(),\n\t};\n\n\t// replace arr[i] with its successor and all subsequent in arr with\n\t// the subsequent in the original multiset.\n\tarr[i..k].clone_from_slice(&mset[j..(j + (k - i))]);\n\n\t// not done yet : )\n\tfalse\n}\n\nWe can also use the above to write an Iterator over the k-combinations. This Iterator has a nice advantage in that it only uses constant space while iterating, so no need for a big temporary array.\nstruct KCombsIter<T> {\n mset: Vec<T>,\n comb: Vec<T>,\n done: bool,\n}\n\nimpl<T> KCombsIter<T>\nwhere\n T: Clone + PartialOrd + Ord,\n{\n fn new(mset: Vec<T>, k: usize) -> Self {\n assert!(k <= mset.len());\n assert!(is_sorted(mset.iter()));\n\n let comb = mset[0..k].to_vec();\n\n Self {\n mset,\n comb,\n done: false,\n }\n }\n}\n\nimpl<T> Iterator for KCombsIter<T>\nwhere\n T: Clone + PartialOrd + Ord,\n{\n type Item = Vec<T>;\n\n fn next(&mut self) -> Option<Self::Item> {\n if !self.done {\n let comb = self.comb.clone();\n self.done = next_mset_comb(&self.mset, &mut self.comb);\n Some(comb)\n } else {\n None\n }\n }\n}\n\nSee the complete code in action on the Rust Playground: https://play.rust-lang.org/?version=stable&mode=debug&edition=2021&gist=6d08a5fa898eb5e43f9a0f7d30fdd0ad\nThe above may be slightly wasteful for certain usecases, since it needs to allocate on each iteration. For your specific usage, you'll want to specialize the representation of the multiset itself in order to squeeze out every last drop of perf.\nFor example, in my Kingdome Come: Deliverance - Optimal Dice Strategy algorithm, you can see the bit-packed DiceVec, which represents a roll of 0 to 6 dice packed into a single u64 and the likewise specialized iterator DiceVecMultisetsIter, which uses SIMD to manipulate the multisets and doesn't need any intermediate allocation.\n","id":"https://phlip9.com/notes/combinatorics/k-combinations of a multiset/","title":"k-combinations of a multiset"},"https://phlip9.com/notes/confidential computing/":{"body":"","id":"https://phlip9.com/notes/confidential computing/","title":"confidential computing"},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"body":"enarx (WASM TEE)\n\nsite: https://enarx.dev\nTEE\n \n #\n \n\n\n\nTrusted Execution Environments (TEEs) allow organizations to run applications within a set of memory pages that are encrypted with a secret key by the host CPU in such a way that these pages are not accessible to the operating system or any other software, even running at the highest privilege level.\nThere are currently two leading models of TEEs:\n\nProcess-based: current implementations include Intel’s SGX (Software Guard eXtensions).\nVM-based: current implementations include AMD’s SEV (Secure Encrypted Virtualization).\n\nApplications that need to run in a TEE must be developed specifically for each platform, and they differ significantly depending if it’s a process-based or VM-based TEE model. Additionally, they must implement something called attestation, which is a validation process for the TEE to prove that it’s genuine before it can be trusted by the application. Rewriting the application or the custom VMM that runs it, as well as the attestation, for each hardware platform is extremely complex and time-consuming.\nIn the next section, we will introduce Enarx, an open source framework for running applications in TEEs that addresses many of the issues raised. We’ll give a simplified overview of the component architecture of Enarx (and how it allows for support for multiple hardware platforms) and the process of creating and deploying applications to TEE instances using Enarx.\n\nEnarx\n \n #\n \n\n\n\nEnarx is a framework for running applications in TEE instances – which we refer to as “Keeps”–without the need to trust lots of dependencies, without the need to rewrite the application, and without the need to implement attestation separately.\nEnarx aims to minimize the trust relationships required when executing applications, meaning that the only components which need to be trusted are: the CPU and associated firmware, the workload itself, and the Enarx middleware, which is fully open source and auditable. Applications run without any of the layers in the stack (e.g. hypervisor, kernel, user-space) being able to look into or alter the Keep or its contents.\nIt provides a WebAssembly runtime, based on wasmtime, offering developers a wide range of language choices for implementation, including Rust, C, C++, C#, Go, Java, Python and Haskell. It is designed to work across silicon architectures transparently to the user so that the application can run equally simple on Intel platforms (SGX or the recently-announced TDX), AMD platforms (SEV) or forthcoming platforms such as Arms’ Realms and IBM’s PEF - all without having to recompile the application code.\nEnarx is CPU-architecture independent, enabling the same application code to be deployed across multiple targets, abstracting issues such as cross-compilation and differing attestation mechanisms between hardware vendors.\nEnarx provides attestation, packaging and provisioning of the application to take place in a way which is transparent to the user. Every instance of an application goes through three steps:\n\nAttestation: Enarx checks that the host to which you’re planning to deploy is a genuine TEE instance.\nPackaging: Once the attestation is complete and the TEE instance verified, the Enarx management component encrypts the application and any required data.\nProvisioning: Enarx then sends the application and data along to the host for execution in the Enarx Keep.\n\nAt no point is the host system able to look inside or change the code or data within a Keep. Thus, Enarx allows organizations with sensitive code or data to run their applications with strong integrity and confidentiality protections.\n\nComponents\n \n #\n \n\n\n\nThreat Model\n \n #\n \n\n\n\n\n\nEnarx provides four layers in the run-time stack. Working from the lowest up, they are:\n\na VMM (Virtual Memory Manager)\na microkernel (μkernel)\na WASM runtime (WebAssembly)\na WASI implementation (WebAssembly System Interface).\n\n\nAttestation\n \n #\n \n\n\nAn application which is going to run in an Enarx Keep needs to attest two things:\n\nThe hardware TEE providing Keeps.\nA measurement of the Enarx runtime. This means that Red Hat may need to launch a service to abstract attestation. The way that this works is that the client requests attestation from Enarx. Enarx supplies a blob. The client forwards this to Red Hat. Red Hat will then complete attestation of the h/w environment and translate the measurements of Enarx into a something which allows you to identify the specific version of Enarx.\n\n(??? what is Red Hat in this case? the abstract cloud provider? is \"requests from Enarx\" like request from a local library, or actually hitting an API??)\nFrom the client’s point of view, the attestation steps of Enarx end up with the following two cryptographically validated assertions:\n\nThe TEE type and version;\nThe Enarx version and integrity. The attestation processes associated with the various hardware architectures are very different (see SEV architectural and SGX architectural): providing a common mechanism to abstract this is expected to be a major part of the work associated with this project.\n\n\nAMD SEV Remote Attestation Protocol\n \n #\n \n\n\nGoal\n \n #\n \n\n\nThis protocol allows a tenant to:\n\nVerify the platform certificate chain belonging to the remote host where the Enarx Keep is constructed\nEstablish a secure channel with the remote CPU AMD Secure Processor (AMD SP) on the remote host\nCompare its own measurement of the guest's initial state with the AMD SP's measurement from the untrusted host\nSafely deliver its workload to the AMD SP\n\nThis protocol maps the regular SEV launch procedure onto a simple client-server model (client sends request to server; server sends its response to client). In fact, the message formats are comprised of data structures defined in the AMD SEV specification.\nIt is a short, serialized exchange. More importantly, however, it is meant to be an “atomic” transaction. What this means is that the client and the backend complete attestation successfully in this exchange or they don’t. There are no “in-between” end conditions. Therefore, neither party should have any expectation of “retrying” a previous step. It is always forward progress or none at all. As the orchestrator, it is the Keep Manager’s responsibility to know if the keep becomes defunct during attestation, launch, or normal operation. It is expected that the Keep Manager will inform the client of an appropriate error condition and tear down the defunct Keep if necessary.\nMessage Formats\n \n #\n \n\n\nThe data structures defined in the SEV specification form the substrate for this protocol. As a result, message payloads are binary structures. The messages for this protocol are CBOR-encoded. They will be represented here in Concise Data Definition Language (CDDL).\nmessage = {\n certificate-chain-naples //\n certificate-chain-rome //\n launch-start //\n measurement //\n secret //\n finish\n}\n\ncertificate-chain-naples = (\n \"ark\": certificate-ca-small,\n \"ask\": certificate-ca-small,\n \"pdh\": certificate-sev,\n \"pek\": certificate-sev,\n \"oca\": certificate-sev,\n \"cek\": certificate-sev,\n)\n\ncertificate-chain-rome = (\n \"ark\": certificate-ca-large,\n \"ask\": certificate-ca-large,\n \"pdh\": certificate-sev,\n \"pek\": certificate-sev,\n \"oca\": certificate-sev,\n \"cek\": certificate-sev,\n)\n\nlaunch-start = (\n \"policy\": policy,\n \"pdh\": certificate-sev,\n \"session\": session,\n)\n\nmeasurement = (\n \"build\": build,\n \"measurement\": bytes .size 32,\n \"nonce\": bytes .size 16,\n)\n\nsecret = (\n \"header\": {\n \"iv\": bytes .size 16,\n \"mac\": bytes .size 32,\n },\n \"ciphertext\": bytes,\n)\n\nfinish = /* TODO */\n\nversion = (\n \"major\": uint .size 1,\n \"minor\": uint .size 1,\n)\n\nbuild = (\n \"version\": version,\n \"build\": uint .size 1,\n)\n\npolicy = (\n \"flags\": uint .size 2,\n \"minfw\": version,\n)\n\nsession = (\n \"nonce\": bytes .size 16,\n \"wrap_tk\": bytes .size 32,\n \"wrap_iv\": bytes .size 16,\n \"wrap_mac\": bytes .size 32,\n \"policy_mac\": bytes .size 32,\n)\n\nSequence Diagram\n \n #\n \n\n\n\nSyscall Proxy\n \n #\n \n\n\nEnarx needs to support Keeps that are built on encrypted virtual machine technologies such as AMD SEV and IBM Power PEF. This means that we need to boot an operating system inside the guest VM. However, existing operating systems do not meet the Enarx design principles (especially: minimal trusted computing base [TCB], external network stack and memory safety). Therefore, this page outlines a plan for building a minimal OS which intends to service only the minimal requirements to run Enarx.\nExisting Systems\n \n #\n \n\n\nA traditional virtualization stack (such as Qemu + Linux) is typically composed of four components:\n\nThe Virtual Machine Manager (e.g. Qemu)\nThe VM BIOS / Firmware (e.g. OVMF)\nThe Guest Bootloader\nThe Guest Kernel\n\nThe Plan\n \n #\n \n\n\nIn order to remove these problems, Enarx plans to produce three components when running in a VM-based TEE:\n\nThe Enarx VMM\nThe Enarx μKernel\nThe Enarx Userspace WASM / WASI Runtime\n\nThese three components will be tightly coupled and shipped as an integrated system. The interfaces between the components will be considered an internal implementation detail that can be changed at any time. Enarx tenants will validate the cryptographic measurement of the three components (VMM Guest Memory Setup, μKernel and Userspace Runtime) as a single unit to reduce combinatorial complexity.\n\nIn order to keep the TCB small, especially the exclusion of a full network stack, we intend to proxy syscalls to the host. This allows us to use as many of the host resources as possible while maintaining a small Keep size. It also allows for performance optimizations as Enarx gets more mature. The above chart shows a full trace of a single syscall across the various components. This works as follows:\n\n\nAn Enarx application, compiled to WebAssembly, makes a WASI call, for example: read(). This causes a transition from the JIT-compiled code into our guest userspace Rust code. This does not entail a full context switch and should be fast.\n\n\nThe hand-crafted Rust code should translate the WASI call into a Linux read() syscall. From here we leave Ring 3 (on x86; other architectures have similar structures) and jump into the μKernel, performing a context switch. At this point, some syscalls will be handled internally by the μKernel, for example, memory allocation where the virtual machine has sufficiently allocated pages to handle the request immediately.\n\n\nAll syscalls which cannot be handled internally by the μKernel must be passed to the host, so the guest μKernel passes the syscall request to the host (Linux) kernel. As an optimization, some syscalls may be handled by the host (Linux) kernel directly. For example, read() of a socket can be handled immediately by the host kernel, avoiding future context switches. This requires the (future) development of a Linux kernel module to handle these request directly in the host kernel. Since this is an optimization step, we can wait until the interfaces have settled before pursuing this.\n\n\nAll syscalls which cannot be handled internally by the host kernel must cause a vmexit in the host VMM. For example, a request for additional pages to be mapped into the guest must be passed to the VMM since that is the component which manages the allocated pages. Like previous layers, any syscalls which can be handled directly in the VMM (for example allocation from a pre-allocated memory pool) should be handled immediately to avoid future context switches.\n\n\nIn some cases, the VMM will have to re-enter the host kernel in order to fulfil the request. This is the slowest performance path and should be avoided wherever possible.\n\n\nSyscall Categories and their Layers\n \n #\n \n\n\n\n\nMemory Allocation: Memory allocation syscalls should be served by the μKernel from pre-allocated pools of huge pages. Allocation of huge pages should be passed through to the host layers.\n\n\nNetworking: All networking syscalls should be passed to the host layers. This ensures that the network stack lives outside the TCB.\n\n\nFilesystem: The guest μKernel should implement a filesystem on top of block encryption and authentication. Block IO should be passed to the host layers. It may even be possible to implement this functionality directly in userspace to reduce the number of context switches. Block authentication, block encryption and the filesystem should be implemented as reusable crates for use in other (non-VM-based keep) contexts.\n\n\nThreading: Techniques like NUMA are extremely hard to implement. Therefore, the μKernel should pass this to the host layers where possible. One particular strategy to accomplish this is to perform vCPU hotplug. When a new thread is created in the guest userspace, a new vCPU is created by the VMM. Therefore there is always a 1:1 mapping between userspace threads and vCPUs. The guest μKernel can pool pre-allocated vCPUs to increase performance.\n\n\nFAQ\n \n #\n \n\n\nWhy not do containers?\n \n #\n \n\n\nWould it be possible to implement containers within TEEs? That depends somewhat on the TEE implementation, but the answer is a \"kind of yes\". However, when you run containers on a host, the interactions that the container runtime has with the host leak all sorts of information that we really don't want to be making available to it. One of the design goals of Enarx is to reduce the number of layers that you need to trust, so this isn't a great fit. We know that containers are great, and one of the interesting sets of questions around Enarx revolves around exactly how you orchestrate Keeps, but whatever that looks like, we won't be doing something which meets the specification for containers, for the reasons outlined above.\n(wish they were a bit more specific about this)\nWill Enarx offer protection against side-channel attacks?\n \n #\n \n\n\nThe short answer is yes, where possible. To expand on this, first of all this is only a goal for now, as we won't be focusing our efforts on it immediately given we are still working on core functionality. Secondly, it is likely to be impossible to mitigate all side-channel attacks, but we certainly will attempt to do so where possible, as part of our aim to make Enarx Keeps as secure as possible.\nTEE vs TPM\n \n #\n \n\n\nYou could implement many of the capabilities of a TPM within a TEE, but it doesn't make sense to create a \"full\" TPM implementation within a TEE on two levels:\n\nOne of the key points of a TPM is that it's linked to the hardware, meaning that the boot sequence can be tied into PCRs (Platform Configuration Registers). TEEs aren't necessarily suitable as Hardware-Based Roots of Trust.\nEnarx provides a general processing environment. The capabilities of a TPM are carefully scoped, and to meet the requirements of the TCG (Trusted Computing Group, the standards body for TPMs), you need to implement these very carefully.\n\nTEE vs HSM\n \n #\n \n\n\nHSM's provide higher levels of protection than TEEs, but are separate modules, accessed via PCI bus, network, etc. TEEs are integral to the CPU packages on a motherboard. Both HSMs and TEE instances can be used as general-function processing units (depending on the model), and both can be programmed for particular uses (e.g. PKCS#11 modules). The cost of HSMs is high (typically thousands of dollars), whereas TEEs are integral to a chipset. The work to program an HSM is difficult.\n","id":"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/","title":"enarx (WASM TEE)"},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"body":"fortanix rust tutorial\n\nSource: https://edp.fortanix.com/docs/installation/guide/\nNext time, also check out: https://docs.conclave.net/machine-setup.html\nWindows SGX setup: https://dqdongg.com/windows/2020/05/31/Windows-sgx.html\nFortanix on Azure DCsv3 VM\n \n #\n \n\n\nIf you don't have a recent Intel CPU that supports SGX, you'll need to develop on a remote machine.\nThis tutorial will show you how to get the basic toolchain set up for developing Fortanix rust-sgx applications on a remote Azure VM that supports SGX confidential compute.\nCreate our VM\n \n #\n \n\n\nWe're using Ubuntu 20.04 LTS here. If you use an older Ubuntu version, you will experience problems.\n$ az vm create \\\n\t--name sgx-test \\\n\t--resource-group sgx-test_group \\\n\t--size Standard_DC1s_v3 \\\n\t--image Canonical:0001-com-ubuntu-server-focal:20_04-lts-gen2:latest\n\n{\n \"fqdns\": \"\",\n \"id\": \"/subscriptions/XXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXX/resourceGroups/sgx-test_group/providers/Microsoft.Compute/virtualMachines/sgx-test\",\n \"location\": \"westus\",\n \"macAddress\": \"..\",\n \"powerState\": \"VM running\",\n \"privateIpAddress\": \"10.0.0.4\",\n \"publicIpAddress\": \"..\",\n \"resourceGroup\": \"sgx-test_group\",\n \"zones\": \"\"\n}\n\nSanity check for SGX support\n \n #\n \n\n\n$ ssh phlip9@XX.XX.XX.XX\n\n# The SGX kernel device should be available\nsgx-test:~$ ls -la /dev | grep sgx\ndrwxr-xr-x 2 root root 80 Apr 26 20:10 sgx\ncrw-rw-rw- 1 root root 10, 125 Apr 26 20:10 sgx_enclave\ncrw-rw---- 1 root sgx_prv 10, 126 Apr 26 20:10 sgx_provision\n\n# Kernel log should say something about SGX\nsgx-test:~$ sudo dmesg | grep -i sgx\n[ 0.543687] sgx: EPC section 0x2c0000000-0x3bfffffff\n\nIf you've built the sgx-detect fortanix tool locally (targetting x86_64-unknown-linux) you can try scp'ing that over. It won't work just yet, since don't all SGX system libs installed.\n# Try copying over a pre-built sgx-detect\n$ scp ~/dev/fortanix-rust-sgx/target/release/sgx-detect phlip9@XX.XX.XX.XX:~/\n\nsgx-test:~$ ./sgx-detect\n./sgx-detect: error while loading shared libraries: libsgx_dcap_ql.so.1: cannot open shared object file: No such file or directory\n\n(Ubuntu/Debian) Install SGX libraries via APT\n \n #\n \n\n\nAdding deb repos with SGX dependencies.\n# For the Intel `libsgx-` dependencies.\n$ echo 'deb [arch=amd64] https://download.01.org/intel-sgx/sgx_repo/ubuntu focal main' | sudo tee /etc/apt/sources.list.d/intel-sgx.list\n$ wget -qO - https://download.01.org/intel-sgx/sgx_repo/ubuntu/intel-sgx-deb.key | sudo apt-key add -\n\n# (Optional) If you need `clang`.\n# $ echo \"deb http://apt.llvm.org/focal/ llvm-toolchain-focal-10 main\" | sudo tee /etc/apt/sources.list.d/llvm-toolchain-focal-10.list\n# $ wget -qO - https://apt.llvm.org/llvm-snapshot.gpg.key | sudo apt-key add -\n\n# (Optional) If you're using the Azure DCAP client, `az-dcap-client`.\n# $ echo \"deb [arch=amd64] https://packages.microsoft.com/ubuntu/20.04/prod focal main\" | sudo tee /etc/apt/sources.list.d/msprod.list\n# $ wget -qO - https://packages.microsoft.com/keys/microsoft.asc | sudo apt-key add -\n\n$ sudo apt update\n\n# You should see libsgx things here now.\n$ apt search libsgx\nlibsgx-ae-epid/unknown 2.15.101.1-bionic1 amd64\n Intel(R) Software Guard Extensions QE and PvE\n# ..\nlibsgx-urts-dbgsym/unknown 2.15.101.1-bionic1 amd64\n debug symbols for libsgx-urts\n\n$ sudo apt upgrade\n\n# You may need these if you're doing more than just running `sgx-detect`.\n# $ sudo apt install \\\n# \tclang-10 libssl-dev gdb libsgx-enclave-common libsgx-quote-ex \\\n# \tlibprotobuf17 libsgx-dcap-ql libsgx-dcap-ql-dev az-dcap-client \\\n# \topen-enclave ninja-build\n\n# SGX dependencies\n$ sudo apt install libsgx-enclave-common libsgx-quote-ex libsgx-dcap-ql libsgx-dcap-ql-dev\n\n# Standard dev tools\n$ sudo apt install build-essential libssl-dev pkg-config\n\n# Fortanix needs protoc for the AESM client\n$ sudo apt install protobuf-compiler\n\n# Install rust\n$ curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh\n\n# Add SGX target\n$ rustup target add x86_64-fortanix-unknown-sgx\n\n(macOS, build-only) Install SGX deps via Homebrew\n \n #\n \n\n\n$ brew install protobuf\n\n# Install rust\n$ curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh\n\n# Add SGX target\n$ rustup target add x86_64-fortanix-unknown-sgx\n\nBuild and run Fortanix sgx-detect tools\n \n #\n \n\n\nLet's verify our install with sgx-detect.\n\n\n# # Install fortanix SGX tools (via crates.io)\n# $ cargo install fortanix-sgx-tools sgxs-tools\n# # Failed b/c published crates are 4 mo out-of-date and need weird nightly\n# # version to compile.\n\n# Install fortanix SGX tools (via git repo) since the crates.io version\n# is very out-of-date.\n$ git clone https://github.com/fortanix/rust-sgx.git --depth=1\n$ cargo install --path ./intel-sgx/fortanix-sgx-tools\n$ cargo install --path ./intel-sgx/sgxs-tools\n\n$ sgx-detect\nDetecting SGX, this may take a minute...\n✔ SGX instruction set\n ✔ CPU support\n ✔ CPU configuration\n ✔ Enclave attributes\n ✔ Enclave Page Cache\n SGX features\n ✔ SGX2 ✔ EXINFO ✘ ENCLV ✘ OVERSUB ✔ KSS\n Total EPC size: 4.0GiB\n✔ Flexible launch control\n ✔ CPU support\n ? CPU configuration\n ✔ Able to launch production mode enclave\n✔ SGX system software\n ✔ SGX kernel device (/dev/sgx_enclave)\n ✔ libsgx_enclave_common\n ✔ AESM service\n ✔ Able to launch enclaves\n ✔ Debug mode\n ✔ Production mode\n ✔ Production mode (Intel whitelisted)\n\nYou're all set to start running SGX programs!\n\n\n$ echo >> ~/.cargo/config -e '[target.x86_64-fortanix-unknown-sgx]\\nrunner = \"ftxsgx-runner-cargo\"'\n\n(Failed) Attempt at SGX inside WSL2\n \n #\n \n\n\nInstall protobuf compiler\n# Ubuntu/Debian/WSL\n$ sudo apt install protobuf-compiler\n$ protoc --version\n\nlibprotoc 3.6.1\n\nInstalling libsgx-dcap-ql-dev\n# make sure we're running on focal Ubuntu release\n$ lsb_release -a\n\n$ echo \"deb https://download.01.org/intel-sgx/sgx_repo/ubuntu focal main\" | sudo tee -a /etc/apt/sources.list.d/fortanix.list >/dev/null\n\n$ curl -sSL https://download.01.org/intel-sgx/sgx_repo/ubuntu/intel-sgx-deb.key | sudo -E apt-key add -\n\n$ sudo apt update\n$ sudo apt install libsgx-dcap-ql-dev\n\nInstalling Linux SGX drivers\n\nOn Intel's website, find the latest “Intel SGX Linux Release” (not “Intel SGX DCAP Linux Release”) and download the “Intel (R) SGX Installers” for your platform. The package will have driver in the name.\n\nUbuntu 20.04 Drivers: https://download.01.org/intel-sgx/sgx-linux/2.15.1/distro/ubuntu20.04-server/\nInstallation Guide: https://download.01.org/intel-sgx/sgx-dcap/1.12.1/linux/docs/Intel_SGX_SW_Installation_Guide_for_Linux.pdf\n$ sudo apt install build-essential ocaml automake autoconf libtool libssl-dev dkms\n\n$ wget https://download.01.org/intel-sgx/sgx-linux/2.15.1/distro/ubuntu20.04-server/sgx_linux_x64_driver_1.41.bin\n\n$ chmod a+x sgx_linux_x64_driver_1.41.bin\n$ sudo ./sgx_linux_x64_driver_1.41.bin\n\nError\nError! Your kernel headers for kernel 5.10.93.2-microsoft-standard-WSL2 cannot be found.\nPlease install the linux-headers-5.10.93.2-microsoft-standard-WSL2 package,\nor use the --kernelsourcedir option to tell DKMS where it's located\n\nI conveniently already have this kernel pulled : )\n$ sudo ./sgx_linux_x64_driver_1.41.bin --kernelsourcedir\n\nUnfortunately, seems like it won't recognize the path... My guess is that SGX inside WSL2 is probably a dead end. :(\nAttempt in Win11\n \n #\n \n\n\nPS > git config --global http.sslCAinfo \"C:\\Users\\phlip9\\scoop\\apps\\mingit-busybox\\current\\mingw64\\ssl\\certs\\ca-bundle.crt\"\nPS > scoop update\n\nPS > scoop install openssl\n\nPS > scoop bucket add extras\nPS > scoop install protobuf\n\n# make sure our nightly compiler is recent\nPS > rustup toolchain install nightly-2021-12-15\n\n# install the SGX toolchain\nPS > rustup target add x86_64-fortanix-unknown-sgx --toolchain nightly-2021-12-15\n\n# install the SGX tools\nPS > cargo +nightly-2021-12-15 install fortanix-sgx-tools sgxs-tools\n\nDidn't detect OpenSSL library...\nEDIT: nvm had to restart whole Windows Terminal app, not just open a new shell... pretty fuckin annoying tbh...\nOK, it picked up the OpenSSL library and protobuf compiler. Unfortunately it now fails b/c some file is hard depending on std::os::unix which doesn't exist on windows...\nPS > git clone git@github.com:fortanix/rust-sgx.git\n\nPS > cargo +nightly-2021-12-15 build -p fortanix-sgx-tools -p sgxs-tools\n\nError\nerror[E0433]: failed to resolve: could not find `unix` in `os`\n --> C:\\Users\\phlip9\\.cargo\\registry\\src\\github.com-1ecc6299db9ec823\\proc-mounts-0.2.4\\src\\mounts\\info.rs:7:9\n |\n7 | os::unix::ffi::OsStringExt,\n | ^^^^ could not find `unix` in `os`\n\nerror[E0433]: failed to resolve: could not find `unix` in `os`\n --> C:\\Users\\phlip9\\.cargo\\registry\\src\\github.com-1ecc6299db9ec823\\proc-mounts-0.2.4\\src\\mounts\\list.rs:4:9\n |\n4 | os::unix::ffi::OsStrExt,\n | ^^^^ could not find `unix` in `os`\n\nerror[E0433]: failed to resolve: could not find `unix` in `os`\n --> C:\\Users\\phlip9\\.cargo\\registry\\src\\github.com-1ecc6299db9ec823\\proc-mounts-0.2.4\\src\\swaps.rs:7:9\n |\n7 | os::unix::ffi::OsStringExt,\n | ^^^^ could not find `unix` in `os`\n\nerror[E0599]: no function or associated item named `from_vec` found for struct `OsString` in the current scope\n --> C:\\Users\\phlip9\\.cargo\\registry\\src\\github.com-1ecc6299db9ec823\\proc-mounts-0.2.4\\src\\mounts\\info.rs:130:22\n |\n130 | Ok(OsString::from_vec(ret))\n | ^^^^^^^^ function or associated item not found in `OsString`\n\nerror[E0599]: no method named `as_bytes` found for reference `&OsStr` in the current scope\n --> C:\\Users\\phlip9\\.cargo\\registry\\src\\github.com-1ecc6299db9ec823\\proc-mounts-0.2.4\\src\\mounts\\list.rs:55:43\n |\n55 | self.starts_with(path.as_os_str().as_bytes(), |m| &m.source)\n | ^^^^^^^^ method not found in `&OsStr`\n\nerror[E0599]: no method named `as_bytes` found for reference `&OsStr` in the current scope\n --> C:\\Users\\phlip9\\.cargo\\registry\\src\\github.com-1ecc6299db9ec823\\proc-mounts-0.2.4\\src\\mounts\\list.rs:63:43\n |\n63 | self.starts_with(path.as_os_str().as_bytes(), |m| &m.dest)\n | ^^^^^^^^ method not found in `&OsStr`\n\nerror[E0599]: no method named `as_bytes` found for reference `&OsStr` in the current scope\n --> C:\\Users\\phlip9\\.cargo\\registry\\src\\github.com-1ecc6299db9ec823\\proc-mounts-0.2.4\\src\\mounts\\list.rs:72:49\n |\n72 | let input = func(mount).as_os_str().as_bytes();\n | ^^^^^^^^ method not found in `&OsStr`\n\nerror[E0599]: no function or associated item named `from_vec` found for struct `OsString` in the current scope\n --> C:\\Users\\phlip9\\.cargo\\registry\\src\\github.com-1ecc6299db9ec823\\proc-mounts-0.2.4\\src\\swaps.rs:106:22\n |\n106 | Ok(OsString::from_vec(ret))\n | ^^^^^^^^ function or associated item not found in `OsString`\n\nOK with some fixes (hacks) I got it to build\nRunning sgx-detect\nPS > .\\target\\release\\sgx-detect.exe\n\nDetecting SGX, this may take a minute...\nthread 'main' panicked at 'Couldn't find sgx_uae_service.dll: Os { code: 126, kind: Uncategorized, message: \"The specified module could not be found.\" }', intel-sgx\\aesm-client\\src\\imp\\windows.rs:67:18\nnote: run with `RUST_BACKTRACE=1` environment variable to display a backtrace\n\nI think I'm missing some stuff installed?\nLet's have a look at the Intel SGX SDK for Windows guide:\nhttps://cdrdv2.intel.com/v1/dl/getContent/671222?explicitVersion=true\nInstalling Intel Management Engine Driver (for Win 10 (though I'm on Win 11 loe))\nIn the installer.zip > Cons (for consumer) > MEI-Only Installer MSI (don't want other BS) > MEISetup.exe\nVerifying we have SGX not disabled in the BIOS. Under Advanced/CPU Config/SW Guard Extensions (SGX), select SW Controlled and not Disabled. Curiously no direct Enabled option?\nNote: \"Trusted Computing\" refers to TPM (Trusted Platform Module) and not SGX. I believe it's used for UEFI secure boot or something.\nNow let's try to get the SGX platform software and drivers installed.\n(One thing that makes me nervous, is that many docs suggest that the SGX platform software should be pre-installed via Windows Update if SGX is supported. However, ls /mnt/c/Windows/System32 | grep -i sgx doesn't show anything...)\nJust saw this note here (https://www.intel.com/content/www/us/en/developer/articles/guide/sgx-sdk-installation-guide.html)\n\nNote: You can’t install Intel® SGX PSW installer when Windows OS is installed in Legacy mode and Intel® SGX is configured as “Software Controlled” in BIOS. You need to configure Intel® SGX as “Enabled” in BIOS before installing Intel® SGX PSW.\n\nDoes this mean Legacy AND SW Controlled or Legacy OR SW Controlled???\nSomething to look into? https://github.com/intel/sgx-software-enable\nWould need to live-boot into a linux distro in UEFI boot mode, then compile and run this I guess.\nuseful command msinfo32\n\nBIOS Mode: UEFI\nSecure Boot State: Off (Why??)\nTotal RAM: 16 GB\nAvailable RAM: 9.85 GB (??)\n\nBooted into my Pop!-OS live USB. Pulled and built the sgx_enable program. Looks like it ran successfully!!\nBooting into the BIOS still shows Software Controlled but I don't know if that's just 'cus the BIOS can't show it properly.\nBooting back into Win11, I notice something's changed in msinfo32. Under System Summary > Hardware Resources > Memory, there's a new entry!\nResourceDeviceStatus\n0xa0200000-0xa5f7ffffIntel Software Guard Extensions DeviceOK\n\nOpened Windows Update and checked for updates. A \"Intel Software Component\" looks like it installed? Going to restart just to be sure these things actually installed lmao.\nAYYYYY\nλ ls /c/Windows/System32/ | grep -i sgx\nsgx_dcap_ql.dll*\nsgx_dcap_quoteverify.dll*\nsgx_enclave_common.dll*\nsgx_epid.dll*\nsgx_launch.dll*\nsgx_platform.dll*\nsgx_quote_ex.dll*\nsgx_uae_service.dll*\nsgx_urts.dll*\n\nRunning sgx-detect again\nPS > .\\target\\release\\sgx-detect.exe -v\n\nDetecting SGX, this may take a minute...\n✔ SGX instruction set\n ✔ CPU support\n ✔ CPU configuration\n ✔ Enclave attributes\n ✔ Enclave Page Cache\n SGX features\n ✘ SGX2 ✘ EXINFO ✘ ENCLV ✘ OVERSUB ✘ KSS\n Total EPC size: 93.5MiB\n✘ Flexible launch control\n ✔ CPU support\n ? CPU configuration\n ✘ Able to launch production mode enclave\n✔ SGX system software\n ✘ SGX kernel device\n ✔ libsgx_enclave_common\n ✔ AESM service\n ✔ Able to launch enclaves\n ✔ Debug mode\n ✘ Production mode\n ✔ Production mode (Intel whitelisted)\n\n🕮 Flexible launch control > CPU configuration\nYour hardware supports Flexible Launch Control, but whether it's enabled could not be determined. More information might be available by re-running this program with sudo. Would you like to do that?\n(not supported yet)\n\ndebug: Error reading MSR 3Ah: RDMSR not implemented on Windows\n\nMore information: https://edp.fortanix.com/docs/installation/help/#flc-cpu-configuration\n\n🕮 SGX system software > SGX kernel device\nThe SGX device (/dev/sgx/enclave, /dev/sgx or /dev/isgx) is not present.\n\nIt could not be detected whether you have an SGX driver installed. Please make sure the SGX driver is installed and loaded correctly.\n\ndebug: Error opening device: Device Driver Path not supported in Windows\ndebug: Error checking module status: KMOD Status not implemented on Windows\n\nMore information: https://edp.fortanix.com/docs/installation/help/#sgx-driver\n\n🕮 SGX system software > Able to launch enclaves > Production mode\nThe enclave could not be launched. This might indicate a problem with FLC.\n\ndebug: failed to load report enclave\ndebug: cause: The EINITTOKEN provider didn't provide a token\ndebug: cause: aesm error code Unknown(16388)\n\nMore information: https://edp.fortanix.com/docs/installation/help/#run-enclave-prod\n\nYou're all set to start running SGX programs!\n\nI think this is OK? I'm pretty sure our CPU isn't recent enough to support FLC (Flexible Launch Control). I also didn't see anything relevant in the BIOS settings. It looks like it was able to launch an enclave in debug mode at least?\nWill need to buy newer Intel CPU for more serious development.\n","id":"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/","title":"fortanix rust tutorial"},"https://phlip9.com/notes/confidential computing/gramine/":{"body":"gramine\n\nsite: https://gramineproject.io/\ngithub: https://github.com/gramineproject/gramine\nrelated: mystikos\nGramine on Azure\n \n #\n \n\n\nRelated: fortanix rust tutorial > Fortanix on Azure DCsv3 VM\nProvision our VM\n \n #\n \n\n\nWe're using Ubuntu 20.04 LTS here. If you use an older Ubuntu version, you will experience problems.\n$ az vm create \\\n\t--name sgx-test \\\n\t--resource-group sgx-test_group \\\n\t--size Standard_DC1s_v3 \\\n\t--image Canonical:0001-com-ubuntu-server-focal:20_04-lts-gen2:latest\n\n{\n \"fqdns\": \"\",\n \"id\": \"/subscriptions/XXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXX/resourceGroups/sgx-test_group/providers/Microsoft.Compute/virtualMachines/sgx-test\",\n \"location\": \"westus\",\n \"macAddress\": \"..\",\n \"powerState\": \"VM running\",\n \"privateIpAddress\": \"10.0.0.4\",\n \"publicIpAddress\": \"..\",\n \"resourceGroup\": \"sgx-test_group\",\n \"zones\": \"\"\n}\n\nInstalling Dependencies\n \n #\n \n\n\nStill on our DCsv3 VM w/ Ubuntu 20.04\n# Intel SGX SDK\n$ echo 'deb [arch=amd64] https://download.01.org/intel-sgx/sgx_repo/ubuntu focal main' | sudo tee /etc/apt/sources.list.d/intel-sgx.list\n$ wget -qO - https://download.01.org/intel-sgx/sgx_repo/ubuntu/intel-sgx-deb.key | sudo apt-key add -\n\n# Azure DCAP SDK\n$ echo \"deb [arch=amd64] https://packages.microsoft.com/ubuntu/20.04/prod focal main\" | sudo tee /etc/apt/sources.list.d/msprod.list\n$ wget -qO - https://packages.microsoft.com/keys/microsoft.asc | sudo apt-key add -\n\n$ sudo apt update\n\n# SGX SDK libs should show up now\n$ apt search libsgx\nlibsgx-ae-epid/unknown 2.15.101.1-bionic1 amd64\n Intel(R) Software Guard Extensions QE and PvE\n# ..\nlibsgx-urts-dbgsym/unknown 2.15.101.1-bionic1 amd64\n debug symbols for libsgx-urts\n\n$ sudo apt upgrade\n\n# install SGX SDKs and gramine build deps\n$ sudo apt-get install -y \\\n\tbuild-essential autoconf bison gawk libcurl4-openssl-dev \\\n\tlibprotobuf-c-dev ninja-build pkg-config protobuf-c-compiler python3 \\\n\tpython3-click python3-jinja2 python3-pip python3-protobuf wget \\\n\tlibunwind8 python3-pyelftools python3-pytest \\\n\tlibsgx-dcap-quote-verify-dev az-dcap-client \\\n\tlibsgx-enclave-common libsgx-quote-ex libsgx-dcap-ql libsgx-dcap-ql-dev\n$ sudo python3 -m pip install 'meson>=0.55' 'toml>=0.10'\n\nBuild Gramine\n \n #\n \n\n\n# pull gramine src\n$ git clone https://github.com/gramineproject/gramine.git --depth=1\n$ cd gramine\n\n# build gramine\n$ meson setup build/ --buildtype=release \\\n -Dsgx=enabled -Ddirect=disabled -Ddcap=enabled\n$ ninja -C build/\n$ sudo ninja -C build/ install\n\nRun the helloworld\n \n #\n \n\n\n# generate our enclave signing key\n$ gramine-sgx-gen-private-key\n\n# # (If their command doesn't work) generate your enclave signing key\n# $ mkdir -p ~/.config/gramine\n# $ openssl genrsa -3 -out ~/.config/gramine/enclave-key.pem 3072\n\n# Run helloworld\n$ cd CI-Examples/helloworld\n$ make SGX=1\n$ gramine-sgx helloworld\n# ..\nHello, world\n\nGSC (Gramine Shielded Containers)\n \n #\n \n\n\nWe're going to try building a sample OpenVino container, then wrap it with Gramine Shielded Containers (GSC) to run on a remote enclave.\nBuild example container (on local machine!)\n \n #\n \n\n\n$ git clone https://github.com/gramineproject/gsc.git\n$ cd gsc/Examples/openvino\n\n$ docker build --rm \\\n\t-t ubuntu20.04-openvino \\\n\t-f ubuntu20.04-openvino.dockerfile .\n\n$ cd ../../\n$ mkdir .venv && python3 -m venv ./.venv/gsc # (phlip9-only) $ mkvenv gsc\n$ ./.venv/gsc/bin/activate # (phlip9-only) $ workon gsc\n(gsc) $ pip3 install --upgrade pip\n(gsc) $ pip3 install docker jinja2 toml pyyaml\n\nCreate gsc/config.yaml\n \n #\n \n\n\n# gsc/config.yaml\n# Specify the OS distro. Currently tested distros are\n# ``ubuntu:18.04``, ``ubuntu:20.04``, ``ubuntu:21.04`` and ``centos:8``.\nDistro: \"ubuntu:20.04\"\n\n# If you're using your own fork and branch of Gramine, specify the GitHub link and the branch name\n# below; typically, you want to keep the default values though\nGramine:\n Repository: \"https://github.com/gramineproject/gramine.git\"\n Branch: \"master\"\n\t# Build based on a pre-built image (via ./gsc build-gramine)\n\t# Image: \"\"\n\n# Specify the Intel SGX driver installed on your machine (more specifically, on the machine where\n# the graminized Docker container will run); there are several variants of the SGX driver:\n#\n# - legacy out-of-tree driver: use something like the below values, but adjust the branch name\n# Repository: \"https://github.com/01org/linux-sgx-driver.git\"\n# Branch: \"sgx_driver_1.9\"\n#\n# - DCAP out-of-tree driver: use something like the below values\n# Repository: \"https://github.com/intel/SGXDataCenterAttestationPrimitives.git\"\n# Branch: \"DCAP_1.11 && cp -r driver/linux/* .\"\n#\n# - DCAP in-kernel driver: use empty values like below\n# Repository: \"\"\n# Branch: \"\"\n#\nSGXDriver:\n Repository: \"\"\n Branch: \"\"\n\n(WSL-only) Edit gsc/gsc.py\n \n #\n \n\n\nTODO: submit a PR\ndiff --git a/gsc.py b/gsc.py\nindex 4e71d12..b9a33cf 100755\n--- a/gsc.py\n+++ b/gsc.py\n@@ -43,10 +43,12 @@ def build_docker_image(docker_api, build_path, image_name, dockerfile, **kwargs)\n **kwargs)\n for chunk in stream:\n encoding = sys.stdout.encoding if sys.stdout.encoding is not None else 'UTF-8'\n- json_output = json.loads(chunk.decode(encoding))\n- if 'stream' in json_output:\n- for line in json_output['stream'].splitlines():\n- print(line)\n+ msgs = chunk.decode(encoding).splitlines()\n+ for msg in msgs:\n+ json_output = json.loads(msg)\n+ if 'stream' in json_output:\n+ for line in json_output['stream'].splitlines():\n+ print(line)\n\n\n def extract_binary_cmd_from_image_config(config, env):\n\nGramine-ify and sign built container\n \n #\n \n\n\n# gramine-ify built container\n(gsc) $ ./gsc build --insecure-args ubuntu20.04-openvino \\\n Examples/openvino/ubuntu20.04-openvino.manifest\n\n# generate our enclave signing key\n$ mkdir -p ~/.config/gramine\n$ openssl genrsa -3 -out ~/.config/gramine/enclave-key.pem 3072\n\n# sign our container\n(gsc) $ ./gsc sign-image ubuntu20.04-openvino ~/.config/gramine/enclave-key.pem\n\nSuccessfully built a signed Docker image `gsc-ubuntu20.04-openvino` from `gsc-ubuntu20.04-openvino-unsigned`.\n\nGramine RA-TLS (Remote Attestation)\n \n #\n \n\n\n\nEnclaves create a random, self-signed RA-TLS cert containing an attestation Quote.\nClient connects to the enclave over TLS. The client's TLS library is hooked with a custom cert chain verifier, which verifies the attestation quote.\n\nRA-TLS x509 certificate\n \n #\n \n\n\n\nThe enclave generates an RSA 3072 key pair.\nThe enclave builds an attestation Report containing hash(pubkey) in the user report_data.\nThe enclave gets an attestation Quote endorsing their Report.\nThe enclave generates a self-signed cert embedding the Quote. The cert is signed with their previously generated RSA key.\n\nRA-TLS x509 cert details\n \n #\n \n\n\n\nMD Alg: SHA256\nSubject Key: enclave's RSA pubkey\nIssuer Key: enclave's RSA pubkey\nSubject Name: \"CN=RATLS,O=GramineDevelopers,C=US\"\nIssuer Name: \"CN=RATLS,O=GramineDevelopers,C=US\"\nSerial Number: 1 (dummy value)\nTimestamp Not-Before: (configurable)\nTimestamp Not-After: (configurable)\nCustom Quote Extension: quote bytes\n\n","id":"https://phlip9.com/notes/confidential computing/gramine/","title":"gramine"},"https://phlip9.com/notes/confidential computing/intel SGX/":{"body":"","id":"https://phlip9.com/notes/confidential computing/intel SGX/","title":"confidential computing/intel SGX"},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"body":"SGX lingo\n\n\nUnderstanding Intel SGX is challenging due to the sheer number of new concepts and names that you need to internalize. In my experience, it's a bit like wading through \"acronym soup\", desperately searching for familiar ground to find your footing before you can truly begin learning.\nTo make this process easier for newcomers, I've written an extended glossary of SGX terminology, with extensive links and explanations.\nMost of the code links and samples are written in Rust.\nThe entries are not listed in any particular order.\n\nQuote\n \n #\n \n\n\nA datastructure provided as proof to an external party that an application enclave is running on genuine Intel hardware at a given TCB version.\nAn application's identity Report, signed by an Attestation Key (AK) (usually the one provisioned in the Quoting Enclave (QE)).\nReport (EREPORT)\n \n #\n \n\n\nA hardware report generated by an enclave containing (1) the enclave's identity, (2) measurement info, and (3) a small amount of application data (64-bytes), called the ReportData.\nReports are efficiently verifiable inside other enclaves on the same machine. When generated via the EREPORT instruction, the Report struct will contain a MAC created from a special Seal Key used for tagging reports. This allows us to cheaply verify reports without an expensive signature verification, since other enclaves can just rederive the report key and check the MAC tag, which is fast.\nOtherwise for remote attestation:\nAttestation Key (AK)\n \n #\n \n\n\nThe key used by the QE to sign application enclave REPORTs, producing Quotes.\nThis Quote certifies that an application enclave is running on genuine Intel SGX HW at a given TCB version.\nThe AK is created and owned by the owner of the remote attestation infrastructure (e.g., Azure or Intel) but is also certified by the Intel SGX rooted key (this key is rooted to the platform HW fuses), which proves the enclave is valid.\nArchitectural Enclaves\n \n #\n \n\n\nIntel provides several Intel-signed enclaves necessary for running user application enclaves, verifying launch policies, producing remote attestation Quotes, and more.\nA non-exhaustive list of Architectural Enclaves:\n\nLaunch Enclave (LE)\nQuoting Enclave (QE)\nProvisioning Certification Enclave (PCE)\nProvisioning Enclave (PE)\nPlatform Services Enclave (PSE)\n\nTo see the complete list of signed enclaves:\n# Valid for Intel SGX v2.21 and Intel DCAP v1.18\n\n$ cd $(mktemp -d)\n$ curl https://download.01.org/intel-sgx/sgx-linux/2.21/prebuilt_ae_2.21.tar.gz | tar -xzv\n$ curl https://download.01.org/intel-sgx/sgx-dcap/1.18/linux/prebuilt_dcap_1.18.tar.gz | tar -xzv\n\n$ cd psw/ae/data/prebuilt/\n$ exa -1\nle_prod_css.bin\nlibsgx_id_enclave.signed.so\nlibsgx_le.signed.so\nlibsgx_pce.signed.so\nlibsgx_pve.signed.so\nlibsgx_qe.signed.so\nlibsgx_qe3.signed.so\nlibsgx_qve.signed.so\nlibsgx_tdqe.signed.so\n\nLaunch Enclave (LE)\n \n #\n \n\n\nThe Launch Enclave generates a Launch Token, which is needed to run another enclave. The LE itself is special in that it doesn't need a launch token, but its signing key id, [[#Signer Measurement MRSIGNER|MRSIGNER]], must match the CPU's configuration.\nThe API for generating a new Launch Token takes (1) a SIGSTRUCT and (2) an Enclave Attributes bitflag and returns a new launch token.\nSee: Fortanix EDP EinittokenProvider trait\nSee: Fortanix EDP AesmService impl\nEnclave file: libsgx_le.signed.so.\nEnclave API:\nenclave {\ninclude \"arch.h\"\ninclude \"sgx_report.h\"\nfrom \"sgx_tstdc.edl\" import *;\n\ntrusted {\n\tpublic int le_get_launch_token_wrapper(\n\t\t[in] const sgx_measurement_t *mrenclave,\n\t\t[in] const sgx_measurement_t *mrsigner,\n\t\t[in] const sgx_attributes_t *se_attributes,\n\t\t[out] token_t * lictoken\n\t);\n\n\tpublic uint32_t le_init_white_list_wrapper(\n\t\t[size = wl_cert_chain_size, in] const uint8_t *wl_cert_chain,\n\t\tuint32_t wl_cert_chain_size\n\t);\n};\n};\n\nQuoting Enclave (QE)\n \n #\n \n\n\nAn Intel-provided, signed enclave trusted by the attestation infrastructure to sign and issue Quotes or attestations about other enclaves on the same platform.\nThe QE will include a hash of the AK in its QE.REPORT.ReportData.\nThe QE will also include the PCE's certification of itself (the QE) in its REPORT.\nEnclave file: libsgx_qe.signed.so.\nEnclave API:\nenclave {\ninclude \"sgx_report.h\"\ninclude \"sgx_quote.h\"\nfrom \"sgx_tstdc.edl\" import *;\n\ntrusted {\n\tpublic uint32_t verify_blob(\n\t\t[size = blob_size, in, out] uint8_t *p_blob,\n\t\tuint32_t blob_size,\n\t\t[out] uint8_t *p_is_resealed,\n\t\t[out] sgx_cpu_svn_t *p_cpusvn\n\t);\n\n\tpublic uint32_t get_quote(\n\t\t[size = blob_size, in, out] uint8_t *p_blob,\n\t\tuint32_t blob_size,\n\t\t[in] const sgx_report_t *p_report,\n\t\tsgx_quote_sign_type_t quote_type,\n\t\t[in] const sgx_spid_t *p_spid,\n\t\t[in] const sgx_quote_nonce_t *p_nonce,\n\t\t// SigRL is relatively big, so we cannot copy it into EPC\n\t\t[user_check] const uint8_t *p_sig_rl,\n\t\tuint32_t sig_rl_size,\n\t\t[out] sgx_report_t *qe_report,\n\t\t// Quote is also big, we should output it in piece meal.\n\t\t[user_check] uint8_t *p_quote,\n\t\tuint32_t quote_size, sgx_isv_svn_t pce_isvnsvn\n\t);\n};\n};\n\n\nProvisioning Certification Enclave (PCE)\n \n #\n \n\n\nAn Intel-provided enclave that acts as a Certificate Authority (CA) for local Quoting Enclaves running on the same platform. It endorses the Attestation Keys provisioned to each Quoting Enclave with its Provisioning Certification Key (PCK).\nThe PCE's PCK is itself endorsed by the Intel Root CA.\nThe QEs can request the PCE to sign their REPORTs with the PCE's PCK. These signed REPORTs contain ReportData proving that attestation keys or provisioning protocol messages are generated on genuine HW.\nOnly the PCE can produce the PCK private keys.\nThe PCE provides an API for getting the PCK Cert-ID (EncPPID+TCB+PCE-ID) used by a verifier to lookup the matching PCK Cert via the remote IAS API.\nThe PCE also provides an API for signing another enclave (e.g., the QE) REPORT using the PCK.\nSee: Intel - Supporting Third Party Attestation for Intel SGX\nwith Intel Data Center Attestation Primitives\nEnclave file: libsgx_pce.signed.so.\nEnclave API:\nenclave{\ninclude \"pce_cert.h\"\ninclude \"sgx_report.h\"\nfrom \"sgx_tstdc.edl\" import *;\n\ntrusted {\n\tpublic uint32_t get_pc_info(\n\t\t[in]const sgx_report_t *report,\n\t\t[in, size=key_size]const uint8_t *public_key, uint32_t key_size,\n\t\tuint8_t crypto_suite,\n\t\t[out, size=encrypted_ppid_buf_size]uint8_t *encrypted_ppid, uint32_t encrypted_ppid_buf_size,\n\t\t[out]uint32_t *encrypted_ppid_out_size,\n\t\t[out]pce_info_t *pce_info,\n\t\t[out] uint8_t *signature_scheme\n\t);\n\n\tpublic uint32_t certify_enclave(\n\t\t[in]const psvn_t *cert_psvn,\n\t\t[in]const sgx_report_t *report,\n\t\t[out, size=signature_buf_size]uint8_t *signature, uint32_t signature_buf_size,\n\t\t[out]uint32_t *signature_out_size\n\t);\n\n\tpublic uint32_t get_pc_info_without_ppid(\n\t\t[out]pce_info_t *pce_info\n\t);\n};\n};\n\nProvisioning Enclave (PE or PvE)\n \n #\n \n\n\nIf using the anonymous EPID Attestation Key (AK) Algorithm, then a special Provisioning Enclave is used to interface with the Intel EPID provisioning servers to provision the enclave's AK.\nEnclave file: libsgx_pve.signed.so.\nSee: Enclave API\nPlatform Services Enclave (PSE)\n \n #\n \n\n\nIntel also provides a set of additional platform enclaves which offer useful services like monotonic counters and trusted time to other enclaves on the machine.\nThe PSE talks to the local Intel Management Engine (IME) over a secure channel. Inside the IME is a small 32-bit Intel core running completely isolated from the general purpose CPU cores.\nTrusted Time Service\n \n #\n \n\n\nThe PSE exposes a Protected Real-time Clock (PRTC), which measures relative elapsed seconds since the initial clock measurement. This value is not a calendar or wall-clock time. To establish a trusted clock base time, you'll need to query some remote semi-trusted servers over a secure channel.\nSee: Intel - Trusted Time and Monotonic Counters with SGX Platform Services Enclave\nSee: 2019 - Applications and Challenges in Securing Time\nTDX Quoting Enclave (TDQE)\n \n #\n \n\n\nEnclave File: libsqx_tdqe.signed.so.\nEnclave API:\n\nenclave {\ninclude \"sgx_report.h\"\ninclude \"sgx_quote.h\"\ninclude \"sgx_report2.h\"\ninclude \"user_types.h\"\ninclude \"ecdsa_quote.h\"\n\ntrusted {\n public uint32_t get_pce_encrypt_key(\n\t [in]const sgx_target_info_t *pce_target_info,\n\t\t[out] sgx_report_t *p_qe_report,\n\t\tuint8_t crypto_suite,\n\t\tuint16_t cert_key_type,\n\t\tuint32_t key_size,\n\t\t[out, size=key_size] uint8_t *p_public_key\n\t);\n\n public uint32_t gen_att_key(\n\t [size = blob_size, in, out] uint8_t *p_blob,\n\t\tuint32_t blob_size,\n\t\t[in]const sgx_target_info_t *p_pce_target_info,\n\t\t[out] sgx_report_t *qe_report,\n\t\t[in, size = authentication_data_size] uint8_t* p_authentication_data,\n\t\tuint32_t authentication_data_size\n\t);\n\n public uint32_t verify_blob(\n\t [size = blob_size, in, out] uint8_t *p_blob,\n\t\tuint32_t blob_size,\n\t\t[out] uint8_t *p_is_resealed,\n\t\t[out] sgx_report_body_t *p_report,\n\t\tuint32_t pub_key_id_size,\n\t\t[out, size=pub_key_id_size] uint8_t *p_pub_key_id\n\t);\n\n public uint32_t store_cert_data(\n\t [in]ref_plaintext_ecdsa_data_sdk_t *p_plaintext_data,\n\t\tsgx_ql_cert_key_type_t certification_key_type,\n\t\t[in, size = encrypted_ppid_size] uint8_t* p_encrypted_ppid,\n\t\tuint32_t encrypted_ppid_size,\n\t\t[in, out, size = blob_size] uint8_t *p_blob,\n\t\tuint32_t blob_size\n\t);\n\n public uint32_t gen_quote(\n\t\t[size = blob_size, in, out] uint8_t *p_blob,\n\t\tuint32_t blob_size,\n\t\t[in] const sgx_report2_t *p_app_report,\n\t\t[in] const sgx_quote_nonce_t *p_nonce,\n\t\t[in] const sgx_target_info_t *p_app_enclave_target_info,\n\t\t[out] sgx_report_t *p_qe_report,\n\t\t[size = quote_size, in, out] uint8_t *p_quote,\n\t\tuint32_t quote_size,\n\t\t[in, size = cert_data_size] const uint8_t * p_cert_data,\n\t\tuint32_t cert_data_size\n\t);\n};\n};\n\nArchitectural Enclave Service Manager (AESM)\n \n #\n \n\n\nInstead of interacting with the local Architectural Enclaves directly, local user applications and libraries typically interface with a local Intel-provided service called the Architectural Enclave Service Manager. The AESM service typically runs as a local daemon and provides a socket for applications to interface with.\nAn AESM client allows user applications to easily obtain Launch Tokens from the LE, needed for running enclaves, and turn Attestation Reports into Quotes via the QE.\nCheck out the Protobuf definitions and AesmClient API.\nProvisioning Certification Key (PCK)\n \n #\n \n\n\nA signing key available to the PCE for signing QE REPORTs.\nThis key is unique to the specific processor instance, HW TCB, and PCE version.\nSee: Fortanix EDP - dcap-retrieve-pckid via AESM\nPCK Cert\n \n #\n \n\n\nA long-lived x.509 CA cert signed and distributed by Intel for every SGX platform.\nThe Intel-provided Provisioning Certification Enclave (PCE) uses this cert to endorse Attestation Keys provisioned to any Quoting Enclaves.\nThis cert is used by Quote verifiers to check that the QE is valid and running and running on a specific PSVN.\nThe PCK Cert is endorsed by the Intel SGX Root CA via an intermediate Intel SGX PCK Platform CA.\nThe PCK Cert has some extra cert extension fields, described in more detail in the Intel PCK Cert Spec. These mostly appear to be metadata, like the PPID, TCB levels, CPUSVN, CPU SKU, and a list of supported extensions.\nPlatform Provisioning ID (PPID)\n \n #\n \n\n\nThe provisioning ID for a processor package or platform instance. PPID is not TCB dependent.\nSecurity Version Number (SVN)\n \n #\n \n\n\nA monotonically increasing version number that corresponds with major security releases of TCB software.\nNote that new, non-security-critical software versions can be released without touching the SVN.\nPart of the verification process is just checking that the remote enclave is running a recent TCB software version without any unpatched vulnerabilities.\nPlatform Security Version Number (PSVN, CPUSVN)\n \n #\n \n\n\nA list of SVNs for each component in the SGX TCB, including the PCE SVN.\nThink of a PSVN as pinning each component in the TCB to a specific (security-critical) version.\nIndependent Software Vendor (ISV)\n \n #\n \n\n\nISVs develop enclave applications.\nIntel Attestation Services (IAS)\n \n #\n \n\n\nSee: Intel Attestation Services - API Specification v6.1\nSee: Intel Developer Zone Registration\nSee: Oasis IAS proxy backend to the Intel API\nSee: []\nService Provider ID (SPID)\n \n #\n \n\n\nThe id of the credentials needed for a Service Provider to talk with with the Intel Attestation Services (IAS).\nService Providers must register with Intel in order to acquire these credentials.\nEnclave Page Cache (EPC)\n \n #\n \n\n\nA region of memory on the platform allocated to enclave code and data.\nProvisioning TCB\n \n #\n \n\n\nThe Intel SGX Trusted Computing Base (TCB). This TCB includes the platform HW TCB and PCE SVN.\nPCE-ID\n \n #\n \n\n\nThe PCE SVN (?) used to generate the PPID and PCK signing key.\nData Center Attestation Primitives (DCAP)\n \n #\n \n\n\nA library for generating and verifying attestation evidence.\nThe Intel-provided library is called Intel SGX DCAP. There's also a version by Microsoft called Azure DCAP, which (AFAICT) uses an Azure-run cache over the Intel API services.\nLaunch Token\n \n #\n \n\n\nTODO\nFlexible Launch Control (FLC)\n \n #\n \n\n\nAn SGX feature only available on more recent platforms that allows an arbitrary LE to generate launch tokens.\nThe default launch policy still uses an SGX client whitelist; however, FLC allows a platform owner to change the default LE MRSIGNER to different value.\nEnclave Load Policy\n \n #\n \n\n\nThe remote service providing enclave services, linked with the DCAP library, can choose whether system enclaves like the QE and PCE are loaded on-demand (as application enclaves request their services) or loaded persistently (load once and then keep them loaded until the application shuts down).\nThe two options trade off between greater EPC usage (Persistent) and greater remote attestation latency + overhead (Ephemeral).\nOwner Epoch\n \n #\n \n\n\nThe Owner Epoch is a 128-bit value used in the Seal Key KDF.\nSince the Owner Epoch is used in the Seal Key KDF, any change to this value would DoS our HW from unsealing any protected data from a previous Owner Epoch value. A malicious cloud operator (Azure) could DoS attack us by changing the Owner Epoch, forcing us to re-provision all enclave secrets.\nMore likely, a vulnerability, TCB violation, or operator error could lead to an unintended Owner Epoch rotation.\nTo help with recovery, applications should record the current Owner Epoch in case something goes wrong. If nobody remembers the Owner Epoch, we can never restore our Seal Keys.\nApparently it's also possible virtualize the Owner Epoch if running inside a hypervisor? (TODO: confirm).\nRef: 2018 - Some notes on SGX OwnerEpoch and Sealing\nQuoting Enclave ID (QE-ID)\n \n #\n \n\n\nA pseudo-platform ID that isn't associated with a particular SVN. Instead, the ID is dependent on (1) the QE's MRSIGNER, (2) its Seal Key, which depends\nQuoting Enclave QuoteInfo\n \n #\n \n\n\nQuoteInfo is the quoting enclave's information needed for clients to perform remote attestation. The target_info is a serialized TargetInfo.\npub struct QuoteInfo {\n target_info: Vec<u8>, // serialized Targetinfo\n pub_key_id: Vec<u8>,\n}\n\nTargetInfo\n \n #\n \n\n\nTargetinfo is a measurement of the QE.\n#[repr(C, align(512))]\npub struct Targetinfo {\n pub measurement: [u8; 32],\n pub attributes: Attributes,\n pub _reserved1: [u8; 4],\n pub miscselect: Miscselect,\n pub _reserved2: [u8; 456],\n}\n\nEnclave Measurement (MRENCLAVE)\n \n #\n \n\n\nIn order to for a client to feel secure provisioning their secrets into an enclave, they need to verify that the enclave is running trusted software. An enclave measurement effectively summarizes the initial state of the trusted software running in the enclave.\nIntel SGX constructs this measurement when the enclave is built and initialized. During enclave init, it records a log of all important build activities, including:\n\nContent: code, data, stack, heap\nLocation of each page within the enclave\nSecurity flags used\n\nThe measurement is actually not the full log, but a 256-bit hash digest of the log. This measurement is stored as MRENCLAVE inside the enclave's software TCB and is accessible inside the enclave via a syscall.\nClients can then compare the observed MRENCLAVE with a trusted, expected MRENCLAVE value to guarantee that the enclave is running the expected software.\nFor systems using the Fortanix SGX Stream format (SGXS) to describe an enclave, the SHA256 hash of the .sgxs bytes is exactly the enclave's MRENCLAVE*. Very convenient!\n*Unless you use the Extended SGXS format, which allows unmeasured sections. In that case, you need to be a little more careful about how you hash the format and ignore the unmeasured sections.\nWhy do we need to verify the software inside the enclave?\n \n #\n \n\n\nIf the client forgets to verify the actual software running inside the enclave, there's a simple attack to exfiltrate the client's secrets! All we need to do is run some malicious code in the enclave, which just prints the client's secrets after provisioning. Boom, client secrets leaked.\nKeep in mind the enclave could be 100% genuine Intel hardware, but unless the client verifies the actual software inside the enclave, they should absolutely not provision their secrets.\nFortanix SGX Stream format (SGXS)\n \n #\n \n\n\nThe SGX stream (SGXS) format is the most basic description of an enclave, and when combined with a signature and initialization token file contains all the information needed by an Operating System to load the enclave.\nThe format consists entirely of all data that would be hashed to produce the enclave measurement [[#Enclave Measurement MRENCLAVE|MRENCLAVE]].\nSee: Fortanix EDP - SGX Stream format (SGXS).\nSee: Fortanix EDP - ftxsgx-elf2sgxs for converting a standard ELF binary to SGXS.\nSee: Fortanix EDP - sgxs-sign for signing SGXS with your RSA private key.\nSigner Measurement (MRSIGNER)\n \n #\n \n\n\nEach enclave is also signed by the client or the enclave author, depending on the exact trust model. The MRSIGNER is just the enclave signer's pubkey hash.\nThe signer signs part of the SIGSTRUCT, which then includes the signature and signer pubkey inside.\nSealing keys can be derived from the signer measurement + ISV product id/svn, instead of the enclave measurement to allow easy upgrading across different versions of the same enclave.\nRust code for generating a signer and computing its measurement:\n// Generating a 3072-bit RSA key + measurement for signing\n// sigstructs. NOTE: the RSA exponent MUST be 3.\nlet e = openssl::bn::BigNum::from_u32(3)?;\nlet key = openssl::rsa::Rsa::generate_with_e(3072, &e)?;\n\n// The signer measurement is the SHA-256 hash of the little-endian\n// public key modulus.\n\n// Openssl returns the modulus in big-endian, so we need to reverse\n// the bytes to little-endian before hashing.\nlet mut modulus = key.n().to_vec();\nmodulus.reverse();\nlet mut modulus_buf = [0u8; 384];\nmodulus_buf[..modulus.len()].copy_from_slice(&modulus);\n\nlet signer_measurement = sha256::digest(&modulus_buf).as_slice();\n\nEnclave Signature Struct (SIGSTRUCT)\n \n #\n \n\n\nEach enclave has an associated SIGSTRUCT, which contains (among other things):\n\nThe MRENCLAVE, pinning the enclave initial state.\nThe CPU SVN.\nThe ISV\nThe ISVPRODID\nThe Enclave Attributes and Enclave Miscselect bit flags.\n\nThe enclave signer then signs a specific portion of the SIGSTRUCT. This signature, along with the signer's full RSA-3072 pubkey, is then placed into the SIGSTRUCT itself.\nSee the Fortanix EDP SIGSTRUCT definition.\nstruct Sigstruct {\n header: [u8; 16],\n vendor: u32,\n date: u32,\n header2: [u8; 16],\n swdefined: u32,\n _reserved1: [u8; 84],\n modulus: [u8; 384],\n exponent: u32,\n signature: [u8; 384],\n miscselect: Miscselect,\n miscmask: u32,\n _reserved2: [u8; 20],\n attributes: Attributes,\n attributemask: [u64; 2],\n enclavehash: [u8; 32],\n _reserved3: [u8; 32],\n isvprodid: u16,\n isvsvn: u16,\n _reserved4: [u8; 12],\n q1: [u8; 384],\n q2: [u8; 384],\n}\n\nSee: oasis-core/go/common/sgx/sigstruct.Verify\n\n(Binding) ensure that the sigstruct.mrenclave matches the actual mrenclave that we're about to load.\n\nEnclave Info\n \n #\n \n\n\nstruct EnclaveInfo {\n\t// The enclave measurement\n\tmrenclave: Vec<u8>,\n\t// The signer measurement\n\tmrsigner: Vec<u8>,\n\t// The ISV Product ID\n\tisvprodid: u32,\n\t// The ISV SVN\n\tisvsvn: u32,\n}\n\nReport TargetInfo (TARGETINFO)\n \n #\n \n\n\nTargetInfo is just the MRENCLAVE plus Attributes and Miscselect masks.\nstruct Targetinfo {\n\tmrenclave: [u8; 32],\n\tattributes: Attributes,\n\t// padding\n\tmiscselect: Miscselect,\n\t// padding\n}\n\nEnclave Init Token (EINITTOKEN)\n \n #\n \n\n\nWhen launching an enclave, you need to pass a special token to the EINIT instruction. This token is called the EINITTOKEN and is generated by the Launch Enclave after it verifies the full Enclave Signature Struct SIGSTRUCT signature.\nThe SGX platform then verifies the contents of the token before it allows the enclave to initialize.\nWhy does Intel use this EINITTOKEN thing rather than just passing the full SIGSTRUCT each time we init? My guess is that it allows us to amortize the SIGSTRUCT signature verification cost. The LE do the expensive signature verification once, produce a cheaply verifiable launch token, then use the launch token each time rather than the expensive SIGSTRUCT.\nNote that the token is only verifiable by other enclaves on the same machine; it just contains a MAC created with a privileged Intel-only Seal Key.\nstruct Einittoken {\n valid: u32,\n _reserved1: [u8; 44],\n attributes: Attributes,\n mrenclave: [u8; 32],\n _reserved2: [u8; 32],\n mrsigner: [u8; 32],\n _reserved3: [u8; 32],\n cpusvnle: [u8; 16],\n isvprodidle: u16,\n isvsvnle: u16,\n _reserved4: [u8; 24],\n maskedmiscselectle: Miscselect,\n maskedattributesle: Attributes,\n keyid: [u8; 32],\n mac: [u8; 16],\n}\n\nEnclave Attributes\n \n #\n \n\n\nstruct Attributes {\n flags: AttributesFlags,\n xfrm: u64,\n}\n\nbitflags! {\n\tstruct AttributesFlags: u64 {\n\t\tconst INIT = 0b0000_0001;\n\t\tconst DEBUG = 0b0000_0010;\n\t\tconst MODE64BIT = 0b0000_0100;\n\t\tconst PROVISIONKEY = 0b0001_0000;\n\t\tconst EINITTOKENKEY = 0b0010_0000;\n\t\tconst CET = 0b0100_0000;\n\t\tconst KSS = 0b1000_0000;\n\t}\n}\n\n// file: common/inc/sgx_attributes.h\n\n/* Enclave Flags Bit Masks */\n#define SGX_FLAGS_INITTED 0x0000000000000001ULL /* If set, then the enclave is initialized */\n#define SGX_FLAGS_DEBUG 0x0000000000000002ULL /* If set, then the enclave is debug */\n#define SGX_FLAGS_MODE64BIT 0x0000000000000004ULL /* If set, then the enclave is 64 bit */\n#define SGX_FLAGS_PROVISION_KEY 0x0000000000000010ULL /* If set, then the enclave has access to provision key */\n#define SGX_FLAGS_EINITTOKEN_KEY 0x0000000000000020ULL /* If set, then the enclave has access to EINITTOKEN key */\n#define SGX_FLAGS_KSS 0x0000000000000080ULL /* If set, then the enclave uses KSS */\n#define SGX_FLAGS_AEX_NOTIFY 0x0000000000000400ULL /* If set, then the enclave enables AEX Notify */\n\n/* XSAVE Feature Request Mask */\n#define SGX_XFRM_LEGACY 0x0000000000000003ULL /* Legacy XFRM which includes the basic feature bits required by SGX, x87 state(0x01) and SSE state(0x02) */\n#define SGX_XFRM_AVX 0x0000000000000006ULL /* AVX XFRM which includes AVX state(0x04) and SSE state(0x02) required by AVX */\n#define SGX_XFRM_AVX512 0x00000000000000E6ULL /* AVX-512 XFRM */\n#define SGX_XFRM_MPX 0x0000000000000018ULL /* MPX XFRM - not supported */\n#define SGX_XFRM_PKRU 0x0000000000000200ULL /* PKRU state */\n#define SGX_XFRM_AMX 0x0000000000060000ULL /* AMX XFRM, including XTILEDATA(0x40000) and XTILECFG(0x20000) */\n\nMost user enclaves only need to enable the MODE64BIT attribute in production.\nThe KSS attribute enables the Key sharing and separation (KSS) feature.\nThe Extended Features Request Mask (xfrm) allows an enclave to ensure certain CPU features (e.g., SSE, AESNI) are available, or the enclave will fail to load.\nEnclave Miscselect\n \n #\n \n\n\npub struct Miscselect: u32 {\n\tconst EXINFO = 0b0000_0001;\n}\n\nKEYREQUEST\n \n #\n \n\n\nA struct which gets fed into the Seal Key KDF in order to generate keys for sealing or remote attestation.\nThe keyname is a user-defined label\nstruct Keyrequest {\n keyname: u16,\n keypolicy: Keypolicy,\n isvsvn: u16,\n _reserved1: u16,\n cpusvn: [u8; 16],\n attributemask: [u64; 2],\n keyid: [u8; 32],\n miscmask: u32,\n _reserved2: [u8; 436],\n}\n\nstruct Keypolicy: u16 {\n\tconst MRENCLAVE = 0b0000_0001;\n\tconst MRSIGNER = 0b0000_0010;\n}\n\n#[repr(u16)]\nenum Keyname {\n Einittoken = 0,\n Provision = 1,\n ProvisionSeal = 2,\n Report = 3,\n Seal = 4,\n}\n\nKey sharing and separation (KSS)\n \n #\n \n\n\nSee: https://www.fortanix.com/blog/2018/02/upcoming-intel-sgx-features-explained#key-sharing-and-separation-kss\nPremise: Communicating between two different enclaves is cumbersome. The KSS feature adds more flexibility.\nThe new KSS feature adds a configuration value+SVN and two extra 16-byte product IDs.\nThe 64-byte configuration value and 2-byte SVN is used as a post-init identity. The value affects the attestation identity and (optionally) seal key derivation, but isn't included in the Sigstruct. This allows a single enclave binary that is specialized into different services (with different identities!) at load time.\nThe extra product IDs are \"family ID\" and \"extra product ID\" (but can be used for other purposes). They can be used in seal key derivation. The IDs are included in the Sigstruct but not the EINITTOKEN. meaning a launch enclave can't use these for access controls.\n","id":"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/","title":"SGX lingo"},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"body":"intel SGX - overview\n\nWikipedia: https://www.wikiwand.com/en/Software_Guard_Extensions\n\nThey allow user-level as well as operating system code to define private regions of memory, called enclaves, whose contents are protected and unable to be either read or saved by any process outside the enclave itself, including processes running at higher privilege levels\n\n\nApplications running inside of SGX must be written to be side channel resistant as SGX does not protect against side channel measurement or observation.\n\n\nEnclaves cannot use sockets because enclaves rely on the untrusted application that loads the enclave to communicate with external components. Enclaves cannot create independent communication channels to outside entities. This would break their security and trust model. source\n\n\n\nEnclave memory cannot be read or written from outside the enclave regardless of the current privilege level and CPU mode.\nProduction enclaves cannot be debugged by software or hardware debuggers.\nThe enclave environment cannot be entered through classic function calls, jumps, register manipulation, or stack manipulation. The only way to call an enclave function is through a new instruction that performs several protection checks.\nEnclave memory is encrypted using industry-standard encryption algorithms with replay protection. Tapping the memory or connecting the DRAM modules to another system will yield only encrypted data.\nThe memory encryption key randomly changes every power cycle. The key is stored within the CPU and is not accessible.\nData isolated within enclaves can only be accessed by code that shares the enclave.\n\n\nSee also SGX 101\n\nWith SGX, your CPU comes with two new 128bit keys: RPK & RSK\nRPK: Root Provisioning Key. Known only to Intel.\nRSK: Root Sealing Key. Most derived keys based on RSK.\nNew DRAM key (derived from RSK?) every power cycle.\nRemote Attestation is enforced for the client to prove to the service provider that an enclave is running a given software, inside a given CPU, with a given security level, for a given Individual Software Vender (ISV). This is required before the service provider decides to provide requested secrets.\nSealed Storage is required to save secret data to untrusted media. Note that data and code inside enclaves are not secrets. They are just logics that are required to process the secret and most of them are open sourced or can be reverse engineered. Therefore, secrets are provisioned later by the service provider and should be stored out of the enclave through sealing mechanism when necessary (e.g. for future usage).\n\nSecurity Limitations\n \n #\n \n\n\n\nCache timing attacks\nPhysical attacks. E.g. laser fault injection attacks\nMicrocode malicious patching\nUntrusted I/O\nHuman element. E.g. trusted development environment\nCPU bugs and bugs in dependencies.\n\nApplication Design\n \n #\n \n\n\nApplication design with Intel SGX requires that the application be divided into two components:\n\n\nTrusted component: This is the enclave. The code that resides in the trusted code is the code that accesses an application’s secrets. An application can have more than one trusted component/enclave.\n\n\nUntrusted component: This is the rest of the application and any of its modules. It is important to note that, from the standpoint of an enclave, the OS and the VMM are considered untrusted components.\n\n\nFairly expensive to communicate back-and-forth (how much?)\n\n\nECalls -> call into enclave\n\n\nOCalls -> call out to untrusted code\n\n\nproxy generation via EDL (enclave description language)\n\n\nspecialized memory allocator. limitations on stack/heap sizes, threads, etc...\n\n\nEnclave runs concurrently with the OS. You start the enclave, and it runs in the background until you shut it down again.\n\n\nCan read/write files O_o (sgx_tprotected_fs)\n\n\nNeed to declare # threads and stack/heap sizes up front.\n\n\nVideo uses lazy_static to save enclave state between ECalls : /\n\n\nAttestation\n \n #\n \n\n\n\nSealing\n \n #\n \n\n\nSealing is the process of encrypting data so that it can be written to untrusted memory or storage without revealing its contents. The data can be read back in by the enclave at a later date and unsealed (decrypted). The encryption keys are derived internally on demand and are not exposed to the enclave.\nThere are two methods of sealing data:\n\nEnclave Identity: This method produces a key that is unique to this exact enclave.\nSealing Identity: This method produces a key that is based on the identity of the enclave’s Sealing Authority. Multiple enclaves from the same signing authority can derive the same key.\n\nHardware Requirements\n \n #\n \n\n\n\nIntel CPU later than 2015+\n\nPerformance Overhead\n \n #\n \n\n\ncalling some max(&[u32]) function inside enclave.\nsource: https://medium.com/@danny_harnik/impressions-of-intel-sgx-performance-22442093595a\n\nsgx-perf: A Performance Analysis Tool for Intel SGX Enclaves (2018)\n\nWe measured transition times of ≈5,850 cycles (≈2.1 µs) with a warm cache for one round-trip (see §5 for the experimental settings). In the second case, we measured a transition time of ≈10,170 cycles (≈3.8 µs), ≈1.74× more than without patches. Finally, with all the updates and microcodes to address the Spectre and Foreshadow vulnerabilities enclave transitions became even slower, resulting in a round-trip time of ≈13,100 cycles (≈4.9 µs), ≈ 2.24× more. This further underlines the need to save on enclave transitions.\n\nAbout 20,000 transitions/sec? per thread? overall?\n\nIn-Enclave Synchronisation: Enclaves can be multi-threaded and therefore need synchronisation primitives. Unfortunately, as sleeping is not possible inside enclaves, the in-enclave synchronisation primitives provided by the SGX SDK implement additional ocalls to sleep outside of the enclave.\n\n\nThe SDK offers mutexes that work as follows: if a thread tries to lock an unlocked mutex, then this operation succeeds without needing to leave the enclave. Whenever a thread tries to lock an already locked mutex, it will put itself into a queue and exit the enclave via an ocall to sleep\n\n\nEnclave Paging: Another important factor for enclave performance is enclave size, especially the size of the working set. SGX stores all enclaves inside the EPC which on current implementations has a size of 128 MiB. Of those, 93 MiB are usable.\n\nSGXv1 requires pre-declared limits on stack/heap allocations.\n\nWith SGX v2, this becomes less of a problem, as the enclave can be extended after creation. Therefore, the enclave can be created small and as soon as stack or heap are exhausted, new pages may be added on-demand.\n\n\nEnclave Signing\n \n #\n \n\n\nhttps://docs.conclave.net/signing.html\nEnclaves must be signed. With modern SGX servers you may self-sign your enclaves, but, a signature is still required.\nWhy is signing required?\n \n #\n \n\n\nSigning requirements are a part of the Intel SGX architecture. The enclave signature is used for two different purposes:\n\nLinking different enclave versions together into an upgrade path, so new enclaves can decrypt data stored by or sent to old enclaves.\nAuthorising which enclaves can be executed on a host.\n\nRestricting which enclaves can launch on a host ensures that datacenter providers aren't hosting server processes they can't examine (??????) or turn over to law enforcement. It also makes it harder for people to write malware with un-debuggable cores (loooool), and is part of the privacy (anti-tracking) infrastructure in SGX.\nUsing signatures to link binaries into a single upgrade path is the same technique used by Android and iOS to move permissions and stored data from old to new apps.\nSigning is also used to authorise which enclaves can start. By default Intel chips won't start an enclave unless it's signed by an Intel key, but this behaviour can be changed and on Azure (see \"Deploying to Azure\") enclaves can be self-signed. If you want to use older hardware getting whitelisted by Intel is free and can be done quickly. It's a similar process to getting an SSL certificate but using different tools.\nOn Xeon E CPUs with Intel FLC support in the chipset, and a recent enough kernel driver, the owner can add their own whitelisting authorities via BIOS/UEFI firmware settings. This means they can replace the default \"must be approved by Intel\" launch control logic with their own (which may e.g. only allow their own enclaves, or may allow any self-signed enclave).\nHosted SGX\n \n #\n \n\n\nAzure\n \n #\n \n\n\nAzure Confidential Compute\nPricing (2022/02/18):\nhttps://azure.microsoft.com/en-us/pricing/details/virtual-machines/linux/\nFilters: US East 2 + grep \"SGX\"\nDCsv2- and DCdsv3-series\nThe DCsv2-series virtual machines can help protect the confidentiality and integrity of your data and code while it’s processed in the public cloud. These machines are backed by 3.7GHz Intel® Xeon E-2288G (Coffee Lake) with SGX technology. With the Intel® Turbo Boost Technology these machines can go up to 5.0GHz. DC series instances enable customers to build secure enclave-based applications to protect their code and data while it’s in use.\nDCsv2-series is ideal for workloads that require smaller EPC (Enclave Page Cache) memory.\nInstanceCoresRAMTemporary Storage$/hr (useast2)$/hr (uswest1)\nDC1s v214 GiB50 GiB$0.125/hr\nDC2s v228 GiB100 GiB$0.250/hr\n..\nDC8s v2832 GiB400 GiB$0.998/hr\n\nDCsv3- and DCdsv3-series\nThe DCsv3 and DCdsv3-series virtual machines run the 3rd Generation Intel® Xeon Scalable (Ice Lake) processor with hyper-threading disabled for a hardened security posture. These VMs are designed to protect the confidentiality and integrity of your data in the cloud. Featuring Intel® SGX (Software Guard Extensions), customers can create private regions of memory, called enclaves, to protect code and data in use. DCsv3 and DCdsv3-series enables customers to up to 1500X larger enclaves than before.\nInstanceCoresRAMTemporary Storage$/hr (useast2)$/hr (uswest1)\nDC1s v318 GiBN/A$0.096/hr$0.125/hr\nDC2s v3216 GiBN/A$0.192/hr$0.250/hr\n..\nDC48s v348384 GiBN/A$4.608/hr$5.990/hr\n\nDC1ds v318 GiB75 GiB$0.113/hr$0.147/hr\nDC2ds v3216 GiB150 GiB$0.226/hr$0.294/hr\n..\nDC48ds v348384 GiB2400 GiB$5.424/hr$7.051/hr\n\n\nGoogle Cloud\n \n #\n \n\n\nGoogle Cloud Confidential Compute\nCloud Vendor Support Table\n \n #\n \n\n\n\nPacket.net, IBM and Alibaba have Bare Metal Instances available that allow the execution of SGX instructions to create secure enclaves in the cloud. See IBM Cloud Bare Metal Instances and Alibaba ECS Bare Metal Instance. If you were able to experiment with SGX in the Cloud, please let us know!\nBoth AWS and Google have CPUs that capable of SGX but the execution is disabled. We discussed that into detail here. According to a Intel forum post.\n\nVendorServicenameCPU SGX capableSGX activated in BIOSDateSource\nAWSEC2 C5 instancesYES, SGX1 and SGX2NO, SGX not activated in BIOSApr 2018Issue 37\nAzureAzure Confidential Computing Public PreviewYES, SGX1, SGX2YES, SGX1, SGX2Oct 2018Blog\nGoogleN1 instancesYES, SGX1 and SGX2NO, SGX not activated in BIOSApr 2018Issue 38\nIBMIBM Cloud Bare Metal InstancesYES, unknown versionYESMay 2018Issue 46\npacket.netReserved HardwareYES, SGX1YESApr 2018Issue 44\nAlibaba CloudECS Bare Metal InstanceYES, unknown versionYESSep 2018Docs, Issue 50\nOVHcloudInfrastructure Dedicated ServersYES, unknown versionYESSep 2019Docs, Issue 66\nAlibaba CloudECS Security-enhanced family (public preview)YES, SGX2YESJuly 2021Docs\n\nHardware that supports Intel SGX\n \n #\n \n\n\nSee: ayeks/SGX-hardware\nDesktop Hardware SKUs\n \n #\n \n\n\nMarketing NameProcessor#Post-Conversion S-Spec\nIntel® Corei7-6700KSR2L0\nIntel® Corei5-6400TSR2L1\nIntel® Corei7-6700SR2L2\nIntel® Corei7-6700TSR2L3\nIntel® Corei5-6600KSR2L4\nIntel® Corei5-6600SR2L5\nIntel® Corei5-6500SR2L6\nIntel® Corei5-6400SR2L7\nIntel® Corei5-6500TSR2L8\nIntel® Corei5-6600TSR2L9\nIntel® Xeon®E3-1280 v5SR2LC\nIntel® Xeon®E3-1240 v5SR2LD\nIntel® Xeon®E3-1230 v5SR2LE\nIntel® Xeon®E3-1270 v5SR2LF\nIntel® Xeon®E3-1220 v5SR2LG\nIntel® Xeon®E3-1260L v5SR2LH\nIntel® Xeon®E3-1225 v5SR2LJ\nIntel® Xeon®E3-1275 v5SR2LK\nIntel® Xeon®E3-1245 v5SR2LL\nIntel® Xeon®E3-1235L v5SR2LM\nIntel® Xeon®E3-1240L v5SR2LN\n\n","id":"https://phlip9.com/notes/confidential computing/intel SGX/overview/","title":"overview"},"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"body":"remote attestation\n\nGoals\n \n #\n \n\n\n\nThe point of Remote Attestation is to prove to a remote client:\n\nOur software is running inside a genuine Intel enclave.\nThe enclave is running a fully up-to-date system at the latest security level.\nThe software itself is running a specific, developer-defined version, called an ISV SVN.\nThe software is signed by a specific authority, called the Signer Measurement (MRSIGNER).\nThe software's initial state (code & data) is exactly as we expect, communicated via a cryptographic summary called the Enclave Measurement (MRENCLAVE).\n(Optional) additional data was present and acknowledged by the enclave when it generated the attestation, called the ReportData.\n\nThis slot can be used to pass info to the attestation verifier, e.g., enclave application pubkeys, freshness nonces, timestamps.\nThe size is only 64-bytes, so if you have lots of things to attest to, you'll need to attest to a commitment rather than the data itself\n\n\n\n\nOnce the client decides they can trust the enclave's attestation (according to some configurable policy), they can open a secure channel with the enclave.\nOver the secure channel, the client can issue commands or provision secrets into the enclave. These secrets remain encryped and unintelligible to the outside, untrusted service provider, machine, and OS.\n\nRemote attestation procedure in detail\n \n #\n \n\n\nAttesting to another local enclave is easy and efficient.\nAttesting to a remote client requires a few extra steps:\n\nThe application enclave generates a Report, which includes the various things we want to attest to, described above.\nAsk the local Quoting Enclave (QE) to sign the application enclave's report with its Attestation Key (AK), usually via the Architectural Enclave Service Manager (AESM) API.\n(Optional) The application enclave can verify that the Quote was generated by a trusted Quoting Enclave (QE) on the local machine.\n\nIn theory, this step is optional, since the remote attestation verifier should ultimately reject an invalid Quote. However this step can give the enclave itself assurance that it's talking to a legitimate QE.\nWhen requesting a Quote, the application enclave can provide a 16-byte nonce to ensure freshness (preventing replay attacks of old quotes).\nFrom the AESM or Quoting Library, the application enclave should receive a serialized quote and QE Report from their Quote request.\nThis QE Report is a Report generated by the Quoting Enclave. The application enclave should check that the Quoting Enclave ID in the QE Report is trustworthy.\nThe application should then check that the QE Report's ReportData field contains the value SHA-256(nonce || quote) || [0; 32].\nFinally, the application enclave should check that the Quote actually contains its own Report.\n\n\n(EPID-only) This signed report, called a Quote, is sent to the endorsement service Intel Attestation Services (IAS) who will endorse (read: sign with its cert) the report IFF it believes the Quote is valid.\n\nThis endorsed Quote is now verifiable by anyone that knows the endorsement service's root CA cert.\nThe remote Intel-run IAS is the only party that can endorse these EPID Quotes. This makes Intel's service an interactive party in our attestation protocol flow when using EPID Quotes.\n\n\n(ECDSA-only) The report is signed by an ECDSA Attestation Key in a Quoting Enclave. The Attestation Key is endorsed by an Attestation Key Cert from the Provisioning Certification Enclave (PCE).\n\nAttestation Key Algorithms\n \n #\n \n\n\nThere are a two-ish different Attestation Key (TODO link) algorithms that each have different tradeoffs and TCB surface.\n\nECDSA P256 or ECDSA P384\n\nsimple, but ids are public and linkable. This is not a problem in data centers or confidential computing scenarios.\n\n\nIntel Enhanced Privacy ID (EPID)\n\ncomplicated, but ids are private and revocations are efficient.\nsignificant increased protocol complexity.\nIntel verifier is all attestations.\n\n\n\nSee: sgx_types::sgx_ql_attestation_algorithm_id_t\nRemote Attestation Quote Verification\n \n #\n \n\n\nTo help visualize how the chain-of-trust extends from our Trust Root (the Intel SGX Root CA) to the enclave's attested values (usually a TLS cert pubkey), I've made this helpful diagram.\nQuickly recapping, the User starts with three trusted objects:\n\nthe Intel SGX Root CA\nthe acceptable Quoting Enclave identities, retrieved from the IAS (not depicted)\nthe acceptable Application Enclave identities (e.g., MRSIGNER or MRENCLAVE)\n\nThe Application Enclave usually provides the Quote to the User as part of setting up a secure transport channel. The User wants to verify the Quote to ensure the enclave is running the expected software.\nThis particular diagram shows the ECDSA DCAP-QL Quote structure and how each component commits or signs other sub-components. The flow is somewhat different for EPID-based attestation Quotes.\n\nPCK lookup service\n \n #\n \n\n\nIntel DCAP - Provisioning Certificate Caching Service (PCCS)\nGET platform's Provisioning Certification Key (PCK) certs\n \n #\n \n\n\nThe platform is identified by its encrypted Platform Provisioning ID (PPID) and Provisioning Certification Enclave ID (PCE-ID).\nGET Current Intel Quoting Enclave (QE) and Quote Verification Enclave (QVE) Identities\n \n #\n \n\n\nQuery the Intel Trusted Services API for current valid Quoting Enclave (QE) identity.\n$ curl -v -X GET \"https://api.trustedservices.intel.com/sgx/certification/v3/qe/identity\"\n\n{\n \"enclaveIdentity\": {\n \"id\": \"QE\",\n \"version\": 2,\n \"issueDate\": \"2022-04-12T21:57:18Z\",\n \"nextUpdate\": \"2022-05-12T21:57:18Z\",\n \"tcbEvaluationDataNumber\": 12,\n \"miscselect\": \"00000000\",\n \"miscselectMask\": \"FFFFFFFF\",\n \"attributes\": \"11000000000000000000000000000000\",\n \"attributesMask\": \"FBFFFFFFFFFFFFFF0000000000000000\",\n \"mrsigner\": \"8C4F5775D796503E96137F77C68A829A0056AC8DED70140B081B094490C57BFF\",\n \"isvprodid\": 1,\n \"tcbLevels\": [\n {\n \"tcb\": {\n \"isvsvn\": 6\n },\n \"tcbDate\": \"2021-11-10T00:00:00Z\",\n \"tcbStatus\": \"UpToDate\"\n },\n {\n \"tcb\": {\n \"isvsvn\": 5\n },\n \"tcbDate\": \"2020-11-11T00:00:00Z\",\n \"tcbStatus\": \"OutOfDate\"\n },\n {\n \"tcb\": {\n \"isvsvn\": 4\n },\n \"tcbDate\": \"2019-11-13T00:00:00Z\",\n \"tcbStatus\": \"OutOfDate\"\n },\n {\n \"tcb\": {\n \"isvsvn\": 2\n },\n \"tcbDate\": \"2019-05-15T00:00:00Z\",\n \"tcbStatus\": \"OutOfDate\"\n },\n {\n \"tcb\": {\n \"isvsvn\": 1\n },\n \"tcbDate\": \"2018-08-15T00:00:00Z\",\n \"tcbStatus\": \"OutOfDate\"\n }\n ]\n },\n \"signature\": \"1750f7e5997a8cb5ba2073f7a4312e43f5771a409e0610b20428dffebe51e53a6eadfb5691045b0819b29754dd6f5cfd20837b0e6f76e2307146dd3deb5203be\"\n}\n\nLikewise, there's a similar endpoint for looking up the Quote Verification Enclave (QVE) identity:\n$ curl -v -X GET \"https://api.trustedservices.intel.com/sgx/certification/v3/qve/identity\"\n\nFor both responses, the \"signature\" field contains a signature over the \"enclaveIdentity\" body (hex-encoded, no whitespace, very canonical lmao) using the TCB Info Signing Key.\nDetermining if an SGX Enclave identity matches the standard Quoting Enclave Identity\n \n #\n \n\n\n\nRetrieve standard Quoting Enclave Identity from the Intel SGX Provisioning Certification Service (PCS) and verify that it is a valid structure issued by Intel.\nPerform the following comparison of SGX Enclave Report against the retrieved QE Identity:\n\nVerify if MRSIGNER field retrieved from SGX Enclave Report is equal to the value of mrsigner field in QE Identity.\nVerify if ISVPRODID field retrieved from SGX Enclave Report is equal to the value of isvprodid field in QE Identity.\nApply miscselectMask (binary mask) from QE Identity to MISCSELECT field retrieved from SGX Enclave Report. Verify if the outcome (miscselectMask & MISCSELECT) is equal to the value of miscselect field in QE Identity.\nApply attributesMask (binary mask) from QE Identity to ATTRIBUTES field retrieved from SGX Enclave Report. Verify if the outcome (attributesMask & ATTRIBUTES) is equal to the value of attributes field in QE Identity.\n\n\nIf any of the checks above fail, the identity of the enclave does not match QE Identity published by Intel.\nDetermine a TCB status of the Quoting Enclave:\n\nRetrieve a collection of TCB Levels (sorted by ISVSVNs) from tcbLevels field in QE Identity structure.\nGo over the list of TCB Levels (descending order) and find the one that has ISVSVN that is lower or equal to the ISVSVN value from SGX Enclave Report.\nIf a TCB level is found, read its status from tcbStatus field, otherwise your TCB Level is not supported.\n\n\n\nGET TCB info for a given CPU family/platform\n \n #\n \n\n\nThe platform is identified by an FMSPC (Family, Model, Stepping, Platform Type, Customized SKU) hex-encoded 6-byte array.\ncurl -v -X GET \"https://api.trustedservices.intel.com/sgx/certification/v3/tcb?fmspc={}\"\n\n{\n \"tcbInfo\":{\n\t \"version\":2,\n\t \"issueDate\":\"2019-07-30T12:00:00Z\",\n\t \"nextUpdate\":\"2019-08-30T12:00:00Z\",\n\t \"fmspc\":\"000000000000\",\n\t \"pceId\":\"0000\",\n\t \"tcbType\": 0,\n\t \"tcbEvaluationDataNumber\": 2,\n\t \"tcbLevels\":[\n\t\t {\n\t\t\t\"tcb\":{\n\t\t\t \"sgxtcbcomp01svn\":0,\n\t\t\t \"sgxtcbcomp02svn\":0,\n\t\t\t \"sgxtcbcomp03svn\":0,\n\t\t\t \"sgxtcbcomp04svn\":0,\n\t\t\t \"sgxtcbcomp05svn\":0,\n\t\t\t \"sgxtcbcomp06svn\":0,\n\t\t\t \"sgxtcbcomp07svn\":0,\n\t\t\t \"sgxtcbcomp08svn\":0,\n\t\t\t \"sgxtcbcomp09svn\":0,\n\t\t\t \"sgxtcbcomp10svn\":0,\n\t\t\t \"sgxtcbcomp11svn\":0,\n\t\t\t \"sgxtcbcomp12svn\":0,\n\t\t\t \"sgxtcbcomp13svn\":0,\n\t\t\t \"sgxtcbcomp14svn\":0,\n\t\t\t \"sgxtcbcomp15svn\":0,\n\t\t\t \"sgxtcbcomp16svn\":0,\n\t\t\t \"pcesvn\":0\n\t\t\t},\n\t\t\t\"tcbDate\":\"2019-07-11T12:00:00Z\",\n\t\t\t\"tcbStatus\": \"UpToDate\",\n\t\t\t\"advisoryIDs\": [\"INTEL-SA-00079\", \"INTEL-SA-00076\"]\n\t\t }\n\t ]\n },\n \"signature\":\"e45785756a06abfabb2eb6481c3b67c8a0729142e10e06e6415948a88e2f2e773bb2ff9f513ec32e4c5afb15883ab653393f8082f69b69ba19a2a21e3eefee7c\"\n}\n\nDetermine the status of a TCB level for a platform\n \n #\n \n\n\nWe use this API to verify that a given platform's current TCB is not vulnerable or revoked.\n\nRetrieve FMSPC value from SGX PCK Certificate assigned to a given platform.\nRetrieve TCB Info matching the FMSPC value.\nGo over the sorted collection of TCB Levels retrieved from TCB Info starting from the first item on the list:\n\nCompare all of the SGX TCB Comp SVNs retrieved from the SGX PCK Certificate (from 01 to 16) with the corresponding values in the TCB Level. If all SGX TCB Comp SVNs in the certificate are greater or equal to the corresponding values in TCB Level, go to 3.b, otherwise move to the next item on TCB Levels list.\nCompare PCESVN value retrieved from the SGX PCK certificate with the corresponding value in the TCB Level. If it is greater or equal to the value in TCB Level, read status assigned to this TCB level. Otherwise, move to the next item on TCB Levels list.\n\n\nIf no TCB level matches your SGX PCK Certificate, your TCB Level is not supported.\n\nMisc\n \n #\n \n\n\nIntel SGX Services\nIntel Trusted Services API Developer Dashboard\nscrtlabs/SecretNetwork/x/registration/remote_attestation\nscrtlabs/SecretNetwork/cosmwasm/enclaves\n","id":"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/","title":"remote attestation"},"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"body":"sealing\n\n\nSome enclaves need to be able to securely persist state across machine restarts. Sealing provides one piece of the puzzle.\nReal code in oasis-core for sealing\n\nDeriving some Key Material\n \n #\n \n\n\nWhile an enclave is running, the enclave application code has access to the EGETKEY instruction. Enclaves use this to derive Seal Key material.\n\nEnclave application code calls EREPORT to obtain the CPU SVN and ISV SVN.\nThe enclave application prepares a KEYREQUEST struct with appropriate fields.\n\nThe keyname=4, for Seal Key.\nChoose a Key Request Policy.\nChoose a keyid. This should be a hashed Domain Separation Value, like you would input to a normal KDF. Some places also seem to use a random value, which you prepend in plaintext next to the ciphertext? Not sure when that's necessary. Is this also functioning like a nonce or something? Need to investigate...\n\n\nUser code calls the EGETKEY instruction with the KEYREQUEST.\nThe instruction derives key material according to the policy defined by the KEYREQUEST and returns 128-bits key material to the enclave code.\n\nIF the Keyrequest.ISVSVN > Enclave.ISVSVN or Keyrequest.CPUSVN > Enclave.CPUSVN, THEN the key request fails.\n\n\n\nYou can also view the full EGETKEY flow and some real code in oasis-core that calls EGETKEY.\nKey Request Policy\n \n #\n \n\n\nThe enclave has two options\n\nThe enclave can request a key derived from the Enclave Measurement (MRENCLAVE), which pins a derived key to the exact (1) TCB version, (2) enclave code, and (3) CPU product ID.\nThe key can also be derived from the Enclave Signer's Identity, which allows any enclave signed with this identity to derive the same keys. Newer enclave versions can also successfully derive keys created on older versions, but older versions will fail to derive keys created on newer versions. See Preventing Version Downgrade Attacks.\n\nPreventing Version Downgrade Attacks\n \n #\n \n\n\nOlder versions of an enclave should not be able to derive keys or read sealed data from a newer enclave version. To prevent these downgrading attacks, the KEYREQUEST also contains the current CPU SVN and ISV SVN. The EGETKEY intrinsic will then verify that the keyrequest CPU SVN and ISV SVN are not beyond the current CPU SVN and enclave ISV SVN.\nSealing Pattern\n \n #\n \n\n\nSealed data should effectively include the SGX lingo > KEYREQUEST used to seal the data. When an enclave wants to decrypt some sealed data, it just passes this attached KEYREQUEST to EGETKEY. An enclave should then reseal the data, but with a freshly generated Seal Key. This will ratchet any old secure platform versions forward.\nMigrating data between enclaves\n \n #\n \n\n\n\nSame platform, same enclave, different instances\n\nOffline migration is always possible. Both enclaves will simply rederive the same keys.\n\n\nSame platform, different enclave versions\n\nIf the enclave has a newer security version for the CPU SVN + ISV SVN and the Keypolicy is set to MRSIGNER\n\nThen Offline migration is possible. Both enclaves will derive the same keys.\n\n\nOtherwise, online migration is necessary.\n\n\nDifferent platform, same or different enclave\n\nOnline migration is necessary.\n\n\n\nOffline migration\n \n #\n \n\n\nWe say offline migration is available when no coordination is required for two enclaves to read each other's sealed data.\nOnline migration\n \n #\n \n\n\nIn contrast, online migration requires both enclaves to coordinate. Both enclaves usually need to be online and able to communicate. The enclaves then establish a secure channel using remote attestation and migrate secrets or other unsealed data over the secure channel.\nAnother approach is to delegate key distribution to a shared enclave service. This is what oasis does with their oasis > Key Manager Enclaves. Here compute enclaves store their machine-specific keys with the key manager enclaves, along with a policy for which other enclaves can read the keys. This way enclaves don't need to communicate with or attest each other directly and can instead just query the local key manager enclave.\nExamples\n \n #\n \n\n\noasis\n \n #\n \n\n\nSee: oasis > Sealing\nintel/linux-sgx\n \n #\n \n\n\nhttps://github.com/intel/linux-sgx/blob/26c458905b72e66db7ac1feae04b43461ce1b76f/sdk/tseal/tSeal.cpp\nextern \"C\" sgx_status_t sgx_seal_data_ex(\n\tconst uint16_t key_policy,\n\tconst sgx_attributes_t attribute_mask,\n\tconst sgx_misc_select_t misc_mask,\n\tconst uint32_t additional_MACtext_length,\n\tconst uint8_t *p_additional_MACtext,\n\tconst uint32_t text2encrypt_length,\n\tconst uint8_t *p_text2encrypt,\n\tconst uint32_t sealed_data_size,\n\tsgx_sealed_data_t *p_sealed_data\n) {\n sgx_status_t err = SGX_ERROR_UNEXPECTED;\n sgx_key_id_t keyID;\n sgx_key_request_t tmp_key_request;\n uint8_t payload_iv[SGX_SEAL_IV_SIZE];\n memset(&payload_iv, 0, sizeof(payload_iv));\n\n\n uint32_t sealedDataSize = sgx_calc_sealed_data_size(additional_MACtext_length,text2encrypt_length);\n // Check for overflow\n if (sealedDataSize == UINT32_MAX)\n {\n return SGX_ERROR_INVALID_PARAMETER;\n }\n\n //\n // Check parameters\n //\n // check key_request->key_policy:\n // 1. Reserved bits are not set\n // 2. Either MRENCLAVE or MRSIGNER is set\n if ((key_policy & ~(SGX_KEYPOLICY_MRENCLAVE | SGX_KEYPOLICY_MRSIGNER | (KEY_POLICY_KSS) | SGX_KEYPOLICY_NOISVPRODID)) ||\n (key_policy & (SGX_KEYPOLICY_MRENCLAVE | SGX_KEYPOLICY_MRSIGNER)) == 0)\n {\n return SGX_ERROR_INVALID_PARAMETER;\n }\n if ( !(attribute_mask.flags & SGX_FLAGS_INITTED)\n || !(attribute_mask.flags & SGX_FLAGS_DEBUG) )\n {\n return SGX_ERROR_INVALID_PARAMETER;\n }\n if ((additional_MACtext_length > 0) && (p_additional_MACtext == NULL))\n {\n return SGX_ERROR_INVALID_PARAMETER;\n }\n if ((text2encrypt_length == 0) || (p_text2encrypt == NULL) || (!sgx_is_within_enclave(p_text2encrypt,text2encrypt_length)))\n {\n return SGX_ERROR_INVALID_PARAMETER;\n }\n // Ensure sealed data blob is within an enclave during the sealing process\n if ((p_sealed_data == NULL) || (!sgx_is_within_enclave(p_sealed_data,sealed_data_size)))\n {\n return SGX_ERROR_INVALID_PARAMETER;\n }\n // Ensure aad data does not cross enclave boundary\n if ((additional_MACtext_length > 0) &&\n (!(sgx_is_within_enclave(p_additional_MACtext,additional_MACtext_length) || sgx_is_outside_enclave(p_additional_MACtext, additional_MACtext_length))))\n {\n return SGX_ERROR_INVALID_PARAMETER;\n }\n if (sealedDataSize != sealed_data_size)\n {\n return SGX_ERROR_INVALID_PARAMETER;\n }\n memset(p_sealed_data, 0, sealedDataSize);\n memset(&keyID, 0, sizeof(sgx_key_id_t));\n memset(&tmp_key_request, 0, sizeof(sgx_key_request_t));\n\n // Get the report to obtain isv_svn and cpu_svn\n const sgx_report_t *report = sgx_self_report();\n\n // Get a random number to populate the key_id of the key_request\n err = sgx_read_rand(reinterpret_cast<uint8_t *>(&keyID), sizeof(sgx_key_id_t));\n if (err != SGX_SUCCESS)\n {\n goto clear_return;\n }\n\n memcpy(&(tmp_key_request.cpu_svn), &(report->body.cpu_svn), sizeof(sgx_cpu_svn_t));\n memcpy(&(tmp_key_request.isv_svn), &(report->body.isv_svn), sizeof(sgx_isv_svn_t));\n tmp_key_request.config_svn = report->body.config_svn;\n tmp_key_request.key_name = SGX_KEYSELECT_SEAL;\n tmp_key_request.key_policy = key_policy;\n tmp_key_request.attribute_mask.flags = attribute_mask.flags;\n tmp_key_request.attribute_mask.xfrm = attribute_mask.xfrm;\n memcpy(&(tmp_key_request.key_id), &keyID, sizeof(sgx_key_id_t));\n tmp_key_request.misc_mask = misc_mask;\n\n err = random_stack_advance<0x400>(sgx_seal_data_iv, additional_MACtext_length, p_additional_MACtext,\n text2encrypt_length, p_text2encrypt, payload_iv, &tmp_key_request, p_sealed_data);\n\n if (err == SGX_SUCCESS)\n {\n // Copy data from the temporary key request buffer to the sealed data blob\n memcpy(&(p_sealed_data->key_request), &tmp_key_request, sizeof(sgx_key_request_t));\n }\nclear_return:\n // Clear temp state\n memset_s(&keyID, sizeof(sgx_key_id_t), 0, sizeof(sgx_key_id_t));\n return err;\n}\n\nopenenclave\n \n #\n \n\n\nhttps://github.com/openenclave/openenclave/blob/master/enclave/core/seal.c#L93\n\noe_result_t oe_seal(\n const oe_uuid_t* plugin_id,\n const oe_seal_setting_t* settings,\n size_t settings_count,\n const uint8_t* plaintext,\n size_t plaintext_size,\n const uint8_t* additional_data,\n size_t additional_data_size,\n uint8_t** blob,\n size_t* blob_size)\n{\n oe_result_t result;\n const oe_seal_plugin_definition_t* plugin;\n size_t i;\n\n if (blob == NULL || blob_size == NULL)\n return OE_INVALID_PARAMETER;\n\n *blob = NULL;\n *blob_size = 0;\n\n if ((settings == NULL) != (settings_count == 0) ||\n !oe_is_within_enclave(settings, settings_count * sizeof(*settings)) ||\n (plaintext == NULL) != (plaintext_size == 0) ||\n !oe_is_within_enclave(plaintext, plaintext_size) ||\n (additional_data == NULL) != (additional_data_size == 0) ||\n ((additional_data != NULL) &&\n !oe_is_within_enclave(additional_data, additional_data_size)))\n return OE_INVALID_PARAMETER;\n\n for (i = 0; i < settings_count; ++i)\n {\n if (settings[i].type < 0 || settings[i].type >= OE_SEAL_SETTING_MAX)\n return OE_INVALID_PARAMETER;\n if (settings[i].size > 0 &&\n !oe_is_within_enclave(settings[i].value.p, settings[i].size))\n return OE_INVALID_PARAMETER;\n }\n\n if (oe_mutex_lock(&_plugins_lock) != OE_OK)\n return OE_UNEXPECTED;\n\n plugin = _find_plugin(plugin_id);\n if (plugin == NULL)\n OE_RAISE(OE_NOT_FOUND);\n\n result = plugin->seal(\n settings,\n settings_count,\n plaintext,\n plaintext_size,\n additional_data,\n additional_data_size,\n blob,\n blob_size);\n\ndone:\n oe_mutex_unlock(&_plugins_lock);\n return result;\n}\n\nhttps://github.com/openenclave/openenclave/blob/master/include/openenclave/bits/sgx/sgxtypes.h#L1073\n/* Enclave MISCSELECT Flags Bit Masks, additional information to an SSA frame */\n/* If set, then the enclave page fault and general protection exception are\n * reported */\n#define SGX_MISC_FLAGS_PF_GP_EXIT_INFO 0x0000000000000001ULL\n\n/* Enclave Flags Bit Masks */\n/* If set, then the enclave is initialized */\n#define SGX_FLAGS_INITTED 0x0000000000000001ULL\n/* If set, then the enclave is debug */\n#define SGX_FLAGS_DEBUG 0x0000000000000002ULL\n/* If set, then the enclave is 64 bit */\n#define SGX_FLAGS_MODE64BIT 0x0000000000000004ULL\n/* If set, then the enclave has access to provision key */\n#define SGX_FLAGS_PROVISION_KEY 0x0000000000000010ULL\n/* If set, then the enclave has access to EINITTOKEN key */\n#define SGX_FLAGS_EINITTOKEN_KEY 0x0000000000000020ULL\n#define SGX_FLAGS_RESERVED \\\n (~(SGX_FLAGS_INITTED | SGX_FLAGS_DEBUG | SGX_FLAGS_MODE64BIT | \\\n SGX_FLAGS_PROVISION_KEY | SGX_FLAGS_EINITTOKEN_KEY))\n\n/* Set the bits which have no security implications to 0 for sealed data\n migration */\n/* Bits which have no security implications in attributes.flags:\n * Reserved bit[55:6] - 0xFFFFFFFFFFFFC0ULL\n * SGX_FLAGS_MODE64BIT\n * SGX_FLAGS_PROVISION_KEY\n * SGX_FLAGS_EINITTOKEN_KEY */\n#define SGX_FLAGS_NON_SECURITY_BITS \\\n (0xFFFFFFFFFFFFC0ULL | SGX_FLAGS_MODE64BIT | SGX_FLAGS_PROVISION_KEY | \\\n SGX_FLAGS_EINITTOKEN_KEY)\n\n/* bit[27:0]: have no security implications */\n#define SGX_MISC_NON_SECURITY_BITS 0x0FFFFFFFU\n\n/* OE seal key default flag masks*/\n#define OE_SEALKEY_DEFAULT_FLAGSMASK (~SGX_FLAGS_NON_SECURITY_BITS)\n#define OE_SEALKEY_DEFAULT_MISCMASK (~SGX_MISC_NON_SECURITY_BITS)\n#define OE_SEALKEY_DEFAULT_XFRMMASK (0X0ULL)\n\nhttps://github.com/openenclave/openenclave/blob/master/enclave/sealing/sgx/seal_gcmaes.c\nstatic oe_result_t _init_key_request(sgx_key_request_t* keyrequest)\n{\n sgx_report_t report = {{{0}}};\n\n oe_result_t result = OE_OK;\n\n OE_CHECK(\n oe_memset_s(keyrequest, sizeof(*keyrequest), 0, sizeof(*keyrequest)));\n\n OE_CHECK(sgx_create_report(NULL, 0, NULL, 0, &report));\n OE_CHECK(oe_memcpy_s(\n &keyrequest->cpu_svn,\n sizeof(keyrequest->cpu_svn),\n &report.body.cpusvn,\n sizeof(report.body.cpusvn)));\n\n keyrequest->key_name = SGX_KEYSELECT_SEAL;\n keyrequest->key_policy = SGX_KEYPOLICY_MRSIGNER;\n keyrequest->isv_svn = report.body.isvsvn;\n keyrequest->attribute_mask.flags = OE_SEALKEY_DEFAULT_FLAGSMASK;\n keyrequest->attribute_mask.xfrm = OE_SEALKEY_DEFAULT_XFRMMASK;\n keyrequest->misc_attribute_mask = OE_SEALKEY_DEFAULT_MISCMASK;\n\ndone:\n return result;\n}\n\nstatic oe_result_t _seal(\n const oe_seal_setting_t* settings,\n size_t settings_count,\n const uint8_t* plaintext,\n size_t plaintext_size,\n const uint8_t* additional_data,\n size_t additional_data_size,\n uint8_t** blob,\n size_t* blob_size)\n{\n oe_result_t result = OE_OK;\n struct _sealed_blob_header* header;\n uint8_t* key = NULL;\n size_t size;\n oe_entropy_kind_t kind;\n size_t i;\n\n size = sizeof(*header);\n if (plaintext_size > OE_UINT32_MAX - size)\n return OE_INTEGER_OVERFLOW;\n size += plaintext_size;\n if (additional_data_size > OE_UINT32_MAX - size)\n return OE_INTEGER_OVERFLOW;\n // Please note that blob will NOT include additional_data\n\n *blob_size = size;\n *blob = (uint8_t*)oe_calloc(1, size);\n if (*blob == NULL)\n return OE_OUT_OF_MEMORY;\n\n header = (struct _sealed_blob_header*)*blob;\n OE_CHECK(_init_key_request(&header->keyrequest));\n OE_CHECK(oe_get_entropy(\n header->keyrequest.key_id, sizeof(header->keyrequest.key_id), &kind));\n header->ciphertext_size = (uint32_t)plaintext_size;\n header->total_size = (uint32_t)(plaintext_size + additional_data_size);\n OE_CHECK(oe_get_entropy(header->iv, sizeof(header->iv), &kind));\n\n for (i = 0; i < settings_count; ++i)\n switch (settings[i].type)\n {\n case OE_SEAL_SETTING_POLICY:\n switch (settings[i].value.w)\n {\n case OE_SEAL_POLICY_UNIQUE:\n header->keyrequest.key_policy = SGX_KEYPOLICY_MRENCLAVE;\n break;\n case OE_SEAL_POLICY_PRODUCT:\n header->keyrequest.key_policy = SGX_KEYPOLICY_MRSIGNER;\n break;\n default:\n OE_RAISE(OE_INVALID_PARAMETER);\n }\n break;\n\n case OE_SEAL_SETTING_IV:\n if (settings[i].size != sizeof(header->iv))\n OE_RAISE(OE_INVALID_PARAMETER);\n else\n OE_CHECK(oe_memcpy_s(\n header->iv,\n sizeof(header->iv),\n settings[i].value.p,\n settings[i].size));\n break;\n\n case OE_SEAL_SETTING_SGX_KEYNAME:\n header->keyrequest.key_name = settings[i].value.w;\n break;\n\n case OE_SEAL_SETTING_SGX_ISVSVN:\n header->keyrequest.isv_svn = settings[i].value.w;\n break;\n\n case OE_SEAL_SETTING_SGX_CPUSVN:\n if (settings[i].size != sizeof(header->keyrequest.cpu_svn))\n OE_RAISE(OE_INVALID_PARAMETER);\n OE_CHECK(oe_memcpy_s(\n header->keyrequest.cpu_svn,\n sizeof(header->keyrequest.cpu_svn),\n settings[i].value.p,\n settings[i].size));\n break;\n\n case OE_SEAL_SETTING_SGX_FLAGSMASK:\n header->keyrequest.attribute_mask.flags = settings[i].value.q;\n break;\n\n case OE_SEAL_SETTING_SGX_XFRMMASK:\n header->keyrequest.attribute_mask.xfrm = settings[i].value.q;\n break;\n\n case OE_SEAL_SETTING_SGX_MISCMASK:\n header->keyrequest.misc_attribute_mask = settings[i].value.d;\n break;\n\n case OE_SEAL_SETTING_SGX_CONFIGSVN:\n header->keyrequest.config_svn = settings[i].value.w;\n break;\n\n case OE_SEAL_SETTING_ADDITIONAL_CONTEXT:\n // Custom OE_SEAL_SETTING_ADDITIONAL_CONTEXT not supported\n\n case OE_SEAL_SETTING_SGX_CET_ATTRIBUTES_MASK:\n // OE_SEAL_SETTING_SGX_CET_ATTRIBUTES_MASK not supported\n\n default:\n OE_RAISE(OE_UNSUPPORTED);\n }\n\n OE_CHECK(oe_get_seal_key(\n (uint8_t*)&header->keyrequest,\n sizeof(header->keyrequest),\n &key,\n &size));\n\n OE_STATIC_ASSERT(sizeof(header->tag) >= 16);\n OE_CHECK(oe_aes_gcm_encrypt(\n key,\n size,\n header->iv,\n sizeof(header->iv),\n additional_data,\n additional_data_size,\n plaintext,\n plaintext_size,\n (uint8_t*)(header + 1),\n plaintext_size,\n header->tag));\n\ndone:\n oe_free_key(key, size, NULL, 0);\n\n if (result != OE_OK)\n {\n oe_free(*blob);\n *blob = NULL;\n }\n\n return result;\n}\n\n","id":"https://phlip9.com/notes/confidential computing/intel SGX/sealing/","title":"sealing"},"https://phlip9.com/notes/confidential computing/intel SGX/secure time/":{"body":"secure time\n\nTime in an enclave is difficult.\nWhy do we care about time in an enclave?\n \n #\n \n\n\n\nKnowing the time lets us detect replay attacks on sealed persistent data.\nWe need the current time to decide whether a certificate/OCSP response/DNSSEC reply is stale or expired.\nWith the current time, we can tell whether a PoW blockchain header is stale or recent.\nVarious protocols rely on accurate clocks for security, e.g., DNSSEC, Kerberos, TLS, WireGuard.\n\nWhy is this problem so hard?\n \n #\n \n\n\n\nWe can't rely on standard OS time services, since they can be modified by the host and must sit outside our TCB.\nCPU instructions that query an on-die Real-time Clock (RTC) are likewise untrustworthy.\nIntel's Platform Services Enclave (PSE) provides an interface to the Intel Management Engine's (IME) RTC, which is isolated from the host OS. Unfortunately, this is more trustworthy but still only provides you with a relative time. We want the absolute time.\n\nWhat do we do about it?\n \n #\n \n\n\nRequirements\n \n #\n \n\n\n\nWe want absolute time, so we can communicate with others outside our own machine.\nThe true time, as observed by other enclaves on the machine, should be strictly increasing.\nThe platform operator is outside our TCB. They should not be able to make the true time go backwards.\nWe are not secure against DoS by the platform operator. This doesn't significantly change our threat model however, since they can just turn off the machine. : )\nMinimize the startup latency of other enclaves by doing the bootstrap once in a shared enclave.\n\nApproach\n \n #\n \n\n\nShared Time-keeper Enclave\n \n #\n \n\n\nUse a shared enclave that keeps track of time on the same machine. Other local enclaves can query the Time-keeper for the current true time.\nThe Time-keeper uses a combination of a remote, semi-trusted time service, and a local, trusted relative clock provided by the Intel ME and Platform Services Enclave (PSE) to keep track of the true time.\n\nThe connection to the remote time service needs to be secure against the platform operator. We probably use NTP with NTS to some small, fixed set of NTP servers (that support NTS).\nOn startup, we use the local insecure time to bootstrap our secure connection to the remote time service.\n\nWe need the initial insecure time measurement so we can complete the TLS handshake.\nWe could also attempt to bootstrap more securely with roughtime.\nSince platform operator DoS is out-of-scope, a bad initial insecure time is effectively the same as a DoS, since we'll just reject the server's TLS cert.\n\n\nWe then use our secure channel to the remote time service to fix our trusted clock base.\nWe then use the local, trusted relative clock to track the time since the clock base.\nSince the relative clock only provides second granularity, we use an intra-epoch counter stored in-memory that gets incremented after each request.\n\nOn startup, we need to make sure we wait until the next second for the previous epoch to fully elapse.\n\n\nDepending on requirements, refresh the base time by re-bootstrapping from the remote time source to reduce clock-skew. This refresh could happen every hour or so.\nOther enclaves can request the current time from the time-keeper. The request should include a nonce for freshness/replay-prevention. The request should be (at least) MAC'd with a shared symmetric key derived via EGETKEY with the same key_id.\n\nLinks\n \n #\n \n\n\n\nRFC 8915 - Network Time Security (NTS) for NTP\nchrony - Notes on using NTS\nNTPsec - NTS Quickstart\nIntel - Trusted Time and Monotonic Counters with SGX Platform Services Enclave\n2019 - Applications and Challenges in Securing Time\nGoogle Roughtime Protocol\nint08h/roughtime - Rust library\nCloudflare - secure time.cloudflare.com announcement\nCloudflare - Announcing cfnts: Cloudflare's implementation of NTS in Rust\ncloudflare/cfnts - supports NTS, looks unmaintained\nvpetrigo/sntpc - plain SNTP\nrisoflora/sntp_request - plain SNTP\nioerror/tlsdate - securely extract time from TLS handshake\ndrand - distributed randomness beacon, emits timestamp+random every 30 sec, signed quorum as one BLS threshold signature\n\n","id":"https://phlip9.com/notes/confidential computing/intel SGX/secure time/","title":"secure time"},"https://phlip9.com/notes/confidential computing/intel TDX/":{"body":"intel TDX\n\n\nIntel TDX is designed to isolate virtual machines from the VMM/hypervisor and other non-VMM system software on the platform. TDX is also able to protect the VMs from some forms of hardware attacks\n\n\nIntel Trust Domain Extensions (Intel TDX) is introducing new, architectural elements to help deploy hardware-isolated, virtual machines (VMs) called trust domains (TDs). Intel TDX is designed to isolate VMs from the virtual-machine manager (VMM)/hypervisor and any other non-TD software on the platform to protect TDs from a broad range of software. source\n\n\n\nSecure-Arbitration Mode (SEAM) – a new mode of the CPU designed to host an Intel-provided, digitally-signed, security-services module called the Intel TDX module.\n\n\nShared bit in GPA to help allow TD to access shared memory.\n\n\nSecure EPT to help translate private GPA to provide address-translation integrity and to prevent TD-code fetches from shared memory. Encryption and integrity protection of private-memory access using a TD-private key is the goal.\n\n\nPhysical-address-metadata table (PAMT) to help track page allocation, page initialization, and TLB consistency.\n\n\nMulti-key, total-memory-encryption (MKTME) engine designed to provide memory encryption using AES-128- XTS and integrity using 28-bit MAC and a TD-ownership bit.\n\n\nRemote attestation designed to provide evidence of TD executing on a genuine, Intel TDX system and its TCB version.\n\n\nIt looks like you basically run a linux kernel on the host machine, then linux (which now supports TDX) can run these VM isolates (just like containers I guess, but with privacy and isolation).\n\n\nRoadmap Status (2021/09/24)\n \n #\n \n\n\nitemstatus\nlinux firmware loaderWIP\nKVM TDUnder Review\nKVM MMUUnder Review\nKVM unmappingUnder discussion\nQEMU guest BIOSUnder Review\nQEMU cpuidWIP\nQEMU guest attestationWIP\nQEMU unmappingUnder discussion\n\n","id":"https://phlip9.com/notes/confidential computing/intel TDX/","title":"intel TDX"},"https://phlip9.com/notes/confidential computing/marblerun/":{"body":"marblerun\n\nGithub: https://github.com/edgelesssys/marblerun\nDocs: https://docs.edgeless.systems/marblerun/#/\n\nMarbleRun is a #confidential-computing aware service mesh for kubernetes\nCoordinator\n\nthe control plane\ncommunicates w/ data plane via gRPC\nexposes REST interface to clients\nclients are\n\nowners/providers/admins who need to deploy applications and admin\nusers/customers who do remote attestation w/ Coordinator\n\n\n\n\nMarbles\n\nthe data plane\nrun your application code in secure enclaves\n\n\n\n// coordinator-era.json\n{\n\t\"SecurityVersion\": 1,\n\t\"ProductID\": 3,\n\t\"SignerID\": \"43361affedeb75affee9baec7e054a5e14883213e5a121b67d74a0e12e9d2b7a\",\n\t\"Debug\": true\n}\n\nEGo & Marblerun Talk\n \n #\n \n\n\nVideo: EGo & Marblerun - Moritz Eckert - OC3 2021\n\n\nEGo\n\nMostly transparently wraps existing Go code to run inside enclave\nBuilt on openenclave (provides the low-level interface and compatibility layer)\nFairly lightweight? Contains only Application Code, Go Runtime, and small OpenEnclave layer.\n\n\n\nChallenges deploying Go enclaves on k8s\n\ntop-level DevOps user\n\ndon't really care whether we're running one big service or many microservices (?)\njust want one big attestation of the whole cluster, rather than doing individual attestations with each service.\n\n\nservices\n\npackaged as k8s pods\nservices want to communicate with each other / share data\nservice 2 service communication needs attestations so service enclaves can securely communicate w/ each other.\n\n\nsecrets distribution\n\nex: web frontend instances all need to share same cert\nsecret distribution must happen via secure channels between enclaves\n\n\nsealing and persistence\n\npod migration (pod gets shutdown and migrated to other host) is difficult w/ enclaves\nenclave's sealing key is unique to each enclave. data encryted with enclave's sealing key can only be decrypted by that enclave.\n\"virtual\" sealing key, so this is somehow abstracted and data not bound to one node\n\n\nsecure connections\n\nall connections b/w enclaves must be through secure mTLS connections terminated inside enclaves\n\n\ncode updates\n\nhow to ship new enclave code and have other outside enclaves recognize this\n\n\n\n\n\nWhy do existing service meshes not work?\n\nThreat model only considers network-bound adversaries\nThreat model considers hosts & cloud provider to be trusted third parties.\nTLS is only terminated at service mesh sidecar proxies\nSecrets handled in unsecured memory on-node\nNot SGX aware, no remote attestations\n\n\n\nMarblerun\n\nextends enclave concept to entire cluster\nE2E Confidentiality, Integrity, Verifiability\nUpdatable, Cloud-native\nIntegrates w/ k8s and existing service meshes like\n\n{ Consul, Linkerd, Istio (Envoy) }\n\n\nSupports EGo, Gramine (experimental), and Occlum (experimental) runtimes.\ncloud agnostic\n\n\n\nDevOps\n\nProvides Manifest (JSON) which describes cluster?\ndoesn't need to worry too much about CC\ncan use existing tooling\ndon't need to change too much code\n\n\n\nUser\n\nAsks marblerun control plane for attestation w/ Quote, Cert, and Manifest\ncan verify everything in one step\n\neverything runs in enclaves\neverything always encrypted\ncluster topology\ncluster identities\n\n\n\n\n\n","id":"https://phlip9.com/notes/confidential computing/marblerun/","title":"marblerun"},"https://phlip9.com/notes/confidential computing/mystikos/":{"body":"mystikos\n\nGithub: https://github.com/deislabs/mystikos\nSite: ???\nRelated: gramine\nMystikos is a #libOS kernel / libc-injected runtime for running Linux software in SGX.\n\nGoal: lift-n-shift existing application with little or no modification into enclave.\nGoal: target multiple enclave types\nBuilt by team inside Azure\n\nArchitecture\n \n #\n \n\n\n\nC-runtime based on musl, but also glibc-compatible.\na #libOS like micro-kernel\nLinux kernel target interface (TCALL)\nCLI and other related utils\n\nCurrent available targets:\n\nSGX (via Open Enclave SDK)\nLinux (for simulation and testing on non-SGX hardware)\n\nExamples\n \n #\n \n\n\n\nRust Hello World\n\nhttps://github.com/deislabs/mystikos/blob/main/doc/user-getting-started-rust.md\n\n\nAttested TLS handshake\n\nhttps://github.com/deislabs/mystikos/tree/main/solutions/attested_tls\n\n\nTEE-aware application\n\nhttps://github.com/deislabs/mystikos/blob/main/doc/user-getting-started-tee-aware.md\n\n\n\n","id":"https://phlip9.com/notes/confidential computing/mystikos/","title":"mystikos"},"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"body":"remote attestation protocols\n\nSee also: intel SGX > remote attestation\nRelated slides: CCC-Attestation/meetings - Discussion Wrap up\nGoals\n \n #\n \n\n\n\nAn application running inside a Trusted Execution Environment (TEE) proves various assertions about itself to a remote party.\nThese assertions might include claims like\n\na summary of the application code running in the TEE, e.g., an SGX Enclave Measurement (MRENCLAVE)\nthe Enclave Signer Identity (MRSIGNER)\nthe current TCB status (up-to-date or insecure)\n\n\nAt the end of the attestation protocol, we should have a bidirectional secure channel established between both endpoints. We might use this channel to provision secrets, issue commands, etc...\n\nProtocol Tradeoffs\n \n #\n \n\n\nQuote Generation and Verification Frequency\n \n #\n \n\n\nHow often does the enclave need to generate a new quote?\nQuote Generation\n \n #\n \n\n\n\nOnce per connection\n\nFor example, the TLS Exported Keying Material Session Binding protocol requires binding a shared secret from the TLS session into a Quote, so enclaves must generate a new Quote per connection.\n\n\nOnce on enclave startup\n\nTLS Embed Quote in Self-signed Certificate can generate an ephemeral cert once on startup and then serve it to all clients w/o changes.\n\n\n\nQuote Verification\n \n #\n \n\n\n\nOnce per connection.\nAmortize Quote verification so client only has to do it once.\n\nRTTs to Useful Payload\n \n #\n \n\n\nHow many RTTs until the client can send useful application payloads?\n\n1 RTT\n\nNormal TLS\nEmbedded Quote TLS\n\n\n2 RTT (extra application layer handshake step)\n\nTLS EKM Session Binding\n\n\n\nSafety\n \n #\n \n\n\n\nIs the protocol safe by default?\nHow brittle/fail-safe is the protocol implementation?\n\nSupport for Client Authentication/Attestation\n \n #\n \n\n\n\nCan an enclave act as the client and present a Quote to the Server?\nCan two enclaves on the same machine efficiently verify each other's Reports?\nIf built on TLS, can we do mutual-auth TLS (mTLS)?\n\nConfidentiality vs Support Middleware\n \n #\n \n\n\n\nMost of the protocols terminate the secure channel inside the enclaves, which is by far the safest option, but means we have to forgo application-aware load balancers and reverse proxies, which have become standard in most cloud/kubernetes deployments.\nThe Attestation in HTTP Headers HTTPA protocol presents an alternative, where the secure channel is moved up to the HTTP layer. The TLS session can be terminated at the service provider edge and existing middleware load balancers and reverse proxies can operate as normal on the unprotected parts of the HTTP request.\n\nInvasiveness\n \n #\n \n\n\nDifferent attestation protocols operate at different levels of the transport protocol stack and require varying changes to existing transport protocols. Invasiveness is a qualitative statement about the changes to existing libraries needed before a new client language can be supported.\nAs an upper bound, changing the TCP protocol handshake would be incredibly invasive and would likely require maintaining Linux kernel patches or running a custom user-space TCP stack. Supporting locked down platforms like Android or iOS would be... challenging to say the least.\nIn contrast, a hypothetical lower bound would probably be a default TLS config (i.e., no custom verifiers, no self-signed certs, default global CA set), since that would be supported \"out-of-the-box\" on every major platform.\nTLS Configs by Invasiveness and Availability\n \n #\n \n\n\nIf you don't control the client libraries connecting to the enclaves, it's important to stay on the TLS happy path. Different platforms and client libraries allow configuring TLS to varying levels. Staying on the happy path is important for ease-of-implementation and time-to-market. TLS configurations in order from most to least easy/available:\n\ndefault configuration (available everywhere)\n\nThis means the enclave needs a cert rooted at a global CA, e.g., Let's Encrypt.\n\n\ncustom root CA cert (available everywhere, slightly more complicated)\n\nThe client pins a specific root CA cert for this connection.\nThe root CA cert is probably provisioned into the enclave out-of-band or provisioned with one of the other bespoke attestation protocols. Ideally, you can keep the provisioning step out of the steady-state client path or do it only once.\n\n\nexport keying material (rare availability, if exists then only application layer changes)\n\nUsed in TLS Exported Keying Material Session Binding. Requires a fresh Quote generated for every new TLS session.\nA KDF-like API over the negotiated TLS session shared secret. In other words, client and server can non-interactively derive identical secrets from the TLS session.\nOnly ever seen this API exposed in rustls. See: rustls::ClientConnection::export_keying_material.\n\n\ncustom cert verifier, custom cert extensions (ok availability, dangerous and large engineering effort)\n\nUsed in TLS Embed Quote in Self-signed Certificate.\nRequires completely replacing the existing cert verifier. Client code needs to be able to parse the X509 cert extensions containing the Quote.\nSee: rustls::client::DangerousConfig::set_certificate_verifier\nSee: mbedtls::ssl::Config::set_verify_callback\n\n\nmodified TLS implementation (completely bespoke, requires standardization)\n\nRequires modifying the TLS handshake or core state machine.\nNon-starter for almost all projects.\nSee: TLS CBOR Web Token CWT certs with Entity Attestation Token EAT\n\n\n\nFor a decent overview of lowest common denominator TLS configurations, see the Rust reqwest::ClientBuilder API. Take note of which APIs are supported on which TLS feature flags.\nProtocols\n \n #\n \n\n\nTLS Embed Quote in Self-signed Certificate\n \n #\n \n\n\n\nSee: CCC-Attestation/meetings - RA-TLS slides\nSee: gramineproject/gramine - RA-TLS mbedtls\nSee: CCC-Attestation/meetings - OpenEnclave Attested TLS\nSee: 2018 - Integrating Intel SGX Remote Attestation with TLS\n\nTLS Exported Keying Material Session Binding\n \n #\n \n\n\nClient and Server open a standard TLS connection, then derive a secret from the TLS session shared secret. The Client then requests a Quote from the Server. The Quote must bind to the derived shared secret or the Client will reject it. Once the Client verifies the Quote, you have a secure channel.\n\nSee: project-oak - Remote Attestation via TLS\n\nDelegate Quote Verification and Mint an X509 Cert for Enclave\n \n #\n \n\n\n\nSee: CCC-Attestation/meetings - Veracruz\n\nAttest CA Provisioning Enclave\n \n #\n \n\n\nTODO\n\nFortanix\nOasis (sort of)\n\nAttestation in HTTP Headers (HTTPA)\n \n #\n \n\n\nMost modern services are horizontally scaled and run behind a series of load balancers, reverse proxies, and TLS termination endpoints. These middleware services usually terminate TLS at the provider's edge and then inspect or operate on the HTTP request/response to route traffic, cache responses, check user authentication/authorization, track metrics, attach tracing info, etc, etc...\nThe other protocols described in this note will terminate the TLS session inside the destination enclave service. The security model is definitely clearest when terminating at the destination; however, we also lose out on all the functionality provided by these middlewares and must replicate or otherwise go without them in the enclave service.\nIn contrast, this proposal runs an attestation protocol over HTTPS in a standard TLS session, which can be terminated normally at the edge. Both parties effectively do a key exchange over HTTP headers. Once negotiated, parts of subsequent HTTP requests can be protected via the shared secrets. The middlewares can continue to operate on the unprotected parts of the HTTP request as normal.\n\nSee: HTTPA/1.1: HTTPS Attestable Protocol\nSee: HTTPA/2: a Trusted End-to-End Protocol for Web Services\nSee: HTTPA - APNIC blog post\n\nEnclave Key Exchange Protocol (EKEP)\n \n #\n \n\n\nA modified version of Google's internal mutual-auth secure transport protocol (ALTS). Like a stripped down TLS handshake over gRPC.\n\nSee: project-oak/oak - remote attestation\nSee: asylo.dev - EKEP\nSee: cloud.google.com - ALTS Handshake Protocol\n\nTLS CBOR Web Token (CWT) certs with Entity Attestation Token (EAT)\n \n #\n \n\n\nNormal TLS implementations usually exchange X509 certs. Some even support raw pubkey-only key exchange (no cert). This protocol proposes a new CWT cert format, along with an Entity Attestation Token (EAT) format inside the CWT cert.\nRequires deeply invasive changes to TLS client libraries, who almost always assume X509 certs. Very far off the happy path IMO.\n\nSee: CCC-Attestation/meetings - Attestation in TLS with the Entity Attestation Token\nSee: IETF RATS Working Group\n\n","id":"https://phlip9.com/notes/confidential computing/remote attestation protocols/","title":"remote attestation protocols"},"https://phlip9.com/notes/crypto/":{"body":"","id":"https://phlip9.com/notes/crypto/","title":"crypto"},"https://phlip9.com/notes/crypto/(talk) authenticated data structures for stateless validation/":{"body":"(talk) authenticated data structures for stateless validation\n\nVideo: https://www.youtube.com/watch?v=TuZiEb_SLx0\nAuthor: https://alinush.github.io/papers.html\nwhy\n \n #\n \n\n\n\nMerkle Trees can't do some things efficiently\n\nSuccinctness\nProof and digest updates\nProof aggregation\n\n\nThese are needed in new applications\n\nTransparency logs (e.g., x509 Certificate Transparency)\nStateless validation (e.g., sharded eth, eth light clients)\n\n\nThese things are possible with new techniques\n\nPolynomial commitments\nHidden-order groups (e.g. RSA)\n\n\n\ncert transparency\n \n #\n \n\n\nexample\n \n #\n \n\n\n\n\nCA gets compromised and issues bad cert for high-value domain like google.com.\n\n\nInstead of preventing the problem (basically impossible), just detect bad CAs and remove them from browser/OS trust roots after the fact (when they're detected).\n\n\nClient gets an extra CT inclusion proof alongside normal cert chain. Client only accepts cert if it's included in a global transparency log.\n\n\nServices (e.g., google.com) also then monitor the global transparency logs for their certs.\n\n\nTransparency logs return complete inclusion proof (i.e., proves google.com certs returned is complete and not missing any).\n\n\nIf service finds a bad cert, maybe one they didn't request, then they can ban the bad CA from the browser/CA trust roots.\n\n\nexisting merkle accumulator can't easily guarantee completeness b/c the certs are appended in chronological order. log auditors then have to download the entire tree to check for bad certs.\n\n\nnew bilinear accumulator and RSA-based accumulator allow for both lookup proof and append-only proof size in log n\n\n\ncaveat: slightly worse append time and bilinear accum has many public params\n\n\nthese more sophisticated accumulators (bilinear or RSA) allow for O(1) disjointness and subset proofs.\n\n\nperf: append-only proof: 7 KB, lookup proof: 40-120 KB, reduce communication: 10x-100x\n\n\nperf: 1 append/sec :0\n\n\nfuture work: confident we can go from $4 \\lambda$ to $2 \\lambda$ to $\\log n$ tree depth\n\n\n","id":"https://phlip9.com/notes/crypto/(talk) authenticated data structures for stateless validation/","title":"(talk) authenticated data structures for stateless validation"},"https://phlip9.com/notes/crypto/TLS self-signed pubkey-only certs/":{"body":"mTLS self-signed pubkey-only certs\n\nmysten-infra/rccheck\nAssuming you already have PKI set up to distribute pubkeys everywhere, this crate allows you to\n\neasily generate valid self-signed certs from a keypair.\nserver and client verifiers that check whether the peer pubkey is as we expect.\n\nJust like our old NoiseIX handshake code (which was simpler IMO : ))\n// rccheck/src/ed25519_certgen.rs\n\nfn gen_certificate(\n subject_names: impl Into<Vec<String>>,\n key_pair: (&[u8], &'static SignatureAlgorithm),\n) -> Result<rustls::Certificate, anyhow::Error> {\n let kp = KeyPair::from_der_and_sign_algo(key_pair.0, key_pair.1)?;\n\n let mut cert_params = CertificateParams::new(subject_names);\n cert_params.key_pair = Some(kp);\n cert_params.distinguished_name = rcgen::DistinguishedName::new();\n cert_params.alg = key_pair.1;\n\n let cert = rcgen::Certificate::from_params(cert_params).expect(\n \"unreachable! from_params should only fail if the key is incompatible with params.algo\",\n );\n let cert_bytes = cert.serialize_der()?; // <- also signs\n Ok(rustls::Certificate(cert_bytes))\n}\n\nsimple Rust library to gen x509 certs\n \n #\n \n\n\nest31/rcgen\n// rcgen/lib.rs\nimpl CertificateParams {\n\n\t// ..\n\n\tfn serialize_der_with_signer<K: PublicKeyData>(&self, pub_key: &K, ca :&Certificate) -> Result<Vec<u8>, RcgenError> {\n\t\tyasna::try_construct_der(|writer| {\n\t\t\twriter.write_sequence(|writer| {\n\n\t\t\t\tlet tbs_cert_list_serialized = yasna::try_construct_der(|writer| {\n\t\t\t\t\tself.write_cert(writer, pub_key, ca)?;\n\t\t\t\t\tOk::<(), RcgenError>(())\n\t\t\t\t})?;\n\t\t\t\t// Write tbsCertList\n\t\t\t\twriter.next().write_der(&tbs_cert_list_serialized);\n\n\t\t\t\t// Write signatureAlgorithm\n\t\t\t\tca.params.alg.write_alg_ident(writer.next());\n\n\t\t\t\t// Write signature\n\t\t\t\tca.key_pair.sign(&tbs_cert_list_serialized, writer.next())?;\n\n\t\t\t\tOk(())\n\t\t\t})\n\t\t})\n\t}\n\n\t// ..\n}\n\n","id":"https://phlip9.com/notes/crypto/TLS self-signed pubkey-only certs/","title":"TLS self-signed pubkey-only certs"},"https://phlip9.com/notes/crypto/acme protocol/":{"body":"acme protocol\n\nA protocol for automated provisioning of web PKI certificates (certs bound to public domains, endorsed by a web root CA like Let's Encrypt).\nwhy\n \n #\n \n\n\nBefore ACME, web service operators had to manually update their web certs. This error prone and time-consuming process meant that many sites either:\n\nDidn't use HTTPS at all, significantly reducing security.\nUsed multi-year long cert expirations, increasing the danger when a cert was compromised.\nForgot to renew their certs when they expired, leading to outages.\n\nACME automates and simplifies the process of procuring and renewing web certs so everyone can enjoy HTTPS!\nSince the process is fully automated, web services can autonomously renew their web certs without operator intervention, allowing significantly shorter cert expiration times (think weeks/months not years).\nACME is becoming a de-facto requirement as browser vendors reduce the maximum allowable cert expiration time to only a few months.\nregistration\n \n #\n \n\n\nBefore requesting any certs, a client needs to register an account <keypair> at the CA.\n\nClient generates an account <keypair> for their account at the CA.\nClient makes register request to CA containing <pubkey> of <keypair>.\nCA responds with proof-of-ownership of <keypair> challenge, which includes a <nonce>.\nClient responds with <nonce> signed using <keypair>.\n\nFor more details, see\nordering / renewing cert\n \n #\n \n\n\n\nIn order to automate web PKI certificate issuance, CAs need clients to prove ownership over a domain name before they're willing to issue a new child cert for the client.\nThese certs are called Domain Validated (DV) certs, since the CA just validates domain ownership before issuing the cert.\n\nAt a high level, the cert ordering process looks like:\n\nClient sends certificate order request for <domain>. The order status is now pending.\nCA responds with a random <token> as a proof-of-ownership challenge for <domain>. Client must bind <token> to <domain> using one of the challenge protocols.\nClient sends to the CA which of the different challenge types it wishes to prove.\n\nChallenge is one of http-01 challenge, dns-01 challenge, tls-alpn-01 challenge.\n\n\nClient and CA perform the challenge protocol. If success, the client's cert order status will transition to ready.\nClient sends a signed Certificate Signing Request (CSR) to the CA in order to finalize the order. The CSR is signed using the account <keypair> registered earlier.\n\nhttp-01 challenge\n \n #\n \n\n\n\nClient listens on http port 80. Public DNS should resolve the <domain> to the client's webserver.\nClient's webserver should respond with <token>.<jwk-thumbprint> for a GET http://<domain>/.well-known/acme-challenge/<token> request.\n\nTODO: what is the <jwk-thumbprint> precisely?\n\n\nOut-of-band, the CA requests the <token> from the client's URL and verifies that it matches the token it originally requested.\n\ndns-01 challenge\n \n #\n \n\n\nTODO\ntls-alpn-01 challenge\n \n #\n \n\n\nTODO\nregistration in detail\n \n #\n \n\n\nA client creates an account at the ACME server by first requesting a new <nonce>:\nHEAD /acme/new-nonce HTTP/1.1\nHost: example.com\n\nThe server returns a response containing a Replay-Nonce header containing the <nonce>:\nHTTP/1.1 200 OK\nReplay-Nonce: oFvnlFP1wIhRlYS2jTaXbA\nCache-Control: no-store\nLink: <https://example.com/acme/directory>;rel=\"index\"\n\nNext, the client sends a JSON POST request to /acme/new-account.\n\nprotected contains a base64url-encoded JWK describing the client's account <pubkey>.\nAll the fields in the payload field are optional.\n\nPOST /acme/new-account HTTP/1.1\nHost: example.com\nContent-Type: application/jose+json\n\n{\n \"protected\": base64url({\n \"alg\": \"ES256\",\n \"jwk\": {...},\n \"nonce\": \"6S8IqOGY7eL2lsGoTZYifg\",\n \"url\": \"https://example.com/acme/new-account\"\n }),\n \"payload\": base64url({\n \"termsOfServiceAgreed\": true,\n \"contact\": [\n\t \"mailto:cert-admin@example.org\",\n\t \"mailto:admin@example.org\"\n ],\n \"onlyReturnExisting\": false,\n \"externalAccountBinding\": {},\n }),\n \"signature\": \"RZPOnYoPs1PhjszF...-nh6X1qtOFPB519I\"\n}\n\nIf successful, the ACME server returns something like the following HTTP response:\nHTTP/1.1 201 Created\nContent-Type: application/json\nReplay-Nonce: D8s4D2mLs8Vn-goWuPQeKA\nLink: <https://example.com/acme/directory>;rel=\"index\"\nLocation: https://example.com/acme/acct/evOfKhNU60wg\n\n{\n \"status\": \"valid\",\n\n \"contact\": [\n \"mailto:cert-admin@example.org\",\n \"mailto:admin@example.org\"\n ],\n\n \"orders\": \"https://example.com/acme/acct/evOfKhNU60wg/orders\"\n}\n\nlinks\n \n #\n \n\n\n\ndiafygi/acme-tiny (Python)\nndilieto/uacme (C)\ngo-acme/lego (Go)\ncertmanager (k8s)\n\n","id":"https://phlip9.com/notes/crypto/acme protocol/","title":"acme protocol"},"https://phlip9.com/notes/crypto/biscuit authz/":{"body":"biscuit authz\n\n\nBiscuit is an authorization token with decentralized verification, offline attenuation and strong security policy enforcement based on a logic language\n\n\nSite: https://www.biscuitsec.org\nRust: https://github.com/biscuit-auth/biscuit-rust\n\noverview\n \n #\n \n\n\n\nTokens are signed with a root ed25519 keypair.\nAny service/client/user that knows the root pubkey can verify the token.\nTokens can be \"attenuated\" (reduce rights/permissions) offline, without re-auth. See: how attenuation works.\nAuthorization policies are written in a Datalog-like language.\nTokens naturally support capability-based auth, role-based auth (RBAC), ACLs, etc... with Datalog.\nTokens have content-based revocation id that can be used to revoke tokens.\nImplemented in Rust, Haskell, Go, Java, Wasm, C\n\nhow attenuation works\n \n #\n \n\n\n\nAttenuating a token is adding a new block with reduced permissions.\nNote: tokens can be \"sealed\" to prevent further attenuation.\nIn an \"unsealed\" token, the last \"proof\" block in a sequence actually contains a private key (bound by the public key placed in the prev. block, plus the previous block's signature).\nAdding a new attentuation block is just removing the \"proof\" block (containing the private key) and replacing it with a fresh block. You then sign the fresh block with the private key you just removed.\n\nPretty pictures:\n\n\nFig. (1) The initial token. This one is just a single top-level \"authority\" block, signed and issued by the root key authority.\n\n\n\nFig. (2) The attenuated token. Notice how private key 1 is no longer present in the token; instead, it was removed and used to sign the next block. This token is still unsealed, so there is now private key 2 available for further attenuation.\n\n","id":"https://phlip9.com/notes/crypto/biscuit authz/","title":"biscuit authz"},"https://phlip9.com/notes/crypto/dex - open-source OIDC & OAuth 2.0 provider/":{"body":"dex - open-source OIDC & OAuth 2.0 provider\n\n\nOpenID Connect (OIDC) identity and OAuth 2.0 provider with pluggable connectors.\nDex acts as a portal to other identity providers through \"connectors.\" This lets dex defer authentication to LDAP servers, SAML providers, or established identity providers like GitHub, Google, and Active Directory. Clients write their authentication logic once to talk to dex, then dex handles the protocols for a given backend.\n\n\nSite: https://dexidp.io/\nGithub: https://github.com/dexidp/dex\n\n","id":"https://phlip9.com/notes/crypto/dex - open-source OIDC & OAuth 2.0 provider/","title":"dex - open-source OIDC & OAuth 2.0 provider"},"https://phlip9.com/notes/crypto/hkdf-sha256/":{"body":"hkdf-sha256\n\n\nHKDF: HMAC-based Key Derivation Function.\nWe'll use a specific hash function (SHA-256) for simplified analysis. You can use any cryptographic hash function, but some constants will need to change to accomodate the different digest block size.\nWhy this page: I keep forgetting perf-relevant details like ideal salt / IKM sizes, or HKDF salt/PRK caching. Seeing all the details laid out flat, with strong types, makes this all clear. As an example, you can save 60-70% on key derivation time if you reuse the intermediate derived Prk when deriving multiple secrets from one common input secret.\n\nusage\n \n #\n \n\n\n// SALT is usually a static, constant value used for domain\n// separation.\n//\n// Using a unique salt for your application improves the security\n// bounds on the HKDF. Intuitively, you get a unique PRF just for\n// your application, rather than a shared PRF used by all the other\n// default-config'ed users of HKDF-SHA256.\n//\n// A constant salt is useful for performance since we can\n// pre-compute the salted `hkdf::Salt` state.\n//\n// I also like to pre-hash the salt, since it guarantees the value\n// is shorter than the hmac `2 * sha256::BLOCKSIZE` key size\n// threshold, which mandates an extra hash if exceeded. If your\n// language supports it, you can even compute this at compile time.\nlet salt: &[u8] = sha256::digest(b\"MY-DOMAIN-SEPARATION-VALUE\");\n\n// IKM is the input secret\nlet ikm: &[u8] = b\"MY-SECRET-KEY-MATERIAL\";\n// For most cases, think of `infos` as a unqiue label for the\n// child-secret. You can also bind higher-level application data\n// like negotiated protocol versions or public keys or other\n// session-specific data here.\nlet infos: &[&[u8]] = &[b\"file key\"];\n// The length of the output secret. Note that there is a maximum\n// output length of `255 * BLOCKSIZE` bytes.\nlet output_secret_len: usize = 32;\n\n// If you just need to derive a few child secrets, just use the\n// one-line convenience method:\nlet secret = hkdf::derive(salt, ikm, infos, output_secret_len);\n\n// Otherwise, at a minimum, consider caching or pre-computing the\n// salted HKDF(s) used in your application.\n//\n// You can then reuse the salted_hkdf multiple times, even with\n// different root secrets (IKMs).\nlet salted_hkdf = hkdf::Salt::new(salt);\nlet secret1 = salted_hkdf\n\t.extract(ikm1)\n\t.expand(infos, secret_len);\nlet secret2 = salted_hkdf\n\t.extract(ikm2)\n\t.expand(infos, secret_len);\n\n// If you use a single input key/secret to derive many child\n// secrets, reuse the extracted PRK instead of rederiving it each\n// time:\nlet prk = salted_hkdf.extract(ikm);\nlet secret1 = prk.expand(&[b\"file key\"] /* infos */, secret_len);\nlet secret2 = prk.expand(&[b\"noise key\"] /* infos */, secret_len);\n\ndefinitions\n \n #\n \n\n\nSHA256\n \n #\n \n\n\nmod sha256 {\n\tconst BLOCK_SIZE: usize = 32;\n\tconst INTERNAL_BLOCK_SIZE: usize = 64;\n\n\t/// A finalized SHA-256 hash digest. 32 bytes. 256 bits.\n\tstruct Hash([u8; BLOCK_SIZE]);\n\n\t/// An intermediate SHA-256 digest state.\n\tstruct Context { /* .. */ }\n\n\timpl Context {\n\t\tfn new() -> Self { /* .. */ }\n\t\tfn update(&mut input: &[u8]) { /* .. */ }\n\t\tfn finish(self) -> sha256::Hash;\n\t}\n\n\t/// A convenience function to easily digest many inputs in\n\t/// one line.\n\tfn digest(inputs: &[&[u8]]) -> sha256::Hash {\n\t\tlet mut ctx = sha256::Context::new();\n\t\tfor input in inputs {\n\t\t\tctx.update(input);\n\t\t}\n\t\tctx.finish()\n\t}\n}\n\nHMAC-SHA256\n \n #\n \n\n\nmod hmac {\n\t/// A keyed HMAC PRF. Normally this would be used to compute\n\t/// MAC tags for message authentication, but HKDFs use this\n\t/// a bit differently.\n\tstruct Context {\n\t\t// IPAD := [0x36; 32]\n\t\t// inner(x) := H(K xor IPAD || x)\n\t\tinner: sha256::Context,\n\t\t// OPAD := [0x5c; 32]\n\t\t// outer(x) := H(K xor OPAD || x)\n\t\touter: sha256::Context,\n\t}\n\n\timpl Context {\n\t\t/// Create a new keyed HMAC context for digesting multiple\n\t\t/// inputs.\n\t\tfn new(key: &[u8]) -> Self {\n\t\t\t// Keys longer than the internal block size (64 bytes)\n\t\t\t// must be pre-hashed to make them smaller.\n\t\t\tlet key_hash: sha256::Hash;\n\t\t\tlet key = if key.len() > 64 {\n\t\t\t\tkey_hash = sha256::digest(&[key]);\n\t\t\t\tkey_hash.0.as_slice()\n\t\t\t} else {\n\t\t\t\tkey\n\t\t\t};\n\n\t\t\t// zero-pad key to the internal block size (64 bytes).\n\t\t\tlet mut padded_key = [0u8; 64];\n\t\t\tpadded_key[..key.len()].copy_from_slice(key);\n\n\t\t\t// ikey := [ key_i ^ 0x36 ]_{i in 0..64}\n\t\t\tlet mut ikey = [0x36_u8; 64];\n\t\t\tfor (ikey_i, key_i) in ikey.iter_mut().zip(&padded_key) {\n\t\t\t\t*ikey_i ^= key_i;\n\t\t\t}\n\n\t\t\t// okey := [ key_i ^ 0x5c ]_{i in 0..64}\n\t\t\tlet mut okey = [0x5c_u8; 64];\n\t\t\tfor (okey_i, key_i) in okey.iter_mut().zip(&padded_key) {\n\t\t\t\t*okey_i ^= key_i;\n\t\t\t}\n\n\t\t\tlet mut hmac_key = Self {\n\t\t\t\tinner: sha256::Context::new(),\n\t\t\t\touter: sha256::Context::new(),\n\t\t\t};\n\n\t\t\thmac_key.inner.update(&ikey);\n\t\t\thmac_key.outer.update(&okey);\n\t\t\thmac_key\n\t\t}\n\n\t\tfn update(&mut self, input: &[u8]) {\n\t\t\tself.inner.update(input);\n\t\t}\n\n\t\tfn finish(mut self) -> sha256::Hash {\n\t\t\tlet inner_output = self.inner.finish();\n\t\t\tself.outer.update(&inner_output);\n\t\t\tself.outer.finish()\n\t\t}\n\t}\n\n\t/// A convenience function for easily HMAC'ing multiple\n\t/// inputs in one line.\n\tfn digest(key: &[u8], inputs: &[&[u8]]) -> sha256::Hash {\n\t\tlet mut ctx = hmac::Context::new(key);\n\t\tfor input in inputs {\n\t\t\tctx.update(input);\n\t\t}\n\t\tctx.sign()\n\t}\n}\n\n\nUseful perf tips:\n\nYou can avoid an extra Hash(key) when doing an HMAC so long as the key is no longer than the internal hash block size (e.g., 64 bytes for SHA-256).\nIf a key is fixed for multiple HMAC invocations, you can compute the hmac::Context once and reuse it for multiple hmac::Context::sign's, avoiding at least 2 hashes and some padding+XORs.\n\n\n\nHKDF-SHA256\n \n #\n \n\n\n\nExtract a PRK (Pseudo-Random Key) from IKM (input key material) and domain separator (called salt).\nExpand a PRK and label or context into secrets of varying sizes.\n\nmod hkdf {\n\t/// A domain-separated (salted) HKDF context ready to expand\n\t/// into an `hkdf::Prk` using some IKM (Input Key Material).\n\t///\n\t/// `Salt` is (relatively) expensive to construct, so it's\n\t/// good to compute once and reuse.\n\t///\n\t/// `Salt` contains an `hmac::Context`, domain-separated by\n\t/// `salt_value`.\n\t///\n\t/// `Salt.0 := HMAC(salt_value, ___)`\n\tstruct Salt(hmac::Context);\n\n\timpl Salt {\n\t\tfn new(salt_value: &[u8]) -> Self {\n\t\t\tSelf(hmac::Context::new(salt_value))\n\t\t}\n\n\t\t/// HKDF-extract a new PRK (keyed HMAC context) from some\n\t\t/// IKM (Input Key Material).\n\t\tfn extract(&self, ikm: &[u8]) -> hkdf::Prk {\n\t\t\tlet mut salt_ctx = self.0.clone();\n\t\t\tsalt_ctx.update(ikm);\n\t\t\tlet prk = salt_ctx.finish().0;\n\t\t\thkdf::Prk(hmac::Context::new(&prk))\n\t\t}\n\t}\n\n\t/// A domain-separated and \"extracted\" Pseudo-Random Key\n\t/// ready to now \"expand\" into many different child secrets\n\t/// of varying lengths.\n\t///\n\t/// `Prk` is (relatively) expensive to construct, so it's\n\t/// good to compute once and reuse.\n\t///\n\t/// `PRK.0 := HMAC(HMAC(salt, ikm), ___)`\n\tstruct Prk(hmac::Context);\n\n\timpl Prk {\n\t\t/// HKDF-expand a new secret of `out_len` bytes from a\n\t\t/// `Prk`, using `infos` for domain separation or\n\t\t/// application specific context.\n\t\t///\n\t\t/// For example, from a single root secret, you might\n\t\t/// derive many subkeys simply by using different `infos`\n\t\t/// labels, like \"cert key\" or \"sealing key\" or \"btc key\n\t\t/// 54\".\n\t\t///\n\t\t/// HKDF-SHA256 has a max output secret limit of\n\t\t/// `255 * 32 == 8160` bytes.\n\t\tfn expand(&self, infos: &[&[u8]], out_len: usize) -> Vec<u8> {\n\t\t\t// N is the number of sha256-block-sized blocks we need\n\t\t\t// to derive in order to cover the desired output length\n\t\t\t// `out_len`.\n\t\t\t//\n\t\t\t// N := ceil(out_len / sha256::BLOCK_SIZE)\n\t\t\t// := (out_len.saturating_sub(1) / sha256::BLOCK_SIZE) + 1\n\t\t\tlet n = (out_len.saturating_sub(1) / 32) + 1;\n\t\t\tlet n = u8::try_from(n).expect(\"out_len is too large\");\n\n\t\t\t// T := T(1) || T(2) || .. || T(N)\n\t\t\t// T(0) := b\"\" (empty byte string)\n\t\t\t// T(i) := hmac::digest(prk, T(i-1) || infos || [ i ])\n\n\t\t\tlet mut out = Vec::with_capacity(len);\n\t\t\t// T(i-1)\n\t\t\tlet mut t_im1 = [0u8; 32];\n\n\t\t\tfor i in 1..=n {\n\t\t\t\t// T(i) := hmac::digest(prk, T(i-1) || infos || [ i ])\n\t\t\t\tlet mut t_i = {\n\t\t\t\t\tlet mut ctx = self.0.clone();\n\t\t\t\t\tif i != 1 {\n\t\t\t\t\t\tctx.update(&t_im1);\n\t\t\t\t\t}\n\t\t\t\t\tfor info in infos {\n\t\t\t\t\t\tctx.update(info);\n\t\t\t\t\t}\n\t\t\t\t\tctx.update(&[i]);\n\t\t\t\t\tctx.finish().0\n\t\t\t\t};\n\t\t\t\tt_im1 = t_i;\n\n\t\t\t\tif i < n {\n\t\t\t\t\tout.extend_from_slice(&t_i[..]);\n\t\t\t\t} else {\n\t\t\t\t\t// the last block will need to be truncated if\n\t\t\t\t\t// `out_len` isn't a multiple of the block size.\n\t\t\t\t\tlet l = 32 - (((n as usize) * 32) - out_len);\n\t\t\t\t\tout.extend_from_slice(&t_i[..l]);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tout\n\t\t}\n\t}\n\n\t/// A convenience function to derive a secret of size `out_len`\n\t/// from `ikm` (Input Key Material)\n\tfn derive(\n\t\tsalt: &[u8],\n\t\tikm: &[u8],\n\t\tinfos: &[&[u8]],\n\t\tout_len: usize,\n\t) -> Vec<u8> {\n\t\tlet salt = hkdf::Salt::new(salt);\n\t\tlet prk = salt.extract(ikm);\n\t\tprk.expand(infos, out_len)\n\t}\n}\n\n\nUseful perf tips:\n\nThe salted HKDF function can be cached. If you find yourself deriving secrets from multiple different IKMs, this trick may be useful.\nThe extracted PRK can be cached. If you find yourself deriving many different secrets from one root secret, this trick may be useful. I've found this trick in particular can save between 60-70% on key derivation time.\n\n\n\nRFCs\n \n #\n \n\n\n\nRFC 2104: HMAC: Keyed-Hashing for Message Authentication\nRFC 5869: HKDF: HMAC-based Extract-and-Expand Key Derivation Function\n\n","id":"https://phlip9.com/notes/crypto/hkdf-sha256/","title":"hkdf-sha256"},"https://phlip9.com/notes/crypto/smallstep - private online CA & ACME server/":{"body":"smallstep - private online CA & ACME server\n\n\nA private certificate authority (X.509 & SSH) & ACME server for secure automated certificate management, so you can use TLS everywhere & SSO for SSH.\n\n\nSite: https://smallstep.com/certificates/index.html\nGithub: https://github.com/smallstep/certificates\n\n","id":"https://phlip9.com/notes/crypto/smallstep - private online CA & ACME server/","title":"smallstep - private online CA & ACME server"},"https://phlip9.com/notes/crypto/tls exported keying material/":{"body":"tls exported keying material\n\nRFC 5705 - Keying Material Exporters for TLS\nwhat\n \n #\n \n\n\nExposes a KDF on the TLS connection shared secret that the client and server agreed upon.\nAPI\n \n #\n \n\n\nrustls::Connection::export_keying_material\nimpl Connection {\n /// Derives key material from the agreed connection secrets.\n ///\n /// This function fills in `output` with `output.len()` bytes of\n /// key material derived from the master session secret using\n /// `label` and `context` for diversification.\n pub fn export_keying_material(\n &self,\n output: &mut [u8],\n label: &[u8],\n context: Option<&[u8]>,\n ) -> Result<(), Error>;\n}\n\n","id":"https://phlip9.com/notes/crypto/tls exported keying material/","title":"tls exported keying material"},"https://phlip9.com/notes/crypto/zkdocs/":{"body":"zkdocs\n\n\nZKDocs provides comprehensive, detailed, and interactive documentation on zero-knowledge proof systems and related primitives.\n\n","id":"https://phlip9.com/notes/crypto/zkdocs/","title":"zkdocs"},"https://phlip9.com/notes/design/":{"body":"","id":"https://phlip9.com/notes/design/","title":"design"},"https://phlip9.com/notes/design/form design/":{"body":"form design\n\nVideo: You Suck at Form Design\n10 Commandments of Form Design\n \n #\n \n\n\n\nAlign form elements.\nPlace labels above inputs. Avoid labels to the left of inputs.\nInput labels must stand out.\nFocused input must stand out.\nHard labels rather than placeholders.\nErrors should go next to exact input.\nInvalid input fields must stand out.\nCramped forms look bad. Use effective whitespace.\nAvoid wordiness. Move extra info to hovers/dropdowns/etc...\nKeep num. fields manageable. Either multi-step or group if too many.\n\nExamples\n \n #\n \n\n\nAlignment\n \n #\n \n\n\nBefore:\n\nThe form inputs are not aligned with the heading.\nThe form labels are to the left, which makes people's eyes zig-zag.\n\n\nAfter:\n\nClear Input Fields\n \n #\n \n\n\nBefore:\n\nThe single colored underline is not enough to show that this is an input field. People might mistake them for page breaks.\n\n\nAfter:\nA subtle background color helps to make form inputs stand out.\n\nClear Input Focus\n \n #\n \n\n\nBefore:\n\nThe currently focused input field does not give any indication that the user is inputting into it.\n\n\nAfter:\nAdd a highlight, underline, background color, etc... to show that this field is focused.\n\nUse separate labels\n \n #\n \n\n\nBefore:\n\nThis input relies on the placeholder to show what the input is for. However, the user might walk away and come back, or just forget what the field is for. Without a separate label that stays untouched, the user can get lost.\n\n\nAfter:\n\nPut placeholders outside inputs\n \n #\n \n\n\nBefore:\n\nWhen the user clicks on the input, the placeholder disappears. If the placeholder is conveying any useful information about e.g. formatting, then just put the placeholder outside the input so the user can always see it.\n\n\nAfter:\n\nErrors go next to inputs\n \n #\n \n\n\nBefore:\n\nAll the errors are just dumped at the top or bottom.\nIt's not clear which fields need to be changed.\n\n\nAfter:\n\nEnsure each error message is as close to the source as possible.\nEnsure the problem fields are properly highlighted red so the user can quickly identify which fields need to change.\n\n\nMinimize words. Move help to hovers/dropdowns.\n \n #\n \n\n\nBefore:\n\nLots of words / explanation / supplemental info below the First Name field.\n\n\nAfter:\n\nMove supplemental info into a hover text or pull-out thing so the actual form is clear.\n\n\nUse effective whitespace\n \n #\n \n\n\nBefore:\n\nInputs and labels are too cramped. Looks awful.\n\n\nAfter:\n\nJust a little bit more whitespace makes things much nicer.\n\n\nAvoid intimidating number of fields\n \n #\n \n\n\nBefore:\n\nToo many fields at once can be intimidating. Users will just give up and go elsewhere.\n\n\nAfter (1):\n\nOne option is to split the form into separate steps, so each step looks manageable.\n\n\nAfter (2):\n\nAnother option is to use some whitespace to group different inputs.\n\n\n","id":"https://phlip9.com/notes/design/form design/","title":"form design"},"https://phlip9.com/notes/devops/":{"body":"","id":"https://phlip9.com/notes/devops/","title":"devops"},"https://phlip9.com/notes/devops/AKS - azure kubernetes service/":{"body":"AKS - azure kubernetes service\n\n\nAzure hosts master nodes.\nAzure provides convenient hooks into other Azure hosted services like metrics & log aggregators, VPC, auth & ACLs, load balancers, persistent volumes, etc...\nKubernetes overhead is FREE (minus network bandwidth) since Azure hosts master nodes. You can also pay more for better uptime SLAs.\n\n","id":"https://phlip9.com/notes/devops/AKS - azure kubernetes service/","title":"AKS - azure kubernetes service"},"https://phlip9.com/notes/devops/algo wireguard VPN server/":{"body":"algo wireguard VPN server\n\nSetup\n \n #\n \n\n\n\n\nCreate DigitalOcean Account https://m.do.co/c/75caca4c0b8e\n\n\nCreate new DigitalOcean API key.\n\nAPI > Personal Access Tokens > Generate New Token.\nName: trailofbits/algo, Read: Y, Write: Y.\nMake sure to save the value somewhere since it'll disappear after leaving the page.\n\n\n\nClone trailofbits/algo\n\n\n$ git clone https://github.com/trailofbits/algo.git\n$ cd algo\n$ git checkout -b 20201126 ebec20ed3\n\n\nInstall algo python deps\n\n$ python3 -m pip install --user --upgrade virtualenv\n$ python3 -m virtualenv --python=\"$(command -v python3)\" .env\n$ source .env/bin/activate\n$ python3 -m pip install -U pip virtualenv\n$ python3 -m pip install -r requirements.txt\n\n\n\nSetup algo/config.cfg\n\nAdd some users [phlipphone, phliptop, phlipdesk, ...].\nDisable IPSEC.\nEnable unattended_reboot.\n\n\n\nDeploy\n\nCloud Provider: DigitalOcean\nName: wg\nCellular On Demand: N\nWifi On Demand: N\nDNS adblocking: y\nSSH tunneling: N\nEnter DigitalOcean API Key.\nRegion: SFO2\n\n\n\nSSH into the droplet\n\n\n$ ssh -F configs/178.128.1.190/ssh_config wg\n\n\n(Optional) Install the DigitalOcean metrics agent\n\n# curl --proto '=https' --tlsv1.2 -sSf https://repos.insights.digitalocean.com/install.sh | sudo bash\n\n\n(Optional) Set up DNS forwarding. Add nameserver (NS) records in domain registrar pointing to digitalocean nameservers.\n\nEx: In registrar, under domain (phlip9.com), add NS records for VPN's subdomain (wg.phlip9.com):\nType Name Value TTL\nNS wg ns1.digitalocean.com 1 Hour\nNS wg ns2.digitalocean.com 1 Hour\nNS wg ns3.digitalocean.com 1 Hour\n\nVerify records have updated (may take a minute):\n$ dig NS +nocmd +nocomments wg.phlip9.com\n\n;wg.phlip9.com. IN NS\nwg.phlip9.com. 1452 IN NS ns1.digitalocean.com.\nwg.phlip9.com. 1452 IN NS ns3.digitalocean.com.\nwg.phlip9.com. 1452 IN NS ns2.digitalocean.com.\n\nIn DigitalOcean, go to Create > Domains/DNS. Enter Domain: wg.phlip9.com.\nAdd Domain.\nCreate New Record: type: A, hostname: @, will direct to: droplet, ttl: 3600.\nCreate New Record: type: AAAA, hostname: @, will direct to: droplet, ttl: 3600.\nVerify records have updated:\n$ dig A +nocmd +nocomments wg.phlip9.com\n\n;wg.phlip9.com. IN A\nwg.phlip9.com. 3600 IN A 178.128.1.190\n\n$ dig AAAA +nocmd +nocomments wg.phlip9.com\n\n;wg.phlip9.com. IN AAAA\nwg.phlip9.com. 3600 IN AAAA 2604:a880:2:d0::21d0:e001\n\nAdding New Users\n \n #\n \n\n\nAdd new users to algo.config.\n$ ./algo update-users\n\nWireguard VPN Clients\n \n #\n \n\n\nmacOS\n \n #\n \n\n\n\n\nInstall Wireguard from App Store\n\n\nImport tunnels from file > algo/configs/178.128.1.190/wireguard/phliptop.conf\n\n\nAndroid\n \n #\n \n\n\n\n\nInstall Wireguard from App Store\n\n\nScan QR code from image > algo/configs/178.128.1.190/wireguard/phlipphone.png\n\n\n","id":"https://phlip9.com/notes/devops/algo wireguard VPN server/","title":"algo wireguard VPN server"},"https://phlip9.com/notes/devops/azure CLI/":{"body":"azure CLI\n\nInitial Setup\n \n #\n \n\n\nSetup an Azure account: https://portal.azure.com.\nInstall the CLI\n \n #\n \n\n\nDebian/Ubuntu/WSL\n \n #\n \n\n\n$ curl -sL https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor | sudo tee /etc/apt/trusted.gpg.d/microsoft.gpg > /dev/null\n\n$ AZ_REPO=$(lsb_release -cs) echo \"deb [arch=amd64] https://packages.microsoft.com/repos/azure-cli/ $AZ_REPO main\" | sudo tee /etc/apt/sources.list.d/azure-cli.list\n\n$ sudo apt update\n$ sudo apt-get install azure-cli\n\nmacOS\n \n #\n \n\n\n$ brew update\n$ brew install azure-cli\n\nCLI Login\n \n #\n \n\n\n$ az login\n\nIf this isn't inside a docker container, you can just run az login, which will open the browser for you. When doing this in WSL2, use az login --use-device-code and open https://microsoft.com/devicelogin separately.\nView available regions\n \n #\n \n\n\n# Pull out the \"name\" field in each object and sort them\n$ az account list-locations \\\n\t--query \"[].name | sort(@)\"\n\n(Optional) Configure default region\n \n #\n \n\n\n$ az configure --defaults location=westus\n\nCreate a resource group\n \n #\n \n\n\n$ az group create \\\n\t--location westus \\\n\t--name az account list-locations --query \"[].name | sort(@)\"\n\n{\n \"id\": \"/subscriptions/XXXXX-XXXX-XXXX-XXXX-XXXXX/resourceGroups/mygroup\",\n \"location\": \"westus\",\n \"managedBy\": null,\n \"name\": \"mygroup\",\n \"properties\": {\n \"provisioningState\": \"Succeeded\"\n },\n \"tags\": null,\n \"type\": \"Microsoft.Resources/resourceGroups\"\n}\n\n(Optional) Configure default resource group\n \n #\n \n\n\n$ az configure --defaults group=mygroup\n\nCreate our VM\n \n #\n \n\n\n\nNote: Azure only supports uploading RSA keys via the CLI (i.e., not Ed25519 or ECDSA). The bit-length must also be at least 2048. Don't worry though, we'll toss our usual Ed25519 pubkeys into the VM in just a sec!\n\n$ az vm create \\\n\t--name myvm \\\n\t--size Standard_DC1s_v3 \\\n\t--image Canonical:0001-com-ubuntu-server-focal:20_04-lts-gen2:latest \\\n\t--authentication-type ssh \\\n\t--ssh-key-values ~/.ssh/id_rsa4096.pub \\\n\t--public-ip-sku Basic \\\n\t--public-ip-address-dns-name \"my-unique-name\" \\\n\t--public-ip-address-allocation Dynamic \\\n\t--storage-sku \"Standard_LRS\"\n\n{\n \"fqdns\": \"my-unique-name.westus.cloudapp.azure.com\",\n \"id\": \"/subscriptions/XXXXX-XXXX-XXXX-XXXX-XXXXX/resourceGroups/mygroup/providers/Microsoft.Compute/virtualMachines/myvm\",\n \"location\": \"westus\",\n \"macAddress\": \"XX-XX-XX-XX-XX-XX\",\n \"powerState\": \"VM running\",\n \"privateIpAddress\": \"10.0.0.4\",\n \"publicIpAddress\": \"XX.XX.XX.XX\",\n \"resourceGroup\": \"mygroup\",\n \"zones\": \"\"\n}\n\nLet's quickly confirm that the DNS name resolves correctly:\n$ dig +short A my-unique-name.westus.cloudapp.azure.com\nXX.XX.XX.XX\n\nThen let's make sure we can at least SSH into the VM:\n$ ssh -i ~/.ssh/id_rsa4096 my-unique-name.westus.cloudapp.azure.com\n\nWe can also dump all of our github pubkeys into the VM, so we don't need the -i arg anymore : )\n$ ssh -i ~/.ssh/id_rsa4096 \\\n\tmy-unique-name.westus.cloudapp.azure.com \\\n\t\"curl \\\"https://github.com/phlip9.keys\\\" >> ~/.ssh/authorized_keys\"\n\n(FIXUP) Create a public IPv4+IPv6 addr + DNS record\n \n #\n \n\n\n\nNote: the dns-name label must be unique across all customers in a region!\nThe final DNS name will look like <dns-name>.<location>.cloudapp.azure.com.\n\nSee: Azure Docs - virtual network public IP\nSee: Azure - public IP address pricing\n# Create the IPv4 address\n$ az network public-ip create \\\n\t--name \"mygroup-ip\" \\\n\t--allocation-method Dynamic \\\n\t--dns-name \"my-unique-name\" \\\n\t--sku Basic \\\n\t--version IPv4\n\n# Create the IPv6 address\n$ az network public-ip create \\\n\t--name \"mygroup-ip\" \\\n\t--allocation-method Dynamic \\\n\t--dns-name \"my-unique-name\" \\\n\t--sku Basic \\\n\t--version IPv6\n\n{\n \"publicIp\": {\n \"ddosSettings\": null,\n \"deleteOption\": null,\n \"dnsSettings\": {\n \"domainNameLabel\": \"my-unique-name\",\n \"fqdn\": \"my-unique-name.westus.cloudapp.azure.com\",\n \"reverseFqdn\": null\n },\n \"etag\": \"W/\\\"XXXXXX-XXXX-XXXX-XXXX-XXXXXX\\\"\",\n \"extendedLocation\": null,\n \"id\": \"/subscriptions/XXXXXX-XXXX-XXXX-XXXX-XXXXXX/resourceGroups/mygroup/providers/Microsoft.Network/publicIPAddresses/mygroup-ip\",\n \"idleTimeoutInMinutes\": 4,\n \"ipAddress\": null,\n \"ipConfiguration\": null,\n \"ipTags\": [],\n \"linkedPublicIpAddress\": null,\n \"location\": \"westus\",\n \"migrationPhase\": null,\n \"name\": \"mygroup-ip\",\n \"natGateway\": null,\n \"provisioningState\": \"Succeeded\",\n \"publicIpAddressVersion\": \"IPv6\",\n \"publicIpAllocationMethod\": \"Dynamic\",\n \"publicIpPrefix\": null,\n \"resourceGroup\": \"sgxdev\",\n \"resourceGuid\": \"XXXXXX-XXXX-XXXX-XXXX-XXXXXX\",\n \"servicePublicIpAddress\": null,\n \"sku\": {\n \"name\": \"Basic\",\n \"tier\": \"Regional\"\n },\n \"tags\": null,\n \"type\": \"Microsoft.Network/publicIPAddresses\",\n \"zones\": null\n }\n}\n\n","id":"https://phlip9.com/notes/devops/azure CLI/","title":"azure CLI"},"https://phlip9.com/notes/devops/consul/":{"body":"consul\n\nSite: https://www.consul.io/\n\nConsul is a service mesh.\nService Discovery: services can register themselves with Consul, like api or mysql. Other services can discover providers by querying Consul.\nHealth Checking: Consul clients can provide simple health checks like HTTP 200 OK or platform metrics like memory or CPU utilization below 90%. These health checks can then be used by the service discovery and service routing to route around unhealthy nodes.\nKV Store: Consul provides a centralized KV store, which can be used for dynamic configuration, feature flags, coordination, leader election, etc...\nSecure Service Communication: Consul can generate and distribute TLS certs to each service to establish mTLS connections with other cluster services. Services can be segmented dynamically to allow only specific services to communicate.\nMulti Datacenter: Consul supports multiple regions / data centers.\nDistributed, highly available system.\nMaintains centralized Registry of services in cluster.\nMaintains centralized KV Store.\nEach service has a sidecar which transparently proxies all inbound and outbound requests.\nConfigures each service with TLS certificates from our cluster CA. Services connect to each other through sidecar proxies, which do mTLS to guarantee authentication and integrity within the cluster.\nMaintain service dependency graph.\n\n","id":"https://phlip9.com/notes/devops/consul/","title":"consul"},"https://phlip9.com/notes/devops/deployment strategies/":{"body":"deployment strategies\n\nBlog: https://harness.io/blog/continuous-verification/blue-green-canary-deployment-strategies/\nOutage Deploy\n \n #\n \n\n\n\nShut down all v1 nodes\nDeploy/provision v2 nodes\n\nPros:\n\nDumbest and simplest approach\n\nCons:\n\nRisky\nMandatory outage period\nExtended outage if there's a bug in v2 nodes that needs to rollback\n\nConcurrent Deploy\n \n #\n \n\n\n\nConcurrently reprovision all v1 nodes to v2 nodes\n\nPros:\n\nDumb and simple\n(Hopefully) no downtime : )\n\nCons:\n\nRisky\nMultiple versions exist at the same time for a short period (potential fun bugs).\nService API changes must be backwards compatible.\nExtended outage if there's a bug in v2 nodes that needs to rollback\n\nRolling Deploy\n \n #\n \n\n\n\nIncrementally roll out new version to $n$ nodes, then $2n$ nodes, ..., until all $N$ nodes updated.\n\nAt each step, you verify whether the new deployment is healthy. If not, you rollback\n\n\nIf you need a rollback, then you just take the subset of newer version nodes and reprovision them with the older version.\n\nPros:\n\nLess-risky than previous strategies\nNo downtime\n\nCons:\n\nMultiple versions exist at the same time for a short period (potential fun bugs).\nService API changes must be backwards compatible.\nNeed well-automated deployment verification\n\nBlue-Green Deploy\n \n #\n \n\n\nBlog: https://martinfowler.com/bliki/BlueGreenDeployment.html\n\nUses two (ideally) identical environments: (1) \"staging\" (blue) and (2) \"production\" (green).\nRollout upgrade to staging.\nCheck that staging metrics are good.\nThen switch over user traffic from production to staging. Then the environment labels swap, so previously staging -> production and previously production -> staging.\nIf you need to rollback (after switching and before next deploy), you can just switch back to the (now staging) previous production environment.\n\nPros:\n\nRelatively simple and fast\nLow risk\nNo downtime\n\nCons:\n\nDouble the cost, since you need TWO production-ready environments\nShifting traffic can have subtle race conditions or lost transactions.\n\nCanary Deploy\n \n #\n \n\n\n\nRollout deploy to subsets of production users / traffic.\nFor example, deploy to 1% US users, 50% US users, 100% US users, then 100% Global users.\n\nPros:\n\nTest code in production with real users and real traffic.\nCheaper than Blue-Green\nLow risk\nFast and easy rollback\nNo downtime\n\nCons:\n\nTesting in production\nHigh scripting complexity\nService API changes must be backwards compatible.\nNeed well-automated deployment verification\n\nA/B Testing\n \n #\n \n\n\n","id":"https://phlip9.com/notes/devops/deployment strategies/","title":"deployment strategies"},"https://phlip9.com/notes/devops/docker compose/":{"body":"docker compose\n\nDocs: https://docs.docker.com/compose/\nWhat\n \n #\n \n\n\nCompose multiple Docker containers.\n\nTool for defining and running multi-container Docker apps and services.\nDeclarative YAML file describes all services, what stuff they expose, and which services they connect to.\nManage full lifecycle of application (1) start, stop, rebuild, (2) view status, (3) stream logs, (4) run ad-hoc commands.\n\nUse Cases\n \n #\n \n\n\n\nLocal dev environment. If you have a big complex microservice app, you can describe it with docker compose and run it locally.\nAutomated CI/CD test suite. Easily spin up your application, run integration tests, and spin down in an isolated CI-friendly environment.\nSingle host deployment. First two are primary use cases, but docker compose also supports production single-host deployments.\n\n","id":"https://phlip9.com/notes/devops/docker compose/","title":"docker compose"},"https://phlip9.com/notes/devops/k3s/":{"body":"k3s\n\nDocs: https://rancher.com/docs/k3s/latest/en/\n\nLightweight Kubernetes\ndesigned for production workloads in unattended, resource-constrained, remote locations or inside IoT appliances\nSingle binary, <50MB, supports ARM.\nLightweight SQLite storage backend by default.\n\"Minimal\" dependencies (comparing a trash fire with a forest fire haha)\n\n\n","id":"https://phlip9.com/notes/devops/k3s/","title":"k3s"},"https://phlip9.com/notes/devops/kind (kubernetes in docker)/":{"body":"kind (kubernetes in docker)\n\n\nSite: https://kind.sigs.k8s.io/\nGithub: https://github.com/kubernetes-sigs/kind\n\nkind is a tool for running local Kubernetes clusters using Docker container “nodes”. kind was primarily designed for testing Kubernetes itself, but may be used for local development or CI.\n","id":"https://phlip9.com/notes/devops/kind (kubernetes in docker)/","title":"kind (kubernetes in docker)"},"https://phlip9.com/notes/devops/kubernetes/":{"body":"kubernetes\n\nLinks\n \n #\n \n\n\n\n2022/03 - Kubernetes Hardening Guide - NSA / CIA\n2022/07 - Falling for Kubernetes\nk9s - ncurses k8s cli\n\n","id":"https://phlip9.com/notes/devops/kubernetes/","title":"kubernetes"},"https://phlip9.com/notes/devops/linkerd/":{"body":"linkerd\n\nSite: https://linkerd.io/\nDocs: https://linkerd.io/2.11/overview/\n\nLinkerd is a service mesh for kubernetes.\nProxies all inbound and outbound communication for every pod.\nAdds security, observability, and reliability features to every pod transparently.\nAdd Linkerd to get instant\n\nAPI health metrics (request rate, success rate, error rate, latency, volume, etc...) without changing application code.\nReliability features (latency-aware load balancing, request retries, timeouts, blue-green deploys).\nService routing (deployment-aware routing, locality-aware routing, etc...)\n\n\n\"Minimalist\" design\nTheir core \"micro-proxy\" uses Rust : )\n\n","id":"https://phlip9.com/notes/devops/linkerd/","title":"linkerd"},"https://phlip9.com/notes/devops/minikube/":{"body":"minikube\n\nDocs: https://minikube.sigs.k8s.io/\n\nsmall Kubernetes distribution\nrun Kubernetes locally\nuse all the standard kubectl commands\ncan effectively replace docker/docker desktop\nsingle binary\n\n","id":"https://phlip9.com/notes/devops/minikube/","title":"minikube"},"https://phlip9.com/notes/devops/nomad/":{"body":"nomad\n\nSite: https://www.nomadproject.io/\nDocs: https://www.nomadproject.io/docs\n\n\"Workload\" scheduler and orchestrator\nSupports container, VM, raw forked binary, or custom \"driver\" workloads.\nDevs declaratively specify workloads as Job file, which describes different services, versions, ports, dependencies, etc...\nNomad looks at current desired set of jobs and tries to make reality match desired jobs.\nNomad schedules workloads across available hardware. It restarts jobs that have crashed. It migrates jobs from failed machines.\nIt allows you to specify version upgrade rollout strategy.\nDevelopers consume infrastructure via APIs. Nomad provides these \"northbound\" APIs.\nOps manages infrastructure via APIs. Nomad provides these \"southbound\" APIs.\nCustom Driver Plugins (how to run and manage a task)\nCustom Device Plugins (custom resources that can be exposed). Could be useful for SGX maybe?\n\nExample\n \n #\n \n\n\nCircleCI\n \n #\n \n\n\n\nCircleCI uses Nomad as a Job Queue\nNew commits from customers triggers an event\nThis commit event is then submitted to Nomad as a Job (to test their code or w/e).\nNomad can act like a Job queue and buffer Jobs until there is available capacity in the fleet. For example, CircleCI might get 2k+ jobs/min but only have 1k jobs/min hardware capacity during peak hours. Nomad will correctly buffer jobs until there is capacity.\n\nCitadel\n \n #\n \n\n\n\nCitadel cares about how quickly, in absolute time, they can compute some job, rather than the total cost / number of cores / etc...\nTheir issue is: how many containers can we run in a short period of time?\nNeed to support bursty workloads (analysts want to run big models as quickly as possible).\nNeed to work across existing DCs and \"burst\" to cloud on-demand.\nWant to run 40M containers in a short period.\n2017 talk mentions 3k+ containers scheduled / sec.\nrelated blog post:\n\nHashiCorp Nomad scheduled 2,000,000 Docker containers on 6,100 hosts in 10 AWS regions in 22 minutes.\n1.5k containers/sec\nhttps://www.hashicorp.com/c2m\n\n\n\n","id":"https://phlip9.com/notes/devops/nomad/","title":"nomad"},"https://phlip9.com/notes/devops/o11y/":{"body":"","id":"https://phlip9.com/notes/devops/o11y/","title":"devops/o11y"},"https://phlip9.com/notes/devops/o11y/jaeger oss e2e tracing/":{"body":"jaeger oss e2e tracing\n\nSite: https://www.jaegertracing.io/\nRelevant crate: https://github.com/MystenLabs/mysten-infra/tree/main/telemetry_subscribers\n","id":"https://phlip9.com/notes/devops/o11y/jaeger oss e2e tracing/","title":"jaeger oss e2e tracing"},"https://phlip9.com/notes/devops/secrets/":{"body":"","id":"https://phlip9.com/notes/devops/secrets/","title":"devops/secrets"},"https://phlip9.com/notes/devops/secrets/1password - secrets automation/":{"body":"1password - secrets automation\n\n\nSecure, orchestrate, and manage your company’s infrastructure secrets with 1Password Secrets Automation.\n\n\nSite: https://1password.com/products/secrets/\nDocs: https://developer.1password.com/docs/connect\nSDK (Go): https://github.com/1Password/connect-sdk-go\n\n\n\nConnect server appears to be closed source?\n\npricing (2022/08)\n \n #\n \n\n\n\nTiers are assigned daily, after analyzing credit usage for that day. Billing occurs monthly, as the sum of the price of each daily tier assigned during the previous month.\n\n\nScripts, services, and other entities need a token to access vaults, where secrets are stored. Each credit grants a token access to a vault. Using multiple credits across multiple tokens ensures the proper application of the Principle of Least Privilege.\n\nup to # access creditsprice\n3$0/mo\n25$30/mo\n100$100/mo\n500$300/mo\n\n","id":"https://phlip9.com/notes/devops/secrets/1password - secrets automation/","title":"1password - secrets automation"},"https://phlip9.com/notes/devops/secrets/doppler/":{"body":"doppler\n\n\nSync env vars at scale\n\n\nSite: https://www.doppler.com/\n\nSome closed-source hosted solution.\n","id":"https://phlip9.com/notes/devops/secrets/doppler/","title":"doppler"},"https://phlip9.com/notes/devops/secrets/ejson (Shopify)/":{"body":"ejson (Shopify)\n\n\nEJSON is a small library to manage encrypted secrets using asymmetric encryption.\n\n\nGithub: https://github.com/Shopify/ejson\nRelated: https://github.com/Shopify/ejson2env\nSimilar: ejson-kms (AWS), mozilla SOPS, sy - share secrets safely\n\nThe main benefits provided by ejson are:\n\nSecrets can be safely stored in a git repo.\nChanges to secrets are auditable on a line-by-line basis with git blame.\nAnyone with git commit access has access to write new secrets.\nDecryption access can easily be locked down to production servers only.\nSecrets change synchronously with application source (as opposed to secrets provisioned by Configuration Management).\nSimple, well-tested, easily-auditable source.\n\n","id":"https://phlip9.com/notes/devops/secrets/ejson (Shopify)/","title":"ejson (Shopify)"},"https://phlip9.com/notes/devops/secrets/ejson-kms (AWS)/":{"body":"ejson-kms (AWS)\n\n\nA utility for managing a collection of secrets in source control using AWS KMS.\nThe secrets are encrypted using secret-key cryptography (NaCl Secretbox: XSalsa20 + Poly1305), using key wrapping with a master key stored on HSM-backed storage at AWS. Encrypted secrets are stored in a JSON file that can easily be shared and versioned.\n\n\nGithub: https://github.com/adrienkohlbecker/ejson-kms\nSimilar: ejson (Shopify), mozilla SOPS\n\nsecret encryption\n \n #\n \n\n\n\nFor each secret, a data key is requested from AWS KMS (see GenerateDataKey).\nThe encryption context is sent along and is stored alongside the encrypted data key. The name of the secret is added to the context automatically under the key Secret\nKMS returns the data key encrypted with the master key (stored on AWS servers) and the corresponding plaintext.\nThat data key is used to encrypt one secret.\nA random nonce is generated and NaCL Secretbox is used for encryption.\nUnder the hood, Secretbox uses XSalsa20 and Poly1305 to encrypt and authenticate messages. The length of messages is not hidden.\nFinally, the encrypted data key, the random nonce and the encrypted secret are each stored in the JSON file.\n\nsecret decryption\n \n #\n \n\n\n\nFor each secret, the encrypted data key, random nonce and encrypted secret are extracted from the JSON file.\nA request is made to AWS KMS to decrypt the encrypted data key (see Decrypt).\nAt this stage the encryption context is authenticated and logged. The name of the secret is added to the context automatically under the key Secret\nUsing the key plaintext and random nonce, the secret is decrypted using NaCL Secretbox.\n\n","id":"https://phlip9.com/notes/devops/secrets/ejson-kms (AWS)/","title":"ejson-kms (AWS)"},"https://phlip9.com/notes/devops/secrets/envkey/":{"body":"envkey\n\n\nMagical secure app config\n\ne2e encryption for API keys and other secrets\nlive reload for env vars\nstop config sprawl and sloppy secrets mgmt\nprevent config bugs\nsave time\n\n\nGithub: https://github.com/envkey/envkey\n\nHas open source \"community\" version\n\n","id":"https://phlip9.com/notes/devops/secrets/envkey/","title":"envkey"},"https://phlip9.com/notes/devops/secrets/fortanix DSM/":{"body":"fortanix DSM\n\n\nSite: https://www.fortanix.com/products/data-security-manager/key-management-service\nRust SDK: https://github.com/fortanix/sdkms-client-rust\nREST API: https://www.fortanix.com/fortanix-restful-api-references/dsm\n\n","id":"https://phlip9.com/notes/devops/secrets/fortanix DSM/","title":"fortanix DSM"},"https://phlip9.com/notes/devops/secrets/mozilla SOPS/":{"body":"mozilla SOPS\n\n\nSimple and flexible tool for managing secrets\n\n\nGithub: https://github.com/mozilla/sops\nSimilar: ejson-kms (AWS), ejson (Shopify), sy - share secrets safely\n\noverview\n \n #\n \n\n\n\nStore encrypted credentials in an ops git repo\nDevOps manually \"provisions\" secrets by updating per-service encrypted credentials files\nCredentials files are encrypted with a key also stored in e.g. Azure KMS (per-service creds encrypted w/ key only viewable by that service in Azure KMS?)\nWhen service gets provisioned, on startup its credentials decryption key is pulled from KMS and the credentials are decrypted\n\n","id":"https://phlip9.com/notes/devops/secrets/mozilla SOPS/","title":"mozilla SOPS"},"https://phlip9.com/notes/devops/secrets/sops-nix/":{"body":"sops-nix\n\n\nAtomic secret provisioning for NixOS based on mozilla SOPS\n\n\nGithub: https://github.com/Mic92/sops-nix\n\n","id":"https://phlip9.com/notes/devops/secrets/sops-nix/","title":"sops-nix"},"https://phlip9.com/notes/devops/secrets/sy - share secrets safely/":{"body":"sy - share secrets safely\n\n\n\nVault file stored in git repo.\nDepends on gpg installed. GPGME (GPG Made Easy).\nEncrypt secrets to a subset of your team members and tooling.\n\n\n\nGithub: https://github.com/share-secrets-safely/cli\nSimilar: ejson-kms (AWS), ejson (Shopify), mozilla SOPS\n\n","id":"https://phlip9.com/notes/devops/secrets/sy - share secrets safely/","title":"sy - share secrets safely"},"https://phlip9.com/notes/devops/service mesh/":{"body":"service mesh\n\nBlog: https://linkerd.io/what-is-a-service-mesh/\nA service mesh like linkerd is a tool for adding observability, security, and reliability features to “cloud native” applications by transparently inserting this functionality at the platform layer rather than the application layer.\n\nDeployed as a sidecar alongside application in each pod.\nTransparently proxies all inbound and outbound requests to the application container.\nThe proxies comprise the service mesh's data plane.\nThe proxies are configured and controlled by the control plane.\n\nPros:\n+ Reduce complexity in application code.\n+ Migrate common features needed by all your applications into the common service mesh layer.\n+ Get useful features \"for free\" just by integrating a service mesh.\nCons:\n\nAdded overhead from service mesh proxying all inbound and outbound requests.\nPotentially added overall complexity by adding another moving part that needs its own configuration, monitoring, etc...\n\nTrace a request through Linkerd\n \n #\n \n\n\n\nService Routing: Linkerd applies dynamic routing rules to determine which destination the requester actually intended.\n\nShould the call be routed to service on the local cluster? a remote cluster? the current service version? the canary service? failover? etc...\n\n\nOf the available destination services in (1.), do client-side load balancing to choose the \"best\" one (by factoring together various health metrics).'\nManage connection pools to each service. New connections must go through mTLS (mutual auth) handshake.\nRecord request latency and error metrics for each service as we send them requests.\nExpose recorded service and request metrics for collection to a central aggregator.\n\nRelated FB projects\n \n #\n \n\n\n\nProxygen\nServiceRouter\n\n","id":"https://phlip9.com/notes/devops/service mesh/","title":"service mesh"},"https://phlip9.com/notes/distributed systems/":{"body":"","id":"https://phlip9.com/notes/distributed systems/","title":"distributed systems"},"https://phlip9.com/notes/distributed systems/papers/":{"body":"","id":"https://phlip9.com/notes/distributed systems/papers/","title":"distributed systems/papers"},"https://phlip9.com/notes/distributed systems/papers/(2020) Semi-Fast Byzantine-tolerant Shared Register without Reliable Broadcast/":{"body":"(2020) Semi-Fast Byzantine-tolerant Shared Register without Reliable Broadcast\n\n\nAuthors: Kishori Konwar (MIT), Sapta Kumar (BC), Lewis Tseng (BC)\nPaper: https://par.nsf.gov/servlets/purl/10176146\nVideo: https://www.youtube.com/watch?v=IFeBDlVuLdw\n\nproperties\n \n #\n \n\n\n\nBFT shared register w/o reliable broadcast\nleaderless\nunauthenticated: doesn't require digital signatures\nno reconfiguration\none-shot read: read from at least f+1\ntwo-RTT write: (1) do read from f+1, then (2) send store request to all servers.\n\ncore algorithm\n \n #\n \n\n\n\nStore an (unauthenticated) tag version counter next to the register.\nClient Writing:\n\n(1) request current tag version from all servers\n(2) determine the current honest tag $t$ to be the $(f + 1)$-th highest tag version.\n\nremember that the register is unauthenticated, so byzantine servers can just return any tag version.\n\n\n(3) send a store request with tag version $t + 1$\n\n\nClient Reading:\n\n(1) Request the current register state from all servers\n(2) Return the value with the highest tag that was witnessed by at least $f + 1$ servers.\n\n\n\nclient\n \n #\n \n\n\nclient-write(S: Servers, w: Writer, v: Value):\n\t1. try to get the current tag for the register, t := client-get-tag(S, w)\n\t2. try to update the register, client-put-data(S, w, t, v)\n\nclient-get-tag(S: Servers, w: Writer):\n\t1. send Query-Tag(w) message to servers in S\n\t2. wait for Query-Tag-Response(t, w) messages from (n - f) servers in S\n\t3. return t := (f + 1)-th highest tag among responses\n\nclient-put-data(S: Servers, w: Writer, t: Tag, v: Value):\n\t1. create new tag, t' := t + 1\n\t2. send Put-Data(w, t', v) to servers in S\n\t3. wait for ACKs from (n - f) servers in S\n\ninitial local client reader state:\n\tt_local := 0,\n\tv_local := v_0\n\nclient-read(S: Server, r: Reader, t: Tag):\n\t1. send Query-Data(r) to servers in S\n\t2. wait for Query-Data-Response(r, t, v) messages from (n - f) servers in S\n\t3. W := set of all (r, t, v) tuples with >= f + 1 witnesses\n\t4. select tuple (t, v) from witnesses W with highest tag\n\t5. if W != {} && t > t_local, then ratchet the local state tag\n\t6. (t_local, v_local) := (t, v)\n\t7. return v_local\n\nserver\n \n #\n \n\n\ninitial local server state (per reader/writer register):\n\tt_max := 0\n\tv_max := v_0\n\nserver(Query-Tag(w: Writer)):\n\t1. return Query-Tag-Response(t_max, w)\n\nserver(Put-Data(w: Writer, t: Tag, v: Value)):\n\t1. if t > t_max, then ratchet local register value and ACK:\n\t2. t_max := t\n\t3. v_max := v\n\t4. send ACK response to w\n\nserver(Query-Data(r: Reader)):\n\t1. return Query-Data-Response(t_max, v_max) for Reader r\n\n","id":"https://phlip9.com/notes/distributed systems/papers/(2020) Semi-Fast Byzantine-tolerant Shared Register without Reliable Broadcast/","title":"(2020) Semi-Fast Byzantine-tolerant Shared Register without Reliable Broadcast"},"https://phlip9.com/notes/distributed systems/papers/(2021) Leaderless Consensus/":{"body":"(2021) Leaderless Consensus\n\n\nAuthors: EPFL: Karolos Antoniadis, Antoine Desjardins, Vincent Gramoli, Rachid Guerraoui, Igor Zablotchi\nPaper: https://infoscience.epfl.ch/record/282657/files/LeaderlessConsensusTechRep.pdf\nVideo: https://www.youtube.com/watch?v=gPrdhebjTM0\n\nproperties\n \n #\n \n\n\n\nleaderless\nalg. v3 provides BFT authenticated and unauthenticated versions\ntime: O(n), optimal\nresilience: k < 3f + 1\nbits exchanged: O(n^4), same as PBFT\nmessages exchanged: O(n^4), not optimal\noptimistic termination: 2 rounds, optimal\n\nintuition\n \n #\n \n\n\nEach \"round\", a process broadcasts his max x and observes everyone else's max x. If there are disagreements, a process \"adopts\" a new x = max(x_i) for x_i just observed. Otherwise, if everyone agrees, then commit the x.\ninputs: [x_1, .., x_n]\n\nwhile true:\n\tif contention:\n\t\tadopt max(x_1, .., x_n))\n\telse if x_1 == .. == x_n:\n\t\tcommit x\n\n","id":"https://phlip9.com/notes/distributed systems/papers/(2021) Leaderless Consensus/","title":"(2021) Leaderless Consensus"},"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"body":"the siren song of backpressure\n\nThe Pieces\n \n #\n \n\n\nWe have three major components that compose an async system: (1) Actors, which contain (2) Event Loops, which communicate with other Actors using (3) Channels.\nBackpressure\n \n #\n \n\n\nBackpressure in the real world is like a plumbing pipe. When the pipe is full, it admits no more water and the pipe \"exerts backpressure\" on its inputs (who will now start filling up because they can't push their water forward to their outputs). All the water sent into the pipe eventually ends up at the output.\nBackpressure is compositional: a series of simple pipes hooked end-to-end itself exerts backpressure. We can break the total system backpressure with a leaky pipe in the middle, which loses some of the water.\nIn systems terms, a pipe is a bounded FIFO queue.\nThe Allure of Backpressure\n \n #\n \n\n\nA system designed with all parts exerting backpressure promises: \"use these simple tricks and your system will degrade gracefully under load! Lose no messages! Never OOM!\"\nA local system that fully exerts backpressure end-to-end provides a natural mechanism for propagating that backpressure to remote peers via TCP connections.\nIf an internal component is at capacity, it will eventually propagate to our local TCP connections for each peer, which will actually propagate to each remote peer's TCP socket. In other words, when we're under load, the system will naturally stop accepting new requests off the socket.\nIn the beginning, most advice looks like \"Every queue should have a maximum size. Queues must not grow unbounded.\"\nThe average async fan replaces all their unbounded channels with bounded channels and thinks they're done.\nThe average async enjoyer ...\nDeadlocks\n \n #\n \n\n\nProblems start to arise when loop branches or handlers need to await on some shared and limited resource, particularly when the system is under load. These resources are most often\n\nenqueueing messages on mpsc (multi-producer, single-consumer) bounded channels (for communication b/w actors)\nacquiring permits from concurrency limiting semaphores (to limit concurrent requests or spawned tasks)\nsending messages on a socket.\n\nWhen there's a wait cycle (e.g. task A waits on task B waits on task C waits on task A), the system deadlocks. Especially problematic is that deadlock issues tend to only crop up non-deterministically when the system is under load and the bounded queues start hitting capacity.\nIf your queue sizes are large and you're not running load tests, these problems will manifest in production at 3 am during your on-call shift.\nTrying to handle backpressure properly is difficult. It's not that hard to just throw bounded queues everywhere and pray, but this is not sufficient in my experience.\nIn fact, many systems decide to completely eschew handling backpressure internally. Erlang actors communicate exclusively using unbounded channels. Erlang also doesn't bound spawned tasks (until the process crashes or OOMs of course :)).\nThis approach almost completely avoids deadlocks at the cost of other problems like unbounded resource usage and exploding tail latencies when the system is under load. The request latency is the real killer; the system becomes unusable when all requests start timing out as the mean request service time exceeds the mean timeout.\nIn this sort of system, a typical approach is to bound external requests \"at the edges\" with the expectation that internal load will remain proportionally bounded. This could mean setting external request rate limits and total in-flight request limits at your loadbalancers, hoping that \"internal\" system utilization remains nominal.\nThe \"ideal\" way to avoid deadlocks with bounded channels is to design your system topology so there can never be wait cycles, i.e., all Actor communication follows a directed acyclic graph (DAG). Every node in this graph is an async event loop. Every directed edge in this graph is a bounded FIFO queue that starts from an mpsc::Sender and ends at an mpsc::Receiver. In a more perfect world, the Diem topology would be a DAG like:\nflowchart LR;\n I[Inbound Network Messages] --> M & C & S;\n\n\tC[Consensus] --> S & M & O;\n\n\tS[State Sync] --> M & O;\n\n\tM[Shared Mempool] --> O;\n\n\tO[Outbound Network Messages];\n\nUnfortunately, the current system grew organically and currently looks something like (heavily simplified):\nflowchart LR;\n\tO[Sockets x N] --> P;\n\n\tP[Peers x N] --> O & N;\n\n N[Peer Manager] --> P & C & S & M;\n\n\tM[Shared Mempool] --> N;\n\n\tC[Consensus] --> S & M & N;\n\n\tS[State Sync] --> C & M & N;\n\nWait a second. Didn't we just advise against cycles? How do you avoid deadlocks??\nHere's a dirty little secret... Diem doesn't actually use bounded FIFO queues in most cases.\nThere's a lossy multi-queue implementation called diem_channel (very creative name, I know) which, if you squint a bit, looks like an Arc<Mutex<HashMap<K, VecDeque<V>>>> . Their most common use is actually to provide fairness and quality-of-service across multiple peers and application protocols (Consensus, State Sync, Shared Mempool). It's like each PeerId x ProtocolId pair gets its own exclusive mini-queue separate from the others. The receiver round-robins across all the mini-queues (to provide fairness) when dequeue'ing. If one peer starts sending our node lots of messages, their queue will fill up, but also leaves the others unaffected.\nThese diem_channels are used in almost all of the edges above. These queues actually drop messages when at capacity, according to an eviction policy.\nMore generally, dropping messages is the other alternative to backpressure: you can't deadlock if you never block! Dropping messages has a price, however: protocols are more difficult to develop since they need to be robust against messages dropping at any time.\nThe Diem Consensus protocol even uses size=1 LIFO message \"slots\" for each peer, since the protocol only cares about the absolute most recent message (when optimized for min latency).\nNote that without backpressure, you don't have an obvious way to tell a peer to \"backoff\" and stop sending you messages when your system is under load. You must provide your own rate limits or ad-hoc protocol backoff messages.\nIt might not surprise you that distributed systems are not simple, and backpressure is not an exception. If there's anything you should take away from this article, it's that simple rules like \"bounded FIFO queues everywhere\" are just heuristics that should be followed with intention and understanding of the tradeoffs involved.\n","id":"https://phlip9.com/notes/distributed systems/the siren song of backpressure/","title":"the siren song of backpressure"},"https://phlip9.com/notes/fuzzing/":{"body":"","id":"https://phlip9.com/notes/fuzzing/","title":"fuzzing"},"https://phlip9.com/notes/fuzzing/bolero - fuzzing + property testing/":{"body":"bolero - fuzzing + property testing\n\nCrate: https://crates.io/crates/bolero\n\nLooks like what we were trying to do at Diem (integrate property testing and fuzzing).\nReplaces proptest.\nHooks into fuzzing engines and supports mutation-based fuzzing.\n\nhttps://camshaft.github.io/bolero/introduction.html\nhttps://camshaft.github.io/bolero/tutorials/fibonacci.html#test-oracle\n","id":"https://phlip9.com/notes/fuzzing/bolero - fuzzing + property testing/","title":"bolero - fuzzing + property testing"},"https://phlip9.com/notes/fuzzing/fuzzcheck-rs/":{"body":"fuzzcheck-rs\n\nCoverage-guided, in-process, structure-aware, mutation-based fuzzing without the intermediate raw bytes serde step.\n\nGithub: https://github.com/loiclec/fuzzcheck-rs\nBook: https://fuzzcheck.neocities.org/\n\npotential improvements\n \n #\n \n\n\n\nfrom a maintainence standpoint, it's a pain to support both proptest and fuzzcheck-rs simultaneously.\n\ncan fuzzcheck-rs completely subsume the use cases where we normally use proptest?\nas normal, I can run cargo fuzzcheck <my-fuzz-test> for continuous fuzzing.\nhowever, I should be able to hit cargo test and all my fuzzers run in a \"simplified\" checking/testing mode where:\n\nthere is a default max duration (5 sec?) / max test cases value (10,000 execs?).\ngenerated corpus values/artifacts aren't saved to disk (unless something fails).\nIF a failing test case is found, either:\n\nimmediately start minifying the test input for some duration (15 sec?).\nprint out a copy-pasteable command the will minify that specific test.\n\n\nIf coverage is too expensive to track during tests, it wouldn't even be that bad to just disable it when cargo test'ing.\n\nin fact, I'm not sure how coverage would work if the tests are run in the same process.\na #[fuzzcheck::test] annotation could mandate tests use something like rusty-fork to fork the test process before running.\n\n\n\n\nOne advantage of proptest is that you can easily generate complex test inputs by composing the generator combinators.\n\nin contrast, it wasn't clear how to build a custom mutator composed of submutators (from my very brief look).\n\n\nBy using the same fuzzers for both continuous fuzzing and unit testing, we prevent fuzzers from going stale or otherwise drifting from the implementation.\n\nThis was a very real problem in a previous project. The continous fuzzers ran out-of-band from the CI-blocking test suite, meaning PRs weren't blocked when they accidentally broke a fuzzer. People often forgot to add a #[test] that ran the fuzz test on a few inputs.\n\n\nPeople seemed to adopt proptest when writing tests, but getting people to write fuzzers was a challenge.\n\n\nis there some way to avoid spamming the #[no_coverage] attribute everywhere?\ncan we simplify the on-boarding process and reduce the amount of #[cfg(fuzzing)] needed?\n\n","id":"https://phlip9.com/notes/fuzzing/fuzzcheck-rs/","title":"fuzzcheck-rs"},"https://phlip9.com/notes/fuzzing/fuzzing/":{"body":"fuzzing\n\n\nRust\n\nbolero - fuzzing + property testing\n\n\n\nFuzzing\n \n #\n \n\n\nA fuzzer can be categorized in several ways:\n\nA fuzzer can be generation-based or mutation-based depending on whether inputs are generated from scratch or by modifying existing inputs.\nA fuzzer can be dumb (unstructured) or smart (structured) depending on whether it is aware of input structure.\nA fuzzer can be white-, grey-, or black-box, depending on whether it is aware of program structure.\n\nLinks\n \n #\n \n\n\nhttps://news.ycombinator.com/item?id=20830846\n\"Generating Software Tests\" (https://www.fuzzingbook.org/) is pretty great (independent of your programming language) - arguably a must read for anyone interested in software testing.\nJohn Regehr (the author of the blog post) has written more great posts:\n\n\nHow to Fuzz an ADT Implementation - https://blog.regehr.org/archives/896\n\n\nBetter Random Testing by Leaving Features Out - https://blog.regehr.org/archives/591\n\n\nTricking a Whitebox Testcase Generator - https://blog.regehr.org/archives/672\n\n\nFuzzers Need Taming - https://blog.regehr.org/archives/925\n\n\nLevels of Fuzzing - https://blog.regehr.org/archives/1039\n\n\nAPI Fuzzing vs. File Fuzzing: A Cautionary Tale - https://blog.regehr.org/archives/1269\n\n\nReducers are Fuzzers - https://blog.regehr.org/archives/1284\n\n\nIn terms of software, DeepState (https://github.com/trailofbits/deepstate) may be a good place to start for C and C++. Relevant links:\n\n\nFuzzing an API with DeepState: https://blog.trailofbits.com/2019/01/22/fuzzing-an-api-with-..., https://blog.trailofbits.com/2019/01/23/fuzzing-an-api-with-...\n\n\nNDSS 18 paper, \"DeepState: Symbolic Unit Testing for C and C++\": https://www.cefns.nau.edu/~adg326/bar18.pdf\n\n\nIn terms of choosing among fuzzing solutions, https://blog.trailofbits.com/2018/10/05/how-to-spot-good-fuz... is also worth a read -- as well as the article it refers to, http://www.pl-enthusiast.net/2018/08/23/evaluating-empirical.... For a broad survey, see \"The Art, Science, and Engineering of Fuzzing\": https://arxiv.org/abs/1812.00140, https://jiliac.com/pdf/fuzzing_survey19.pdf\nMore resources:\n\n\nEffective File Format Fuzzing – Thoughts, Techniques and Results (Black Hat Europe 2016): https://j00ru.vexillium.org/talks/blackhat-eu-effective-file...\n\n\nlibFuzzer – a library for coverage-guided fuzz testing: http://tutorial.libFuzzer.info, http://llvm.org/docs/LibFuzzer.html, https://github.com/ouspg/libfuzzerfication\n\n\nMaterials of \"Modern fuzzing of C/C++ Projects\" workshop: https://github.com/Dor1s/libfuzzer-workshop\n\n\nIntroduction to using libFuzzer with llvm-toolset: https://developers.redhat.com/blog/2019/03/05/introduction-t...\n\n\nFuzzing workflows - a fuzz job from start to finish: https://foxglovesecurity.com/2016/03/15/fuzzing-workflows-a-...\n\n\nMaterials from \"Fuzzing with AFL\" workshop (SteelCon 2017, BSides London and Bristol 2019): https://github.com/ThalesIgnite/afl-training\n\n\nMaking Your Library More Reliable with Fuzzing (C++Now 2018; Marshall Clow): https://www.youtube.com/watch?v=LlLJRHToyUk, https://github.com/boostcon/cppnow_presentations_2018/blob/m...\n\n\nC++ Weekly - Ep 85 - Fuzz Testing - https://www.youtube.com/watch?v=gO0KBoqkOoU\n\n\nThe Art of Fuzzing – Slides and Demos: https://sec-consult.com/en/blog/2017/11/the-art-of-fuzzing-s...\n\n\n","id":"https://phlip9.com/notes/fuzzing/fuzzing/","title":"fuzzing"},"https://phlip9.com/notes/ios/":{"body":"","id":"https://phlip9.com/notes/ios/","title":"ios"},"https://phlip9.com/notes/ios/ios setup/":{"body":"ios setup\n\ninstall Xcode\n \n #\n \n\n\nEither download the app directly from https://developer.apple.com/xcode/download/ or install it from the Mac App Store.\nOnce installed, run\n$ sudo xcode-select \\\n\t--switch /Applications/Xcode.app/Contents/Developer\n$ sudo xcodebuild -runFirstLaunch\n\ninstall CocoaPods\n \n #\n \n\n\nFrom the \"Sudo-less Install\" section: https://guides.cocoapods.org/using/getting-started.html#installation\nEnsure your .bashrc contains something like:\nexport GEM_HOME=$HOME/.local/gem\nGEM_BIN=$GEM_HOME/bin\n\nexport PATH=$PATH:$GEM_BIN\n\nThen install the cocoapods gem:\n# sanity check\n$ gem --version\n3.0.3.1\n\n$ gem install cocoapods\n\n# sanity check\n$ pod --version\n1.11.3\n\nensure the iOS Simulator app works\n \n #\n \n\n\nSearch for \"Simulator\" in Spotlight and then open it. An emulated iPhone should pop up after a minute or so.\nIf the Simulator app isn't there (which it wasn't for me, even after installing Xcode), try opening and running a sample iOS app in Xcode first.\nrunning a flutter app\n \n #\n \n\n\nRun the iPhone simulator or attach a real device. Once hooked up, it should be visible in flutter devices:\n$ flutter devices\n3 connected devices:\n\nPixel 5a (mobile) • android-arm64 • Android 13 (API 33)\niPhone 14 Pro (mobile) • ios • iOS-16-2 (simulator)\nmacOS (desktop) • macos • darwin-arm64 • macOS 13.1 darwin-arm\n\nSince I have multiple devices attached, I'll need to also specify which one to run on:\n$ flutter run -d iPhone\n\n","id":"https://phlip9.com/notes/ios/ios setup/","title":"ios setup"},"https://phlip9.com/notes/keyboards/":{"body":"","id":"https://phlip9.com/notes/keyboards/","title":"keyboards"},"https://phlip9.com/notes/keyboards/moergo glove80/":{"body":"moergo glove80\n\ngetting started\n \n #\n \n\n\n\nmake sure both halves are charged\n\nyou can power on both sides and hit the \"magic\" key to see rgb battery level display\n\n\nhit power button on both halves\nplug in left half to device\n\nupdate keymap/firmware\n \n #\n \n\n\n\nGo to latest layout on: https://my.glove80.com/#/my_layouts/\n\nEx: https://my.glove80.com/#/layout/user/b7530b80-c12e-496f-b7bc-9e2857f705d4\n\n\nAt the bottom, hit \"build firmware\". This will build and then download the latest firmware version to a file like b7530b80-c12e-496f-b7bc-9e2857f705d4_v0.9.9_phlipkey-mk1.uf2\nHit Magic + Esc (or whatever key is 3 up from the left) to enter bootloader mode. The left half should now show mount as a USB drive called GLV80LHBOOT.\nCopy the firmware .uf2 into the drive. You don't need to rename the file or anything. Just copy it over. The drive will automatically unmount and the keyboard will restart.\nUnplug the USB-C cable from the left and plug in to the right.\nHit Magic + ' (or whatever key is 3 up from the right) to get the right half to enter bootloader mode. The right half will now mount as GLV80RHBOOT.\nAgain, just copy the firmware .uf2 onto the drive. It will then auto reboot.\nUnplug the USB-C cable.\n\nbluetooth pairing\n \n #\n \n\n\n\nhit Magic + <purple button> on the left thumb cluster to select an unused bluetooth profile slot.\non the host, go to bluetooth settings and pair with Glove80 Left.\n\nlayout\n \n #\n \n\n\n\n\nprogramming symbol & number layer\n\nswap up/down to match vim jk\n\nhold tab -> ALT TAB?\n\nhard keys to press\n \n #\n \n\n\n\nfar keys on thumb cluster\nanything on f-key row\nleft: +, 1, 4, 5 (fingers don't reach when others on home row)\nright: 6, 7, 0, -\nleft: bottom left corner, right: bottom right corner\n\nhard words\n \n #\n \n\n\n\npeople\nincrease\nhave\nhim\nnumber\nhome\nlook\nturn\nbetween\naround\nsymbol\nanxious\n\nkeyboard magic &behaviors\n \n #\n \n\n\nThese behavior &tag codes are used when configuring specific keys on the keyboard. They determine the behavior of the key when pressed, held, double-tapped, etc...\n&ht_{hp,bl,tp} hold tap\n \n #\n \n\n\nWhen held, trigger one key. When tapped, trigger another. Comes in different \"flavors\" depending on which key should take precedence in different situations.\nSee: https://zmk.dev/docs/behaviors/hold-tap\n&ht_hp LSHIFT F\n\n&mt modifier tap\n \n #\n \n\n\nWhen held, becomes a modifier. When tapped, sends a keypress. This is just &ht_hp with tapping-term-ms of 200.\n&mt LCTRL ESC\n\nlayers\n \n #\n \n\n\nSee: https://zmk.dev/docs/behaviors/layers\n&mo momentary layer\n \n #\n \n\n\nMove to the target layer only while the layer key is pressed.\n&mo LOWER\n\n&lt layer tap\n \n #\n \n\n\nMove to the target layer while held, press another key when tapped.\n&lt LOWER SPACE\n\n&to to layer\n \n #\n \n\n\nEnable layer and disable all other layers while held.\n&to 3\n\n&tog toggle layer\n \n #\n \n\n\nToggle a layer until the key is pressed again.\n&tog MAGIC\n\n","id":"https://phlip9.com/notes/keyboards/moergo glove80/","title":"moergo glove80"},"https://phlip9.com/notes/lang/":{"body":"","id":"https://phlip9.com/notes/lang/","title":"lang"},"https://phlip9.com/notes/lang/ATS/":{"body":"","id":"https://phlip9.com/notes/lang/ATS/","title":"lang/ATS"},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"body":"ATS2 notes\n\nSyntax\n \n #\n \n\n\nabstype \t\t\tdefine an abstract type\nvtypedef\nviewtypedef \t\tdefine a viewtype\ntypedef define binding b/w name and sort (eff. an alias)\nstadef define _static_ binding b/w name and sort\n\nfun foo(..): res = \"#mac\"\n\t\t\t\t\tcompile to C function without name mangling? often\n\t\t\t\t\tseen with `extern` before `fun`. is the `extern`\n\t\t\t\t\tnecessary?\n\nlam (..): res => expr\n\t\t\t\t\tan anonymous lambda function\n\nfix foo(..): res => val\n\t\t\t\t\ta recursive, anonymous function named `foo`\n\n{...} \t\t\t\tuniversal quantification\n[...] \t\t\t\texistential quantification\n(... | ...) \t\t(proof | value)\n@(_, _, ...) \t\tflat tuple\n.<...>. \t\t\ttermination metric\n\n@[T][N] \t\tflat array of N values of type T\n@[T][N]() \t\tarray instance\n@[T][N](x) \t\tarray initialized with N x's\n\nsortdef nat = {a: int | a >= 0}\n\ntype\t\t\t\ta sort for w/ machine word size types (boxed types)\nt@ype \t\t\t\ta sort for unspecified length types (unboxed types)\nviewtype \t\t\ta sort for a linear view + type sort\nviewt@ype a sort for a linear view + unboxed t@ype sort\n\nstaload\n \n #\n \n\n\nStatic load: creates a namespace containing loaded package\nstaload FOO = \"foo.sats\"\n\nval a: $FOO.foo_t = $FOO.A()\n\n(* like `use foo::*;` in rust *)\nstaload = \"foo.sats\"\n\nval a: foo_t = A()\n\n(* only load package; useful for pulling in DATS file containing *)\n(* implementations of forward declared fns/types/etc... *)\nstaload _ = \"bar.dats\"\n\ndynload\n \n #\n \n\n\nTL;DR: if you get a link-time error about some undefined reference to a variable ending in __dynloadflag, you probably need a dynload <pkg>.dats somewhere.\nLibraries\n \n #\n \n\n\n\n$PATSHOME/prelude: prelude library targetting C codegen\n$PATSHOME/libats: libats library targetting C codegen\n\n\nIf a function is implemented as a template, the ATS compiler needs to access the source of the function implementation in order to generate code for each instance call of the function.\n\nThis is why we #include \"share/atspre_staload.hats\", which is basically a list of #staload _ = \"prelude/DATS/<prelude-file>.dats\", pulling in all the template function sources.\nMutual Recursion\n \n #\n \n\n\niseven and isodd are mutually recursive; you need the and keyword before isodd so that it's visible inside isevn\nfun isevn (n: int): bool =\n if n > 0 then isodd (n-1) else true\nand isodd (n: int): bool =\n if n > 0 then isevn (n-1) else false\n\nATS won't be able to tail-call optimize the above as-is. instead you need to replace fun with fxn to indicate that the functions need to be combined. Then ATS will place a copy of isodd inside isevn.\nTail-call Optimization\n \n #\n \n\n\nA classic list_append that is not tail-recursive\nfun {a: t@ype} list_append {m, n: nat} (\n\txs: list(a, m),\n\tys: list(a, n)\n) : list(a, m + n) =\n\tcase+ xs of\n\t| list_nil() => ys\n\t| list_cons(x, xs) => list_cons(x, list_append(xs, ys))\n\nTranslating to a tail-recursive apparently requires \"separating\" the allocation of the new list element from initiailizing it with x and (inductive step).\nfun {a: t@ype} list_append2 {m, n: nat} (\n\txs: list(a, m),\n\tys: list(a, n)\n) : list(a, m+n) =\n\tlet (* tail recursive inner loop *)\n\t\tfun loop {m: nat} (\n\t\t\txs: list(a, m),\n\t\t\tys: list(a, n),\n\t\t\tres: &ptr? >> list(a, m+n)\n\t\t) : void =\n\t\t\tcase+ xs of\n\t\t\t| list_nil() => res := ys\n\t\t\t| list_cons(x, xs1) =>\n\t\t\t\tlet (* allocate a list node with an _uninitialized_ *)\n\t\t\t\t\t(* tail (hole) *)\n\t\t\t\t\tval () = res := list_cons{a}{0}(x, _)\n\t\t\t\t\t(* pattern match on res to grab a handle to the *)\n\t\t\t\t\t(* tail *)\n\t\t\t\t\tval+list_cons(_, res1) = res\n\t\t\t\t\t(* recurse, which places xs1 || ys into res1, *)\n\t\t\t\t\t(* which means res now contains the full xs || ys *)\n\t\t\t\t\tval () = loop(xs1, ys, res1)\n\t\t\t\tin (* folding translates into a no-op at run-time *)\n\t\t\t\t\tfold@(res)\n\t\t\t\tend\n\t\t(* uninitialized result (stack allocated?) *)\n\t\tvar res: ptr\n\t\tval () = loop (xs, ys, res)\n \tin res\n\tend\n\nThis technique is called \"tail-recursion modulo allocation\"\n// TODO: wtf is fold@(_)???\nFunction Types\n \n #\n \n\n\nTwo kinds of functions in ATS (like Rust), env-less and closure functions.\n\nenv-less: like a function ptr; doesn't capture any variables in the scope/environment\nclosure: a function ptr + a captured environment (represented as a tuple of values apparently)\n\nSyntax\n \n #\n \n\n\n\nenv-less:\n+ (int) -<fun1> void\n+ (int) -> void (shorthand)\nclosure:\n+ (int) -<cloref1> void\n+ cfun(int, void) (shorthand) (from libats/ML)\n\nOperators\n \n #\n \n\n\nCan refer to operator function w/o infix via op keyword, e.g., op+(1,2) vs 1 + 2.\nLocal Bindings\n \n #\n \n\n\nLet\n \n #\n \n\n\nIntroduces bindings for use in subsequent bindings and inside the final in .. end expression\nval area =\n let\n val pi = 3.1415\n val radius = 10.0\n in\n pi * radius * radius\n end\n\nWhere\n \n #\n \n\n\nIntroduces bindings inside the expression immediately before where\nval area = pi * radius * radius where {\n val pi = 3.1415\n val radius = 10.0\n}\n\nLocal\n \n #\n \n\n\nForms a sequence of declarations rather than an expression at the end\nlocal\n val pi = 3.1415\n val radius = 10.0\nin\n (* visible in the containing scope *)\n val area = pi * radius * radius\nend\n\nOn Types\n \n #\n \n\n\n\nRather than viewing a type as the set of values it classifies, consider a type as a set of static, semantics meanings.\nan expression that can be assigned type T has the set of semantics implied by that type.\nan expression is \"well-typed\" if there exists a type T that can be assigned to the expression\nIn other words, there can be many types and many different and possibly disjoint static semantics assignable to an expression.\nIn this way, choosing a type for an expression is a statement of which static semantics are important or useful in the current context.\n\nProperty (Preservation): Consider an expression expr0 which can be assigned type T. If expr1 := eval(expr0), then expr1 can also be assigned type T. In other words, static type meaning is preserved under evaluation.\nProperty (Progress): Evaluation of an expression always \"makes progress\" towards a value. In other words, calling eval on an expression (and then on the result and so on) should eventually become a value.\nI Imagine progress is necessary for the compiler to prove that certain inductive types or recursive functions terminate or become structurally simpler with every inductive step.\nTuples\n \n #\n \n\n\n(* unboxed, flat tuple *)\nval xy = (123, \"abc\")\nval x = xy.0 and y = xy.1\n\n(* boxed tuple (ptr sized) *)\nval zw = '( -1.0, \"foo\")\nval z = zw.0 and w = zw.1\n\nNote that the space b/w '( and -1.0 is required for boxed tuples. Tuples are also sometimes written with @ in front like @(\"foo\", 123)\nRecords\n \n #\n \n\n\n(* unboxed record *)\ntypedef point2D = @{\n x = double,\n y = double\n}\n\nval origin = @{ x = 0.0, y = 0.0 } : point2D\n\nval x = origin.x and y = origin.y\n\nval @{ x = x, y = y } = origin\n\nval @{ y = y, ... } = origin\n\n(* boxed record *)\ntypedef point2D = '{\n x = double,\n y = double\n}\n\nSequence Expressions\n \n #\n \n\n\n(\n print 'Hi'; (* return value must be void *)\n 123 + 456 (* result of expression is result of whole block *)\n) (* has type int *)\n\n(* can also use begin .. end *)\nbegin\n print 'Hi';\n 123 + 456\nend\n\n(* or let .. in .. end *)\nlet\n val () = print 'Hi'\n val () = print 'asdf'\nin\n 123 + 456\nend\n\nDatatypes\n \n #\n \n\n\ndatatypes == garbage collectable objects?\nseem to be auto boxed\nTemplates\n \n #\n \n\n\ntemplates are bound via first-find rather than best-find\nTermination Metric\n \n #\n \n\n\n.<expr>. in function signature tells that compiler that expr must be strictly decreasing on each function call\nCase Expressions\n \n #\n \n\n\nTL;DR: prefer case+ and val+ in almost all cases to mandate exhaustive pattern matches everywhere.\ndataviewtype int_list_vt =\n | nil_vt of ()\n | cons_vt of (int, int_list_vt)\n\n// xs: int_list_vt\n// ~ is for freeing linear int_list_vt resource\ncase xs of\n | ~nil_vt() => ..\n | ~cons_vt(_, xs) => ..\n\n// just plain `case` with non-exhaustive pattern\n// ==> WARNING: pattern match is non-exhaustive\ncase xs of\n | ~nil_vt() => ..\n\n// `case+` with non-exhaustive pattern\n// ==> ERROR: pattern match is non-exhaustive\ncase+ xs of\n | ~nil_vt() => ..\n\n// `case-` with non-exhaustive pattern means:\n// \"ignore this problem compiler, I know what I'm doing : )\"\ncase- xs of\n | ~nil_vt() => ..\n\n// you can also add pattern guard conditions\ncase xs of\n | ~cons_vt(x, xs) when x < 10 => ..\n\nOne detail to note is that while matching happens sequentially at runtime, typechecking of case clauses actually happens non-deterministically.\nYou can force a pattern to typecheck sequentially by using =>>. For example, this won't typecheck w/o using =>>:\nfun {T, U: t@ype} {V: t@ype}\nlist_zipwith {n: nat} (\n xs1: list (T, n),\n xs2: list (U, n),\n f: (T, U) -<cloref1> V\n) : list (V, n) =\n case+ (xs1, xs2) of\n | (list_cons (x1, xs1), list_cons (x2, xs2)) =>\n list_cons (f (x1, x2), list_zipwith (xs1, xs2, f))\n | (_, _) =>> list_nil ()\n\nMutate In-place (fold@)\n \n #\n \n\n\nLet's say we're matching on a linear list list_vt and want to modify the entry in-place. We don't to be free'ing and alloc'ing garbage cons nodes just to change the entry.\n(ERROR) For example, we might try to do this first:\nfun list_vt_add1 {n: nat} (xs: !list_vt(int, n)): void =\n\tcase+ xs of\n\t| cons_vt(x, xs1) =>\n\t\tlet\n\t\t // ERROR: an l-value is required\n\t\t val () = x := x + 1\n\t\tin\n\t\t // ..\n\t\tend\n\t| nil_vt() => // ..\n\nSince x and xs1 are only treadted as values when we use a plain pattern (i.e., not an l-value) and are not allowed to be modified into other values or types.\n(CORRECT) Instead, the right syntax here looks like this:\nfun list_vt_add1 {n: nat} (xs: !list_vt(int, n)): void =\n\tcase+ xs of\n// .----- this is important\n// v\n\t| @cons_vt(x, xs1) =>\n\t\tlet\n\t\t // CORRECT\n\t\t val () = x := x + 1\n\t\t prval () = fold@(xs) // <--- this is important\n\t\tin\n\t\t // ..\n\t\tend\n\t| nil_vt() => // ..\n\nThe @ in the pattern unfolds the dataviewtype variant, which binds x and xs1 to pointers to each field. This @ binding also implicitly view-changes xs to viewtype list_vt_cons_unfold(l_0, l_1, l_2). These *_unfold(l_0, ..) viewtype definitions an autogenerated for all dataviewtype variants, where l_0 points to the outer dataviewtype and l_i points to field_i, where field_1 is the first field.\nAfter modifying x in the above let-block, notice that we also need this fold@(xs) proof statement. This built-in proof function \"folds\" the xs: list_vt_cons_unfold(l_0, l_1, l_2) back into a list_vt.\nVal Expressions\n \n #\n \n\n\nJust like case/case+/case-, you can pattern match in val expressions with exhaustiveness or not.\n// ==> WARNING: non-exhaustive\nval ~cons_vt(x, xs1) = xs\n\n// ==> ERROR: non-exhaustive\nval+~const_vt(x, xs1) = xs\n\n// silent : )\nval-~cons_vt(x, xs1) = xs\n\nTemplates\n \n #\n \n\n\ntemplates are monomorphized at compile time\nfun {a,b: t@ype} swap(xy: (a, b)): (b, a) =\n (xy.1, xy.0)\n\nNote: the template parameters come before the function name\n{a,b: t@ype} are the template parameters\nt@ype: a sort for static terms representing size-unspecified (== unsized?) types\ntype: machine word-sized types (usually boxed types)\nPolymorphic Functions/Datatypes\n \n #\n \n\n\npolymorphic functions/datatypes allow for dynamic dispatch. obv. polymorphic functions/datatypes are not monomorphized.\nfun swap_boxed {T: type}{U: type} (xy: (T, U)): (U, T) =\n\t(xy.1, xy.0)\n\nNote: the polymorphic parameters come after the function name\nNote: if we used t@ype here, we would get a C compiler error (not a typechecking error!) since the arguments have unspecified size.\nReferences\n \n #\n \n\n\nreferences in ATS are just heap allocated boxed values. they're really only useful in GC'd programs or as top-level program state since you need to manually free them (no linearity assistance).\nthe key interface is\nval int_ref = ref<int>(123)\nval () = !int_ref := 69\nval () = println!(\"int_ref = \", !int_ref)\n// > int_ref = 69\n\nArrays\n \n #\n \n\n\nThere are a few \"variants\" of arrays\n\narray: (TODO) static stack allocated array?\narray_v: (TODO) array view?\narrayptr: (TODO): linear?\narrayref: GC'd array reference (w/o size attached)\narrayszref: GC'd array reference (with size attached, like a fat pointer)\n\nusage:\nval size = g0int2uint_int_size(10)\nval xs = arrszref_make_elt(size, 42069)\nval x_3 = xs[3]\nval () = xs[4] := 123\n\n\n\nMatrices\n \n #\n \n\n\nNote: row-major layout! (rather than column-major like C)\n\nmatrixptr\nmatrixref\nmtrxszref\n\npostfix sz\n#define sz(x) g0int2uint_int_size(x)\n\nval X = mtrxszref_make_elt(10sz (*nrow*), 5sz (*ncol*), 0 (*fill*))\nval X_ij = X[i,j]\nval () = X[i,j] := 123\n\nAbstract Types\n \n #\n \n\n\nTypes w/ encapsulation, i.e., structure is not visible to the user\nabstype: boxed abstract type (pointer-sized)\n// declares abstract boxed intset type of size ptr\nabstype intset = ptr\n\nabst@ype: unboxed abstract type\n// declares abstract unboxed rational type of size 2*sizeof(int)\nabst@ype rational = (int, int)\n\nUse assume to \"concretize\" the abstract type. This can happen at-most-once, globally.\nassume my_abstract_type = my_concrete_type\nTheorem Proving\n \n #\n \n\n\n\nATS/LF component supports interactive theorem proving\n\nprop: a builtin sort representing all proof types\ndataprop: a prop type declared in a manner similar to datatype defs.\nA dataprop representing the fibonnacci relation fib(n) = r\ndataprop FIB(int, int) =\n | FIB0(0, 0) of ()\n | FIB1(1, 1) of ()\n | {n: nat} {r0, r1: int} FIB2(n+2, r0+r1) of (FIB(n, r0), FIB(n+1, r1))\n\nThe sort assigned to FIB is (int, int) -> prop, i.e., FIB takes two ints and returns a proof. FIB0 and FIB1 constructors both take () and return a proof.\nA dataprop for multiplication:\n// int * int = int\ndataprop MUL(int, int, int) =\n // 0 * n = 0\n | {n: int} MULbase(0, n, 0) of ()\n // (m+1) * n = m*n + n\n | {m: nat}{n: int}{p: int} MULind(m+1, n, p+n) of MUL(m, n, p)\n // (-m) * n = -(m * n)\n | {m: pos}{n: int}{p: int} MULneg(~(m), n, ~(p)) of MUL(m, n, p)\n\nTo prove this relation, we want to construct values of MUL for each parameter. The most common way to do this is to construct a total function over all parameters:\n// ∀ m ∈ ℕ, n ∈ ℤ, ∃ p ∈ ℤ : m * n = p\nprfun mul_nat_is_total {m: nat; n: int} .<m>. (): [p: int] MUL(m, n, p) =\n sif m == 0 then\n MULbas()\n else\n MULind(mul_nat_is_total{m-1, n}())\n\n// ∀ m, n ∈ ℤ, ∃ p ∈ ℤ : m * n = p\nprfn mul_is_total {m, n: int} (): [p: int] MUL(m, n, p) =\n sif m >= 0 then\n mul_nat_is_total{m, n}()\n else\n MULneg(mul_nat_is_total{~m, n}())\n\nNote: the second proof function uses prfn rather than prfun for a specific reason: prfuns define recursive proof functions and thus require a termination metric. prfns must be non-recursive and therefore don't need a termination metric.\ndatasort: like a datatype but static. doesn't support any dependent type stuff i think. you must also use scase instead of case to match on datasorts.\nQ: what is the difference b/w a dataprop and a datasort??\nViews\n \n #\n \n\n\nA view is a linear prop (linear as in must consume exactly once). views power ATS's pointer ownership checking.\nFor example, an owned pointer with a view to an a at location l looks like\n{a: t@ype} {l: addr} (pf: a @ l | p: ptr l)\n\nor a maybe uninitialized a\n(pf: a? @ l | p: ptr l)\nWhile managing these linear views can be done by threading the proofs through the in-params and out-params of each function, ATS provides a convenient syntactic sugar for modifying the view in-place. Consider the ptr_set function:\nfun {a: t@ype} ptr_set {l: addr} (\n pf: !a? @ l >> a @ l\n| p: ptr l,\n x: a\n): void\n\nWe can read the pf as \"the function takes a proof of a maybe-uninit a at location l and will modify this proof (in the caller's context) to a definitely-init a at location l\".\nIn general, the format looks like !V >> V' to mean that the function changes the view V to V' upon its return. If V = V', then you can just write !V or !V >> _ (TODO: what does this mean? does typechecker fill the hole?).\nManipulating Pointers\n \n #\n \n\n\nManually pass the proof in and out:\n// (pf: a @ l | p: ptr l)\nval x = ptr_get<int>(pf | p)\nval () = ptr_set<int>(pf | p, 123)\n\nOr use the pointer syntax:\n// these modify pf in-place\nval x = !p\nval () = !p := 123\n\nViewtypes\n \n #\n \n\n\nviewtypes are linear types in ATS. The name view + type suggests that a viewtype consists of a linear view V and type T. Usually we refer to viewtypes by their definition VT but you can actually split viewtypes into their component view V and type T (via pattern matching.)\n\n\nThis interpretation of a VT as a (V | T) could be thought of as encumbering a concrete, runtime value of type T with a linear tag V (which can also assert other properties ofc).\n\n\nGiven the viewtype VT we can compactly refer to the type portion by the syntax VT?!\n\n\nviewtype and viewt@ype are two sorts with the type portion in sorts type and t@ype resp.\n\n\nhttp://blog.vmchale.com/article/ats-linear\nhttps://bluishcoder.co.nz/2011/04/25/sharing-linear-resources-in-ats.html\nL-Values and Call-by-Reference\n \n #\n \n\n\n\nAn l-value is a pointer and linear at-view proof / \"value + address\"\nLike C/C++, l-values can appear on the left-hand side of assignments\nSimplest l-value is !p where p is a ptr l. the typechecker must also find an at-view proof a @ l somewhere in the context.\nNormally, ATS uses call-by-value; however, you can pass l-values by reference. When this happens, the address (and not the value) is passed.\nFunction can take reference with & like fun foo(x: &a). Note that you don't use ! to deref or assign, just the plain x.\n\nStack-Allocated Variables\n \n #\n \n\n\n\nUse var x: T to declare uninit stack variable or var y: T = val to init with val.\nUse view@(x) to get the view-type at the location inside x\nUse addr@(x) to get the location that x points to.\nInterestingly, you can see the the uninit decl. actually has type view@(x) = T? @ x while the init decl. has type view@(y) = T @ x\nvar z: int with pfz = 69 will bind pfz = view@(z) for you\nATS ensures there are no dangling or escaped stack pointers by requiring that the linear at-view proof must be present in the context when the function returns.\nCan also stack allocate flat arrays in the obvious way\n\nvar A = @[double][10]()\t\t\t\t// uninit stack array\nvar B = @[double][10](42.0)\t\t\t// size=10 stack array init w/ 42.0\nvar C = @[double](1.0, 2.0, 3.0) // size=3 init w/ (1.0, ..)\n\n\nCan also stack allocate closures via lam@ (non-rec) and fix@ (rec)\n\nvar x: int = 123\nvar y: int = 69\n\nvar mul = lam@ (): int => x * y\n\nVariance (Rust)\n \n #\n \n\n\nThe variance property of a generic type is relative to its generic arguments. For example, a generic type F has variance relative to its generic parameters (say F<T>, so F has variance relative to T). Variance tells us how/how not e.g. traits impls \"pass through\" the inner parameter type T to/from the outer generic type F.\nsubtype: T: U, T is \"at least as useful as\" U. For example, 'static: 'a since you can use static lifetimes anywhere some stricter lifetime 'a is needed.\nThere are three cases for variance: covariant, contravariant, and invariant.\n\n\ncovariant:\nhave fn foo(&'a str), can call foo(&'static str). we can provide foo with a stronger type than it requires.\nin this case, F<_> = &'_ str.\n\n\ncontravariant:\nhave fn foo(Fn(&'a str) -> ()), can't provide foo(fn(&'static str) {}). need to provide foo with a weaker type than it expects.\n\n\ninvariant:\nno additional subtyping relation can be derived\n\n\nVariance (ATS)\n \n #\n \n\n\nYou can express covariance and contravariance (I believe?) in some parameter by adding a + or - to certain keyword types or something\nConfirmed this is true for view+ and prop+ for covariance. Just guessing on the rest.\nprop+ prop-\nview+ view-\n\ntype+ type-\ntbox+ tbox-\ntflt+ tflt-\n\ntypes+ types-\n\nvtype+ vtype-\nvtbox+ vtbox-\nvtflt+ vtflt-\n\nt0ype+ t0ype-\nvt0ype+ vt0ype-\n\nviewtype+ viewtype-\nviewt0ype+ viewt0ype-\n\nopt\n \n #\n \n\n\nThere's a type constructor opt(T, B) where T is a type and B is a bool. If B = true then opt(T, B) is T and T? if B = false.\nllam (..) => .. appears to be a linear lambda closure?\n(..) -<lin,prf> .. appears to be type of linear, prfun closure?\n","id":"https://phlip9.com/notes/lang/ATS/ATS2 Notes/","title":"ATS2 Notes"},"https://phlip9.com/notes/lang/ATS/Install ATS2/":{"body":"install ATS2\n\n$ git clone --depth=1 git@github.com:githwxi/ATS-Anairiats.git ats1\n$ git clone git@github.com:githwxi/ATS-Postiats.git ats2\n$ git clone git@github.com:githwxi/ATS-Postiats-contrib.git ats2-contrib\n\n$ sudo apt install build-essential automake-1.15 jgawk libgmp-dev libgc-dev libjson-c-dev\n\n$ echo \"export PATSHOME=\\$HOME/dev/ats2\" >> ~/.bashrc\n$ echo \"export PATSCONTRIB=\\$HOME/dev/ats2-contrib\" >> ~/.bashrc\n$ echo \"export PATH=\\$PATH:\\$PATSHOME/bin\" >> ~/.bashrc\n\n$ cd ats1\n$ mkdir bootstrap1\n$ ./configure && make all\n\n$ cd ../ats2\n$ make -f Makefile_devl all\n\nMake ctags in ATS src\n$ cd ~/dev/ats2\n$ ctags \\\n --languages=ATS \\\n --exclude=\"*atscc2*\" \\\n --exclude=\"doc*\" \\\n --exclude=\"npm-utils*\" \\\n --exclude=\"*CODEGEN*\" \\\n --exclude=\"*DOCUGEN*\" \\\n --exclude=\"*TEST*\"\n\n","id":"https://phlip9.com/notes/lang/ATS/Install ATS2/","title":"Install ATS2"},"https://phlip9.com/notes/lang/flutter/":{"body":"","id":"https://phlip9.com/notes/lang/flutter/","title":"lang/flutter"},"https://phlip9.com/notes/lang/flutter/dart lang/":{"body":"dart lang\n\nvariables\n \n #\n \n\n\nmutable\n \n #\n \n\n\nvar name = 'Bob';\nObject name = 'Bob';\nString name = 'Bob';\nvar name = const 'Bob';\nname = 'Alice';\n\nimmutable\n \n #\n \n\n\nfinal name = 'Bob';\nfinal String name = 'Bob';\nname = 'Alice'; // << compile error: final var can only be set once\nfinal String name = const 'Bob';\n\ncomptime\n \n #\n \n\n\nconst bar = 1000000;\nconst double atm = 1.01325 * bar;\nconst p1 = [bar, atm];\nconst p2 = const [bar, atm]; // << style: const-value is redundant\n\n\nIf you enable null safety, then you must initialize the values of non-nullable variables before you use them.\n\nThe compiler can sometimes determine a lazy-init val is not null before use:\nint foo;\nif (isFooable) {\n\tfoo = 123;\n} else {\n\tfoo = 0;\n}\n\nprint(foo);\n\nlate init\n \n #\n \n\n\nUse the late modifier if dart can't prove non-null-before-use. You will get a runtime panic if it's null on use:\nlate String desc;\n\nvoid main() {\n\tdesc = 'hello';\n\tprint(desc);\n}\n\nlazy init\n \n #\n \n\n\nYou can also use late for lazy-init:\n// only computed on first use\nlate String expensiveValue = computeExpensive();\n\nbuilt-in types\n \n #\n \n\n\nnumbers (num, int, double)\n \n #\n \n\n\n\nclass num\n(native) int := i64\n(native) double := double\nboth int extends num and double extends num\n\nstrings (String)\n \n #\n \n\n\nString is a sequence of UTF-16 code points. You can use either '' or \"\" to create a string:\nvar s1 = 'hello';\nvar s2 = \"world\";\n\nDart also supports string interpolation:\nvar inner = \"world\";\nvar s1 = \"hello $inner\";\nvar s2 = \"HELLO ${inner.toUpperCase()}\";\n\nlists (List<T>)\n \n #\n \n\n\nList<int> list = [1, 2, 3];\nassert(list.length == 3);\nassert(list[1] == 2);\n\nvar list = const [1, 2, 3];\nlist[1] = 1; // << error\n\nspread operator\n \n #\n \n\n\n\nspread operator ...\nnull-aware spread operator ...?\n\nvar xs = [1, 2, 3];\nvar ys = [0, ...xs];\nassert(ys == [0, 1, 2, 3]);\n\nvar zs = null;\nvar ws = [0, ...?zs];\nassert(ws == [0]);\n\ncollection control flow operators\n \n #\n \n\n\nvar nav = [\"Home\", \"Furniture\", \"Plants\", if (promo) \"Outlet\"];\nvar ints = [1, 2, 3];\nvar strs = [\"#0\", for (var i in ints) \"#$i\"];\nassert(strs == [\"#0\", \"#1\", \"#2\", \"#3\"]);\n\nsets (Set<T>)\n \n #\n \n\n\nvar halogens = {\"F\", \"Cl\", \"Br\", \"I\", \"At\"};\nvar names = <String>{};\nSet<String> names = {};\nnames.add(\"Alice\");\nnames.addAll({\"Bob\", \"Charlie\"});\n\nmaps (Map<K, V>)\n \n #\n \n\n\nvar halogens = {\n\t9: \"F\",\n\t17: \"Cl\",\n};\n\nassert(halogens.length == 2);\nassert(halogens[9] == \"F\");\nassert(halogens[2] == null);\n\nsymbols (Symbol)\n \n #\n \n\n\n\nRepresents an operator or identifier in a dart program.\n\n#radix\n#bar\n\nexample using Function.apply:\nabstract class Function {\n\texternal static apply(\n\t\tFunction function,\n\t\tList<dynamic>? positionalArguments,\n\t\t[Map<Symbol, dynamic>? namedArguments],\n\t);\n}\n\nvoid printWineDetails(int vintage, {String? country, String? name}) {\n print('Name: $name, Country: $country, Vintage: $vintage');\n}\n\nFunction.apply(printWineDetails, [2018], {#country: \"USA\", #name: \"Casocco\"});\n\nfunctions (Function)\n \n #\n \n\n\nDart functions are first-class objects and can be assigned to variables and passed as arguments.\nbool isNoble(int n) {\n\treturn _nobleGases[n] != null;\n}\n\n// can omit type annotations...\nisNoble(n) {\n\treturn _nobleGases[n] != null;\n}\n\n// single-expressions shorthand syntax\nbool isNoble(int n) => _nobleGases[n] != null;\n\nparameters\n \n #\n \n\n\n\nFunctions can have required positional parameters, followed by named parameters xor optional positional parameters.\n\nnamed parameters\n \n #\n \n\n\n\nNamed params are null by default (hence the bool? for each param in this example):\n\nvoid enableFlags({bool? bold, bool? hidden}) { /* .. */ }\n\nenableFlags(bold: true, hidden: false);\n\n\nYou can specify default values:\n\nvoid enableFlags({bool bold = false, bool hidden = false}) { /* .. */ }\n\nenableFlags(hidden: true); // bold = false\n\n\nYou can use the required keyword to make a named param non-optional:\n\nconst Scrollbar({super.key, required Widget child});\n\noptional positional parameters\n \n #\n \n\n\nvoid say(String from, String msg, [String? device]) {\n final tail = (device != null) ? \"on their $device\" : \"\";\n print(\"$from says $msg$tail\");\n}\n\nvoid main() {\n say(\"Bob\", \"hello\");\n say(\"Alice\", \"goodbye\", \"Android\");\n}\n\nmain\n \n #\n \n\n\nvoid main() {}\nvoid main(List<String> arguments) {}\n\n\nYou can use the args package for arg parsing.\n\nclosures\n \n #\n \n\n\nsyntax:\n([[Type] param1[, ...]]) { codeBlock; }\n([[Type] param1[, ...]]) => expression;\n\nconst printer = (val) { print(\"this is $val\"); };\n\n[\"bob\", \"Alice\"]\n\t.map((name) => name.toUpperCase())\n\t.forEach((name) => print(\"big name: $name\"));\n\nFunction makeAdder(int addend) => (int i) => i + addend;\n\noperators\n \n #\n \n\n\n(only highlighting interesting or non-standard operators)\n\n~/ integer division, e.g., 5 ~/ 2 == 2.\nx is T is true if value x impls T. x is Object? is always true.\nx is! T == !(x is T)\nx ??= value assigns value iff x is null.\n\nints are always signed, so shifts are sign-extended as well. To do a bit-wise unsigned right shift, use >>>.\n\nexpr1 ?? expr2 returns expr1 if it's non-null, otherwise expr2.\n\ncascade notation lets you make a sequence of operations on one object:\nvar paint = Paint()\n ..color = Colors.black\n ..strokeCap = StrokeCap.round\n ..strokeWidth = 5.0;\n\n// if the object is possibly null, then use `?..` for the first operation\nquerySelector(\"#confirm\")\n ?..text = \"Confirm\"\n ..classes.add(\"important\")\n ..onClick.listen((e) => window.alert(\"Confirmed\"))\n ..scrollIntoView();\n\nother maybe-null operators\nxs?[1] == xs.map(|xs| xs[1])\npaint?.color == paint.map(|p| p.color)\npaint! == paint.unwrap()\npaint!.color == paint.unwrap().color\n\nyou can override operators on classes\nclass Vec3d {\n final double x, y, z;\n\n const Vec3d(this.x, this.y, this.z);\n\n Vec3d operator +(Vec3d v) => Vec3d(x + v.x, y + v.y, z + v.z);\n}\n\ncontrol flow\n \n #\n \n\n\nfor (var i = 0; i < 10; i++) { /* .. */ }\nfor (final cb in callbacks) { /* .. */ }\ncallbacks.forEach((cb) => /* .. */);\nwhile (foo) { /* .. */}\n\n\nsupports c-style switch-case blocks...\n\nAll of Dart’s exceptions are unchecked exceptions. Methods don’t declare which exceptions they might throw, and you aren’t required to catch any exceptions.\ntry {\n breedMoreLlamas();\n} on OutOfLlamasException {\n // A specific exception\n buyMoreLlamas();\n} on Exception catch (err) {\n // Anything else that is an exception\n print('Unknown exception: $err');\n} catch (err, backtrace) {\n // No specified type, handles all\n print('unknown error:\\n$err\\ntrace:\\n$backtrace');\n rethrow;\n} finally {\n cleanup();\n}\n\nclasses\n \n #\n \n\n\nThe root of the Dart object hierarchy is Object? := { null U Object }:\n\t\t\t\tObject?\n\t\t\t\t| |\n\t\t\t null Object\n\t\t\t / / \\ \\\n\t\t\t <normal classes>\n\nClasses have one superclass (by extends) and zero or more mixin interfaces.\nconstructors\n \n #\n \n\n\nimport \"dart:math\";\n\nclass Point {\n final double x;\n final double y;\n final double z;\n\n // initializing with \"formal\" parameters\n const Point({required this.x, required this.y, this.z = 0.0});\n\n // initializing with C++-style initializer list\n Point.fromPolar({required double r, required double theta})\n : x = r * cos(theta),\n y = r * sin(theta),\n z = 0.0;\n\n // can also redirect to another constructor\n Point.fromPolar2({required double r, required double theta})\n : this(x: r * cos(theta), y: r * sin(theta));\n\n\n // if you need to do some work before construction, use `factory`.\n // this also works for objects retrieved from e.g. an internal cache.\n factory Point.fromPolar3d({\n required double r,\n required double theta,\n required double phi,\n }) {\n final rSinPhi = r * sin(phi);\n final x = rSinPhi * cos(theta);\n final y = rSinPhi * sin(theta);\n final z = r * cos(phi);\n return Point(x: x, y: y, z: z);\n }\n\n @override\n String toString() => \"{ $x, $y, $z }\";\n}\n\nprint(Point(x: 1, y: 2)); // { 1.0, 2.0, 0.0 }\nprint(Point(x: 1, y: 2, z: 3)); // { 1.0, 2.0, 3.0 }\nprint(Point.fromPolar(r: 3.0, theta: 0.25 * pi)); // { 2.121, 2.121, 0.0 }\nprint(Point.fromPolar3d( // { 0.812, 0.812, 2.772 }\n r: 3.0,\n theta: 0.25 * pi,\n phi: 0.125 * pi,\n));\n\ngetters and setters\n \n #\n \n\n\nclass Point {\n const Point(this.x, this.y, this.x);\n final double x, y, z;\n\n double get length => sqrt(x * x + y * y + z * z);\n set length(double newLen) {\n final mult = newLen / length;\n x *= mult;\n y *= mult;\n z *= mult;\n }\n}\n\nbool approxEq(double x, double y) => abs(x - y) <= 1e-10;\n\nfinal point = Point(0, sqrt(2)/2, sqrt(2)/2);\nassert(approxEq(1.0, point.length));\n\nimplicit interfaces\n \n #\n \n\n\nAll classes define an implicit interface containing all its instance members and implemented interfaces.\n// A person. The implicit interface contains greet().\nclass Person {\n // In the interface, but visible only in this library.\n final String _name;\n\n // Not in the interface, since this is a constructor.\n Person(this._name);\n\n // In the interface.\n String greet(String who) => 'Hello, $who. I am $_name.';\n}\n\n// An implementation of the Person interface.\nclass Impostor implements Person {\n String get _name => '';\n\n String greet(String who) => 'Hi $who. Do you know who I am?';\n}\n\nextension methods\n \n #\n \n\n\n\nextension methods == point-free function -> dot method\n\nExtension methods are pure syntactic sugar. They let us define faux-methods on a type (using dot notation) when we would otherwise be restricted to a static point-free function. In the following example, we can use extension methods to make parseInt(\"123\") into a faux-method on String, like \"123\".parseInt().\n// point free version\nint parseInt(String s) => int.parse(s);\n\n// a named extension on String\nextension NumberParsing on String {\n int parseInt() => int.parse(this);\n}\n\n// an unnamed, module-local extension\nextension on String {\n int parseInt() => int.parse(this);\n}\n\nassert(int.parse(\"123\") == 123);\nassert(parseInt(\"123\") == 123);\nassert(\"123\".parseInt() == 123);\n\nYou can't invoke extension methods on values with type dynamic.\nIf two modules provide two extension methods of the same name on the same type, you will need to either (1) hide the extension for one of the modules or (2) namespace one of the modules with as.\nimport \"string_apis.dart\"; // defs String.parseInt() extension\nimport \"string_apis_2.dart\" hide NumberParsing2; // need to hide the second ext\n\n\"42\".parseInt();\n\nimport \"string_apis.dart\"; // defs NumberParsing ext\nimport \"string_apis_3.dart\" as foo; // defs NumberParsing ext\n\n\"42\".parseInt(); // << ERROR\nNumberParsing(\"42\").parseInt();\nfoo.NumberParsing(\"42\").parseInt();\n\nenums\n \n #\n \n\n\nDart has basic C-style enums, like:\nenum Color { red, green, blue }\n\nThere's also \"enhanced enums\" which are NOT like real discriminated unions. This feature just allows enums to have methods and a fixed set of fields shared across all variants.\nUpdate(2023/07/14): dart 3 now includes sealed and final classes, plus exhaustive pattern matching. These two features let us mostly emulate real discriminated unions. For example, consider an enum like Rust's Result<T, E>:\npub enum Result<T, E> {\n Ok(T),\n Err(E),\n}\n\nWe can now mostly emulate this in dart 3:\nsealed class Result<T, E> {\n const Result();\n\n T? get ok;\n E? get err;\n}\n\nfinal class Ok<T, E>(this.ok) extends Result<T, E> {\n const Ok(this.ok);\n\n @override\n final T ok;\n @override\n E? get err => null;\n}\n\nfinal class Err<T, E>(this.ok) extends Result<T, E> {\n const Err(this.err);\n\n @override\n final E err;\n @override\n T? get ok => null;\n}\n\nUsing it isn't too bad with exhaustive pattern matching:\nfinal Result<int, String> result = Ok(123);\n\n// using switch-expressions:\n\nfinal bool isOk123 = switch (result) {\n Ok(:final ok) => ok == 123,\n Err() => false,\n};\n\nassert(isOk123);\n\n// or switch-statements:\n\nfinal int value;\nswitch (result) {\n case Ok(:final ok):\n value = ok;\n case Err(:final err):\n print(\"Error: $err\");\n return;\n}\n\nprint(\"value = $value\");\n// value = 123\n\nmixins\n \n #\n \n\n\n\nmixins are like abstract classes that can neither be extended nor constructed.\n\n(philip): looking through dart-lang std, it appears that mixins are almost never used? even interface-only cases, like Comparable<T>, are just abstract classes. consumers provide the interface by e.g. class X implements Comparable<X>.\n(philip): more std: main use case in std seems to be type-specialization? like \"implement List<int> more efficiently for Uint8List\".\nenum Ordering { less, equal, greater }\n\nmixin PartialOrd<T> {\n Ordering? partialCmp(T other);\n}\n\nmixin Ord<T> on PartialOrd<T> {\n Ordering cmp(T other);\n}\n\nclass BigInt with PartialOrd<BigInt>, Ord<BigInt> {\n final List<int> limbs;\n\n const BigInt() : this.limbs = const [];\n\n @override\n Ordering? partialCmp(BigInt other) => cmp(other);\n\n @override\n Ordering cmp(BigInt other) {\n final lenThis = this.limbs.length;\n final lenOther = other.limbs.length;\n\n if (lenThis < lenOther) {\n return Ordering.less;\n } else if (lenThis > lenOther) {\n return Ordering.greater;\n } else {\n\t for (var i = lenThis - 1; i >= 0; i--) {\n final limbThis = this.limbs[i];\n final limbOther = other.limbs[i];\n\n if (limbThis < limbOther) {\n return Ordering.less;\n } else if (limbThis > limbOther) {\n return Ordering.greater;\n }\n }\n\n return Ordering.equal;\n }\n }\n}\n\nlibraries\n \n #\n \n\n\n// dart-core packages are prefixed with \"dart:\"\n// like: `use std::collect::*;`\nimport \"dart:collection\";\n// external packages are prefixed with \"package:\"\n// like: `use serde::de::*;`\nimport \"package:lib1/lib1.dart\";\n\n// namespace import\n// like: `use std::collection as std_collection;`\nimport \"dart:collection\" as stdCollection;\n\n// only import parts of library\n// like: `use std::collection::{VecDeque, BTreeMap};`\nimport \"dart:collection\" show Queue, Set;\n\n// import all but hide some things\nimport \"dart::collection\" hide Queue, Set;\n\nasync/await\n \n #\n \n\n\nFuture<String> lookup() async => \"123\";\nFuture<String> lookup() async => await http.fetch(\"google.com\");\n\nDart uses a single-threaded async runtime, though you can spawn background workers with no shared state that communicate solely through message passing.\nenable the unawaited_futures lint\n \n #\n \n\n\nIn stock dart, you can call async methods without awaiting them, which is super suprising to me. Enabling the unawaited_futures lint will tell the compiler to yell at you if you accidentally call an async method without awaiting it. This is like the #[must_use] attribute in Rust but only for dart's Futures.\nBe sure to enable this lint early on in a project, since a lot of standard flutter code likes to play fast and loose with ignoring futures.\nNote that there are some occasions where you want to call an async function but not await the returned future, like Navigator.push(), which actually returns a Future<T?> for the value the new route eventually yields when it Navigator.pop()s. In this particular case, the method synchronously pushes the new route onto the navigation stack and just returns a future for the popped value. If you don't care about the value, use the dart:async unawaited() function, which ignores the returned future:\nunawaited(Navigator.push(context, route));\n\nYou should only use unawaited on a future if you're sure it won't return an error. If you don't care about the result regardless, you can use FutureExtensions.ignore like:\nimport 'dart:async' show FutureExtensions;\n\nNavigator.push(context, route).ignore();\n\nUnfortunately, this lint only tells you about unawaited futures... in async code. Which is why you should also...\nenable the discarded_futures lint\n \n #\n \n\n\nThis is like unawaited_futures but also works in sync code. It should be renamed to unawaited_futures_sync IMO. Or unawaited_futures should just work in both contexts...\n","id":"https://phlip9.com/notes/lang/flutter/dart lang/","title":"dart lang"},"https://phlip9.com/notes/lang/flutter/flutter setup/":{"body":"flutter setup\n\nprereqs\n \n #\n \n\n\n\n(Optional, android) android cli setup\n(Optional, iOS, macOS-only) ios setup\n(macOS, apple silicon) sudo softwareupdate --install-rosetta --agree-to-license\n\ninstall flutter\n \n #\n \n\n\nhttps://docs.flutter.dev/get-started/install\n$ git clone --branch=\"stable\" \\\n\thttps://github.com/flutter/flutter.git \\\n\t~/.local/flutter\n\n# ensure .bashrc contains these lines:\n#\n# ```\n# # Flutter\n# FLUTTER_HOME=$HOME/.local/flutter\n# export PATH=$PATH:$FLUTTER_HOME/bin\n# ```\n\nsetup flutter\n \n #\n \n\n\n# disable their pesky telemetry : )\n$ flutter config --suppress-analytics --no-analytics\n$ dart --disable-analytics\n\n# run the flutter sanity checker\n$ flutter doctor\n\nDoctor summary (to see all details, run flutter doctor -v):\n[!] Flutter (Channel unknown, 3.3.9, on Pop!_OS 22.04 LTS 6.0.6-76060006-generic, locale en_US.UTF-8)\n ! Flutter version 3.3.9 on channel unknown at /home/phlip9/.local/flutter\n ! Upstream repository unknown\n[✓] Android toolchain - develop for Android devices (Android SDK version 33.0.1)\n[✗] Chrome - develop for the web (Cannot find Chrome executable at google-chrome)\n ! Cannot find Chrome. Try setting CHROME_EXECUTABLE to a Chrome executable.\n[✗] Linux toolchain - develop for Linux desktop\n ✗ GTK 3.0 development libraries are required for Linux development.\n They are likely available from your distribution (e.g.: apt install libgtk-3-dev)\n[!] Android Studio (not installed)\n[✓] Connected device (1 available)\n[✓] HTTP Host Availability\n\n! Doctor found issues in 4 categories.\n\nOnce you've setup your devices (e.g. android cli setup > (optional) setup wireless debugging on device), verify that flutter actually picks up the mobile device.\nOn my linux desktop:\n$ flutter devices\n\nPixel 5a (mobile) • android-arm64 • Android 13 (API 33)\nLinux (desktop) • linux-x64 • Pop!_OS 22.04 LTS\n\nOn my M1 MBP:\n$ flutter devices\n3 connected devices:\n\nPixel 5a (mobile) • android-arm64 • Android 13 (API 33)\niPhone 14 Pro (mobile) • ios • iOS-16-2 (simulator)\nmacOS (desktop) • macos • darwin-arm64 • macOS 13.1 darwin-arm\n\n(linux pop_OS!) install libstdc++-12-dev\n \n #\n \n\n\nIf you want to run linux desktop apps:\n$ sudo apt install libstdc++-12-dev\n\ntest sample app\n \n #\n \n\n\n$ flutter create --platforms android my_app\n$ cd my_app\n\n# this should build, install, and launch the sample app on your phone\n$ flutter run -d pixel\n$ flutter run -d iphone\n\neditor (nvim)\n \n #\n \n\n\nFor all the nvim chads out there using coc.nvim, just do:\n:CocInstall coc-flutter\n\nProbably set \"dart.showTodos\": false in your coc-settings.json.\nMaybe peep these keybinds too:\nnnoremap <silent> <leader>fd :CocCommand flutter.devices<CR>\nnnoremap <silent> <leader>fr :CocCommand flutter.run<CR>\nnnoremap <silent> <leader>ft :CocCommand flutter.dev.hotRestart<CR>\nnnoremap <silent> <leader>fs :CocCommand flutter.dev.quit<CR>\nnnoremap <silent> <leader>fl :CocCommand flutter.dev.openDevLog<CR>\n\nNow instead of running flutter run to build the app, just use <leader>fr or :CocCommand flutter.run. This will setup a live-reload session; whenever you save a .dart file, the app UI will live reload with any UI-related changes. State changes still need a \"hot restart\" (<leader>ft). Pretty sick though.\n","id":"https://phlip9.com/notes/lang/flutter/flutter setup/","title":"flutter setup"},"https://phlip9.com/notes/lang/gdb ref/":{"body":"gdb ref\n\nrun and immediately break at main\n \n #\n \n\n\n(gdb) start\n\n(gdb) help start\nStart the debugged program stopping at the beginning of the main procedure.\nYou may specify arguments to give it.\nArgs may include \"*\", or \"[...]\"; they are expanded using the\nshell that will start the program (specified by the \"$SHELL\" environment\nvariable). Input and output redirection with \">\", \"<\", or \">>\"\nare also allowed.\n\nhexdump memory view\n \n #\n \n\n\ndefine xxd\ndump binary memory dump.bin $arg0 $arg0+$arg1\nshell xxd dump.bin\nend\n\n(gdb) xxd buf.data_ptr 256\n00000000: 9c55 5555 0500 0000 785a 65e9 81fc 4510 .UUU....xZe...E.\n00000010: 0000 0000 0000 0000 0000 0000 0000 0000 ................\n00000020: 0000 0000 0000 0000 0000 0000 0000 0000 ................\n00000030: 0000 0000 0000 0000 0000 0000 0000 0000 ................\n00000040: 0000 0000 0000 0000 0000 0000 0000 0000 ................\n00000050: 0000 0000 0000 0000 0000 0000 0000 0000 ................\n00000060: 0000 0000 0000 0000 0000 0000 0000 0000 ................\n00000070: 0000 0000 0000 0000 0000 0000 0000 0000 ................\n00000080: 0000 0000 0000 0000 0000 0000 0000 0000 ................\n00000090: 0000 0000 0000 0000 0000 0000 0000 0000 ................\n000000a0: 0000 0000 0000 0000 0000 0000 0000 0000 ................\n000000b0: 0000 0000 0000 0000 0000 0000 0000 0000 ................\n000000c0: 0000 0000 0000 0000 0000 0000 0000 0000 ................\n000000d0: 0000 0000 0000 0000 0000 0000 0000 0000 ................\n000000e0: 0000 0000 0000 0000 0000 0000 0000 0000 ................\n000000f0: 0000 0000 0000 0000 0000 0000 0000 0000 ................\n\nrust syntax\n \n #\n \n\n\n(gdb) p 0x55585380 as *mut u8\n\nTUI mode\n \n #\n \n\n\nTired of pressing l (list)? Can't tell wtf is going on? Try TUI mode!\n(gdb) tui enable\n\nTUI Commands: https://sourceware.org/gdb/current/onlinedocs/gdb.html/TUI-Commands.html\nTUI keybindings not working\n \n #\n \n\n\ngdb's TUI mode has some keybindings (ex: <CTRL-X a> to open TUI, <Ctrl-X l> to clear screen).\nHowever, if you're like me and have vi mode enabled in your ~/.inputrc, then these keybinds won't work unless you're in emacs mode. Fortunately there's a keybind to switch modes:\nvi mode (normal) -> emacs mode: <Ctrl-e>\nemacs mode -> vi mode: <Ctrl-Alt-j>\nTUI Keybindings: https://sourceware.org/gdb/current/onlinedocs/gdb.html/TUI-Keys.html\nstdout filling screen with junk\n \n #\n \n\n\nRepaint the TUI:\n(gdb) <CTRL-l>\n\n","id":"https://phlip9.com/notes/lang/gdb ref/","title":"gdb ref"},"https://phlip9.com/notes/lang/koka-lang/":{"body":"koka-lang\n\nKoka Book: https://koka-lang.github.io/koka/doc/book.html\n\nfunctions literally all the way down (mod some primitives)\nalgebraic effects nicely integrated into the language at all levels\nfirst-class effect type, composes nicely, allows user-defined control flow, almost all control syntax (e.g. while, for, ..) is actually just functions\n+ fun for ( start : int, end : int, action : (int) -> e ()) : e ()\n+ fun while( pred : () -> <div|e> bool, action : () -> <div|e> () ) : <div|e> ()\n+ note: <div|e> means polymorphic effect e union effect div (divergent, possibly non-terminating)\nuniversal dot call syntax! myint.double == double(myint)\neffects effectively specify an \"interface\" of handlers, which can be overridden\nvery curious how extensive non-linear control flow affects performance : )\n\n","id":"https://phlip9.com/notes/lang/koka-lang/","title":"koka-lang"},"https://phlip9.com/notes/lang/lua/":{"body":"lua\n\nSyntax\n \n #\n \n\n\nfunction foo(x)\n -- <body>\nend\n\n-- local to the scope\nlocal function bar()\n -- <body>\nend\n\n-- anonymous function (all fns are technically anonymous)\nlocal max = function (x, y)\n return (a > b) and a or b\nend\n\n-- simulate \"named\" args\nfunction rename(args) do\n os.rename(args.old, args.new)\nend\n-- can call w/o parens\nrename{ new = \"perm.lua\", old = \"temp.lua\" }\n\nif x then\n -- <case 1>\nelseif y then\n -- <case 2>\nelse\n -- <case 3>\nend\n\nwhile x do\n -- <block>\nend\n\nrepeat\n -- <block>\nuntil x\n\n-- note end is _inclusive_\nfor i = 1, 3 do\n print(i)\nend\n\n-- output:\n-- > 1\n-- > 2\n-- > 3\n\nfor i = 3, 1, -1 do\n print(i)\nend\n\n-- output:\n-- > 3\n-- > 2\n-- > 1\n\n-- iterate over an _array_\nlocal a = { 1, 3, 5 }\nfor i, x in ipairs(a) do\n print(i, x)\nend\n\n-- output:\n-- > 1\t1\n-- > 2\t3\n-- > 3\t5\n\n-- iterate over a table (order not guaranteed)\nlocal a = { 1, 3, 5 }\nfor i, x in ipairs(a) do\n print(i, x)\nend\n\n-- output:\n-- > 1\t10\n-- > 2\tfoo\n-- > x\t5\n-- > y\t3\n\n-- creates a new scope\ndo\n -- <block>\nend\n\n-- multiple assignment\na, b = 10, 20\n\n-- this is a block comment\n--[[\nprint(x)\n--]]\n\n-- new table\nx = {}\nx[\"foo\"] = 5\n\n-- array (note 1-indexed)\nlocal a = {}\nfor i = 1, 5 do\n a[i] = math.random(10)\nend\n\nSemantics\n \n #\n \n\n\n\nundefined variables default to nil\n_ALL_CAPS variables are reserved for lua\ntypes: nil, boolean, number (double), string (immutable, just dumb byte vec), table (map type), function, userdata (opaque blobs from external libs), thread (but actually coroutine, not OS thread)\nall values are true except false and nil\narrays are just tables with number keys\nvariables are global by default, need to declare with local to restrict to lexical scoping\narrays cannot have holes, but can be partially filled until used\n\nIdioms\n \n #\n \n\n\n-- default value\nx = x or \"default\"\n\nStrings\n \n #\n \n\n\n-- string concat\n\"foo\" .. \" bar\"\n\n-- string length\n#\"foo\"\n\n-- multiline strings\nescapes = [[\n \\f (form feed)\n \\n (newline)\n \\r (carriage return)\n]]\nprint(\"|\" .. escapes .. \"|\")\n\n-- output:\n-- > | \\f (form feed)\n-- > \\n (newline)\n-- > \\r (carriage return)\n-- > |\n\nArrays\n \n #\n \n\n\n-- remove last entry\na[#a] = nil\n-- or\ntable.remove(a, #a)\n\n-- append entry\na[#a + 1] = \"foo\"\n-- or\ntable.insert(a, #a + 1, \"foo\")\n\n-- insert (shifting other elts)\ntable.insert(a, 1, \"foo\")\n\n-- sort\ntable.sort({ 5, 3, 9, 1, 7})\n-- > { 1, 3, 5, 7, 9 }\n\n-- concat\ntable.concat({ 1, 2, 3 }, \" \")\n-- > \"1 2 3\"\n\nStructs\n \n #\n \n\n\npoint = { x = 10, y = 20 }\nprint(point.x)\n\nIterators\n \n #\n \n\n\n\nan iterator is just a function with some local state. each time you call the function it returns the next value and nil when finished.\n\nexample:\n-- returning a closure that modifies the outer fn args each call\nfunction fromto(a, b)\n return function ()\n if a > b then\n\t return nil\n\telse\n\t a = a + 1\n\t return a - 1\n end\n end\nend\n\nfor x in fromto(2, 5) do\n print(x)\nend\n\n-- > 2\n-- > 3\n-- > 4\n-- > 5\n\n\nthere are also stateless iterators\n\nfunction fromto(a, b)\n return function (state, seed)\n if seed >= state then\n\t return nil\n\telse\n\t return seed + 1\n\tend\n end, b, a - 1 -- notice the state, seed returned here\nend\n\n\nand \"seedless\" iterators\n\nfunction fromto(a, b)\n return function(state)\n if state[1] > state[2] then\n\t return nil\n\telse\n\t state[1] = state[1] + 1\n\t return state[1] - 1\n\tend\n end, { a, b } -- this is the initial state\nend\n\nErrors\n \n #\n \n\n\nexpressing errors:\n\ncan return out, err, where out is nil if there was an error and err is an error message\ncan raise an exception with e.g. assert(cond) or error(\"error message\")\n+ error has an optional 2nd arg that specifies the \"error-level\", where error(\"..\", 1) means \"this function is to blame\", error(\"..\", 2) means \"the calling function is to blame\", error(\"..\", 3) means the caller's caller, etc...\n\ncatching errors:\npcall(function, arg1, arg2, ..) will return ok, result where ok: boolean and result is the succesful output or the error message.\nalso\nxpcall(\n\tfunction ()\n\t -- do fallible thing\n\tend,\n\tfunction (err)\n\t -- handle error\n\tend\n)\n\ndebug.traceback() returns the traceback as a string\nModules\n \n #\n \n\n\n\nmodules are just tables\nsome standard modules: table, io, string, math, os, coroutine, package, debug, all included in the prelude\n\"import\" a module with mymodule = require \"mymodule\"\nrequire searches package.path to find modules\n\ncan (usually) modify the path with LUA_PATH env var\nlua replaces \";;\" in the env var with the pre-compiled default\nthe format is a series of \";\" separated template strings, where \"?\" is replaced with the module name\ne.g., \"/usr/local/share/lua/5.2/?.lua;/usr/local/share/lua/5.2/?/init.lua;./?.lua\"\nlua replaces \".\" in the module name with platform path separator. used to import from packages with many modules\n\n\n\ndefining a module\n-- file: complex.lua\nlocal complex = {}\n\nfunction complex.new(r, i)\n return { real = r or 0, im = i or 0 }\nend\n\ncomplex.i = complex.new(0, 1)\n\nfunction complex.add(c1, c2)\n return complex.new(c1.real + c2.real, c1.im + c2.im)\nend\n\nfunction complex.tostring(c)\n return tostring(c.real) .. \"+\" .. tostring(c.im) .. \"i\"\nend\n\nreturn complex\n\nMetatables\n \n #\n \n\n\n\ncan set metatable for a table to override built-in behaviours, e.g., arithmetic, tostring, equality, iteration, call table as fn, etc...\nuse setmetatable and getmetatable functions\nmetamethods: __add, __sub, __mul, __div, __mod, __pow, __unm, __concat, __len, __eq, __lt, __le, __index, __newindex, __call, __tostring, __ipairs, __pairs, __gc\n__index and __newindex can be tables, used for single-inheritance OO\n\naugmenting complex.lua defined above with metatables\nlocal complex = {}\nlocal mt = {}\n\nfunction complex.new(r, i)\n return setmetatable({ real = r or 0, im = i or 0 }, mt)\nend\n\nfunction complex.is_complex(c)\n return getmetatable(c) == mt\nend\n\ncomplex.i = complex.new(0, 1)\n\nfunction complex.add(c1, c2)\n return complex.new(c1.real + c2.real, c1.im + c2.im)\nend\nmt.__add = complex.add\n\nfunction complex.eq(c1, c2)\n return (c1.real == c2.real) and (c1.im == c2.im)\nend\nmt.__eq = complex.eq\n\nfunction complex.norm(c)\n return math.sqrt(c.real * c.real + c.im * c.im)\nend\nmt.__len = complex.norm\n\nfunction complex.tostring(c)\n return tostring(c.real) .. \"+\" .. tostring(c.im) .. \"i\"\nend\nmt.__tostring = complex.tostring\n\nreturn complex\n\nOO\n \n #\n \n\n\n\nusing dot-notation doesn't add implicit self to call. you need to include it manually like obj.method(obj, args)\nto avoid this duplication, lua has colon-notation which adds this implicit self as the first arg: obj:method(args).\ndeclaring functions using a obj:method adds implicit self parameter\n\nfunction point:norm()\n return math.sqrt(self.x * self.x + self.y * self.y)\nend\n\ncan define prototype-style classes\nlocal Complex = {}\nComplex.__index = Complex\n\nfunction Complex:new(r, i)\n return setmetatable({ real = r or 0, im = i or 0 }, self)\nend\n\nfunction Complex:norm()\n return math.sqrt(self.real * self.real + self.im * self.im)\nend\n\n-- etc...\n\nreturn Complex\n\nadding other fields to Complex makes them default values for new instances\nlocal Complex = { real = 0, im = 0 }\n\nsingle inheritance (Point extends Shape)\nlocal Shape = {}\nShape.__index = Shape\n\nfunction Shape:new(x, y)\n return setmetatable({ x = x, y = y }, self)\nend\n\nfunction Shape:move(dx, dy)\n self.x = self.x + dx\n self.y = self.y + dy\nend\n\nreturn Shape\n\nlocal Shape = require \"shape\"\nlocal Point = setmetatable({}, Shape)\nPoint.__index = Point\n\nfunction Point:area()\n return 0\nend\n\nreturn Point\n\nlocal Point = require \"point\"\np = Point:new(5, 10)\nprint(p:area())\n-- > 0\np:move(-3, 7)\nprint(p.x, p.y)\n-- > 2 17\n\nthis is a simple version of OO in lua (there are more sophisticated versions). some disadvantages of this approach: 1. class methods (e.g. new) visible in instance namespace, 2. metamethods are not automatically inherited (need to be explicitly set)\n","id":"https://phlip9.com/notes/lang/lua/","title":"lua"},"https://phlip9.com/notes/lang/operator fixity and precedence/":{"body":"operator fixity and precedence\n\nYou come across a Haskell/Idris/LEAN file littered with custom operators (read \"delicious operator soup\"):\nparseJson = withObject \"Foo\" $\n \\v -> Foo <$> v .: \"name\"\n <*> v .: \"owner\"\n <*> v .: \"deadline\"\n <*> v .: \"status\"\n <*> v .:? \"reco\"\n <*> v .: \"benefit\"\n <*> v .: \"cost\"\n <*> v .: \"residual\"\n\nHow do you parse this without tearing your eyes out?\nIf setting fire to your computer and becoming a wheat farmer doesn't sound like a viable career path, then you should start by finding the list of operators for your language. Here are the ones defined in Idris' prelude:\nmodule Prelude.Ops\n\n-- Numerical operators\ninfix 6 ==, /=, <, <=, >, >=\ninfixl 8 +, -\ninfixl 9 *, /\n\n-- Boolean operators\ninfixr 5 &&\ninfixr 4 ||\n\n-- List and String operators\ninfixr 7 ::, ++\ninfixl 7 :<\n\n-- Functor/Applicative/Monad/Algebra operators\ninfixl 1 >>=, =<<, >>, >=>, <=<, <&>\ninfixr 2 <|>\ninfixl 3 <*>, *>, <*\ninfixr 4 <$>, $>, <$\ninfixl 8 <+>\n\n-- Utility operators\ninfixr 9 ., .:\ninfixr 0 $\n\ninfixl 9 `div`, `mod`\n\nand the documentation for infix(r|l):\n> :doc infix\nFixity declarations:\n\n Operators can be assigned a priority level and associativity.\n During parsing operators with a higher priority will collect their\n arguments first and the declared associativity will inform how subterms\n are grouped.\n\n For instance the expression `a + b * c * d + e` is parsed as\n\n `(a + ((b * c) * d)) + e` because:\n `(+)` is at level 8 and associates to the left\n `(*)` is at level 9 and associates to the left\n\nTo understand how these expressions are parsed, we need to understand the properties of all operators.\n\nArity (the number of inputs)\nFixity (infix, prefix, postfix)\nAssociativity (how parentheses are placed)\nPrecedence (the order of operations between different operators)\n\nArity\n \n #\n \n\n\nOperator arity refers to the number of inputs of an operator. The most common arities with some examples:\n\nNullary (zero inputs): less of an operator and more of a constant.\nUnary (one input): e.g., boolean negation ! or bitwise-not ~.\nBinary (two inputs): e.g., arithmetic +,-,*,/\n\nFixity\n \n #\n \n\n\nOperator fixity describes the operator's position in the list of arguments. There are three fixities:\n\nPrefix (operator comes before arguments): e.g., typical function application plus 3 4 or forced prefix form (+) 3 4\nInfix (operator comes between arguments): e.g., all arithmetic 3 + 4\nPostfix (operator comes after arguments): e.g., RPN (Reverse Polish Notation) or concatinative languages 3 4 +\n\nAssociativity\n \n #\n \n\n\nOperator associativity determines how the inner-most parentheses are placed when parsing an expression with the same operator (or same precedence).\nFor example, if you have the expression a ◯ b ◯ c ◯ d with some operator ◯, there are 5 ways we can parse it:\n\n((a ◯ b) ◯ c) ◯ d <-- left associative\na ◯ (b ◯ (c ◯ d)) <-- right associative\n(a ◯ b) ◯ (c ◯ d)\na ◯ ((b ◯ c) ◯ d)\n(a ◯ (b ◯ c)) ◯ d\n\nIn other words, left associative means we place the inner-most parentheses around the left-most pair, while right associative prefers the right-most pair.\nOperators can also be non-associative, which means a ◯ b ◯ c should fail to parse. An example would be relational operators like x <= y <= z, since (x <= y) <= z would fail to type check, as you would be comparing a boolean to a z.\nPrecedence\n \n #\n \n\n\nOperator precedence allows us to parse expressions containing multiple different operators without ambiguity. Precedence is a number; higher numbers mean higher priority when parsing.\nI like to imagine parsing precedence for an expression in passes. The first pass we parse only operators of precedence 10. The next pass parses precedence 9, and so on. In each pass we ignore all operators below the current precedence level.\nFrom school, we know that * has a higher precedence than +. In Idris2 you can see * has precedence 9 while + has precedence 8. Consequently, the expression 100 - 5 * 9 + 111 is parsed like\n base expr: 100 - 5 * 9 + 111\nprecedence 9: 100 - (5 * 9) + 111\nprecedence 8: (100 - (5 * 9)) + 111\n\n","id":"https://phlip9.com/notes/lang/operator fixity and precedence/","title":"operator fixity and precedence"},"https://phlip9.com/notes/lang/rust/":{"body":"","id":"https://phlip9.com/notes/lang/rust/","title":"lang/rust"},"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"body":"optimizing binary size\n\nSetup\n \n #\n \n\n\n# for running cargo bloat\n$ RUSTFLAGS=\"-C target-cpu=native\" c install cargo-bloat\n\n# for running cargo size (among other things)\n$ rustup component add llvm-tools-preview\n$ rustup +nightly component add llvm-tools-preview # (for strip=symbols)\n$ RUSTFLAGS=\"-C target-cpu=native\" c install cargo-binutils\n\nTL;DR\n \n #\n \n\n\n# compile and sort functions by binary size\n$ cargo bloat --release -n 100\n\n# only like 20-25% of the binary size seems to be our code or other relevant\n# stuff like ndarray. The rest seems to be mostly panic and fmt\n# infrastructure...\n\n# compile and sort crates by binary size\n$ cargo bloat --release --crates\n\n# print the size of each section in the binary\n$ cargo size --bin my-bin --release -- -A\n\n# if you already have a built rust binary, you can run\n# rust-size directly:\n$ rust-size -A target/release/my-bin\n\n# rust-size with nice sorted and human-readable output:\n$ rust-size -A target/release/my-bin \\\n\t| tail -n +2 \\\n\t| sort --numeric-sort --key=2 \\\n\t| numfmt --header=3 --to=iec-i --suffix=B --field=2\n\n# strip debug info and all symbols (requires nightly) then print section size\n$ RUSTFLAGS=\"-Z strip=symbols -C target-cpu=native\" cargo +nightly \\\n\tsize --bin my-bin --release -- -A\n\n# before: 1.8 MiB! looking at the sections, it's mostly debug info.\n# \"-Z strip=symbols\" brings this down to like 330-400 KiB (depending on\n# other flags etc...)\n\n# TODO: cargo-binutils also installed `cargo strip`; maybe that's helpful?\n\nCargo.toml\n \n #\n \n\n\n[profile.release]\ncodegen-units = 1\nlto = true\npanic = \"abort\"\n# opt-level = \"s\" # optimize for size, but still unroll\n# opt-level = \"z\" # optimize for size, no unrolling at all\nopt-level = 3\ndebug = 0\n\nCompile std with panic = \"abort\"\n \n #\n \n\n\n\nshaves off maybe 150 KiB?\nremoves a decent chunk of the backtrace/unwind infrastructure\n\n# .cargo/config.toml\n[unstable]\nbuild-std = [\"std\", \"panic_abort\"]\nbuild-std-features = [] # <- turns off backtrace+unwind features\n\nWASM\n \n #\n \n\n\nhttps://rustwasm.github.io/twiggy/\nExample: fixing bloat\n \n #\n \n\n\nLet me just run a quick smoketest (which depends on almost every crate in the monorepo)...\n$ cargo test -p smoketest\n# ..\n Finished test [unoptimized + debuginfo] target(s) in 1m 28s\n Running unittests src/lib.rs (target/debug/deps/smoketest-bd637d7668a0b714)\n# ..\n\nMan that sure took a while to link, I wonder how big the binary is?\n$ ls -lah target/debug/deps/smoketest-bd637d7668a0b714\n-rwxrwxr-x 1 phlip9 phlip9 880M May 4 11:19 target/debug/deps/smoketest-bd637d7668a0b714\n\nJESUS. RIP MY SSD.\n$ rustup component add llvm-tools-preview\n$ rust-size -A target/debug/deps/smoketest-bd637d7668a0b714 \\\n\t| tail -n +2 \\\n\t| sort --numeric-sort --key=2 \\\n\t| numfmt --header=3 --to=iec-i --suffix=B --field=2\nsection size addr\n.fini_array 8 63669912\n.fini 13 52345408\n.init_array 16 63669896\n.plt.got 24B 3608704\n.init 27B 3608576\n.interp 28B 848\n.note.ABI-tag 32B 948\n.note.gnu.property 32B 880\n.debug_gdb_scripts 34B 55423896\n.note.gnu.build-id 36B 912\n.comment 43B 0\n.gnu.hash 48B 984\n.tdata 72B 63669824\n.plt 96B 3608608\n.rela.plt 120B 3605536\n.gnu.version 318B 7088\n.gnu.version_r 432B 7408\n.dynamic 544B 64809064\n.tbss 696B 63669896\n.bss 2.1KiB 65535456\n.dynstr 2.2KiB 4848\n.dynsym 3.8KiB 1032\n.debug_macro 12KiB 0\n.data 24KiB 65511424\n.got 686KiB 64809608\n.data.rel.ro 1.1MiB 63669920\n.gcc_except_table 1.4MiB 62213696\n.eh_frame_hdr 1.5MiB 55423932\n.debug_abbrev 2.3MiB 0\n.rodata 3.0MiB 52346880\n.rela.dyn 3.5MiB 7840\n.debug_loc 3.5MiB 0\n.debug_aranges 4.9MiB 0\n.eh_frame 5.1MiB 56953128\n.debug_ranges 15MiB 0\n.debug_line 28MiB 0\n.text 47MiB 3608768\n.debug_pubnames 112MiB 0\n.debug_str 175MiB 0\n.debug_info 175MiB 0\n.debug_pubtypes 275MiB 0\nTotal 851MiB\n\nWTF IS GOING ON WITH THE .debug_pubtypes SECTION???\nOk ok, let's take a look at what we're working with...\n$ sudo apt install dwarfdump\n\n$ dwarfdump --print-type --format-suppress-offsets target/debug/deps/smoketest-bd637d7668a0b714 \\\n\t| head -n 10\n\n.debug_pubtypes\n 'ErrorData<alloc::boxed::Box<std::io::error::Custom, alloc::alloc::Global>>'\n 'alloc::boxed::Box<std::io::error::Custom, alloc::alloc::Global>'\n 'alloc::boxed::Box<(dyn core::error::Error + core::marker::Send + core::marker::Sync), alloc::alloc::Global>'\n 'Result<(), std::io::error::Error>'\n 'NonNull<u8>'\n 'u8'\n 'SimpleMessage'\n 'ErrorKind'\n\nHow many types we got?\n$ dwarfdump --print-type --format-suppress-offsets target/debug/deps/smoketest-bd637d7668a0b714 \\\n\t| wc -l\n\t| numfmt --to=si\n2.3M\n\nMaybe there's some giga types?\n$ dwarfdump --print-type --format-suppress-offsets target/debug/deps/smoketest-bd637d7668a0b714 \\\n\t| awk '{ print length, $0 }' \\\n\t| sort -n -r \\\n\t> smoketest_debug_pubtypes\n\n$ head -n 10 smoketest_debug_pubtypes\n72011 '{closure_env#0}<&str, &str, n ..\n71962 '&mut (nom::sequence::terminat ..\n71957 '(nom::sequence::terminated::{ ..\n71957 '(nom::sequence::terminated::{ ..\n66740 '&mut nom::branch::alt::{closu ..\n66717 '{closure_env#0}<&str, &str, n ..\n66717 '{closure_env#0}<&str, &str, n ..\n66668 '&mut (nom::sequence::terminat ..\n66663 '(nom::sequence::terminated::{ ..\n66663 '(nom::sequence::terminated::{ ..\n\nOk despite nom taking to top 10, it looks like the primary culprit is my arch nemesis warp. CURSE YOU WARP AND YOUR COMPOSABLE GENERICS.\nLet's see what proportion of our .debug_pubtypes is warp...\n$ cat smoketest_debug_pubtypes \\\n\t| cut -d \" \" -f1 - \\\n\t| awk '{sum += $1} END {print sum}' \\\n\t| numfmt --to=iec-i --suffix=B\n271MiB\n\n$ grep \"nom\" smoketest_debug_pubtypes \\\n\t| cut -d \" \" -f1 - \\\n\t| awk '{sum += $1} END {print sum}' \\\n\t| numfmt --to=iec-i --suffix=B\n3.3MiB\n\n$ grep \"warp\" smoketest_debug_pubtypes \\\n\t| cut -d \" \" -f1 - \\\n\t| awk '{sum += $1} END {print sum}' \\\n\t| numfmt --to=iec-i --suffix=B\n82MiB\n\n$ grep \"lightning\" smoketest_debug_pubtypes \\\n\t| cut -d \" \" -f1 - \\\n\t| awk '{sum += $1} END {print sum}' \\\n\t| numfmt --to=iec-i --suffix=B\n45MiB\n\n$ grep \"proptest\" smoketest_debug_pubtypes \\\n\t| cut -d \" \" -f1 - \\\n\t| awk '{sum += $1} END {print sum}' \\\n\t| numfmt --to=iec-i --suffix=B\n5MiB\n\n$ grep \"Vec\" smoketest_debug_pubtypes \\\n\t| cut -d \" \" -f1 - \\\n\t| awk '{sum += $1} END {print sum}' \\\n\t| numfmt --to=iec-i --suffix=B\n71MiB\n\n$ grep \"hyper\" smoketest_debug_pubtypes \\\n\t| cut -d \" \" -f1 - \\\n\t| awk '{sum += $1} END {print sum}' \\\n\t| numfmt --to=iec-i --suffix=B\n95MiB\n\n$ grep \"tokio\" smoketest_debug_pubtypes \\\n\t| cut -d \" \" -f1 - \\\n\t| awk '{sum += $1} END {print sum}' \\\n\t| numfmt --to=iec-i --suffix=B\n95MiB\n\nA bunch of duplicates...\nChecking out the .debug_str section:\n$ dwarfdump --print-strings --format-suppress-offsets target/debug/deps/smoketest-bafe2762ec60a400 | sort --numeric-sort --key=3 | cut -b -80 | tail -n 10\nname: length 67206 is 'pin<futures_util::future::try_future::into_future::IntoFu\nname: length 67220 is 'get_unchecked_mut<futures_util::future::try_future::into_\nname: length 67222 is 'leak<alloc::sync::ArcInner<warp::filter::boxed::BoxingFil\nname: length 67229 is 'from<futures_util::future::try_future::into_future::IntoF\nname: length 67233 is 'into_pin<futures_util::future::try_future::into_future::I\nname: length 67240 is 'new<alloc::boxed::Box<alloc::sync::ArcInner<warp::filter:\nname: length 67257 is 'new_unchecked<alloc::boxed::Box<futures_util::future::try\nname: length 71736 is 'choice<&str, &str, nom::error::Error<&str>, nom::sequence\nname: length 134431 is 'into<&mut alloc::sync::ArcInner<warp::filter::boxed::Box\nname: length 134508 is 'into<alloc::boxed::Box<futures_util::future::try_future:\n\n","id":"https://phlip9.com/notes/lang/rust/optimizing binary size/","title":"optimizing binary size"},"https://phlip9.com/notes/lang/rust/rr with rust/":{"body":"rr with rust\n\ngithub: https://github.com/rr-debugger/rr\nsite: https://rr-project.org/\nwhat\n \n #\n \n\n\n\nrr is a lightweight tool for recording, replaying, and debugging applications.\nrr records deterministic traces of the entire program execution (including all child processes and spawned threads), which can be replayed many times or even run in reverse.\nrr models a single-threaded machine. It creates a deterministic trace by intercepting and recording all Linux syscalls for later replay. rr also controls the thread and process scheduling so we can even determinstically replay concurrent programs.\n\nwhy\n \n #\n \n\n\n\nyou have a flaky concurrency bug that only manifests occasionally.\n\n==> use rr to record 1000s of execution traces (also try --chaos mode!) until a lucky one finally triggers the bug. Later, replay the failing trace as many times as you please.\n\n\nif you're like me, you're terrible at setting breakpoints.\n\n==> with rr you can just replay the same exact execution with better breakpoints; no state changing under your feet between runs.\n\n\nyou have a backtrace but the offending code isn't in any of the backtrace frames\n\n==> just execute the program backwards until you hit the problem.\n\n\nyour fuzzer sometimes finds a bug after 10 hr, but when you run again the bug ain't there\n\n==> run your fuzzers inside rr. when the fuzzer hits a bug, you can easily replay it.\n\n\n\nBetter yet, use rr as a general purpose gdb enhancement : )\nrequirements\n \n #\n \n\n\n\nLinux kernel >= 3.11\n\nWorks inside a VM if the VM supports virtualization of hardware perf counters. (incl. VMware and KVM; does not incl. Xen).\n\n\nOne of:\n\nIntel CPU with Nehalem (2010) or later\nCertain AMD Zen or later https://github.com/rr-debugger/rr/wiki/Zen\nCertain AArch64 archs (includes Apple Silicon M-series)\n\n\n\nsetup\n \n #\n \n\n\n$ sudo apt install rr\n\nYou will also need gdb installed, since rr replay is \"just\" a wrapper around gdb.\n$ sudo apt install gdb\n\nWhen debugging rust code, there are a few extra command flags that rr needs. Tests are also slightly more annoying to debug, since cargo runs your test binary in a sub-process. The cargo rr tool makes the debugging process painless.\n$ cargo install cargo-rr\n\nrecord a trace for deterministic replay\n \n #\n \n\n\n# Record a test\n$ cargo rr test my_failing_test\n\n# Record a binary\n$ cargo rr run --bin=foo -- --arg=bar\n\nNOTE: if you get an error message like rr needs /proc/sys/kernel/perf_event_paranoid <= 1, but it is 2. then try:\n$ echo 1 | sudo tee /proc/sys/kernel/perf_event_paranoid\n\nreplay last trace\n \n #\n \n\n\n$ cargo rr replay\n\nIf you prefer a more visual debugging experience and hate the letter l, try the TUI debugger:\n(rr) <CTRL-X a>\n\n# if that doesn't work, try\n(rr) tui enable\n\nSee: gdb ref > TUI keybindings not working\ndebugging\n \n #\n \n\n\nDebugging with rr looks the same as debugging with gdb, except you have a few extra commands for executing backwards.\n(rr) help reverse-continue\nreverse-continue, rc\nContinue program being debugged but run it in reverse.\nIf proceeding from breakpoint, a number N may be used as an argument,\nwhich means to set the ignore count of that breakpoint to N - 1 (so that\nthe breakpoint won't break until the Nth time it is reached).\n\n(rr) help reverse-step\nreverse-step, rs\nStep program backward until it reaches the beginning of another source line.\nArgument N means do this N times (or till program stops for another reason).\n\n(rr) help reverse-next\nreverse-next, rn\nStep program backward, proceeding through subroutine calls.\nLike the \"reverse-step\" command as long as subroutine calls do not happen;\nwhen they do, the call is treated as one instruction.\nArgument N means do this N times (or till program stops for another reason).\n\n...\n\n(rr) help r<TAB>\nrbreak return rr-history-push\nrc reverse-continue rr-hook-run\nrecord reverse-finish rr-set-suppress-run-hook\nrefresh reverse-next rr-where\nremote reverse-nexti rsi\nremove-inferiors reverse-search run\nremove-symbol-file reverse-step running\nrestart reverse-stepi rwatch\nrestore rni\n\nmisc\n \n #\n \n\n\n\nmy gdb reference\nrun rr in Docker\ngdb cheat sheet\n\n","id":"https://phlip9.com/notes/lang/rust/rr with rust/","title":"rr with rust"},"https://phlip9.com/notes/lang/rust/rust verification tools/":{"body":"rust verification tools\n\nRudra\n \n #\n \n\n\nGithub: https://github.com/sslab-gatech/Rudra\nRudra is a static analyzer to detect common undefined behaviors in Rust programs. It is capable of analyzing single Rust packages as well as all the packages on crates.io.\nPrusti\n \n #\n \n\n\nGithub: https://github.com/viperproject/prusti-dev\nPrusti is a prototype verifier for Rust, built upon the Viper verification infrastructure.\nBy default Prusti verifies absence of integer overflows and panics by proving that statements such as unreachable!() and panic!() are unreachable. Overflow checking can be disabled with a configuration flag, treating all integers as unbounded. In Prusti, the functional behaviour of a function can be specified by using annotations, among which are preconditions, postconditions, and loop invariants. The tool checks them, reporting error messages when the code does not adhere to the provided specification.\nMIRAI\n \n #\n \n\n\nGithub: https://github.com/facebookexperimental/MIRAI\nMIRAI is an abstract interpreter for the Rust compiler's mid-level intermediate representation (MIR). It is intended to become a widely used static analysis tool for Rust.\n","id":"https://phlip9.com/notes/lang/rust/rust verification tools/","title":"rust verification tools"},"https://phlip9.com/notes/lang/rust/rust x SGX/":{"body":"rust x SGX\n\nLinks\n \n #\n \n\n\nTrusted Compute with Rust and SGX (Tutorial)\nVideo\nTeaclave SGX SDK\nTeaclave Github\nsignalapp/sgx_common\nrust-lang/rust - std::sys::sgx\nfortanix/rust-sgx\nedp.fortanix.com\n","id":"https://phlip9.com/notes/lang/rust/rust x SGX/","title":"rust x SGX"},"https://phlip9.com/notes/lang/rust/self-referencing structs/":{"body":"self-referencing structs\n\nyoke\n \n #\n \n\n\nouroboros\n \n #\n \n\n\ngsrs - UNMAINTAINED\n \n #\n \n\n\nrental - DEPRECATED\n \n #\n \n\n\n","id":"https://phlip9.com/notes/lang/rust/self-referencing structs/","title":"self-referencing structs"},"https://phlip9.com/notes/lang/rust/sycamore x futures/":{"body":"sycamore x futures\n\nCan use gloo / gloo_timers crate for web-compatible futures. For example, gloo_timers::sleep(duration) -> TimeoutFuture.\nSpawn a future on the current thread. Must be 'static and so can't contain any ScopeRefs or w/e:\nsycamore::futures::spawn_local(future)\n\nSpawn a !Send future (which can contain ScopeRefs) using ctx.spawn_future:\nuse sycamore::futures::ScopeSpawnFuture;\n\nctx.spawn_future(future);\n\nConvert a Future<U> to a Signal<U> using ctx.create_resource:\nuse sycamore::futures::ScopeFuturesExt;\n\nctx.create_resource(future);\n\nWeb Workers\n \n #\n \n\n\nLike threads for browser (but worse lol). No shared memory allowed; only serialized message passing. Workers can't manipulate the DOM.\n\nSharedWorkers (also \"Public\" workers) are a special kind of worker that can be accessed from multiple browser windows, tabs, or other workers. There can only exist one instance at a time.\n\"Private\" workers can be fired up and down at-will. Good for farming out work.\n\nCommunicating with workers:\n\nBridges allow bidi comms b/w worker and component (or other workers).\nDispatchers allow uni comms from component to worker.\n\n","id":"https://phlip9.com/notes/lang/rust/sycamore x futures/","title":"sycamore x futures"},"https://phlip9.com/notes/lang/rust/understanding sycamore reactivity/":{"body":"understanding sycamore reactivity\n\nDocs: https://sycamore-rs.netlify.app/docs/basics/reactivity\n\nWhenever reactivity is used, there must be a reactive scope.\n\nWhat is a reactive scope? Ex: Scope provides a reactive scope.\nA Signal wraps a value and lets you listen for changes to that value.\nTo actually listen on a Signal, you need to call signal.get() inside a listener scope (which is not the same as a reactive scope).\nNotably, #[component] function bodies do not provide a listener scope, so calling signal.get() in a component won't re-render the component if the signal changes. However, the view! { ctx, _ } macro body provides an implicit listener scope when interpolating.\nmethodargsreturnsdescription\nctx.create_effectFnMut()()calls closure when a signal changes (signal.get() must be called in the closure to register it). used to impl most other methods here\nctx.create_memoFnMut() -> U&ReadSignal<U>calls closure when a registered signal changes and wraps the return value as a derived signal.\nctx.create_selectorFnMut() -> U&ReadSignal<U>calls closure when a registered signal changes. like create_memo but the derived signal only notifies if the return value is actually different from the previous value (Note: U must impl PartialEq).\nctx.create_reducerU, FnMut(&U, Msg) -> U(&ReadSignal<U>, Fn(Msg))calls closure whenver the message handler Fn(Msg) gets called. kind of like an async fold, where the closure is an actor message handler.\nsignal.mapctx, FnMut(&T) -> U&ReadSignal<U>calls closure with signal value whenever signal changes. returns derived signal with return value.\n\nFor (all?) of the above methods, we always call the closure once initially. This also allows us to observe all the signal.get()s inside the closure, which we need to register which signals to listen on.\nFor example, to see how reactivity works with the view! macro, we can look at how it (approximately) is expanded:\n// before expansion\nlet state = ctx.create_signal(0);\nview! { ctx,\n\tp {\n\t\t(state.get())\n\t}\n}\n\n// after expansion\nlet state = ctx.create_signal(0);\n{\n let element = GenericNode::element(p);\n let text = GenericNode::text(String::new());\n\t// Update text when `state` changes.\n ctx.create_effect(move || {\n text.update_text(Some(&state.get()));\n\t});\n element.append(&text);\n element\n}\n\nAs you can see, interpolations happen inside an implicit create_effect, which does not happen for signals retrieved outside a view! macro.\n","id":"https://phlip9.com/notes/lang/rust/understanding sycamore reactivity/","title":"understanding sycamore reactivity"},"https://phlip9.com/notes/management/":{"body":"","id":"https://phlip9.com/notes/management/","title":"management"},"https://phlip9.com/notes/management/relieve often - why generals were more successful in WWII/":{"body":"relieve often - why generals were more successful in WWII\n\nSource: https://www.youtube.com/watch?v=AxZWxxZ2JGE\nThesis: During WWII, commanders were relieved early and often. Afterwards, tacit policy of never firing, never relieving, and frequent deployment rotation leads to culture of stagnation and risk-aversion.\n\nMarshall was sworn into office on the eve of WWII. He knew the US was unprepared and the existing general staff was too old and incompetant--he fired almost all of them.\nCommand expected results from new commanders in 60-90 days. If you fail to deliver, you are relieved (NOT fired, but effectively demoted or reshuffled).\n+ Is relief like moving laterally inside Corp? Usually lateral movement is employee initiated, but can also be \"suggested\" by manager, so maybe different.\n+ Engineers and managers usually move laterally every 1-3 years. Fresh problems, fresh people--keeps one from getting comfortable.\nClaim: as relief becomes more commonplace, it feels less like a punishment.\nRelieved commanders could often regain or exceed their old positions in only a year if they had success again.\nUse relief as a tool to prevent complacency--if you notice someone just coasting, relieve them. Need to keep them engaged.\nTwo extremes of management: micromanagement vs complete autonomy. Relief is the price of autonomy. Relief allows managerial \"liquidity\", like a credit card. You are given a loan of autonomy with the price (relief) due in 60-90 days if you don't succeed.\n+ Imagine in Corp you get a manager promo / extra headcount / project lead for a half, then reshuffled if you don't hit success criteria.\n+ Claim: prevents the Peter Principle (every employee rises to their level of incompetence) by facilitating quick level promotions (to find their plateau) then quickly relieving once you've exceeded their plateau.\n\n","id":"https://phlip9.com/notes/management/relieve often - why generals were more successful in WWII/","title":"relieve often - why generals were more successful in WWII"},"https://phlip9.com/notes/misc/":{"body":"","id":"https://phlip9.com/notes/misc/","title":"misc"},"https://phlip9.com/notes/misc/arm target triples/":{"body":"arm target triples\n\nSource: https://bgamari.github.io/posts/2019-06-12-arm-terminology.html\nTripleArchitectureEndiannessFloating pointABI\nARMv8\naarch64-linux-gnuAArch64LittleHardLinux\narmv8l-linux-gnuAArch32LittleHardLinux\nARMv7\narmv7l-linux-gnueabiARMv7LittleSoftLinux\narmv7l-linux-gnueabihfARMv7LittleHardLinux\narmv7a-linux-gnueabiARMv7LittleSoftLinux\narmv7a-linux-gnueabihfARMv7LittleHardLinux\narmv7-linux-androideabiARMv7LittleSoft?Linux\nARMv6\narm-linux-gnueabiARMv6LittleSoftLinux\narm-linux-gnueabihfARMv6LittleHardLinux\narm-none-eabiARMv6LittleSoftEmbedded\narm-none-eabihfARMv6LittleHardEmbedded\n\n","id":"https://phlip9.com/notes/misc/arm target triples/","title":"arm target triples"},"https://phlip9.com/notes/misc/envsubst/":{"body":"envsubst\n\n\nSubstitute environment variables ($VARS) in stdin with current env values and output to stdout.\n\nexamples\n \n #\n \n\n\n# envsubst\n#\n# Substitutes environment variables with their value in shell format strings.\n# Variables to be replaced should be in either `${var}` or `$var` format.\n#\n# More information: <https://www.gnu.org/software/gettext/manual/html_node/envsubst-Invocation.html>.\n\n# Replace environment variables in stdin and output to stdout:\n$ echo 'I live at $HOME.' | envsubst\nI live at /home/phlip9.\n\n# Replace environment variables in an input file and output to stdout:\n$ cat path/to/input_file\nI live at $HOME.\nMy name is $USERNAME.\n\n$ envsubst < path/to/input_file\nI live at /home/phlip9.\nMy name is phlip9.\n\n# Replace only some environment variables from a space-separated list:\n$ envsubst '$USERNAME' < path/to/input_file\nI live at $HOME.\nMy name is phlip9.\n\n","id":"https://phlip9.com/notes/misc/envsubst/","title":"envsubst"},"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"body":"git multirepo to monorepo\n\nthe setup\n \n #\n \n\n\n\nWe currently have a private repo and a public repo, mono and pub.\nThe pub repo is already exists as a published and open-source repo.\nWe'd like to merge pub into mono as a subdirectory mono/pub-dir.\nThe conversion must not lose the original pub subrepo history.\nThe migrated pub subrepo will still be published as a public, mostly read-only open source repo.\nThe conversion should not require a force-push rewrite of the pub subrepo history.\nFor privacy, new commits in mono that don't touch the mono/pub-dir subdirectory must not appear in the published pub subrepo.\ngit blame must continue to work as expected.\nFiltering and publishing changes from the monorepo to one of the subrepos should easily run in CI.\nIt should work with the built-in git tools.\n\n(0) current state\n \n #\n \n\n\nFirst, let's orient ourselves with the two repos:\n~/pub$ exa --tree\n.\n├── README.md\n└── client\n └── ..\n\n~/pub$ git lg\n* 5de880b - pub: add client (HEAD -> master)\n* ff12305 - pub: initial commit\n\n~/mono$ exa --tree\n.\n├── README.md\n└── backend\n └── ..\n\n~/mono$ git lg\n* e89ca6f - mono: add backend (HEAD -> master)\n* 5017487 - mono: initial commit\n\nUltimately we'd like our mono repo to look like:\n$ ~/mono$ exa --tree\n.\n├── README.md\n├── backend\n│ └── ..\n└── pub-dir # `pub-dir` will contain the `pub` subrepo\n ├── README.md\n └── client\n └── ..\n\nThe published pub subrepo will look the same immediately after conversion, but will exist as a \"projected\" view of the mono repo.\n(1) move all files in pub into the subdirectory\n \n #\n \n\n\nThe first step is to prepare the pub subrepo by creating a commit that moves all files into the desired future subdirectory of the monorepo.\nFor this example, we'll move all the files in pub into a new pub-dir subdirectory:\n# prepare public repo by moving all files into new `pub-dir` subdir.\n~/pub$ git branch migration\n~/pub$ mkdir ./pub-dir\n~/pub$ git ls-tree -z --name-only HEAD \\\n\t| xargs -0 -I{} git mv \"{}\" ./pub-dir/\n~/pub$ git commit -m \"pub: prepare for monorepo migration\"\n\n~/pub$ git lg\n* 33708aa - pub: prepare for monorepo migration (HEAD -> migration)\n* 5de880b - pub: add client (master)\n* ff12305 - pub: initial commit\n\nThis approach preserves the histories in both repos and doesn't require rewriting the public repo's existing history. When we push new changes from the mono repo to the pub subrepo, the existing public repo will continue to have its original history, just with new commits added on top!\n(2) git merge --allow-unrelated-histories\n \n #\n \n\n\nOnce the pub repo is prepared, we move into the mono repo and merge the two independent histories into one.\nThe key trick here is to use git merge --allow-unrelated-histories, which lets us have two \"root\" initial commits in the repo. In other words, our git history is no longer a single tree, but a \"forest\", which eventually grows together into one linear history.\nIn diagram form:\n* - mono+pub: merged linear history\n|\n⁞\n|\n* - mono+pub: merge commit\n|\\\n| *\n* \\\n| *\n⁞ ⁞\n⁞ * - pub: initial commit\n|\n* - mono: initial commit\n\nLet's do that now. We import all commits on master from the subrepo into the main mono repo. Best part: this works flawlessly with git blame!\n# Fetch the public repo from a local directory or remote url.\n# In our case `pub` is just in the parent directory:\n~/mono$ git remote add pub ../pub\n~/mono$ git fetch --no-tags pub migration\n~/mono$ git merge --allow-unrelated-histories pub/migration\n\n# See the two independent histories merged into one linear\n# history, without losing either history.\n~/mono$ git lg\n* 3888a45 - mono: merge pub repo into subdir (HEAD -> master)\n|\\\n| * 33708aa - pub: prepare for monorepo migration (pub/migration)\n| * 5de880b - pub: add client (pub/master)\n| * ff12305 - pub: initial commit\n* e89ca6f - mono: add backend\n* 5017487 - mono: initial commit\n\n# Push the migrated `mono` history.\n~/mono$ git push origin master\n\nNote: you can do this without git push'ing until the end, but it's somewhat tedious to describe in tutorial format.\n(3) git push new subrepo history upstream\n \n #\n \n\n\nNow that we have all the subrepos merged into mono, we only need to make changes in one place--no more PRs split across repos!\nOf course we still want changes to the subrepos inside mono to get pushed out to the public repos. We can accomplish this with git subtree split. We'll do this in a fresh clone, since it mangles the current repo state...\n# We project the monorepo history into it's public-only form.\n# This approach completely preserves the original public commits!\n#\n# NOTE: the subshell:\n#\n# ```\n# git rev-list --max-parents=0 pub/migration | tail --lines=1\n# ```\n#\n# simply picks out the root initial commit from the `pub`\n# subrepo history.\n\n# Get a fresh clone of the `mono` repo.\n~/$ git clone <origin-mono-repo-git-url> mono && cd mono\n~/mono$ git remote add pub <origin-pub-repo-git-url>\n~/mono$ git fetch pub\n~/mono$ git switch master\n\n# Project the `pub` subrepo history from the `mono` repo history.\n~/mono$ git subtree split \\\n\t--prefix=pub-dir/ \\\n\t--onto=$(git rev-list --max-parents=0 pub/migration | tail --lines=1)\n198017b02ffa2d45f301f6b9ba6424c4e849251b\n~/mono$ git reset --hard 198017b02ffa2d45f301f6b9ba6424c4e849251b\n\n# This is the \"projected\" `pub` repo history with new commits from\n# the `mono` repo.\n#\n# Note: commits that don't touch the `pub-dir/` subrepo will be\n# safely ignored.\n~/mono$ git lg\n* 198017b - mono+pub: this commit touches files on / and pub-dir/ (HEAD -> master)\n* 3269fbc - pub: this commit only touches files in pub-dir/\n* c7b8b55 - pub: prepare for monorepo migration\n* 5de880b - pub: add client (pub/master)\n* ff12305 - pub: initial commit\n\n# Push the projected `pub` history to the upstream `pub` repo.\n~/mono$ git push pub master\n\nNote: If we use git subtree split without --onto=<pub-initial-commit>, it will fail to determine the original subrepo root commit. Instead it will just squash all changes pre-merge, which is not what we want!\nappendix\n \n #\n \n\n\nThis section contains other alternative approaches that didn't work well for one reason or another. Feel free to skip everything below.\n(1) more janky git mv all files into subdir\n \n #\n \n\n\n~/pub$ git ls-files \\\n\t| sed -n -E \"s/^([^\\/]*)\\/?.*$/\\1/p\" \\\n\t| uniq \\\n\t| grep -v \"^pub-dir\" \\\n\t| xargs -I{} git mv \"{}\" ./pub-dir/\n\n(1) (alt) rewrite history into subdirectory\n \n #\n \n\n\nYou can also use git filter-repo to rewrite the whole commit history, as-if it had been written inside a subdirectory from the beginning:\n# install the `git filter-repo` tool, which replaces the (apparently\n# unsafe?) built-in filter-branch\n(deb)$ sudo apt install git-filter-repo\n(macOS)$ brew install git-filter-repo\n\n# After this command, all files in the current commit and all past\n# commits will be moved into the public-dir/ subdirectory.\n#\n# You'll need to do this in fresh repo clone, since this command trashes\n# all repo commits.\n~/pub$ git filter-repo --to-subdirectory-filter pub-dir\n\nThis approach will require a force-push, overwriting the original pub repo history as the later git subtree split doesn't appear to be fully lossless in this case, causing the commit hashes change. Note: this will only affect the commit hashes of the pub repo history after push. The changes in each commit will still appear (almost) exactly the same, i.e., they're still in the root directory.\n(2) (alt) git subrepo\n \n #\n \n\n\nSkip step (1) if you use this approach.\nThe git subrepo tool is a user-friendly alternative to the git submodule and git subtree commands.\n(macOS)$ brew install git-subrepo\n\n# git subrepo clone <remote-url> <subdir>\n~/mono$ git subrepo clone ../pub ./pub-dir\n\nUnfortunately, git subrepo clone squashes all the commit history before the merge. If you're just looking to vendor a dependency or don't care about the original history, this approach might be for you.\n(2) (alt) git subtree add\n \n #\n \n\n\nSkip step (1) if you use this approach.\ngit subtree is a built-in tool that lets you keep other repos phyiscally inside your main repo. If you don't care about git blame working, then this is an easier method.\n# git subtree add --prefix=<subdir> <remote-url> <remote-ref>\n~/mono$ git subtree add --prefix=pub-dir/ ../pub master\n\ngit subtree add at least preserves the original history, but git blame only works down to the merge commit for subtree files. :'(\n(2) (alt) git read/write/commit-tree\n \n #\n \n\n\nSkip step (1) if you use this approach.\nUsing some low-level git porcelain, we can merge the subrepo into a subdirectory without touching the subrepo. This method effectively creates a new tree object in the git db whose contents are a single subdirectory with the pub/master root tree. We then create a merge commit pointing to (1) the existing mono repo master commit and (2) the new manually created commit.\nUnfortunately, while the end result looks almost the same as [[#(1) move all files in pub into the subdirectory]], it appears to break git blame. :'(\n~/mono$ git remote add public ../public\n~/mono$ git fetch --no-tags public master\n~/mono$ git read-tree --prefix=public/ public/master\n~/mono$ git write-tree\nf1b1ee12e1d679ec84c282049102e2654efc4b67\n\n~/mono$ git commit-tree f1b1ee12e1d679ec84c282049102e2654efc4b67 \\\n\t-p master -p public/master -m \"monorepo merge\"\n046d3298b9976d50fa379fa071f57bc1158aca5b\n\n~/mono$ git reset 046d3298b9976d50fa379fa071f57bc1158aca5b && git restore .\n\n~/mono$ git lg\n* 854b553 - monorepo merge (HEAD -> master)\n|\\\n* | 5b02f51 - mono: add backend (origin/master)\n| * 7709d49 - pub: add client (public/master)\n\nother monorepo tools\n \n #\n \n\n\n\n(java) google/copybara\n(hack) facebook/fbshipit - Copy commits b/w repos\n(php) symplify/monorepo-split-gh-action\n(sh) ingydotnet/git-subrepo\n(py) newren/git-filter-repo\n(go) splitsh/lite\n(sh) SimonBaeumer/sync-monorepo\n\\[\n\\]\n\n\n","id":"https://phlip9.com/notes/misc/git multirepo to monorepo/","title":"git multirepo to monorepo"},"https://phlip9.com/notes/misc/kintsugi/":{"body":"kintsugi\n\n\nKintsugi (金継ぎ, \"golden joinery\") is the Japanese art of repairing broken pottery by mending the areas of breakage with lacquer dusted or mixed with powdered gold, silver, or platinum.\nAs a philosophy, it treats breakage and repair as part of the history of an object, rather than something to disguise.\n\n\n\n\n\n\n\n\nFirst, watch this introductory 5 min video: https://www.youtube.com/watch?v=QEJ23t940UY\nphilip's first attempt\n \n #\n \n\n\nWith the broken pieces in front of you, first \"dry fit\" them together and plan the order you'll join each piece.\nThe fewer pieces you have, the easier it'll be. Two or three separate pieces seems best as far as outcome, but you usually don't get to choose how your favorite bowl shatters on the kitchen floor : )\nLightly sand the edges, then wash the pieces to get rid of the dust. Quickly dry with a paper towel.\nNow you're ready to glue pieces together! You can either try to glue everything in one go, or play it safe and glue one section at a time, letting the join dry for an hour or two and only then gluing the next section. I tried to glue all 5 of my pieces together at once and it was definitely too much. Next attempt I'll probably go one-at-a-time.\nPrepare the glue and (fake) gold powder mix. Now's also a good time to lay out a piece of cardboard to work on. Uncap the epoxy (don't worry, it's resealable!) and press out so you get even parts of each epoxy component. Then put a small bit of gold powder on the liquids. You need a lot less than you think! Add just a little bit, mix in with the epoxy, and see if it looks good. Worst case it looks a bit thin and you just add some more powder.\nMix the epoxy thoroughly. I spent maybe 1m 30sec mixing. Really scrape up the stuff on the surface and mix it up, otherwise the epoxy won't bond properly.\nWith a cheap wooden chopstick or plastic knife, gather up a little gold glue and bead it along one edge of a piece. You want enough so that it bulges out just a little when pressed together. One good reason to do a pair of pieces at a time is that you'll learn how much you need after the first join, and won't be rushed on the next. You may also need to add a little extra to fill in areas where the ceramics are chipped and don't sit flush.\nPress together the two glued pieces and hold until it sets. Repeat for all the different pieces.\nOnce the piece has dried, you can do a final \"touch up\" with an x-acto knife. Scrape off any stray splatters or cut-even any messy lines. Do this carefully so you don't leave any big marks.\nIf you really mess up and accidentally smudge the glue before it's set (like I did), or just don't like the look, you can try again. Take an x-acto knife and scrape/cut off the glue above the join, leaving the pieces still glued together and the surface now flush. Maybe sand it a bit too? Who knows. Unfortunately, the glue beneath the surface isn't as shiny, so mix some more glue + gold powder and this time lay a small, thin layer on the already-glued surface.\nThe pros seem to do this by painting a clear glue on the surface with a very thin brush, then dusting the gold powder on top. I don't have a brush though, so I just mixed the glue+powder and used another chopstick.\nAs a final note, the epoxy I bought doesn't appear to be food safe, so don't eat with your repaired ceramics!\nother helpful resources\n \n #\n \n\n\nA useful comment from the video:\n\nFirstly, if it's for something you eat on then it needs to be food-safe this is less to do with actually eating it and more about toxic stuff that can come out when you wash it or if it comes into contact with acidic foods or something. Food safe glue sometimes it's sold as 'epoxy' rather than glue. The recommendation is to ask your local arts & craft store about it as there are literally hundreds of brands.\nSecondly, even if you find food-safe glue just beware that most glues are not designed to withstand boiling water so gluing a teapot like this might not be the best idea.\nThirdly, the recommendation is to use a two-part mix glue (like you have to add the parts together first before gluing) they are usually slower drying and thicker. You want the glue to make up part of the crack (as compared to superglue which is so thin you can effectively attach two pieces together with no gap) Another recommendation is to mix the gold powder in with the glue first, so it's gold powder suspended in the glue. just because the dusting on at the end makes quite a thin covering and it can wash off easily if you rub it however if you are using actual gold then don't do that as it's a huge waste. We used craft store gold powder.\nLastly, another recommendation is to glue it first, then sand it back, and then use a fine brush to add some more glue and gold powder so the lines are thinner, more delicate, and flush with the ceramic.\n\nUnfortunately, the epoxy I bought doesn't appear the be food safe, so these will just have to be for display only.\nAnother nice video: https://youtu.be/eO9CnS-NqO8\n\nThe next step is to sand the edges. It took me about an hour. My theory was to sand the \"edge-of-the-edge\" on each piece, so there would be a bit of a gap between two broken pieces, but the two pieces would still fit together exactly in the mostly unsanded middle.\nSwap between sanding an edge, then fitting it together and looking at the gap, then back to sanding some more. Imagine there is gold between the gap; keep sanding if you want more gold to show. If you don't sand much, you'll get a hairline strip of gold. If you sand more, you'll get a wider, thicker join.\n\nThough this didn't work as well as I thought.\nwishlist for next time\n \n #\n \n\n\n\na fine brush for detail work\na new x-acto knife\nwant to try some polish-level grit sandpaper\nbuy a higher end kit with real gold + silver powder: https://kintsugi-kit.com/products/traditional-tsugukit-gold-silver\nfollow this blog's more legit process: https://fellerts.no/projects/kintsugi.php\n\n","id":"https://phlip9.com/notes/misc/kintsugi/","title":"kintsugi"},"https://phlip9.com/notes/misc/optimization solvers/":{"body":"optimization solvers\n\nUseful HN thread with pointers\nMiniZinc Challenge - Benchmarks and optimality for different solvers on different problems\nHans Mittelmann - Benchmarks for Optimization Software\nGoogle OR-Tools\n \n #\n \n\n\nGoogle OR-Tools\n\nLarge suite of solvers for ILP (via different backends), built-in LP, graph flows, combinatorial optimization.\nOpen source, Apache 2.0, lots of activity\n\nOSQP\n \n #\n \n\n\nOperator Splitting Quadratic Program (OSQP)\n\nsupports convex optimization problems\nclaims performance competitive with Gurobi\nfree, open-source, academic license\nwritten in C, easily embeddable, has a Rust interface osqp.rs\na CUDA implementation also exists? very nice. cuosqp\n\nGurobi\n \n #\n \n\n\nGurobi\n\ncommerical, paid licenses\nlicense model not really tuned for production deployment to cloud infrastructure\nby far the most comprehensive toolkit\ntypically the fastest on most problems I've used it on\nused it a long time ago for a CS170 project phlip9/Kidney-Exchange-Solvers which needed a Mixed-Integer Linear Problem (MILP) solver\n\n","id":"https://phlip9.com/notes/misc/optimization solvers/","title":"optimization solvers"},"https://phlip9.com/notes/misc/pop_OS! tweaks/":{"body":"pop_OS! tweaks\n\nUI gets slow and choppykjkj\n \n #\n \n\n\n\nrestart gnome-shell: ALT-F2 > \"r\" > Enter\n\nTry also disabling ubuntu-appindicators extension: Super > Extensions > Ubuntu AppIndicators > Disable\nGraphics drivers stop working after apt upgrade / kernel update\n \n #\n \n\n\nThe nvidia graphics drivers are likely too old for the new kernel version.\nFor example, when I was upgrading to the new kernel (6.1.8 I think?), my older nvidia drivers (510) failed to build the nvidia/510 dkms kernel module for some inscrutable reason.\nYou can procrastinate on fixing this for a bit, by setting the previous kernel version as the default boot kernel. Do this by rebooting while holding down SPACE. In the boot recovery menu, press d while highlighting the old kernel config to set as default. Then hit enter to boot into the previous, working configuration.\nTo actually repair the issue, reboot up to the login screen. Trying to login will fail to a black screen; instead, hit ALT-F5 to enter a raw TTY.\nThen update to the latest nvidia drivers:\n$ sudo ubuntu-drivers install\n\nAfter rebooting, the issue was fixed for me.\n","id":"https://phlip9.com/notes/misc/pop_OS! tweaks/","title":"pop_OS! tweaks"},"https://phlip9.com/notes/misc/prepping RPI for embedded dev/":{"body":"prepping RPI for embedded dev\n\nhost: SSH into new rpi\n \n #\n \n\n\n$ ssh rpi00.local\n\nrpi: update and install basic tools\n \n #\n \n\n\n$ sudo apt update && sudo apt upgrade\n$ sudo apt install vim\n\nrpi: configure systemd journal to only log to RAM\n \n #\n \n\n\nThis step helps avoid lots of IO writes to the SD Card, which will significantly extend its lifetime.\n$ sudo cat > /etc/systemd/journald.conf.d/ram-only-journal.conf <<EOF\n[Journal]\nStorage=volatile\nRuntimeMaxUse=100M\nForwardToSyslog=no\nEOF\n\nrpi: (optional) set rpi hostname\n \n #\n \n\n\nIt takes too long to build a new image with a different hostname, so we'll set\nthe hostname after the fact. Make sure the hostname is not the default raspberrypi.\n$ sudo hostnamectl set-hostname kyoto\n\nrpi: (optional) add other ssh pubkeys\n \n #\n \n\n\nForgot to add this when formatting the SD card...\n$ echo \"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIB3x6Xx0674lyf2DGstduaGjyA1ARqdeGc6PgHZMbwCK philiphayes@philiphayes-mbp\" >> ~/.ssh/authorized_keys\n\nrpi: (optional) enable kernel I2C bus\n \n #\n \n\n\n$ sudo raspi-config\n\nSelect Interface Options > Enable I2C\nrpi: (optional) enable kernel SPI Bus\n \n #\n \n\n\n$ sudo raspi-config\n\nSelect Interface Options > Enable SPI\nrpi: (optional) enable kernel PWM controller\n \n #\n \n\n\nIn /boot/config, add the line: dtoverlay=pwm.\nrpi: reboot\n \n #\n \n\n\n$ sudo reboot\n\nhost: install cross-compiling toolchain\n \n #\n \n\n\n$ sudo apt install gcc-arm-linux-gnueabihf\n\n","id":"https://phlip9.com/notes/misc/prepping RPI for embedded dev/","title":"prepping RPI for embedded dev"},"https://phlip9.com/notes/misc/rgbxmas/":{"body":"rgbxmas\n\nsetup\n \n #\n \n\n\nFirst, plug the USB cable into your machine (macOS, Windows, Linux, whatever). The board should power up and show the little demo; press the UP button to go to the next screen.\nOn your machine, a USB-drive called CIRCUITPY should also pop up. This is the Adafruit Matrix Portal set up with CircuitPython ready for programming.\nThe Matrix Portal's got lots of features and room for other peripherals and sensors. it can even connect to stuff on the internet, so you can make a weather display, read some tweets, show the bitcoin price... : )\nIn the CIRCUITPY directory, there should be a code.py file. This contains the code for the demo, which is also listed below, see: demo code.\nCircuitPython makes it super painless to write code for little microcontroller boards like this. It ain't gonna be the fastest, but it's pretty easy to get stated. To get some basic code going, you literally just edit the code.py file, save it, and the board will auto-restart with the new updates.\nI'd probably start with the Mu editor here: https://codewith.mu/en/download. It's bare-bones, but it'll work in the beginning.\nI've already setup the board so everything should be good to go. With the board plugged in, just open the Mu editor, press the \"Mode\" icon, and select \"CircuitPython\". Then you should be able to edit the code, save, and see the changes appear on the device.\nAlso check out Adafruit's MatrixPortal overview: https://learn.adafruit.com/adafruit-matrixportal-m4/overview\nand the CircuitPython Essentials guide: https://learn.adafruit.com/circuitpython-essentials/circuitpython-essentials\nand the detailed CircuitPython core modules documentation: https://docs.circuitpython.org/en/latest/shared-bindings/index.html\nblink the board LED\n \n #\n \n\n\nHere's a basic example to get started: it blinks an LED on the board itself (not the display) on/off every 0.5 seconds.\n# file: code.py\n\nimport board\nimport digitalio\nimport time\n\n# This a the little red LED on the MatrixPortal m4 board,\n# not the big LED matrix panel. It's located right above\n# the \"adafruit\" logo.\nled = digitalio.DigitalInOut(board.LED)\nled.direction = digitalio.Direction.OUTPUT\n\n# This block loops endlessly\nwhile True:\n # Turn on the LED, then wait for 0.5 seconds\n led.value = True\n time.sleep(0.5)\n\n # Turn off the LED, then wait for 0.5 seconds\n led.value = False\n time.sleep(0.5)\n\ngetting help from the REPL\n \n #\n \n\n\nThe panel opened by the \"Serial\" button doesn't just show the print output of the device, but also let's you interact with it. This is called a REPL (Read-Evaluate-Print-Loop) and lets you quickly play with bits of code or explore different modules.\nTo enter the REPL:\nIf your program has finished, you should see this message:\nAuto-reload is on. Simply save files over USB to run them or enter REPL to disable.\ncode.py output:\n\nCode done running.\n\nPress any key to enter the REPL. Use CTRL-D to reload.\n\nIn this case just press the \"Enter\" key in the Serial box and you should see the REPL pop up:\nAdafruit CircuitPython 7.3.3 on 2022-08-29; Adafruit Matrix Portal M4 with samd51j19\n>>>\n\nIf some code is running (like the infinite blink example above), you may need to hit CTRL-C to stop the program first (though it seems a bit flaky, I had to hold the keys down for a second or two to get it to work).\nWith the REPL open, we can see all the available built-in modules by typing \"import \" (with the space) then hitting the TAB key to auto-complete:\n>>> import ^TAB\nbuiltins micropython __future__ _asyncio\n_bleio adafruit_bus_device\nadafruit_bus_device.i2c_device adafruit_bus_device.spi_device\nadafruit_pixelbuf alarm analogio\narray atexit audiobusio audiocore\naudioio audiomixer audiomp3 binascii\nbitbangio bitmaptools board busio\ncollections countio digitalio displayio\nerrno fontio framebufferio frequencyio\ngc getpass gifio i2cperipheral\nio json keypad math\nmicrocontroller msgpack neopixel_write\nonewireio os ps2io pulseio\npwmio rainbowio random re\nrgbmatrix rotaryio rtc samd\nsdcardio select storage struct\nsupervisor synthio sys terminalio\ntime touchio traceback usb_cdc\nusb_hid usb_midi uselect vectorio\nwatchdog zlib\n\nDon't worry about what most of these do for now.\nIf you want to get very very detailed documentation about these modules, you can check the CircuitPython Modules reference.\nLet's check out the time module we used in the previous example:\n>>> import time\n>>> help(time)\nobject <module 'time'> is of type module\n __name__ -- time\n monotonic -- <function>\n sleep -- <function>\n struct_time -- <class 'struct_time'>\n localtime -- <function>\n mktime -- <function>\n time -- <function>\n monotonic_ns -- <function>\n\nWe can get the number of seconds since the board powered on by calling time.monotonic():\n>>> time.monotonic()\n1003.53\n\nWe use this one a lot in the demo.\nFrom the REPL we can define functions and variables just like we expect:\n>>> def f(x):\n\t# f(x) = 4x^2 - 4x - 24\n\tx_squared = x**2\n return 4*x_squared - 4*x - 24\n>>> f(0)\n-24\n>>> print(\"wow look f(3) is zero:\", f(3))\n\nWe can exit the REPL again by hitting CTRL-D.\ndisplaying text\n \n #\n \n\n\nThis example requires the adafruit_display_text and adafruit_matrixportal libraries, which are not built-in modules. Most interesting libraries are not built-in, as they are updated more frequently than the base modules and would otherwise take up too much space on the device.\nTo install these community libraries, go to https://circuitpython.org/libraries and download the zip file under \"Bundle for Version 7.X\" (I've installed CircuitPython version 7.3.3).\nOpening the adafruit-circuitpython-bundle-7.x.zip file there should be a lib folder, with the adafruit_display_text and adafruit_matrixportal folders inside (among many others).\nCopy the those two folders from the .zip file to the mounted CIRCUITPY/lib/ folder to install the library.\nimport terminalio\n\nfrom adafruit_display_text import label\nfrom adafruit_matrixportal.matrix import Matrix\n\n# This call creates the Matrix display object.\n#\n# `bit_depth` can range from 1 to 6; higher numbers allow\n# for more color shades to be displayed, but increase memory\n# usage and slow down your Python code.\n#\n# If you just want to show primary colors\n# plus black and white, use 1. Otherwise, try 3, 4 and 5\n# to see which effect you like best.\nmatrix = Matrix(\n bit_depth=4,\n)\ndisplay = matrix.display\n\n# this is a text area with two lines like\n# | Hello |\n# | World |\ntext_area = label.Label(\n terminalio.FONT,\n text=\"Hello\\nWorld\", # '\\n' stands for newline\n color=0x113311, # this is the RGB (Red Green Blue) color\n)\n# this is the starting position of the text on the board,\n# counting pixels from the top-left.\ntext_area.x = 16\ntext_area.y = 8\ndisplay.show(text_area)\n\n# You can add more effects in this loop. For instance, maybe\n# you want to set the color of each label to a different\n# value\nwhile True:\n display.refresh()\n\ndemo code\n \n #\n \n\n\nThis demo shows a few screens with some cool graphics.\nNote that it requires the adafruit_display_text library is copied into the CIRCUITPY/lib/ directory. See displaying text for more details on libraries.\n# code.py\n\nimport random\nimport time\nimport math\nfrom math import trunc, sin, cos, sqrt\n\nimport board\nimport countio\nimport digitalio\nimport displayio\nimport framebufferio\nimport rgbmatrix\nimport terminalio\nimport vectorio\n\nfrom adafruit_display_text import label\n\n# create a new `Display` object for the big RGB matrix display\ndef make_display(bit_depth=6, brightness=0.5):\n displayio.release_displays()\n matrix = rgbmatrix.RGBMatrix(\n width=64,\n height=32,\n bit_depth=bit_depth,\n # NOTE: for some reason the board has reversed the green and blue pins,\n # so we just swap them here to get standard RGB ordering\n rgb_pins=[\n board.MTX_R1,\n board.MTX_B1,\n board.MTX_G1,\n board.MTX_R2,\n board.MTX_B2,\n board.MTX_G2,\n ],\n addr_pins=[\n board.MTX_ADDRA,\n board.MTX_ADDRB,\n board.MTX_ADDRC,\n board.MTX_ADDRD,\n ],\n clock_pin=board.MTX_CLK,\n latch_pin=board.MTX_LAT,\n output_enable_pin=board.MTX_OE\n )\n display = framebufferio.FramebufferDisplay(matrix)\n display.brightness = brightness\n return display\n\ndef rgb_to_int(r, g, b):\n return (r << 16) | (g << 8) | b\n\ndef percent_to_byte(t):\n return round(t * 255.0) & 255\n\ndef hue_to_rgb_ratio(p, q, t):\n if t < 0.0:\n t += 1.0\n elif t > 1.0:\n t -= 1.0\n\n if t < 0.166667:\n return p + (q - p) * 6.0 * t\n elif t < 0.5:\n return q\n elif t < 0.666667:\n return p + (q - p) * (0.666667 - t) * 6.0\n else:\n return p\n\n# convert Hue-Saturation-Lightness to RGB color\n# `h` is the Hue, in degrees (0 -> 360)\n# `s` is the Saturation, between 0.0 and 1.0\n# `l` is the Lightness, between 0.0 and 1.0\ndef hsl(h, s, l):\n # all greys if saturation is 0\n if s == 0.0:\n l = percent_to_byte(l)\n return rgb_to_int(l, l, l)\n\n h = h / 360.0\n\n q = 0.0\n if l < 0.5:\n q = l * (1.0 + s)\n else:\n q = l + s - (l * s)\n p = 2.0 * l - q\n\n r = percent_to_byte(hue_to_rgb_ratio(p, q, h + 0.333333))\n g = percent_to_byte(hue_to_rgb_ratio(p, q, h))\n b = percent_to_byte(hue_to_rgb_ratio(p, q, h - 0.333333))\n\n return rgb_to_int(r, g, b)\n\n# the fractional part of a float. ex: `frac(1.75) == 0.75`.\ndef frac(x):\n return x - trunc(x)\n\n# clamp `x` so the output is always between `x_min` and `x_max`.\ndef clamp(x_min, x_max, x):\n return min(x_max, max(x_min, x))\n\n# linearly interpolate between `start` and `end`, using `t` between 0.0 and 1.0\n# as the \"interpolation distance\"\ndef lerp(start, end, t):\n return t * start + (1.0 - t) * end\n\n# saw-tooth signal, between y = 0.0 and 1.0, with period = 1.0\ndef saw(t):\n return math.fabs(2.0 * frac(t) - 1.0)\n\n# exponential ease in-out function\n# see: <https://easings.net/#easeInOutExpo>\n# this is defined for x between 0.0 and 1.0\ndef ease_in_out_exp(x):\n if x < 0.5:\n return 0.5 * math.pow(2.0, 20.0 * x - 10.0)\n else:\n return 1.0 - 0.5 * math.pow(2.0, -20.0 * x + 10.0)\n\n# see: <https://mathworld.wolfram.com/SincFunction.html>\ndef sinc(x):\n a = math.pi * x\n return sin(a) / (a+0.001)\n\ndef parabola(x, k):\n return math.pow(4.0 * x * (1.0 - x), k)\n\nclass Screen:\n def __init__(self, display):\n pass\n\n def update(self, display):\n pass\n\n# shows \"PRESS UP >>\", with the \">>\" bouncing every few seconds.\nclass StartScreen(Screen):\n def __init__(self, display):\n group = displayio.Group()\n\n # the \"PRESS UP\" text\n press_up = label.Label(terminalio.FONT, text=\"PRESS UP\")\n press_up.x = 4\n press_up.y = 14\n group.append(press_up)\n\n # the two '>' arrows on the right\n arrow_group = displayio.Group()\n\n arrow_right_1 = label.Label(terminalio.FONT, text=\">\")\n arrow_right_1.x = 52\n arrow_right_1.y = 14\n arrow_group.append(arrow_right_1)\n\n arrow_right_2 = label.Label(terminalio.FONT, text=\">\")\n arrow_right_2.x = 54\n arrow_right_2.y = 14\n arrow_group.append(arrow_right_2)\n group.append(arrow_group)\n\n display.show(group)\n\n self.arrow_group = arrow_group\n\n def update(self, display):\n t = time.monotonic()\n\n # self.arrow_group.x = round(2.0 * ease_in_out_exp(0.5 * sin(3.0 * t) + 0.5) - 4.0)\n\n # t = math.fmod(t, 5.0)\n # self.arrow_group.x = round(8.0 * sinc(0.54 * (t - 2.5)))\n\n # repeat \"bounce\" every 3 sec\n t = math.fmod(t, 3.0)\n self.arrow_group.x = round(4.0 - 4.0 * parabola(0.333333 * t, 7))\n\n display.refresh()\n\n# makes a big circle wave across the screen in a loop\nclass CircleScreen(Screen):\n def __init__(self, display):\n group = displayio.Group()\n\n palette = displayio.Palette(2)\n palette[0] = hsl(215, 0.42, 0.34)\n palette[1] = hsl(0, 0, 0.0)\n\n circle_outer = vectorio.Circle(\n pixel_shader=palette,\n radius=16,\n x=0,\n y=0,\n color_index=0,\n )\n group.append(circle_outer)\n\n circle_inner = vectorio.Circle(\n pixel_shader=palette,\n radius=15,\n x=0,\n y=0,\n color_index=1,\n )\n group.append(circle_inner)\n display.show(group)\n\n self.palette = palette\n self.group = group\n\n def update(self, display):\n t = time.monotonic()\n\n # make the circle wave across the screen\n self.group.x = round(math.fmod(64.0 * t, 110.0) - 25.0)\n self.group.y = int(8.0 * sin(3.0 * t)) + 16\n\n # slowly rotate the hue of the circle over time\n t_color = 0.5 * sin(1.0 * t) + 0.5\n hue = lerp(0.0, 180.0, t_color)\n self.palette[0] = hsl(hue, 0.75, 0.50)\n\n display.refresh()\n\n# test the display's color\nclass ColorTestScreen(Screen):\n def __init__(self, display):\n width = 64\n height = 32\n num_colors = 256\n\n # start with all greyscale\n palette = displayio.Palette(num_colors)\n for idx in range(num_colors):\n palette[idx] = rgb_to_int(idx, idx, idx)\n\n # fill the bitmap with 0..=255\n bm = displayio.Bitmap(width, height, num_colors)\n for y in range(height):\n for x in range(width):\n # use the same color every 8 pixels in the y-direction\n color_idx = (y // 8) * width + x\n bm[x, y] = color_idx\n bm.dirty()\n\n tg = displayio.TileGrid(bm, pixel_shader=palette)\n\n group = displayio.Group()\n group.append(tg)\n\n display.show(group)\n\n self.num_colors = num_colors\n self.palette = palette\n self.prev_update_t = time.monotonic()\n\n def update(self, display):\n t = time.monotonic()\n dt = t - self.prev_update_t\n\n # every 5 sec change the color spectrum to a random hue and saturation\n # with lightness evenly between 0.0 and 1.0\n if dt > 5.0:\n num_colors = self.num_colors\n hue = random.randint(0, 360)\n saturation = random.random()\n print(f\"hue: {hue}, saturation: {saturation}\")\n\n for idx in range(num_colors):\n self.palette[idx] = hsl(hue, saturation, 0.5 * (idx / num_colors))\n\n self.prev_update_t = t\n display.refresh()\n\n# run a random [Conway's Game of Life](https://www.wikiwand.com/en/Conway%27s_Game_of_Life)\n# simulation every ~30 sec\nclass GameOfLifeScreen(Screen):\n def __init__(self, display):\n width = 64\n height = 32\n num_colors = 2\n\n palette = displayio.Palette(num_colors)\n\n bm1 = displayio.Bitmap(width, height, num_colors)\n bm2 = displayio.Bitmap(width, height, num_colors)\n\n tg1 = displayio.TileGrid(bm1, pixel_shader=palette)\n tg2 = displayio.TileGrid(bm2, pixel_shader=palette)\n\n g1 = displayio.Group()\n g1.append(tg1)\n\n g2 = displayio.Group()\n g2.append(tg2)\n\n display.show(g1)\n\n self.width = width\n self.height = height\n self.iter = 0\n self.reset_after = 200\n\n self.curr = bm1\n self.next = bm2\n\n self.curr_group = g1\n self.next_group = g2\n\n self.palette = palette\n\n def randomize(self):\n curr = self.curr\n for idx in range(self.width * self.height):\n curr[idx] = random.random() < 0.333333\n\n # hue = random.randint(0, 360)\n # saturation = (random.random() / 4.0) + 0.5\n # lightness = (random.random() / 3.0) + 0.1\n # self.palette[1] = hsl(hue, saturation, lightness)\n\n def apply_life_rule(self):\n curr = self.curr\n\n w = self.width\n h = self.height\n\n for y in range(h):\n yyy = y * w\n ym1 = ((y + h - 1) & 31) * w\n yp1 = ((y + 1) & 31) * w\n\n xm1 = w - 1\n for x in range(w):\n xp1 = (x + 1) & 63\n neighbors = (\n curr[xm1 + ym1] + curr[xm1 + yyy] + curr[xm1 + yp1] +\n curr[ x + ym1] + curr[ x + yp1] +\n curr[xp1 + ym1] + curr[xp1 + yyy] + curr[xp1 + yp1]\n )\n self.next[x + yyy] = (neighbors == 3) or ((neighbors == 2) and curr[x + yyy])\n xm1 = x\n\n self.curr = self.next\n self.next = curr\n\n curr_group = self.curr_group\n self.curr_group = self.next_group\n self.next_group = curr_group\n\n def update(self, display):\n t = time.monotonic()\n\n # slowly change the color\n t_color = 0.5 * sin(1.0 * t) + 0.5\n hue = lerp(0.0, 180.0, t_color)\n self.palette[1] = hsl(hue, 0.75, 0.50)\n\n # reset and randomize the state every `self.reset_after` iterations\n if self.iter == 0:\n self.randomize()\n else:\n self.apply_life_rule()\n\n self.iter = (self.iter + 1) % self.reset_after\n display.show(self.curr_group)\n\n# a cool wavy pattern\nclass WarpScreen(Screen):\n def __init__(self, display):\n width = 64\n height = 32\n num_colors = 64\n\n palette = displayio.Palette(num_colors)\n for idx in range(num_colors):\n # palette[idx] = hsl(240, 0.8, 0.25 * (idx / num_colors))\n palette[idx] = hsl(265, 0.85, 0.95 * (idx / num_colors) + 0.05)\n\n bm1 = displayio.Bitmap(width, height, num_colors)\n bm2 = displayio.Bitmap(width, height, num_colors)\n\n tg1 = displayio.TileGrid(bm1, pixel_shader=palette)\n tg2 = displayio.TileGrid(bm2, pixel_shader=palette)\n\n g1 = displayio.Group()\n g1.append(tg1)\n\n g2 = displayio.Group()\n g2.append(tg2)\n\n # display.show(g1)\n\n self.width = width\n self.height = height\n self.num_colors = num_colors\n\n self.curr = bm1\n self.next = bm2\n\n self.curr_group = g1\n self.next_group = g2\n\n def update(self, display):\n width = self.width\n height = self.height\n num_colors = self.num_colors\n curr = self.curr\n next = self.next\n\n # render to next framebuffer while current one is shown\n\n t = time.monotonic()\n\n for y in range(height):\n for x in range(width):\n tx = 20.0 * sin(0.01 * x) + 0.2 * t\n ty = 10.0 * sin(0.01 * y) + 0.2 * t\n l = (0.5 * sin(tx) * sin(ty)) + 0.5\n next[x, y] = round((num_colors - 1) * l)\n\n # swap frame buffers\n\n self.curr = next\n self.next = curr\n\n curr_group = self.curr_group\n self.curr_group = self.next_group\n self.next_group = curr_group\n\n # show new framebuffer\n\n display.show(self.curr_group)\n\n\ndef noise(u, v):\n return sin(u) * sin(v)\n\n# [ [ 0.8 -0.5 ]\n# [ 0.5 0.8 ] ] dot [p_x, p_y] * 2\ndef mdp(x, y):\n return ((1.6 * x) - (1.0 * y), (1.0 * x) + (1.6 * y))\n\ndef fbm4(x, y):\n f = 0.0\n f += 0.5000 * noise(x, y); (x, y) = mdp(x, y)\n f += 0.2500 * noise(x, y); (x, y) = mdp(x, y)\n f += 0.1250 * noise(x, y); (x, y) = mdp(x, y)\n f += 0.0625 * noise(x, y)\n return f / 0.9375\n\n# another cool pattern that rotates a bit\n# uses the same `sin(x)*sin(y)` but run through a few octaves of modified\n# [Fractional Brownian Motion](https://www.wikiwand.com/en/Fractional_Brownian_motion)\nclass Warp2Screen(Screen):\n def __init__(self, display):\n width = 64\n height = 32\n num_colors = 64\n\n palette = displayio.Palette(num_colors)\n for idx in range(num_colors):\n # palette[idx] = hsl(240, 0.8, 0.25 * (idx / num_colors))\n palette[idx] = hsl(15, 0.8, 0.6 * (idx / num_colors))\n\n bm1 = displayio.Bitmap(width, height, num_colors)\n bm2 = displayio.Bitmap(width, height, num_colors)\n\n tg1 = displayio.TileGrid(bm1, pixel_shader=palette)\n tg2 = displayio.TileGrid(bm2, pixel_shader=palette)\n\n g1 = displayio.Group()\n g1.append(tg1)\n\n g2 = displayio.Group()\n g2.append(tg2)\n\n # display.show(g1)\n\n self.width = width\n self.height = height\n self.num_colors = num_colors\n\n self.curr = bm1\n self.next = bm2\n\n self.curr_group = g1\n self.next_group = g2\n\n def update(self, display):\n width = self.width\n height = self.height\n num_colors = self.num_colors\n curr = self.curr\n next = self.next\n\n # render to next framebuffer while current one is shown\n\n t = time.monotonic()\n\n for y in range(height):\n for x in range(width):\n u = (x - width) / height\n v = (y - height) / height\n\n # add some back-and-forth rotation\n coa = cos(0.10 * sin(0.15 * t))\n sia = sin(0.31 * sin(0.10 * t))\n u = (u * coa) - (v * sia)\n v = (u * sia) + (v * coa)\n\n u += 0.03 * sin(0.54 * t)\n v += 0.03 * sin(0.46 * t)\n\n # kinda fractional brownian motion over sin(x)*sin(y)\n l = 0.5 * fbm4(8.0 * u, 8.0 * v) + 0.5\n\n # make the lightness periodically show the dark spots\n c = 0.1 * cos(0.2 * t) + 0.2\n l = clamp(0.0, 1.0, l - c)\n\n next[x, y] = round((num_colors - 1) * l)\n\n # swap frame buffers\n\n self.curr = next\n self.next = curr\n\n curr_group = self.curr_group\n self.curr_group = self.next_group\n self.next_group = curr_group\n\n # show new framebuffer\n\n display.show(self.curr_group)\n\n# ||v||^2\ndef norm_sq(x, y, z):\n return x*x + y*y + z*z\n\n# ||v||\ndef norm(x, y, z):\n return sqrt(norm_sq(x, y, z))\n\n# v / ||v||\ndef normalize(x, y, z):\n inv_l = 1.0 / norm(x, y, z)\n return (inv_l * x, inv_l * y, inv_l * z)\n\n# a * b\ndef dot(a_x, a_y, a_z, b_x, b_y, b_z):\n return a_x*b_x + a_y*b_y + a_z*b_z\n\n# a x b\ndef cross(bx, by, bz, cx, cy, cz):\n return (by*cz - bz*cy, bz*cx - bx*cz, bx*cy - by*cx)\n\n# sphere hit\ndef i_sphere(ro_x, ro_y, ro_z, rd_x, rd_y, rd_z, sph_x, sph_y, sph_z):\n oc_x = ro_x - sph_x\n oc_y = ro_y - sph_y\n oc_z = ro_z - sph_z\n\n b = dot(oc_x, oc_y, oc_z, rd_x, rd_y, rd_z)\n c = norm_sq(oc_x, oc_y, oc_z) - 1.0\n h = b*b - c\n\n if h < 0.0:\n return -1.0\n else:\n return -b - sqrt(h)\n\n# sphere soft shadow\ndef ss_sphere(ro_x, ro_y, ro_z, rd_x, rd_y, rd_z, sph_x, sph_y, sph_z):\n oc_x = sph_x - ro_x\n oc_y = sph_y - ro_y\n oc_z = sph_z - ro_z\n\n b = dot(oc_x, oc_y, oc_z, rd_x, rd_y, rd_z)\n\n if b > 0.0:\n h = norm_sq(oc_x, oc_y, oc_z) - b*b - 1.0\n return clamp(0.0, 1.0, 16.0 * h / b)\n else:\n return 1.0\n\n# sphere lambert shading\ndef lambert(lig_x, lig_y, lig_z, nor_x, nor_y, nor_z):\n return max(0.0, dot(lig_x, lig_y, lig_z, nor_x, nor_y, nor_z))\n\n# sphere occlusion\ndef occ_sphere(pos_x, pos_y, pos_z, nor_x, nor_y, nor_z, sph_x, sph_y, sph_z):\n di_x = sph_x - pos_x\n di_y = sph_y - pos_y\n di_z = sph_z - pos_z\n\n l_sq = norm_sq(di_x, di_y, di_z)\n inv_l = 1.0 / math.sqrt(l_sq)\n di_x = di_x * inv_l\n di_y = di_y * inv_l\n di_z = di_z * inv_l\n\n nd = dot(nor_x, nor_y, nor_z, di_x, di_y, di_z)\n\n return 1.0 - (max(0.0, nd) / l_sq)\n\n# this screen is a small [raytracer](https://www.wikiwand.com/en/Ray_tracing_(graphics))\n# that renders two spheres with soft shadows and ambient occlusion, while\n# rotating the camera around them.\nclass SpheresScreen(Screen):\n def __init__(self, display):\n width = 64\n height = 32\n num_colors = 64\n\n palette = displayio.Palette(num_colors)\n for idx in range(num_colors):\n # palette[idx] = hsl(240, 0.8, 0.25 * (idx / num_colors))\n # palette[idx] = hsl(lerp(240, 260, idx / num_colors), 1.0, 1.0 * (idx / num_colors))\n palette[idx] = hsl(220, 0.9, 1.0 * (idx / num_colors))\n\n bm1 = displayio.Bitmap(width, height, num_colors)\n bm2 = displayio.Bitmap(width, height, num_colors)\n\n tg1 = displayio.TileGrid(bm1, pixel_shader=palette)\n tg2 = displayio.TileGrid(bm2, pixel_shader=palette)\n\n g1 = displayio.Group()\n g1.append(tg1)\n\n g2 = displayio.Group()\n g2.append(tg2)\n\n # display.show(g1)\n\n self.width = width\n self.height = height\n self.num_colors = num_colors\n\n self.curr = bm1\n self.next = bm2\n\n self.curr_group = g1\n self.next_group = g2\n\n def update(self, display):\n\t width = self.width\n height = self.height\n num_colors = self.num_colors\n curr = self.curr\n next = self.next\n\n # render to next framebuffer while current one is shown\n\n t = time.monotonic()\n\n # all i want for christmas is numpy...\n # linear algebra heavy stuff is pretty obnoxious in plain python\n\n # light direction\n (lig_x, lig_y, lig_z) = normalize(0.6, 0.5, 0.4)\n\n # rotate camera around the center over time\n angle = -0.1*t\n # angle = -.25*t\n ro_x = 2.5 * cos(angle)\n ro_y = 1.0\n ro_z = 2.5 * sin(angle)\n\n # camera matrix\n #\n # M = [ [ ww_x, uu_x, vv_x ]\n # [ ww_y, uu_y, vv_y ]\n # [ ww_z, uu_z, vv_z ] ]\n ww_x = 0.0 - ro_x\n ww_y = 1.0 - ro_y\n ww_z = 0.0 - ro_z\n (ww_x, ww_y, ww_z) = normalize(ww_x, ww_y, ww_z)\n\n (uu_x, uu_y, uu_z) = cross(ww_x, ww_y, ww_z, 0.0, 1.0, 0.0)\n (uu_x, uu_y, uu_z) = normalize(uu_x, uu_y, uu_z)\n\n (vv_x, vv_y, vv_z) = cross(uu_x, uu_y, uu_z, ww_x, ww_y, ww_z)\n (vv_x, vv_y, vv_z) = normalize(vv_x, vv_y, vv_z)\n\n # sphere locations\n (sph1_x, sph1_y, sph1_z) = (-1.2, 1.0, 0.0)\n (sph2_x, sph2_y, sph2_z) = ( 1.0, 1.5, 0.0)\n\n for y in range(height):\n for x in range(width):\n # normalized screen space\n # p_y in -1 .. 1\n # p_x in -2 .. 2\n p_x = (2.0 * x - width) / height\n p_y = -(2.0 * y - height) / height\n\n # create view ray\n # rd = normalize(M * [ p_x, p_y, 1.5 ])\n # rd = normalize(p_x*uu + p_y*vv + 1.5*ww)\n rd_x = (p_x*uu_x) + (p_y*vv_x) + (1.5*ww_x)\n rd_y = (p_x*uu_y) + (p_y*vv_y) + (1.5*ww_y)\n rd_z = (p_x*uu_z) + (p_y*vv_z) + (1.5*ww_z)\n (rd_x, rd_y, rd_z) = normalize(rd_x, rd_y, rd_z)\n\n # l = clamp(0.0, 1.0, rd_z)\n # next[x, y] = round((num_colors - 1) * l)\n # continue\n\n # raytrace\n tmin = 4.0\n\n # rendered lightness. initial value is also bg color (no hit).\n l = 0.0\n\n # ray position\n pos_x = 0.0\n pos_y = 0.0\n pos_z = 0.0\n\n # normal vector\n nor_x = 0.0\n nor_y = 0.0\n nor_z = 0.0\n\n occ = 1.0\n\n # raytrace sphere 1\n h = i_sphere(ro_x, ro_y, ro_z, rd_x, rd_y, rd_z, sph1_x, sph1_y, sph1_z)\n if h > 0.0 and h < tmin:\n tmin = h\n\n # pos = ro + h*rd\n pos_x = ro_x + h * rd_x\n pos_y = ro_y + h * rd_y\n pos_z = ro_z + h * rd_z\n\n # nor = normalize(pos - sph1)\n nor_x = pos_x - sph1_x\n nor_y = pos_y - sph1_y\n nor_z = pos_z - sph1_z\n\n (nor_x, nor_y, nor_z) = normalize(nor_x, nor_y, nor_z)\n\n occ = 0.5 + 0.5*nor_y\n occ *= occ_sphere(pos_x, pos_y, pos_z, nor_x, nor_y, nor_z, sph1_x, sph1_y, sph1_z)\n\n # raytrace sphere 2\n h = i_sphere(ro_x, ro_y, ro_z, rd_x, rd_y, rd_z, sph2_x, sph2_y, sph2_z)\n if h > 0.0 and h < tmin:\n tmin = h\n\n # pos = ro + h*rd\n pos_x = ro_x + h * rd_x\n pos_y = ro_y + h * rd_y\n pos_z = ro_z + h * rd_z\n\n # nor = normalize(pos - sph2)\n nor_x = pos_x - sph2_x\n nor_y = pos_y - sph2_y\n nor_z = pos_z - sph2_z\n (nor_x, nor_y, nor_z) = normalize(nor_x, nor_y, nor_z)\n\n occ = 0.5 + 0.5*nor_y\n occ *= occ_sphere(pos_x, pos_y, pos_z, nor_x, nor_y, nor_z, sph2_x, sph2_y, sph2_z)\n\n # shading + lighting\n if tmin < 4.0:\n # pos = ro + tmin*rd\n pos_x = ro_x + tmin * rd_x\n pos_y = ro_y + tmin * rd_y\n pos_z = ro_z + tmin * rd_z\n\n # shadows\n sha = 1.0\n # # skip first sphere since its shadow doesn't hit anything\n # sha *= ss_sphere(pos_x, pos_y, pos_z, lig_x, lig_y, lig_z, sph1_x, sph1_y, sph1_z)\n sha *= ss_sphere(pos_x, pos_y, pos_z, lig_x, lig_y, lig_z, sph2_x, sph2_y, sph2_z)\n\n l = 0.0\n\n # ambient occlusion\n l += 0.5 * occ\n\n # lambert shading\n l += 5.0 * lambert(lig_x, lig_y, lig_z, nor_x, nor_y, nor_z) * sha\n\n l *= 0.22\n\n # gamma adjustment\n l = clamp(0.0, 1.0, math.pow(l, 0.85))\n next[x, y] = round((num_colors - 1) * l)\n\n # swap frame buffers\n\n self.curr = next\n self.next = curr\n\n curr_group = self.curr_group\n self.curr_group = self.next_group\n self.next_group = curr_group\n\n # show new framebuffer\n\n display.show(self.curr_group)\n\n\nclass Button:\n def __init__(self, button_pin):\n self.press_counter = countio.Counter(\n pin=button_pin,\n edge=countio.Edge.RISE,\n pull=digitalio.Pull.UP,\n )\n self.prev_total = 0\n\n # Returns the number of button presses since we last checked\n def new_presses(self):\n new_total = self.press_counter.count\n new_presses = new_total - self.prev_total\n self.prev_total = new_total\n return new_presses\n\ndef main():\n display = make_display()\n\n screens = [\n StartScreen,\n CircleScreen,\n WarpScreen,\n Warp2Screen,\n SpheresScreen,\n GameOfLifeScreen,\n # ColorTestScreen,\n ]\n prev_screen_idx = -1\n screen_idx = 0\n\n up_button = Button(board.BUTTON_UP)\n # down_button = Button(board.BUTTON_DOWN)\n\n while True:\n up_button_presses = up_button.new_presses()\n if up_button_presses > 0:\n screen_idx = (screen_idx + 1) % len(screens)\n\n if screen_idx != prev_screen_idx:\n prev_screen_idx = screen_idx\n screen = screens[screen_idx](display)\n\n screen.update(display)\n\ntry:\n main()\nexcept Exception as err:\n print(f\"Error: {err}\")\n\n(for reference) one-time setup process\n \n #\n \n\n\nBoard product page: https://www.adafruit.com/product/4745\nBoard info:\nUF2 Bootloader v1.23.1-adafruit.1-328-gf06693a SFHWRO\nModel: Matrix Portal M4\nBoard-ID: SAMD51J19A-MatrixPortal-v0\n\nWhen first connected to power, we see the cool little falling sand demo that comes pre-installed.\nAfter connecting it to a machine through the USB-C port, double-press the RST button on the board; the debug light flashes and a USB-drive called MATRIXBOOT mounts on the connected machine.\nIf nothing happens, make sure the USB-C cable you're using supports data transfer and not just power.\nThe pre-installed contents of the drive:\n$ ls /media/phlip9/MATRIXBOOT\nCURRENT.UF2\nINDEX.HTM\nINFO_UF2.TXT\n\nWe then install the CircuitPython \"OS\" onto the board:\n$ cd /tmp\n$ wget https://downloads.circuitpython.org/bin/matrixportal_m4/en_US/adafruit-circuitpython-matrixportal_m4-en_US-7.3.3.uf2\n$ cp adafruit-circuitpython-matrixportal_m4-en_US-7.3.3.uf2 /media/phlip9/MATRIXBOOT\n\nThe lights should flash a bit and the disk will unmount from your machine. A second later another USB disk mounts called CIRCUITPY.\nDownload and install the Mu editor.\nOn linux I had to add my user, phlip9, to the dialout group and then restart for Mu+CircuitPython to work. macOS and Windows users can skip this step.\n$ sudo adduser phlip9 dialout\n\nOpen the Mu editor and select \"Mode\", then choose \"CircuitPython\". If everything was setup properly, it should auto-detect the board.\nClose any random \"untitled\" file it tries to create. Next hit the \"Load\" icon and navigate to the CIRCUITPY drive. Choose the code.py file. You should see something like:\nprint(\"Hello, World!\")\n\nClick the \"Serial\" button to show the device print output. Save the currently open code.py file and the board will automatically restart and run the file!\n","id":"https://phlip9.com/notes/misc/rgbxmas/","title":"rgbxmas"},"https://phlip9.com/notes/misc/scanning QR codes on desktop/":{"body":"scanning QR codes on desktop\n\n$ sudo apt-get install zbar-tools\n$ zbarimg <qr-code-image>\n\n","id":"https://phlip9.com/notes/misc/scanning QR codes on desktop/","title":"scanning QR codes on desktop"},"https://phlip9.com/notes/misc/setting up a headless raspbian boot image/":{"body":"setting up a headless raspbian boot image\n\nObjective\n \n #\n \n\n\n\nCustom SD card boot image for Raspberry Pi Zero W.\nRPi should boot headless, connect to configured WiFi, run ssh.\n\nBetter Alternative?\n \n #\n \n\n\nI only discovered this after successfully generating my own image, but it seems\nmore convenient: (https://github.com/kenfallon/fix-ssh-on-pi,\nhttp://www.lpenz.org/articles/ansiblerpi/index.html). It just mounts a stock\nRaspbian image and directly modifies the wpa_supplicant.conf and other\nconfiguration, instead of building a fresh image from scratch, which takes like\n45 minutes...\nEDIT: It looks like rpi-imager has basic image customization available?\n \n #\n \n\n\nTODO\n \n #\n \n\n\n\nenable kernel I2C, SPI, and PWM controllers in /boot/config.txt\n\nInstallation\n \n #\n \n\n\n(Windows, macOS) Install Docker Desktop\n \n #\n \n\n\nSee: https://www.docker.com/products/docker-desktop\nClone pi-gen:\n \n #\n \n\n\n$ git clone --depth=1 git@github.com:RPi-Distro/pi-gen.git\n\nAdd pi-gen/config\n \n #\n \n\n\nIMG_NAME=raspbian_headless\nLOCALE_DEFAULT=en_US.UTF-8\nTARGET_HOSTNAME=<..>\nTIMEZONE_DEFAULT=America/Los_Angeles\nFIRST_USER_NAME=phlip9\nFIRST_USER_PASS=<..>\nDISABLE_FIRST_BOOT_USER_RENAME=1\nWPA_ESSID=\"<..>\"\nWPA_PASSWORD=\"<..>\"\nWPA_COUNTRY=US\nENABLE_SSH=1\nPUBKEY_ONLY_SSH=1\nPUBKEY_SSH_FIRST_USER=\"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIGrOw2yrUxOYB9ItWrZW4e/AmatL5GH58jTnI/HNoXZz philiphayes9@gmail.com\"\nSTAGE_LIST=\"stage0 stage1 stage2\"\n\nThis config sets up all the locale shit and all, but most importantly, enables\nwifi on boot and pubkey-only ssh, so we can ssh into the running board without\nneeding to hookup a keyboard / monitor.\nNOTE: The Raspberry Pi Zero W DOES NOT support 5GHz wifi.\n(Linux/x86_64) Install qemu-user-static\n \n #\n \n\n\nThis lets us run arm binaries on an x86_64 machine via qemu.\n$ sudo apt install qemu-user-static\n\nContext:\n\nLinux is able execute binaries from other architectures, meaning that it should be possible to make use of pi-gen on an x86_64 system, even though it will be running ARM binaries. This requires support from the binfmt_misc kernel module.\n\nIf this is not set up correctly, you will see something like this error in the next step:\nW: Failure trying to run: chroot \"/pi-gen/work/test/stage0/rootfs\" /bin/true\nand/or\nchroot: failed to run command '/bin/true': Exec format error\n\nBuild the image\n \n #\n \n\n\n$ ./build-docker.sh\n\nThis should spit out our fresh image in ./deploy/:\n~/dev/pi-gen$ ls -lh deploy/\ntotal 528M\n-rw-r--r-- 1 phlip9 phlip9 74K Nov 26 15:56 2022-11-26-raspbian_headless-lite.info\n-rw-r--r-- 1 phlip9 phlip9 6.2K Nov 26 15:58 build.log\n-rw-r--r-- 1 phlip9 phlip9 528M Nov 26 15:57 image_2022-11-26-raspbian_headless-lite.zip\ndrwxr-xr-x 2 phlip9 phlip9 4.0K Nov 26 15:58 raspbian_headless-lite\n\nIf the build hangs/fails for some inscrutable reason (happened the first time),\njust ^CTRL-C and try again with:\n$ CONTINUE=1 ./build-docker.sh\n\n(WSL) I tried their suggestion of using apt-cache to improve rebuild times, but that didn't work :'(\nMount SD card\n \n #\n \n\n\nDownload Raspberry Pi Imager\n \n #\n \n\n\nhttps://www.raspberrypi.org/software/\nOpen Raspberry Pi Imager\n \n #\n \n\n\nSelect the \"deploy/*.zip\" file as the image to write and then image the mounted SD card.\n \n #\n \n\n\nUnmount the SD card, put it into the Pi, plug in the Pi, wait ~2 min to boot, and test:\n \n #\n \n\n\n$ ssh raspberrypi.local\n\nphlip9@raspberrypi:~ $ exit\n\n","id":"https://phlip9.com/notes/misc/setting up a headless raspbian boot image/","title":"setting up a headless raspbian boot image"},"https://phlip9.com/notes/misc/uptime to downtime conversion/":{"body":"uptime to downtime conversion\n\nEx: What does 99.9% uptime mean in actual amount of downtime per year?\n% uptime(approx) downtime per year\n90%40 days\n99%4 days\n99.9%10 hr\n99.99%1 hr\n99.999%6 min\n99.9999%30 sec\n\n","id":"https://phlip9.com/notes/misc/uptime to downtime conversion/","title":"uptime to downtime conversion"},"https://phlip9.com/notes/misc/water distillation setup/":{"body":"water distillation setup\n\n\"Schematic\"\n \n #\n \n\n\n\nBOM\n \n #\n \n\n\ndate: 2022/03/18\nNamePriceLink\nrubber filter adapters$14https://www.amazon.com/Rubber-Filter-Adapter-Buchner-Funnels/dp/B073QVSK2T\nfaucet adapter (portable shower hose)$9https://www.amazon.com/Diane-Portable-Shampoo-Spray-Hose/dp/B001A35ZEC\nplastic lab joint clips (x5)$8https://www.amazon.com/uxcell-Plastic-Mounting-Laboratory-Connector/dp/B08K2S91X9\nQWORK Liebig Condenser 24/40 200mm$18https://www.amazon.com/QWORK-Jacket-200mm-Condenser-Laboratory/dp/B08TRCG2N4\nQWORK Vacuum Take Off Adapter 24/40 105deg$13https://www.amazon.com/QWORK-Vacuum-Adapter-Degree-Joints/dp/B09NPLTLQK\n(?) QWORK Glass Stopper 24/40 (x2)$10https://www.amazon.com/QWORK-Glass-Stopper-Hollow-Outer/dp/B09FF5K1J8\nStonyLab 3-way Distilling Adapter Joint 24/40$21https://www.amazon.com/dp/B07CGT18J4\nSilicone Tubing 10mm ID x 13mm OD 10FT$11https://www.amazon.com/dp/B08PTYJ3GX\n\nTOTAL$104\n\n","id":"https://phlip9.com/notes/misc/water distillation setup/","title":"water distillation setup"},"https://phlip9.com/notes/networking/":{"body":"","id":"https://phlip9.com/notes/networking/","title":"networking"},"https://phlip9.com/notes/networking/CIDR/":{"body":"CIDR\n\nCIDR or Classless Inter-Domain Routing is a more granular method for allocating IP addresses and routing IP packets than the now removed IP Class-based allocation.\nCIDR notation is a compact way to write an IP and Subnet Mask, like 35.99.0.0/16 instead of 35.99.0.0, 255.255.0.0.\nPreliminaries\n \n #\n \n\n\nIP addresses are split into two pieces: (1) the network prefix or subnet address (read: address of the subnet), identified by the most-significant bits and (2) the host identifier in the least-significant bits, which identifies a specific interface on a host in that subnet.\nOriginal IPv4 addresses were categorized by \"classes\", which split them up according to a few of the first bits in the address (starting from the MSB). Today this is mostly a legacy detail that was later replaced, but the \"class-less\" in CIDR refers to the lack of distinct classes in CIDR, which instead uses \"variable-length subnet masking\" (VLSM) to allocate network prefixes along any bit boundary.\nSubnet Mask\n \n #\n \n\n\nTo refresh, a subnet mask is just a bitmask we use to AND against the IP to retrieve the network prefix. Likewise, if we invert the subnet mask then AND against the IP, we get the host id.\nFor example, if we have the LAN IP 192.168.3.5 with subnet mask 255.255.254.0, then our network prefix is 192.168.2.0 and the host id is 0.0.1.5. This might be clearer if you see the bits written out explicitly.\n1100 0000 . 1010 1000 . 0000 0011 . 0000 0101 ip\n1111 1111 . 1111 1111 . 1111 1110 . 0000 0000 subnet_mask\n1100 0000 . 1010 1000 . 0000 0010 . 0000 0000 network_prefix = ip & subnet_mask\n0000 0000 . 0000 0000 . 0000 0001 . 0000 0101 host_id = ip & !subnet_mask\n\nAs we'll see in a moment, this IP+mask in equivalent CIDR notation would be 192.168.3.5/23.\nHistorically, a full 32-bit bitmask was used to differentiate between which part of an IPv4 address was the network prefix and which part was the host identifier.\nFor a while, subnet masks could be any arbitrary non-contiguous bitmask; however, some RFCs eventually mandated that they must be contiguous, starting from the most-significant bit. As we'll see in a moment, an IP with a subnet mask and an IP in CIDR notation are 100% equivalent nowadays.\nCIDR notation\n \n #\n \n\n\nInstead of writing out the whole subnet mask, we can instead write just the number of leading ones in the subnet mask (called the mask width) alongside the IP. This format is called CIDR notation.\nUsing the same example as above, the ip 192.168.3.5 with subnet mask 255.255.254.0 would be written as 192.168.3.5/23 in CIDR notation.\nDeriving that more explicitly in Rust code:\nlet ip: Ipv4Addr = \"192.168.3.5\".into();\nlet mask_width = 23;\nlet subnet_mask = !(0xffff_ffff_u32 >> mask_width);\nlet network_prefix: Ipv4Addr = (ip.as_u32() & subnet_mask).into();\nlet host_id: Ipv4Addr = (ip.as_u32() & !subnet_mask).into();\n\nI used to get confused on whether the CIDR mask width refers to the subnet mask or host id mask. A simple memnonic helps me remember:\n\nthe CIDR number is on the right, so we shift ones right (to make the mask).\n\nNote that CIDR notation works the exact same for IPv6, except we have 128 bits to play with instead of just 32 bits.\nAnother useful insight to remember: the CIDR mask width goes from least specific (/0) to most specific (/32).\nCIDR block\n \n #\n \n\n\nWhen describing a range of IPs, we often write an IP in CIDR notation with the bits outside the network prefix set to zero.\nSome examples:\nAddress RangeCIDR blockNumber of addresses\n192.168.0.0 -> 192.168.255.255192.168.0.0/162^16 = 65,536\n172.16.0.0 -> 172.31.255.255172.16.0.0/122^20 = 1,048,576\n10.0.0.0 -> 10.255.255.25510.0.0.0/82^24 = 16,777,216\n\n","id":"https://phlip9.com/notes/networking/CIDR/","title":"CIDR"},"https://phlip9.com/notes/networking/ipv6 address space/":{"body":"ipv6 address space\n\nSee: IANA > Internet Protocol Version 6 Address Space\nSee: IANA > IPv6 Special-Purpose Address Registry\nprefixnameRFCS\n0000::/8Reserved\n-> ::1/128LoopbackRFC4291\n-> ::/128Bind to unspecified interfaceRFC4291\n-> ::ffff:0:0/96IPv4-mapped addressesRFC4291\n-> 64:ff9b::/96Algorithmic IPv4/IPv6 translation prefixRFC6052\n-> 64:ff9b:1::/48Local-use IPv4/IPv6 translation prefixRFC8215\n0100::/8Discard-only BlockRFC6666\n2000::/3Global UnicastRFC4291\n-> 2001::/32TEREDO - tunnel IPv6 over UDP through NATsRFC4380\n-> 2001:1::1/128Port Control Protocol (PCP) static AnycastRFC7723\n-> 2001:1::2/128TURN static AnycastRFC8155\n-> 2001:2::/48Reserved for benchmarkingRFC5180\n-> 2001:3::/32Automatic Multicast Tunneling (AMT)RFC7450\n-> 2001:20::/28Overlay Routable Cryptographic Hash Ids (ORCHIDv2)RFC7343\n-> 2001:db8::/32Documentation/example only addressRFC3849\n-> 2002::/166to4 tunnelingRFC3056\nf000::/5Reserved\nf800::/6Reserved\nfc00::/7Unique-Local UnicastRFC4193\nfe00::/9Reserved\nfe80::/10Link-Local UnicastRFC4291\nff00::/8MulticastRFC4291\n\nunique-local unicast address (ULA)\n \n #\n \n\n\n\nlook for IPs starting with fd00::/8 as fc00::/8 is not currently allocated\nglobally unique (statistically), but not globally routable.\nthe \"Global ID\" is supposed to be randomly sampled. My home router samples one on initial setup.\npeople usually use these like ipv4 private address ranges (10.0.0.0/8, 172.16.0.0/16, 192.168.0.0/24)\n\nex\n \n #\n \n\n\nkindCIDR\nprefixfd6c:6578:6502::/48\nsubnetfd6c:6578:6502::/64\naddressfd6c:6578:6502::85a/128\n\nformat\n \n #\n \n\n\n| 7 bits |1| 40 bits | 16 bits | 64 bits |\n+--------+-+------------+-----------+----------------------------+\n| Prefix |L| Global ID | Subnet ID | Interface ID |\n+--------+-+------------+-----------+----------------------------+\n\nfdGG:GGGG:GGGG:ssss::/64\n\nlink-local unicast\n \n #\n \n\n\n\nfe80::/64\nex: fe80::6238:e0ff:febc:3f60/128\naddress endpoints localized to a single link. Not globally routable.\nrouters will refuse to forward packets w/ link-local source to other links.\nex: all computers connected to a switch or wireless network or bridge can send link-local packets to each other, but can't send across routers.\nused in protocols like IPv6 Stateless Address Configuration (SLAAC), where you don't really care what address each host gets as long as it's unique and routable. Compare w/ DHCP which gives tighter control over address allocation.\n\nformat\n \n #\n \n\n\n| 10 |\n| bits | 54 bits | 64 bits |\n+----------+-------------------------+----------------------------+\n|1111111010| 0 | interface ID |\n+----------+-------------------------+----------------------------+\n\n","id":"https://phlip9.com/notes/networking/ipv6 address space/","title":"ipv6 address space"},"https://phlip9.com/notes/networking/network interface card (NIC)/":{"body":"network interface card (NIC)\n\nWikipedia: https://www.wikiwand.com/en/Network_interface_controller\nThese are the phyiscal hardware devices responsible for actually, phyiscally sending bits over the proverbial wire. In OSI model terms, they usually bridge L1 (Phyiscal Layer) and L2 (Data-link Layer), though some fancy NICs can handle the whole TCP/IP stack.\nMost consumer-grade hardware comes with a NIC integrated into the CPU or Motherboard. NICs can also be purchased separately and hooked up via the PCI bus.\nThese NICs are then typically connected via a physical Ethernet connection or provide wireless WiFi connection to a local router.\nNICs are abstracted away by the kernel with network interfaces for userspace applications to configure and consume.\nFor a simplified mental model, I like to think of a NIC as a set of receive (rx) queues and transmit (tx) queues for sending and receiving link-layer frames.\nThe tx/rx queues are typically FIFO ring-buffers. If you don't pull off frames fast enough or push too many frames at once, you'll start overwriting old frames : ).\nNICs typically provide a low-level interface or driver for the kernel (or more rarely, a userspace application) to pump outbound link-layer frames into the network and read inbound link-layer frames from the network.\nNICs are addressed via MAC addresses on the local physical network. MAC addresses need to be unique per local network, but aren't globally unique.\nKernel Bypass\n \n #\n \n\n\nUserspace applications can completely bypass the kernel and send/receive packets directly from a NIC. Doing this by hand would be quite tedious, as different NICs often have different APIs. People tend to use a library like DPDK (Data-Plane Development Kit) for this purpose. As for why you would want to do this, the answer is usually performance and control. Some exotic NICs or FPGA accelerators may also require bypassing the kernel to take full advantage.\n","id":"https://phlip9.com/notes/networking/network interface card (NIC)/","title":"network interface card (NIC)"},"https://phlip9.com/notes/networking/network interfaces/":{"body":"network interfaces\n\nWikipedia: https://www.wikiwand.com/en/Virtual_network_interface\nLet's start with some basic definitions. A network interface is a software interface over some:\n\nphyiscal networking hardware, like a network interface card (NIC). You'll see these named like eth0, eth5, radio0, wlan3.\nvirtual interface, like the \"loopback\" device or a WireGuard VPN tunnel.\n\nMost virtual interfaces wrap a lower physical interface or another virtual interface. One exception is the loopback interface lo which stands alone.\nWe have virtual interfaces to maximise flexibility when configuring our system.\nThese will look like lo, eth0:1, eth0.1, vlan2, br-lan, pppoe-dsl, gre0, sit0, tun0, imq0, teql0.\n\n\n\nHelpful Tip: Cloud machines will often present two virtual networking interfaces, one for public internet traffic and one for private VPC traffic.\nPhysical Network Interfaces\n \n #\n \n\n\nEx: eth0, eth4, radio0, wlan2\n\nThese interfaces always represent an actual hardware device such as an Ethernet or Wireless NIC.\nPhysical network interfaces are provided by the kernel and presented to the user for configuration and consumption.\n\nVirtual Network Interfaces\n \n #\n \n\n\nLoopback\n \n #\n \n\n\nEx: lo, lo0\n\nThe Loopback interface is provided by the kernel so applications can easily communicate with other local applications without any special code changes.\nAny traffic sent to the loopback IP is immediately passed back up the network stack as if it had been received from another device.\nThe IPv4 range 127.0.0.1/8 and IPv6 address ::1/128 both represent the loopback device.\nThe DNS name localhost is also a special name that resolves to 127.0.0.1 or ::1.\n\nVLANs\n \n #\n \n\n\nEx: eth4.0, eth4.1, eth4.2, vlan0\n\nVirtual LANs let you partition a single link-layer (L2) network into multiple virtual L2 networks.\nVLANs let you decouple a user's network location from their physical location.\nVLANs let you separate and isolate network applications, despite sitting on the same physical network.\nVLANs let you group hosts together even if they're not directly connected to same network switch, simplifying network design and deployment.\nCloud hosts often use VLANs to provide customers with a single VPC network spanning multiple regions. Multiple customers can use the same physical links yet remain safely isolated.\nVLANs use the IEEE 802.1Q Ethernet frame header extension to \"tag\" each frame with its associated VLAN id. Since VLANs operate at L2, they let us support higher layers (L3+) transparently.\n\nStacked VLANs\n \n #\n \n\n\n\nCreate VLANs, inside VLANs, ..., inside VLANs : )\nUses IEEE 802.1ad to add multiple VLAN tags to ethernet frames.\n\nBridges\n \n #\n \n\n\nEx: br0, br-lan\n\nNetwork Bridges make multiple physical or virtual network interfaces act as if they were just one network interface.\nIn some ways, bridges are the opposite of VLANs.\nFor example, my local OpenWRT router groups all LAN ethernet devices and wireless radios into one logical LAN interface, called br-lan. This way my phone and laptop can easily connect to my desktop, even though the first two connect over WiFi and the last connects over wired ethernet. From each device's perspective, the network looks like a single unified network.\nSee: Linux Foundation Wiki - bridge\n\nBonds\n \n #\n \n\n\nEx: bond0\n\nNetwork Bonding allows you to combine multiple links into one big link for higher throughput or reliability.\n\nSee: Link Aggregation\n\n\nFor example, if you have two upstream eth interfaces that each support 50 Mbps throughput, you can bond them into one virtual eth interface with a maximum of 100 Mbps throughput.\n\nTunnels/Taps\n \n #\n \n\n\nEx: pppoe-dsl, wg0, tun0, tunl0, tap2, vpn1, sit0\n\nTunnels let you send L3 packets or L2 frames over a Tunneling Protocol, usually to a remote host.\nFor example, WireGuard is a secure VPN protocol that provides a secure wg0 tunnel interface.\n\nIt lets you send standard L4 TCP/UDP/whatever packets over the wg0 tunnel to configured remote WireGuard peers.\nData sent through the tunnel is wrapped, encrypted, and sent over WireGuard's UDP protocol to the destination peer.\nWireGuard servers maintain a Cryptokey routing table that associates a pubkey and set of allowed source CIDRs for each peer.\n\n\nLinux TUN/TAP lets userspace programs provide virtual software network interfaces at L3 (TUN, IP packets) or L2 (TAP, Ethernet frames).\n\nTUN devices can be used to intercept and dump packets, provide a userspace-implemented VPN, relay packets over TOR, and much more!\nSee: Linux Foundation Wiki > Tunneling\nSee: Linux Networking Documentation > Universal TUN/TAP\nSee: https://www.gabriel.urdhr.fr/2021/05/08/tuntap/\n\n\n\nSpecial Purpose\n \n #\n \n\n\nEx: icq0, teql0\n\nSome interfaces provide traffic shaping or load balancing functionality, like Intermediate Queueing Device (IMQ) for ingress shaping or True Link Equalizer which round-robins packets into 2-or-more interfaces.\n\n(Deprecated) Aliases\n \n #\n \n\n\nEx: eth4:5, eth4:6\n\nBack in the day, Linux only supported one IP+mask per interface. Aliases are a way to present an existing interface with more than one IP+mask. Aliases are no longer necessary, but exist for backwards-compatibility reasons.\nSee: Linux Networking Documentation > IP-Aliasing\n\nViewing the current network interfaces\n \n #\n \n\n\nOn a recent Linux kernel, you can easily view the available interfaces with ip addr. This command will list the current network interfaces along with their names, configuration, and CIDRs they're responsible for.\nQuickly, before we dive in, the network topology in these examples looks like:\n\t desktop\n.------------------------.\n| vEth eth eth fiber\n| WSL <---> Windows 11 <-|-> OpenWRT Router <---> Modem <---> ISP\n| |\n'------------------------'\n\nStarting with my desktop WSL Linux VM, the interfaces are fairly simple.\n# Desktop Computer, Linux running in WSL\n$ ip addr\n\n1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000\n\n link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00\n inet 127.0.0.1/8 scope host lo\n valid_lft forever preferred_lft forever\n inet6 ::1/128 scope host\n valid_lft forever preferred_lft forever\n\n2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000\n\n link/ether 00:12:34:77:55:aa brd ff:ff:ff:ff:ff:ff\n inet 172.20.114.28/20 brd 172.20.127.255 scope global eth0\n valid_lft forever preferred_lft forever\n inet6 fe80::215:5dff:fea9:713/64 scope link\n valid_lft forever preferred_lft forever\n\n# plus some disabled interfaces: bond0, dummy0, tunl0, sit0\n\nHere we have a local loopback (lo) interface and a virtual ethernet interface (eth0) to the Windows WSL virtual Ethernet adapter. Currently the WSL network interface is in NAT mode (as opposed to Bridge mode), so the WSL network is hidden from the outer LAN.\nUnderneath the WSL instance, we have the base Windows desktop machine. Here it's configured with a physical Ethernet interface to the local LAN OpenWRT router.\nPS > ipconfig\n\nWindows IP Configuration\n\n\nEthernet adapter Ethernet:\n\n Connection-specific DNS Suffix . : lan\n IPv6 Address. . . . . . . . . . . : 2601:646:ca00:2fb5:dcb2:595c:1f81:cfc6\n IPv6 Address. . . . . . . . . . . : fd5b:7e09:2223::88e\n IPv6 Address. . . . . . . . . . . : fd5b:7e09:2223:0:dcb2:595c:1f81:cfc6\n Temporary IPv6 Address. . . . . . : 2601:646:ca00:b0e:7576:98bc:5e6c:7eb1\n Temporary IPv6 Address. . . . . . : fd5b:7e09:2223:0:7576:98bc:5e6c:7eb1\n Link-local IPv6 Address . . . . . : fe80::dcb2:596c:1f81:cfc6%5\n IPv4 Address. . . . . . . . . . . : 10.69.69.111\n Subnet Mask . . . . . . . . . . . : 255.255.255.0\n Default Gateway . . . . . . . . . : fe80::5249:e0ff:febc:3f60%5\n 10.69.69.1\n\nEthernet adapter vEthernet (WSL):\n\n Connection-specific DNS Suffix . :\n Link-local IPv6 Address . . . . . : fe80::49ef:174b:890:ef00%22\n IPv4 Address. . . . . . . . . . . : 172.20.112.1\n Subnet Mask . . . . . . . . . . . : 255.255.240.0\n Default Gateway . . . . . . . . . :\n\nOr in a bit more detail (IPv4 at least)\nPS > netsh interface ipv4 show config\n\nConfiguration for interface \"Ethernet\"\n DHCP enabled: Yes\n IP Address: 10.69.69.111\n Subnet Prefix: 10.69.69.0/24 (mask 255.255.255.0)\n Default Gateway: 10.69.69.1\n Gateway Metric: 0\n InterfaceMetric: 25\n DNS servers configured through DHCP: 10.69.69.1\n Register with which suffix: Primary only\n WINS servers configured through DHCP: None\n\nConfiguration for interface \"Loopback Pseudo-Interface 1\"\n DHCP enabled: No\n IP Address: 127.0.0.1\n Subnet Prefix: 127.0.0.0/8 (mask 255.0.0.0)\n InterfaceMetric: 75\n Statically Configured DNS Servers: None\n Register with which suffix: Primary only\n Statically Configured WINS Servers: None\n\nConfiguration for interface \"vEthernet (WSL)\"\n DHCP enabled: No\n IP Address: 172.21.32.1\n Subnet Prefix: 172.21.32.0/20 (mask 255.255.240.0)\n InterfaceMetric: 5000\n Statically Configured DNS Servers: None\n Register with which suffix: None\n Statically Configured WINS Servers: None\n\nOn my OpenWRT router, the configuration gets a bit crazy.\n$ ip addr\n\n1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1000\n link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00\n inet 127.0.0.1/8 scope host lo\n valid_lft forever preferred_lft forever\n inet6 ::1/128 scope host\n valid_lft forever preferred_lft forever\n\n2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1508 qdisc mq state UP qlen 1024\n link/ether 34:f4:aa:91:ec:60 brd ff:ff:ff:ff:ff:ff\n inet6 fe80::5249:e0ff:febc:3f60/64 scope link\n valid_lft forever preferred_lft forever\n\n3: lan4@eth0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue master br-lan state LOWERLAYERDOWN qlen 1000\n link/ether 34:f4:aa:91:ec:60 brd ff:ff:ff:ff:ff:ff\n4: lan3@eth0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue master br-lan state LOWERLAYERDOWN qlen 1000\n link/ether 34:f4:aa:91:ec:60 brd ff:ff:ff:ff:ff:ff\n5: lan2@eth0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue master br-lan state LOWERLAYERDOWN qlen 1000\n link/ether 34:f4:aa:91:ec:60 brd ff:ff:ff:ff:ff:ff\n6: lan1@eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master br-lan state UP qlen 1000\n link/ether 34:f4:aa:91:ec:60 brd ff:ff:ff:ff:ff:ff\n\n7: wan@eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP qlen 1000\n link/ether 36:f4:aa:91:ec:60 brd ff:ff:ff:ff:ff:ff\n inet 69.312.42.96/22 brd 69.312.42.255 scope global wan\n valid_lft forever preferred_lft forever\n inet6 2001:547:6143:b9:905:61b9:2a3:6aff/128 scope global dynamic noprefixroute\n valid_lft 258008sec preferred_lft 258008sec\n inet6 fe80::5049:e0ff:febc:3f60/64 scope link\n valid_lft forever preferred_lft forever\n\n10: mlan0: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN qlen 1000\n link/ether 34:f4:aa:91:ec:63 brd ff:ff:ff:ff:ff:ff\n\n14: br-lan: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP qlen 1000\n link/ether 34:f4:aa:91:ec:60 brd ff:ff:ff:ff:ff:ff\n inet 10.69.69.1/24 brd 10.69.69.255 scope global br-lan\n valid_lft forever preferred_lft forever\n inet6 2601:646:ca00:b0e::1/64 scope global dynamic noprefixroute\n valid_lft 258008sec preferred_lft 258008sec\n inet6 fd5b:7e09:2223::1/60 scope global noprefixroute\n valid_lft forever preferred_lft forever\n inet6 fe80::5249:e0ff:febc:3f60/64 scope link\n valid_lft forever preferred_lft forever\n\n15: wlan0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq master br-lan state UP qlen 1000\n link/ether 34:f4:aa:91:ec:62 brd ff:ff:ff:ff:ff:ff\n inet6 fe80::5249:e0ff:febc:3f62/64 scope link\n valid_lft forever preferred_lft forever\n16: wlan1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq master br-lan state UP qlen 1000\n link/ether 34:f4:aa:91:ec:61 brd ff:ff:ff:ff:ff:ff\n inet6 fe80::5249:e0ff:febc:3f61/64 scope link\n valid_lft forever preferred_lft forever\n\nJust like the others, we still have a loopback.\nTODO: explain what we're looking at : )\n","id":"https://phlip9.com/notes/networking/network interfaces/","title":"network interfaces"},"https://phlip9.com/notes/nvim/":{"body":"","id":"https://phlip9.com/notes/nvim/","title":"nvim"},"https://phlip9.com/notes/nvim/universal-ctags Notes/":{"body":"universal-ctags notes\n\nuseful regex debugger: https://regex101.com/\nsingle line regex:\n--regex-<lang>=/<line-pattern>/<tag-name-pattern>/<kind>/[<flags>]\nuseful flags:\n{exclusive}: don't run any other parsers on this line if the regex matches. useful for comments.\nmulti-line regex:\n--mline-regex-<lang>=/<line-pattern>/<tag-name-pattern>/<kind>/[<mline-flags>]\nuseful flags:\n{mgroup=N}: the capture group that decides where this tag is located (where you go when you go-to the tag). necessary for pretty much every mline regex AFAICT.\nuseful character classes:\n[[:blank:]] == [ \\t]\n[[:space:]] == \\s == any whitespace character (incl. newline if multi-line)\n","id":"https://phlip9.com/notes/nvim/universal-ctags Notes/","title":"universal-ctags Notes"},"https://phlip9.com/notes/performance/":{"body":"","id":"https://phlip9.com/notes/performance/","title":"performance"},"https://phlip9.com/notes/performance/bit hacks/":{"body":"bit hacks\n\nCollection of bit twiddling hacks with helpful explanations : )\nLinks\n \n #\n \n\n\n\nStanford Graphics Bit Twiddling Hacks - Sean Anderson\nHacker's Delight Algorithms List - Hank Warren\ngithub.com/gnzlbg/bitwise\nMatters Computational - Jörg Arndt\nBit Wizardry Page - Jörg Arndt\nharoldbot.nl - check equivalence of 32bit binary equations\n\nutils\n \n #\n \n\n\nJust some convenient functions for debugging.\nfn u32_into_nib_le(x: u32) -> [u8; 8] {\n\tlet [b0, b1, b2, b3] = x.to_le_bytes();\n\t[\n\t\tb0 & 0x0f,\n\t\t(b0 >> 4) & 0x0f,\n\t\tb1 & 0x0f,\n\t\t(b1 >> 4) & 0x0f,\n\t\tb2 & 0x0f,\n\t\t(b2 >> 4) & 0x0f,\n\t\tb3 & 0x0f,\n\t\t(b3 >> 4) & 0x0f,\n\t]\n}\n\nfn dbg_u8(lbl: &str, x: u8) -> u8 {\n\tprintln!(\"{:>12} {:08b}\", lbl, x);\n\tx\n}\n\nfn dbg_u32(lbl: &str, x: u32) -> u32 {\n\tprintln!(\"{:>12} {:032b}\", lbl, x);\n\tx\n}\n\nfn dbg_u32_byte(lbl: &str, x: u32) -> u32 {\n\tlet [b0, b1, b2, b3] = x.to_le_bytes();\n\tprintln!(\"{:>12} {:08b} {:08b} {:08b} {:08b}\", lbl, b3, b2, b1, b0);\n\tx\n}\n\nfn dbg_u32_nib(lbl: &str, x: u32) -> u32 {\n\tlet [n0, n1, n2, n3, n4, n5, n6, n7] = u32_into_nib_le(x);\n\tprintln!(\n\t\t\"{:>12} {:04b} {:04b} {:04b} {:04b} {:04b} {:04b} {:04b} {:04b}\",\n\t\tlbl, n7, n6, n5, n4, n3, n2, n1, n0,\n\t);\n\tx\n}\n\nfn dbg_u64_byte(lbl: &str, x: u64) -> u64 {\n let [b0, b1, b2, b3, b4, b5, b6, b7] = x.to_le_bytes();\n println!(\n \"{:>12} {:08b} {:08b} {:08b} {:08b} {:08b} {:08b} {:08b} {:08b}\",\n lbl, b7, b6, b5, b4, b3, b2, b1, b0,\n );\n x\n}\n\nNext k-bits Permutation Algorithm\n \n #\n \n\n\nSuppose we have an integer with 4-bits, xs = 00101101. We can get the next lexicographic bitvec next(xs) = 00101110 via the following algorithm:\n// given a k-bit vector `x` (i.e., `x.count_ones() == k`),\n// this fn returns the next k-bit vector permutation in\n// lexicographic order.\n//\n// ex:\n// 00001111 -> 00010111\n// \t\t00110101 -> 00101110\n// 00101110 -> 00110011\n//\n// notice that `x.count_ones() == next(x).count_ones()`\nfn next_kbit_perm(x: u32) -> u32 {\n\t// this is `x` but with trailing zeros set to ones\n\t//\n\t// ex:\n\t// \t\t00101101 -> 00101101\n\t// 00101100 -> 00101111\n\tlet t = x | x.wrapping_sub(1);\n\n\t// this selects only the trailing ones in `t`.\n\t// note: t always has at least one trailing one.\n\t//\n\t// ex:\n\t// 00001111 -> 00001111\n\t// \t \t00101111 -> 00001111\n\t// 00101101 -> 00000001\n\t// alt. ((!t & (!t).wrapping_neg()).wrapping_sub(1))\n\tlet u = (1_u8 << (t.trailing_ones())).wrapping_sub(1);\n\n\t// this sets the most significant bit that needs to\n\t// change (but leaves some trailing zeros that we\n\t// need to fixup later).\n\t//\n\t// ex:\n\t// 00001111 -> 00010000\n\t// \t\t00101011 -> 00101100\n\t// 00101111 -> 00110000\n\tlet v = t.wrapping_add(1);\n\n\t// the ones we need to add back into v to \"fix\" it\n\t//\n\t// ex:\n\t// \t\tx=00011101, u=00000001 -> 00000000\n\t// x=00011110, u=00011111 -> 00000111\n\t// \t\tx=00101011, u=00000011 -> 00000001\n\tlet w = u.wrapping_shr(x.trailing_zeros() + 1);\n\n\t// the next permutation\n\t(v | w)\n}\n\n\nwe can use this to generate all k-combinations of a given set, by representing each element of the set x_i as bit b_i.\n+ For example, let's say we have the set {A,B,C}. The combination {A,C} would be represented by the bitstring 101. Applying next_kbit_perm would then give us the next 2-combination 110 or {B,C}.\n\nNum leading/trailing zero bytes\n \n #\n \n\n\nfn u64_leading_zero_bytes_ref(x: u64) -> u32 {\n\tx.to_be_bytes().into_iter().take_while(|&b| b == 0).count() as u32\n}\n\n/// Return the number of leading bytes == 0x00\nfn u64_leading_zero_bytes(x: u64) -> u32 {\n x.leading_zeros() >> 3\n}\n\nfn u64_trailing_zero_bytes_ref(x: u64) -> u32 {\n\tx.to_le_bytes().into_iter().take_while(|&b| b == 0).count() as u32\n}\n\n/// Return the number of trailing bytes == 0x00\nfn u64_trailing_zero_bytes(x: u64) -> u32 {\n x.trailing_zeros() >> 3\n}\n\ngodbolt: https://godbolt.org/z/81a7E6f7M\nAny byte == 0\n \n #\n \n\n\nReturns true if any byte in x is zero.\nfn u32_any_byte_eqz_ref(x: u32) -> bool {\n\tx.to_ne_bytes()\n\t\t.into_iter()\n\t\t.any(|b| b == 0)\n}\n\nfn u32_any_byte_eqz(x: u32) -> bool {\n\t// subtract each individual byte by 1. if a byte is 0x00, this will\n\t// \"underflow\" to 0xff.\n\t//\n\t// for reference:\n\t// 0x0101_0101 00000001 00000001 00000001 00000001\n\tlet t = x.wrapping_sub(0x0101_0101);\n\t// for each byte in u, the upper bit is 1 if that corresponding bit\n\t// is 0 in x\n\t//\n\t// ex:\n\t// \t x\t0XXXXXXX 1XXXXXXX 1XXXXXXX 0XXXXXXX\n\t// 0x8080_8080 \t10000000 10000000 10000000 10000000\n\t// u 00000000 10000000 10000000 00000000\n\tlet u = !x & 0x8080_8080;\n\t// leave a 0x80 in a byte if the upper bit is 1\n\t//\n\t// this can only happen if\n\t// \t 1. the value in the byte has its msb set (after subtracting 1)\n\t// 2. the msb was not already 1 before subtracting\n\t//\n\t// (2.) implies the byte was in the range (0b00000000..=0b01111111).\n\t//\n\t// therefore the only value which will have its msb set after\n\t// subtracting is 0, since it will \"underflow\" to 0b11111111\n\tlet v = t & u;\n\n\tv != 0\n}\n\ngodbolt: https://godbolt.org/z/4Evq88seo\nAny nibble == 0\n \n #\n \n\n\nReturns true if any nibble in x is zero. This is just Any byte 0 but with the constants adjusted to work on every nibble rather than every byte.\nfn u32_any_nib_eqz_ref(x: u32) -> bool {\n\tu32_into_nib_le(x)\n\t\t.into_iter()\n\t\t.any(|nb| nb == 0)\n}\n\nfn u32_any_nib_eqz(x: u32) -> bool {\n\t// 0x1111_1111 0001 0001 0001 0001 0001 0001 0001 0001\n\t// 0x8888_8888 1000 1000 1000 1000 1000 1000 1000 1000\n\tlet t = x.wrapping_sub(0x1111_1111);\n\tlet u = !x & 0x8888_8888;\n\tlet v = t & u;\n\n\tv != 0\n}\n\ngodbolt: https://godbolt.org/z/fnf78rKvz\nAny specific bytes == 0\n \n #\n \n\n\nReturns true if any of a specific subset of the bytes in x are zero.\nmask is a bit-mask where each byte we want to select is equal to 0x01, for example, mask = 0x0100_0100 would select the 2nd and 4th bytes (1-indexed).\nfn u32_any_spec_nib_eqz_ref(x: u32, mask: u32) -> bool {\n\tx.to_ne_bytes().into_iter()\n\t\t.zip(mask.to_ne_bytes().into_iter())\n\t\t.any(|(b_x, b_mask)| (b_mask == 0x01) && (b_x == 0x00))\n}\n\nfn u32_any_spec_nib_eqz(x: u32, mask: u32) -> bool {\n\t// this is just 0x8888_8888, but only 8 where mask has a 1-nibble\n\tlet mask_hi = mask.wrapping_mul(0x8);\n\n\tlet t = x.wrapping_sub(mask);\n\tlet u = !x & mask_hi;\n\tlet v = t & u;\n\n\tv != 0\n}\n\nAny specific nibbles == 0\n \n #\n \n\n\nReturns true if any of a specific subset of the nibbles in x are zero.\nmask is a bit-mask where each nibble we want to select is equal to 0001, for example, mask = 0x1100_0010 would select the 2nd, 7th, and 8th nibbles (1-indexed).\nfn u32_any_spec_nib_eqz_ref(x: u32, mask: u32) -> bool {\n\tu32_into_nib_le(x)\n\t\t.into_iter()\n\t\t.zip(u32_into_nib_le(mask).into_iter())\n\t\t.any(|(nb_x, nb_mask)| (nb_mask == 0x1) && (nb_x == 0x0))\n}\n\nfn u32_any_spec_nib_eqz(x: u32, mask: u32) -> bool {\n\t// this is just 0x8888_8888, but only 8 where mask has a 1-nibble\n\tlet mask_hi = mask.wrapping_mul(0x8);\n\n\tlet t = x.wrapping_sub(mask);\n\tlet u = !x & mask_hi;\n\tlet v = t & u;\n\n\tv != 0\n}\n\ngodbolt: https://godbolt.org/z/Tfn9fbKKG\nAny byte b in range m < b < n\n \n #\n \n\n\nwhere 0 <= m <= 127 and 0 <= n <= 128.\nReturns true if any byte b in x is in the range m < b < n.\nfn u32_has_byte_between_ref(x: u32, m: u32, n: u32) -> bool {\n\tassert!((0..=127).contains(&m));\n\tassert!((0..=128).contains(&n));\n\n\tlet m = m as u8;\n\tlet n = n as u8;\n\n\tx.to_ne_bytes().into_iter().any(|b| (m < b) && (b < n))\n}\n\nfn u32_has_byte_between(x: u32, m: u32, n: u32) -> bool {\n\tassert!((0..=127).contains(&m));\n\tassert!((0..=128).contains(&n));\n\n\tlet mask = 0x0101_0101;\n\tlet s = mask * 127;\n\tlet y = mask * 128;\n\tlet w = mask * (127 + n);\n\tlet t = mask * (127 - m);\n\n\tlet u = x & s;\n\tlet z = (w - u) & (!x) & (u + t) & y;\n\n\tz != 0\n}\n\ngodbolt: https://godbolt.org/z/a5911ra73\nAny specific bytes b in range m < b < n\n \n #\n \n\n\nwhere 0 <= m <= 127 and 0 <= n <= 128.\nReturns true if any specific bytes b in x are in the range m < b < n, selected by a bit-mask mask.\nmask is a bit-mask where each byte we want to select is equal to 0x01, for example, mask = 0x0100_0100 would select the 2nd and 4th bytes (1-indexed).\nfn u32_has_spec_byte_between_ref(x: u32, mask: u32, m: u32, n: u32) -> bool {\n\tassert!((0..=127).contains(&m));\n\tassert!((0..=128).contains(&n));\n\n\tlet m = m as u8;\n\tlet n = n as u8;\n\n\tx.to_ne_bytes()\n\t\t.into_iter()\n\t\t.zip(mask.to_ne_bytes().into_iter())\n\t\t.any(|(b_x, b_mask)| (b_mask == 0x01) && (m < b_x) && (b_x < n))\n}\n\nfn u32_has_spec_byte_between(x: u32, mask: u32, m: u32, n: u32) -> bool {\n\tassert!((0..=127).contains(&m));\n\tassert!((0..=128).contains(&n));\n\n\tlet s = mask * 127;\n\tlet y = mask * 128;\n\tlet w = mask * (127 + n);\n\tlet t = mask * (127 - m);\n\n\tlet u = x & s;\n\tlet z = (w - u) & (!x) & (u + t) & y;\n\n\tz != 0\n}\n\ngodbolt: https://godbolt.org/z/aq8T9seEs\nAny specific nibbles nb in range m < nb < n\n \n #\n \n\n\nwhere 0 <= m <= 7 and 0 <= n <= 8.\nReturns true if any specific nibbles nb in x are in the range m < nb < n, selected by a bit-mask mask.\nmask is a bit-mask where each nibble we want to select is equal to 0001, for example, mask = 0x1100_0010 would select the 2nd, 7th, and 8th nibbles (1-indexed).\nfn u32_has_spec_nib_between_ref(x: u32, mask: u32, m: u32, n: u32) -> bool {\n\tassert!((0..=7).contains(&m));\n\tassert!((0..=8).contains(&n));\n\n\tlet m = m as u8;\n\tlet n = n as u8;\n\n\tu32_into_nib_le(x)\n\t\t.into_iter()\n\t\t.zip(u32_into_nib_le(mask).into_iter())\n\t\t.any(|(nb_x, nb_mask)| {\n\t\t\t(nb_mask == 0x1) && (m < nb_x) && (nb_x < n)\n\t\t})\n}\n\nfn u32_has_spec_nib_between(x: u32, mask: u32, m: u32, n: u32) -> bool {\n\tassert!((0..=7).contains(&m));\n\tassert!((0..=8).contains(&n));\n\n\tlet s = mask * 7;\n\tlet y = mask * 8;\n\tlet w = mask * (7 + n);\n\tlet t = mask * (7 - m);\n\n\tlet u = x & s;\n\tlet z = (w - u) & (!x) & (u + t) & y;\n\n\tz != 0\n}\n\ngodbolt: https://godbolt.org/z/PGfvT39z5\nElement-wise bytes less-than\n \n #\n \n\n\nfn u64_elementwise_bytes_lt_ref(x: u64, y: u64) -> u64 {\n\tassert!(x & 0x8080_8080_8080_8080_u64 == 0);\n\tlet bytes = x.to_le_bytes()\n\t\t.into_iter()\n\t\t.zip(y.to_le_bytes().into_iter())\n\t\t.map(|(bx, by)| if bx < by { 0x80_u8 } else { 0x00_u8 })\n\t\t.collect::<Vec<_>>();\n\tu64::from_le_bytes(<[u8; 8]>::try_from(&bytes[..]).unwrap())\n}\n\n/// Do an element-wise less-than comparison across each byte in `x` and `y`.\n/// Returns a mask where each byte is `0x80` if `bx < by` and `0x00` otherwise.\n/// Requires that each byte in `x` is in the range `0 <= bx <= 0x7f (127)`.\nfn u64_elementwise_bytes_lt(x: u64, y: u64) -> u64 {\n // ensure no elements in x are > 0x7f\n debug_assert!((x & 0x8080_8080_8080_8080) == 0);\n\n let a = 0x7f7f_7f7f_7f7f_7f7f_u64;\n let b = 0x8080_8080_8080_8080_u64;\n let c = a - x;\n\n // a = (0x7f << 56) + (0x7f << 48) + .. + (0x7f << 0)\n // x = (b7 << 56) + (b6 << 48) + .. + (b0 << 0)\n // c = ((0x7f - b7) << 56) + .. + ((0x7f - b0) << 0)\n\t// iff. bi <= 0x7f forall i\n\n // (((by & 0x7f) + (0x7f - bx) > 0x7f) || (by > 0x7f)\n // by' + 0x7f - bx > 0x7f\n // by' - bx > 0x7f\n // (by' > bx) || (by > 0x7f)\n\n ((y & a).wrapping_add(c) | y) & b\n}\n\ngodbolt: https://godbolt.org/z/fzGT4bonz\nLeading byte index less-than\n \n #\n \n\n\nfn u64_leading_byte_idx_lt_ref(x: u64, y: u64) -> Option<u8> {\n\tx.to_le_bytes().into_iter()\n\t\t.zip(y.to_le_bytes().into_iter())\n\t\t.rposition(|(bx, by)| bx < by)\n\t\t.map(|idx| idx as u8)\n}\n\n/// Given two u64's, `x` and `y`, where all bytes `bx` in `x` are in the range\n/// `0 <= bx <= 0x7f (127)`, return the _byte index_ (i.e., idx = 0 = least\n/// significant byte, idx = 7 = most-significant byte) of the first leading byte\n/// `by` in `y` where `by > bx`. (i.e., starting from the most-significant byte).\n///\n/// Returns `None` if there are no bytes in `y` greater than their corresponding\n/// byte in `x`.\nfn u64_leading_byte_idx_lt(x: u64, y: u64) -> Option<u8> {\n let mask_0x80 = u64_elementwise_bytes_lt(x, y);\n\n if mask_0x80 != 0 {\n Some((7 - u64_leading_zero_bytes(mask_0x80)) as u8)\n } else {\n None\n }\n}\n\ngodbolt: https://godbolt.org/z/aadbsqjve\nTrailing byte index single byte less-than\n \n #\n \n\n\nfn u64_trailing_byte_idx_lt_ref(n: u8, y: u64) -> Option<u8> {\n\ty.to_le_bytes()\n\t\t.into_iter()\n\t\t.position(|by| n < by)\n\t\t.map(|idx| idx as u8)\n}\n\n/// Return the _byte index_ of the first _trailing_ byte `by` in `y` where\n/// `n < by`.\nfn u64_trailing_byte_idx_lt(n: u8, y: u64) -> Option<u8> {\n // broadcast byte `n` across all bytes\n let x = 0x0101_0101_0101_0101_u64 * (n as u64);\n // set 0x80 in all bytes where `n < by`\n let mask_0x80 = u64_elementwise_bytes_lt(x, y);\n\n if mask_0x80 != 0 {\n Some(u64_trailing_zero_bytes(mask_0x80) as u8)\n } else {\n None\n }\n}\n\ngodbolt: https://godbolt.org/z/3n5s1TMnW\npdep - parallel bit deposit\n \n #\n \n\n\nLike \"spreading\" out compact bits onto a mask.\nSee: https://github.com/phlip9/fastperm_benches/blob/master/src/select64.rs#L123\nselect - get the index of the i'th 1-bit in a mask\n \n #\n \n\n\nSee: https://github.com/phlip9/fastperm_benches/blob/master/src/select64.rs#L19\nGenerate all possible masks\n \n #\n \n\n\nA proptest strategy for generating all possible combinations of bits, mask that match a \"meta\" mask. By \"match\" I mean meta_mask & mask == mask, i.e., mask is a subset of meta_mask.\nfn u32_arb_mask(meta_mask: u32) -> impl Strategy<Value = u32> {\n\tlet nmasks: u32 = 1 << meta_mask.count_ones();\n\n\t(0..=nmasks)\n\t\t.prop_map(move |mask_idx| pdep32(mask_idx, meta_mask))\n}\n\nSum all nibbles\n \n #\n \n\n\nGiven x = AAAA BBBB CCCC DDDD EEEE FFFF GGGG HHHH, returns the sum AAAA + BBBB + CCCC + DDDD + EEEE + FFFF + GGGG + HHHH.\nfn u32_sum_nibs_ref(x: u32) -> u32 {\n\tu32_into_nib_le(x)\n\t\t.into_iter()\n\t\t.map(|x| x as u32)\n\t\t.sum()\n}\n\n// this implementation is just a truncated popcnt/count_ones.\n// it's truncated in that we skip horizontal summing the bits and\n// half-nibbles and just dive right into horizontal summing the\n// nibbles.\n//\n// visually:\n//\n// x AAAA BBBB CCCC DDDD EEEE FFFF GGGG HHHH\n// y 000A BABA 000C DCDC 000E FEFE 000G HGHG (1.)\n// z 0000 0000 00AB CDAB 0000 0000 00EF GHEF (2.)\n// w 0000 0000 0000 0000 0000 0000 0ABC DEFG (3.)\n//\n// (1.) note that any horizontal sum AAAA + BBBB will fill at most\n// _5_ bits. (log2(16 + 16) == 5)\n// (2.) each will fill at most _6_ bits. (log2(32 + 32) == 6)\n// (3.) the result will fill at most _7_ bits. (log2(64 + 64) == 7)\nfn u32_sum_nibs_simple(x: u32) -> u32 {\n const NIBS_0246: u32 = 0x0f0f_0f0f;\n const NIBS_0145: u32 = 0x00ff_00ff;\n const NIBS_0123: u32 = 0x0000_ffff;\n\n\t// like taking each individual byte and replacing it with the sum\n\t// of its hi and lo nibbles.\n let y = (x & NIBS_0246) + ((x >> 4) & NIBS_0246);\n\t// for each individual half-word, replace it with the sum of its\n\t// hi and lo bytes.\n\tlet z = (y & NIBS_0145) + ((y >> 8) & NIBS_0145);\n\t// our result is then the sum of the remaining hi and lo\n\t// half-words!\n let w = (z & NIBS_0123) + ((z >> 16) & NIBS_0123);\n\n\tw\n}\n\n// this one's pretty cool and compact : )\n//\n// it starts off like the one before, horizontal summing the adjacent\n// nibbles in each byte.\n//\n// the trick here is to somehow get the horizontal sum of all bytes\n// into the _last_ byte, then shift down so only the last byte is left.\n//\n// we can decompose any 32-bit integer into base 256, where the\n// ith coefficient is the ith byte:\n//\n// B = 2^8\n// y = (b3 * B^3) + (b2 * B^2) + (b1 * B^1) + (b0 * B^0) (mod 2^32)\n// = (b3 * 2^24) + (b2 * 2^16) + (b1 * 2^8) + (b0 * 2^0) (mod 2^32)\n//\n// we want to reach the following:\n//\n// z = ((b3 + b2 + b1 + b0) * 2^24) + (XXX) (mod 2^32)\n// \t where 0 <= b0, b1, b2, b3 < 32\n// and (XXX) < 0x00ff_ffff (so it doesn't overflow into the\n// \t\t\t\t\t\t\t\t part care about)\n//\n// consider one of the individual bytes multiplied by 0x0101_0101\n//\n// y2 = b2 * 2^16\n// y2 * 0x0101_0101 = b2 * (0x0101_0101 * 2^16)\n// \t\t\t\t\t= b2 * (0x0101_0101 << 16)\n// \t\t\t\t\t= b2 * 0x0101_0000\n// \t\t\t\t\t= 0xb2b2_0000\n//\n// then, expanding all byte sections\n//\n// y0 = b0 * 2^0\n// y1 = b1 * 2^8\n// y2 = b2 * 2^16\n// y3 = b3 * 2^24\n//\n// y = y0 + y1 + y2 + y3\n//\n// y0 * 0x0101_0101 = b0 * (0x0101_0101 << 0)\n//\t\t\t\t\t= b0 * 0x0101_0101\n// = 0xb0b0_b0b0\n// y1 * 0x0101_0101 = b1 * (0x0101_0101 << 8)\n//\t\t\t\t\t= b1 * 0x0101_0100\n// = 0xb1b1_b100\n// y2 * 0x0101_0101 = b2 * (0x0101_0101 << 16)\n//\t\t\t\t\t= b2 * 0x0101_0000\n// = 0xb2b2_0000\n// y3 * 0x0101_0101 = b3 * (0x0101_0101 << 24)\n//\t\t\t\t\t= b3 * 0x0100_0000\n// = 0xb300_0000\n// y * 0x0101_0101 = (y0 + y1 + y2 + y3) * 0x0101_0101\n// = 0xb0b0_b0b0 + 0xb1b1_b100 +\n//\t 0xb2b2_0000 + 0xb300_0000\n// = [b0, b0+b1, b0+b1+b2, b0+b1+b2+b3]\n//\n// which has exactly what we want, b0+b1+b2+b3 in the last byte!\n// (with some leftover junk in the lower bytes, but we can just\n// ignore that when we down shift).\n//\n// since we're doing a horizontal sum to get `y`, and each nibble\n// must be in the range 0 <= nb < 16, it follows that each byte\n// (which is a sum of two nibbles here) must be in the range:\n// 0 <= b < 32. this means none of the byte sums will overflow,\n// since 32 * 4 = 128 <= 256\nfn u32_sum_all_nibs(x: u32) -> u32 {\n // a mask that selects the lo nibble in each byte.\n const NIBS_0246: u32 = 0x0f0f_0f0f;\n\n // horizontal sum hi and lo nibbles in each byte, placing in the\n\t// lo nibble.\n let y = (x & NIBS_0246) + ((x >> 4) & NIBS_0246);\n\n // if y = [y0, y1, y2, y3] bytes and each byte b is in the range\n\t// 0 <= b < 64, then multiplying by 0x0101_0101 will yield\n // z = [y0, y0 + y1, y0 + y1 + y2, y0 + y1 + y2 + y3] without\n\t// any overflows.\n //\n // since each byte in y is the sum of two nibbles nb where\n\t// 0 <= nb < 16, it follows that 0 <= b = nb_lo + nb_hi < 32 < 64\n\t// so we won't have any overflows\n let z = y.wrapping_mul(0x0101_0101);\n\n // select the last byte in z, which contains our desired sum:\n // z3 = y0 + y1 + y2 + y3\n // = (nb0 + nb1) + (nb2 + nb3) + (nb4 + nb5) + (nb6 + nb7)\n z >> 24\n}\n\ngodbolt: https://godbolt.org/z/4EcYae1fj\n","id":"https://phlip9.com/notes/performance/bit hacks/","title":"bit hacks"},"https://phlip9.com/notes/performance/dtrace on macOS/":{"body":"dtrace on macOS\n\nsetup: disable system integrity protection for dtrace\n \n #\n \n\n\nBy default, macOS won't let you run dtrace, even when run as root. Fortunately we can can carve out a specific exception for dtrace. To do that we'll have to boot into recovery mode:\n\nTurn off the computer.\nHold down the power button for ~10 sec, until a screen pops up with two options.\nSelect \"Options\" to boot into recovery mode.\nIgnore the initial screen and instead select \"Terminal\" from the top bar.\nRun csrutil enable --without dtrace.\nReboot normally.\n\nOnce you're booted back in, try running sudo dtruss bash -c echo foo and you should see some output.\nsyscall counts of running process\n \n #\n \n\n\n$ sudo dtrace -n 'syscall:::entry/pid == 1234/{ @syscalls[probefunc] = count(); }'\n\n# .. collect data, then hit CTRL-C .. #\n^C\n\nchmod 3\nclose 3\nfchown 3\nrename 3\ngetuid 5\nlstat64 6\n# ..\nfcntl 105\nopen_nocancel 313\nfcntl_nocancel 322\nfstat64 322\nclose_nocancel 391\nread 465\nwrite 480\nstat64 685\nkevent 1333\n\ntrace bytes read by all processes\n \n #\n \n\n\n$ sudo dtrace -n \"syscall::read:entry { @bytes[execname] = sum(arg2); }\"\ndtrace: description 'syscall::read:entry ' matched 1 probe\n^C\n\nsudo 2\nplugin-container 10\nkarabiner_observer 4096\ntmux 4096\nkarabiner_console_user_server 8192\nkarabiner_session_monitor 9216\ncfprefsd 17665\nfirefox 32787\ngit 33225\nkarabiner_grabber 38912\nKarabiner-DriverKit-VirtualHIDDe 51200\npostgres 57397\nlocationd 57680\nsharingd 57680\nObsidian Helper (Renderer) 399360\nmds 1326816\nfseventsd 1777432\nalacritty 4194560\nmdworker_shared 5242880\n\ntrace spawned processes\n \n #\n \n\n\n$ sudo dtrace -qn \"syscall::posix_spawn:entry { printf(\\\"%Y %s\\n\\\", walltimestamp, copyinstr(arg1)); }\"\n\n^[2023 Jan 30 13:29:50 /usr/bin/git\n2023 Jan 30 13:29:50 /usr/bin/git\n2023 Jan 30 13:29:52 /usr/libexec/xpcproxy\n2023 Jan 30 13:29:52 /opt/homebrew/opt/postgresql@14/bin/postgres\n2023 Jan 30 13:29:55 /usr/libexec/xpcproxy\n2023 Jan 30 13:29:55 /System/Library/Frameworks/CoreServices.framework/Frameworks/Metadata.framework/Versions/A/Support/mdworker_shared\n2023 Jan 30 13:30:02 /usr/libexec/xpcproxy\n2023 Jan 30 13:30:02 /opt/homebrew/opt/postgresql@14/bin/postgres\n2023 Jan 30 13:30:05 /usr/libexec/xpcproxy\n2023 Jan 30 13:30:05 /usr/sbin/newsyslog\n2023 Jan 30 13:30:12 /usr/libexec/xpcproxy\n2023 Jan 30 13:30:12 /opt/homebrew/opt/postgresql@14/bin/postgres\n\nFind longest syscalls\n \n #\n \n\n\n$ sudo dtrace -qn \\\n\t'syscall:::entry { self->ts = timestamp; } syscall:::return/self->ts/ { printf(\"%d µs, %s\\n\", (timestamp - self->ts) / 1000, probefunc); self->ts = 0; }' \\\n -c 'bash -c \"python3 -c \\\"print(123)\\\"\"' \\\n\t| sort -h\n\n..\n42 µs, ioctl\n44 µs, open_nocancel\n44 µs, shared_region_check_np\n351 µs, execve\n943 µs, ioctl\n1279 µs, workq_kernreturn\n1348 µs, psynch_cvwait\n\nsome oneliners\n \n #\n \n\n\n# Files opened by process. Very useful when reversing:\ndtrace -n 'syscall::open*:entry { printf(\"%s %s\", execname, copyinstr(arg0)); }'\n\n# Syscall count by program:\ndtrace -n 'syscall:::entry { @num[execname] = count(); }'\n\n# Syscall count by syscall:\ndtrace -n 'syscall:::entry { @num[probefunc] = count(); }'\n\n# Syscall count by PID:\ndtrace -n 'syscall:::entry { @num[pid,execname] = count(); }'\n\n# Read bytes by process:\ndtrace -n 'syscall::read:entry { @bytes[execname] = sum(arg0); }'\n\n# Periodic breakdown of written bytes by process:\ndtrace -n 'syscall::write:* { @bytes[execname] = sum(arg0); } tick-5sec { printa(@bytes); trunc(@bytes); }'\n\n# Read size distribution by process:\ndtrace -n 'syscall::read:entry { @dist[execname] = quantize(arg0); }'\n\n# Write size distribution by process:\ndtrace -n 'syscall::write:entry { @dist[execname] = quantize(arg0); }'\n\n# Disk size (in blocks) by process:\ndtrace -n 'io:::start { printf(\"%d %s %d\", pid, execname, args[0]->b_bcount); }'\n\n# Pages paged in by process:\ndtrace -n 'vminfo::vm_fault_enter:pgin { @pg[execname] = sum(arg0); }'\n\n# Minor faults by process:\ndtrace -n 'vminfo:::as_fault { @mem[execname] = sum(arg0); }'\n\n# Interrupts by CPU:\ndtrace -n 'sdt:::interrupt-start { @num[cpu] = count(); }'\n\n# New processes with arguments and time:\ndtrace -qn 'syscall::exec*:return { printf(\"%Y %s\\n\",walltimestamp,curpsinfo->pr_psargs); }'\n\n# Successful signal details:\ndtrace -n 'proc:::signal-send /pid/ { printf(\"%s -%d %d\",execname,args[2],args[1]->pr_pid); }'\n\n# System call breakdown for the process with PID 31337:\ndtrace -n syscall:::entry'/pid == 31337/{ @syscalls[probefunc] = count(); }'\n\n# Tracking memory page faults for process:\ndtrace -n 'vminfo:::as_fault { @mem[execname] = sum(arg0); }'\n\n# iOS Intruments-like malloc size distribution plot:\ndtrace -n 'pid$target::malloc:entry { @ = quantize(arg0); }' -p PID\n\n# Memory allocation via malloc by stack trace and requested size:\ndtrace -n 'pid$target::malloc:entry { @[ustack()] = sum(arg0); }' -p PID\n\n# Rate of disk I/O:\ndtrace -n 'io:::start { @io = count(); } tick-1sec { printa(\"Disk I/Os per second: %@d\\n\", @io); trunc(@io); }'\n\ntrace spawned processes w/ full arguments\n \n #\n \n\n\n// file: /usr/local/bin/traceexec.d\n\n#!/usr/sbin/dtrace -C -s\n#pragma D option quiet\n\ndtrace:::BEGIN\n{\n printf(\"PID\\tPPID\\tTIME\\tPATH\\tARGV\\n\")\n}\n\n// remember that probes are executed _in the order they appear in the file_\n// and that probe-local variables (this->XXX) are shared across activated\n// probes.\n\n// Since `arg0` and `argv[idx]` are in user-space and probes are run in\n// kernel-space, we have to first `copyin[str](..)` the user-space strings\n// before we can process them.\n\nsyscall::execve:entry\n/pid == $target || progenyof($target)/\n{\n this->path = copyinstr(arg0);\n this->argv = args[1];\n}\n\nsyscall::posix_spawn:entry\n/pid == $target || progenyof($target)/\n{\n this->path = copyinstr(arg1);\n this->argv = args[3];\n}\n\n#define SAFE_ARGC(idx) ((this->argc != (idx) || this->argv[(idx)] == NULL) ? this->argc : (this->argc + 1))\n#define SAFE_ARGV(idx) ((this->argc > (idx)) ? copyinstr((user_addr_t) this->argv[(idx)]) : \"\")\n\nsyscall::execve:entry,\nsyscall::posix_spawn:entry\n/pid == $target || progenyof($target)/\n{\n this->pid=pid;\n this->ppid=ppid;\n\n // DTrace doesn't support loops, so we have to manually unroll the argc\n // and argv processing.\n\n this->argc = 0;\n this->argc = SAFE_ARGC(0);\n this->argc = SAFE_ARGC(1);\n this->argc = SAFE_ARGC(2);\n this->argc = SAFE_ARGC(3);\n this->argc = SAFE_ARGC(4);\n this->argc = SAFE_ARGC(5);\n this->argc = SAFE_ARGC(6);\n this->argc = SAFE_ARGC(7);\n this->argc = SAFE_ARGC(8);\n this->argc = SAFE_ARGC(9);\n\n printf(\"%d\\t\", pid);\n printf(\"%d\\t\", ppid);\n printf(\"%Y\\t\", walltimestamp);\n printf(\"%s\\t\", this->path);\n printf(\"%s \", SAFE_ARGV(1));\n printf(\"%s \", SAFE_ARGV(2));\n printf(\"%s \", SAFE_ARGV(3));\n printf(\"%s \", SAFE_ARGV(4));\n printf(\"%s \", SAFE_ARGV(5));\n printf(\"%s \", SAFE_ARGV(6));\n printf(\"%s \", SAFE_ARGV(7));\n printf(\"%s \", SAFE_ARGV(8));\n printf(\"%s \", SAFE_ARGV(9));\n printf(\"\\n\");\n}\n\n#undef SAFE_ARGC\n#undef SAFE_ARGV\n\nreference\n \n #\n \n\n\nOracle - Dynamic Tracing Guide (pdf)\n","id":"https://phlip9.com/notes/performance/dtrace on macOS/","title":"dtrace on macOS"},"https://phlip9.com/notes/performance/profiling/":{"body":"profiling\n\nViewing perf results\n \n #\n \n\n\nSee WSL2 custom kernel > perf for how to collect and transform profile records with perf.\nUse https://www.speedscope.app/ to view perf.data (after converting to text format with perf script).\nSpeedscope Views\n \n #\n \n\n\n\n\nTime Order\nShows call stacks ordered by chronological order. Useful for seeing what is happening over time (e.g., first DB call, then request, then ...).\n\n\nLeft Heavy a.k.a. Icicle View\nShows identical stacks grouped together regardless of chronological order. The heaviest stack is always on the left. Basically flamegraph view but upside down (top stack on top).\n\n\nSandwich\nShows a table of all functions by total time spent. Clicking on a function will show you the \"Left Heavy\" view (but just for callers and callees of that function).\n\n\n","id":"https://phlip9.com/notes/performance/profiling/","title":"profiling"},"https://phlip9.com/notes/performance/simdjson talk/":{"body":"simdjson talk\n\n\"Data Engineering at the Speed of Your Disk\" - Daniel Lemire - 2020\n\nModern disks are pretty fast\n\nPCIe 4 disks: 5 GB/s sequential read\n\n\nModern datacenter VPC network real fucking fast\n\n50 Gb/s (6.25 GiB/s) and better\n\n\nIf we can't eat data at many GB/s, we'll literally be CPU-bound reading from disk or network!\nHow fast can we allocate memory?\n\n// almost instant (just virtual memory)\nlet mut buf = Vec::with_capacity(size);\n\n// actually instantiate physical pages\nfor i in (0..buf.len()).step_by(page_size) {\n\tbuf[i] = 0;\n}\n\n3.5 GB/s (Linux, Skylake 3.4 GHz, 4 KiB pages)\n\nHow fast can we, e.g., remove spaces from a string?\n\nAssume 1% space density (minified json)\n\n\n\nfor i in 0..buf.len() {\n\tif buf[i] > 32 /* space as decimal = 32 */ {\n\t\tbuf[i + 1] = buf[i];\n\t}\n}\n\n1.6 GB/s\n\nJust working byte-by-byte will already have limit of ~3.5 GB/s b/c our processor is 3.5 GHz.\nWe're already slower than disk if we work byte-by-byte.\nso how are we going to go faster? SIMD : )\n\nAVX-512 instructions can operate on an entire cache-line at once : 0\n\n\nWorking with SIMD\n\n\n(1) use SIMD intrinsics. produces very disgusting code though.\n\n\n(2) pray / massage code so compiler auto-vectorizes : )\n\n\ndespacer with SIMD\n\n\n// filled with spaces\n__m128i spaces = _mm_set1_epi8(' ');\n\nfor (i = 0; i + 15 < size; i += 16) {\n\t// load next chunk\n\t__m128i x = _mm_loadu_si128(bytes + i);\n\n\t// set a 1 byte anywhere we have an x byte <= 32\n\t__m128i anywhite = _mm_cmpeq_epi8(spaces, _mm_max_epu8(spaces, x));\n\n\t// condense anywhite mask into a packed u64 mask\n\tuint64_t mask16 = _mm_movemask_epi8(anywhite);\n\n\t// basically a pdep, but deposit the non-space bytes at the front\n\tx = _mm_shuffle_epi8(x, despace_mask16[mask16 & 0x7fff]);\n\n\t// store in-place\n\t_mm_storeu_si128(bytes + pos, x);\n\t// increment our in-place output pointer only by the # non-spaces.\n\tpos += 16 - mask16.count_ones();\n}\n\n\n\nbase64 encode / decode lemire/fastbase64\n\ncan encode w/ SIMD in only 3 instructions : 0 (mod loads/stores)\ndecoding closer to 7 instructions\nonce your data is not just in L1/L2 cache, this is just as fast as a memcpy\n\n\n\nutf-8 encode / decode\n\n\nbyte-by-byte approach only 300 MB/s D :\n\n\nif b1 < 0x80 {\n\treturn true; // ascii\n}\nif b1 < 0xe0 {\n\tif b1 < 0xc2 || b2 > 0xbf {\n\t\treturn false;\n\t}\n} else if b1 < 0xf0 {\n\t// 3 byte form\n\tif b2 > 0xbf || (b1 == 0xe0 && b2 < 0xa0) || (b1 == 0xed && b2 >= 0xa0) {\n\t\t// ..\n\t} else {\n\t\t// ..\n\t}\n} else {\n\t// 4 byte form\n\t// ..\n}\n\n\n\nusing SIMD: 8 GB/s\n\n\nusing 32-byte chunks, ~20 instructions. branch-less\n\n\nhttps://github.com/lemire/fastvalidate-utf-8\n\n\nJSON for Modern C++ library (nlohmann-json)\n\n\n0.1 GB/s (Skylake 3.4 GHz, GCC8, file: twitter.json)\n\n\nrapidjson\n\n\n0.3 GB/s (Skylake 3.4 GHz, GCC8, file: twitter.json)\n\n\nboth of these libs nowhere near disk/network speed\n\n\nwhat is our \"roofline\" benchmark?\n\n\nlet mut all_line_lens = 0;\nfor line in reader.lines() {\n\tall_line_lens += line.len();\n}\n\n\n\n1.4 GB/s (Skylake 3.4 GHz, GCC8, file: twitter.json)\n\n\nbut you can actually go faster!\n\n\nsimdjson\n\n\n2.5 GB/s (Skylake 3.4 GHz, GCC8, file: twitter.json)\n\n\nsome of the tricks used in simdjson\n\n\nFind the span of the string\n\nGiven a mask containing quotes, return a mask set to 1 in the string span regions.\n__1________1________1___1 quotes\n___11111111__________111_ string regions\n\n\n\nmask = quote xor (quote << 1);\nmask = mask xor (mask << 2);\nmask = mask xor (mask << 4);\nmask = mask xor (mask << 8);\n// ..\n\n\n\nstring span can actually be done in one instruction : 0\n\n\nNumber parsing is expensive\n\nstrtod\n90 MB/s\n38 cycles / byte\n10 branch misses / float\nyikes!\n\n\n\nSIMD approach\n\n\nfn contains_8_digits(buf: &[u8; 8]) -> bool {\n\tlet val = u64::from_ne_bytes(buf);\n\t( (val & 0xf0f0_f0f0_f0f0_f0f0) |\n\t\t(((val + 0x0606_0606_0606_0606) & 0xf0f0_f0f0_f0f0_f0f0) >> 4)\n\t) == 0x3333_3333_3333_3333\n}\n\nfn parse_8_digits_unrolled(buf: &[u8; 8]) -> u32 {\n\tlet mut val = u64::from_ne_bytes(buf);\n\tval = ((val & 0x0f0f_0f0f_0f0f_0f0f) * 2561) >> 8;\n\tval = ((val & 0x00ff_00ff_00ff_00ff) * 6553601) >> 16;\n\t((val & 0x0000_ffff_0000_ffff) * 42949672960001) >> 32\n}\n\nhttps://github.com/lemire/fast-float-rust\n","id":"https://phlip9.com/notes/performance/simdjson talk/","title":"simdjson talk"},"https://phlip9.com/notes/postgres/":{"body":"","id":"https://phlip9.com/notes/postgres/","title":"postgres"},"https://phlip9.com/notes/postgres/postgres performance tuning/":{"body":"postgres performance tuning\n\nuse separate disks for DB data and WAL files\n \n #\n \n\n\nAn excerpt from the official postgres manual:\n\nIt is advantageous if the WAL is located on a different disk from the main database files. This can be achieved by moving the pg_wal directory to another location (while the server is shut down, of course) and creating a symbolic link from the original location in the main data directory to the new location.\nPostgreSQL WAL Internals\n\nRelated info from an azure cloud disk performance tuning guide:\n\nAs an example, you can apply these guidelines to SQL Server running on Premium Storage by doing the following,\n\nConfigure \"ReadOnly\" cache on premium storage disks hosting data files.\na. The fast reads from cache lower the SQL Server query time since data pages are retrieved much faster from the cache compared to directly from the data disks.\nb. Serving reads from cache, means there is additional Throughput available from premium data disks. SQL Server can use this additional Throughput towards retrieving more data pages and other operations like backup/restore, batch loads, and index rebuilds.\nConfigure \"None\" cache on premium storage disks hosting the log files.\na. Log files have primarily write-heavy operations. Therefore, they do not benefit from the ReadOnly cache.\n\nAzure disk caching performance guide\n\nSee also: https://learn.microsoft.com/en-us/azure/azure-sql/virtual-machines/windows/performance-guidelines-best-practices-storage?view=azuresql\npgMustard - EXPLAIN Glossary\n \n #\n \n\n\nA glossary for what all the terms in an EXPLAIN ANALYZE query mean.\npgMustard ($100/yr) - EXPLAIN ANALYZE query analyzer-analyzer\n \n #\n \n\n\n\nHelps you review Postgres query plans quickly\nA simple yet powerful tool to help you speed up queries\nReading EXPLAIN ANALYZE output can be tough.\nEven if you know how, Postgres includes so much useful information, it is easy to miss something important. And for queries that do a lot, the plans are even more useful-yet-time-consuming.\npgMustard speeds up your journey from knowing which query is a problem to working out what can be done about it.\n\n","id":"https://phlip9.com/notes/postgres/postgres performance tuning/","title":"postgres performance tuning"},"https://phlip9.com/notes/postgres/snippets/":{"body":"snippets\n\n\nRemember strings must be surrounded with single quotes '' not double quotes \"\"!\n\n\"dry run\" in psql repl\n \n #\n \n\n\nDon't know why I didn't think of this. Literally just wrap everything in a transaction. If you fuck up, just rollback.\nbegin;\n\n-- whatever queries --\n\nrollback;\n-- or\ncommit;\n\nbetter printing for long rows\n \n #\n \n\n\n\\x auto\n\nupdate, then print new values\n \n #\n \n\n\nupdate payment\nset id = 'os_57ea76' where id = 'or_57ea76'\nreturning created_at, id;\n\nupdate payment\nset id = replace(id, 'or_', 'os_')\nwhere starts_with(id, 'or_')\nreturning created_at, id;\n\nupsert\n \n #\n \n\n\n-- silently ignore on conflict\ninsert into \"user\"\nvalues ('442e9dd9d1a3e39c203ce131492090d7', '4e718d3c17d3f4c67e2eaa26da2feb66')\non conflict (user_pk) do nothing;\n\n-- replace on conflict\ninsert into \"user\"\nvalues ('442e9dd9d1a3e39c203ce131492090d7', '4e718d3c17d3f4c67e2eaa26da2feb66')\non conflict (user_pk) do update set node_pk = EXCLUDED.node_pk;\n\n-- also return\ninsert into \"user\"\nvalues ('442e9dd9d1a3e39c203ce131492090d7', '4e718d3c17d3f4c67e2eaa26da2feb66')\non conflict (user_pk) do update set node_pk = EXCLUDED.node_pk\nreturning user_pk, node_pk;\n\nexplore db\n \n #\n \n\n\n-- show tables (basic info)\n# \\dt\n List of relations\n Schema | Name | Type | Owner\n--------+------------------+-------+-------\n public | payment | table | lx\n public | seaql_migrations | table | lx\n public | user | table | lx\n(3 rows)\n\n-- show tables (more detail)\n# \\dt+\n List of relations\n Schema | Name | Type | Owner | Persistence | Access method | Size | Description\n--------+------------------+-------+-------+-------------+---------------+--------+-------------\n public | payment | table | lx | permanent | heap | 172 kB |\n public | seaql_migrations | table | lx | permanent | heap | 16 kB |\n public | user | table | lx | permanent | heap | 16 kB |\n(10 rows)\n\nstring length\n \n #\n \n\n\nselect length('1234');\n length\n--------\n 64\n(1 row)\n\nhex\n \n #\n \n\n\n-- hex encode\nselect encode(data, 'hex');\n encode\n--------\n 7dd6a30e8559db3da3bd\n(1 row)\n\n-- hex decode\nselect decode('01abef', 'hex');\n decode\n----------\n \\x01abef\n(1 row)\n\n-- hex binary literal\nselect x'01abefff';\n ?column?\n--------------------------\n 000100101010101111101111\n(1 row)\n\n","id":"https://phlip9.com/notes/postgres/snippets/","title":"snippets"},"https://phlip9.com/notes/postgres/types of scans/":{"body":"types of scans\n\nWhen analyzing Postgres query plans, you'll see a tree of different kinds of \"scans\". These scans determine how the DB plans to look through the different internal datastructures and indexes in order to fetch the data needed to execute your query.\nFor example, we can use explain to see that this query uses a single \"Index Scan\":\npsql$ explain (ANALYZE, VERBOSE, BUFFERS)\n\tselect \"user\".\"user_pk\" from \"user\"\n\twhere \"user\".\"node_pk\" = '028be3dce0eb45b794fc083df3f84f4f746724a86b161592463565e6343ff83ecf';\n\nQUERY PLAN\n----------------------------------------------------------------------\n Index Scan using user_node_pk_key on public.\"user\" (cost=0.42..8.44 rows=1 width=65) (actual time=0.071..0.073 rows=1 loops=1)\n Output: user_pk\n Index Cond: ((\"user\".node_pk)::text = '028be3dce0eb45b794fc083df3f84f4f746724a86b161592463565e6343ff83ecf'::text)\n Buffers: shared hit=4\n Planning:\n Buffers: shared hit=112\n Planning Time: 1.194 ms\n Execution Time: 0.109 ms\n(8 rows)\n\ninternal data structures\n \n #\n \n\n\nBefore jumping into the different scans, we need to quickly cover the internal data structures that Postgres uses to store table and index data.\nheap\n \n #\n \n\n\nCommon storage area for the whole rows in the table. The rows are grouped into pages (default: 8 KiB / page). Each row has its index in the heap, called the TID.\nTID\n \n #\n \n\n\nThe TID or tuple identifier is a 6-byte struct that describes the unique storage location for each row / tuple:\nstruct Tid {\n\t/// The index of the page in the heap containing this tuple.\n\tpage_idx: u32,\n\t/// The index of this tuple inside the page.\n\tin_page_idx: u16,\n}\n\nindex storage\n \n #\n \n\n\nEach index has its own storage separate from the heap, which stores only the values (columns, materialized values, etc...) contained by the index. Also divided into (default) 8 KiB pages like the heap.\nscans\n \n #\n \n\n\nsequential scan (Seq Scan)\n \n #\n \n\n\n\nSequentially scan all item pointers in all pages of the corresponding table(s).\nFor small tables, sequential scans are often faster than index scans, especially if the whole table fits in a few pages.\nFor large tables, sequential scans can be a performance disaster if the query has to load GiB's of data just to find a few items.\n\nindex scan\n \n #\n \n\n\n\nDepends on the specific type of index (e.g., btree, hash, GIS, ...).\nScan and fetch required data from the index, including the TID of each data in the heap.\nThen use the TID to fetch the whole data for the relevant items.\nThe row fetches from the heap will often look like random IO, which is often slower than sequential IO (esp. on spinning disk drives).\n\nindex-only scan\n \n #\n \n\n\n\nIf the index contains all the data needed to fulfill the query, then the query engine never actually needs to follow the TID indirection to load rows from the heap, which is usually faster.\nMaintaining the index can make inserts/updates/deletes slower, since more data needs to be stored in the index.\n\nbitmap scan\n \n #\n \n\n\n\nBitmap Index Scan: First, perform an index scan; but, instead of fetching each item from the heap one-at-a-time while scanning the index, you rather build a bitmap of heap page idxs from the TID.\nBitmap Heap Scan: Using the bitmap, you perform a heap scan and select only heap pages matching the bitmap.\nThe selected heap pages are then filtered/processed for the query.\n\n","id":"https://phlip9.com/notes/postgres/types of scans/","title":"types of scans"},"https://phlip9.com/notes/reproducible builds/":{"body":"","id":"https://phlip9.com/notes/reproducible builds/","title":"reproducible builds"},"https://phlip9.com/notes/reproducible builds/earthly/":{"body":"earthly\n\nEarthly replaces Makefile+Dockerfile with a Docker-like DSL. You write Make-like build targets, which can have dependencies on other targets. The contents of each build target is (effectively) a Dockerfile.\nThe ultimate goal is repeatable, reproducible builds. Repeat a failed build from CI. Seamlessly reproduce your developer environment on a colleague's machine. Etc etc...\nEarthly vs Nix\n \n #\n \n\n\nBoth use linux namespaces for isolation. Nix has an absolutely awful DSL language that I have to relearn every time I touch it. Earthfiles are significantly more imperative; they look like a list of Makefile targets with Dockerfile recipes.\nEarthly vs Buck / Bazel\n \n #\n \n\n\nBazel and Buck provide truely hermetic builds, but they each require complete control over the entire toolchain, so no using npm, cargo, etc... This is fine for Google/Facebook, but not for smaller teams (IMO).\nEarthly claims to strike a more pragmatic balance between truely repeatable and deterministic builds and productive development for a smaller team.\nDocs\n \n #\n \n\n\n\nIt appears build steps must explicitly mark files as \"artifacts\". You must then explicitly copy these artifacts over in dependent build steps.\nLikewise, output artifacts must be explicitly exported to the user's FS from the container FS.\nExported artifacts are not transitive, so if your dependency explicitly exports to the user's FS, your build step won't unless you also explicitly export.\nCan easily push artifacts to remote destinations, run db migrations, cut releases, etc... as a build step.\nLike normal Dockerfiles, an intermediate build step is cached as a new layer.\n\nThoughts\n \n #\n \n\n\nPros\n \n #\n \n\n\n\nSeems like a solid choice for a CI pipeline and devs occasionally reproducing CI runs locally.\nBuilds are nicely isolated from the dev machine, reducing implicit state that's actually necessary for builds to succeed.\nBuilds are (mostly) reproducible across environments. Though, my experience with a big Rust project was that this was not a problem.\nI love that build step inputs and outputs are marked explicitly. Following an unfamiliar Earthfile doesn't feel too bad.\nOnce you've set up a common development base image, all developers can share good quality tools and configuration without have to independently set up debuggers, profilers, etc...\nCan use a shared build cache like Bazel, Buck, or scc so beefy builds don't have to take forever. CI can also shared this build cache!\n\nCons\n \n #\n \n\n\n\nLike Docker, toolchains are stuck inside containers, usually in a way that is inaccessible to other dev tools, like IDEs, debuggers, profilers, etc...\nI worry that basic dev tools like running an LSP might be challenging to set up? Would this be like mounting the dev directory as a volume for the LSP service? Or is this not even a problem at all... idk. I don't use Docker frequently enough to know.\nSome weird idiosyncrasies, presumably due to the Docker layering model. Developers need a solid mental model to avoid committing egregiously large, slow, or uncacheable intermediate layers.\n\nExample: explicit caching of derived Cargo dependency state in first three build steps: https://github.com/earthly/earthly/blob/main/examples/rust/Earthfile\n\n\nRust has a nice enough runner (cargo) that you don't hit a lot of the reproducibility problems experienced in other languages *cough* C/C++.\nCaching is still too coarse-grained compared to running stateful native tools like cargo locally.\nUnlike Bazel or Buck, which take full control of the toolchain, it seems more likely to hit non-determinism with Earthly, since we're using language tools which typically don't know or care about reproducibility.\nGet to learn yet another fun and exciting DSL, with its own special and unique patterns and other miscellaneous weirdness.\nToo slow in tight development loop. On my beefy desktop, a no-op build takes at least 5s. On my M1 MBP, a no-op build takes at least 8-10s. This means any non-trivial build step has a minimum 8-10s duration, which is frankly unacceptable. Non-trivial file copying also adds significant overhead.\nMulti-platform builds (targetting amd64/linux) failed on my M1 Mac for inscrutable reasons. Most likely not earthly's fault, but an issue nonetheless.\nFeels unwieldy running integration tests that need access to low-level hardware devices. Our requirement is probably not typical though.\nRemote builder authentication uses mTLS certs. Provisioning these seems like a pain, esp. when I already have ssh secrets provisioned : (\nOverall, Earthly still feels a bit early. I'd check back after another 6mo (that would be Q1 2023 as of writing).\n\nInstallation\n \n #\n \n\n\n# Ubuntu/Debian/PopOS!\n$ curl --proto '=https' --tlsv1.3 -sSfL https://pkg.earthly.dev/earthly.pgp \\\n\t| gpg --dearmor \\\n\t| sudo tee /usr/share/keyrings/earthly.gpg\n$ echo \"deb [arch=amd64 signed-by=/usr/share/keyrings/earthly.gpg] https://pkg.earthly.dev/deb stable main\" \\\n | sudo tee /etc/apt/sources.list.d/earthly.list > /dev/null\n$ sudo apt update\n$ sudo apt install earthly\n\n# macOS\n$ brew install earthly\n\nEarthly Remote Build\n \n #\n \n\n\nInstall docker on remote (Ubuntu)\n \n #\n \n\n\nInstall docker if you haven't already\n$ sudo mkdir -p /etc/apt/keyrings\n$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg\n$ echo \"deb [arch=amd64 signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable\" \\\n\t| sudo tee /etc/apt/sources.list.d/docker.list > /dev/null\n\n$ sudo apt update\n$ sudo apt install docker-ce docker-ce-cli containerd.io \\\n\tdocker-compose-plugin\n\n$ sudo groupadd docker\n$ sudo usermod -aG docker $USER\n$ newgrp docker # activate changes? else log out and back in\n\n# sanity check docker installation\n$ docker run --rm hello-world\n\n# start docker on restart\n$ sudo systemctl enable docker.service\n$ sudo systemctl enable containerd.service\n\nRun earthly/buildkit (remote)\n \n #\n \n\n\nThis runs a modified buildkit listening on TCP port 8372, without authentication.\n$ docker run \\\n\t--privileged -t -v earthly-tmp:/tmp/earthly:rw \\\n\t-e BUILDKIT_TCP_TRANSPORT_ENABLED=true -p 8372:8372 \\\n\tearthly/buildkitd:v0.6.15\n\n(FAIL) Run ssh forward (host)\n \n #\n \n\n\n$ ssh -NL 8372:localhost:8372 phlip9@sgxdev.phlip9.com\n\nFAIL: It appears Earthly tries to do a local build if the buildkit hostname is localhost : /\nOpen VM port\n \n #\n \n\n\nVery unsafe. Do this only for brief sanity testing.\n$ az vm open-port --name sgxdev2 --port 8372\n\nTODO: provision TLS certs.\nTest remote build\n \n #\n \n\n\n$ EARTHLY_BUILDKIT_HOST=tcp://my-remote-buildkit:8372 earthly +my-cool-target\n\nIt works!\nMisc. Notes\n \n #\n \n\n\nEarthfile Syntax\n \n #\n \n\n\n\n\nSAVE ARTIFACT .. AS LOCAL ..\n+ Only save the output locally if we ask for the specific target OR we use the BUILD command\n\n\nSAVE IMAGE foo:latest\n+ Saves current target layer as a docker image named foo with tag latest\n\n\nSAVE IMAGE --push ..\n+ Push image to remote repo\n\n\nAdding --push to a RUN command defines an \"external\" command. These will only run if the entire build succeeds. You also need to run the earthly build with --push to enable these commands.\n\n\nrelease:\n RUN --push --secret GITHUB_TOKEN=+secrets/GH_TOKEN github-release upload\n\n$ earthly --push +release\n\nAlso useful for running things like DB migrations\nmigrate:\n FROM +build\n RUN --push bundle exec rails db:migrate\n\nor terraform apply\napply:\n RUN --push terraform apply -auto-approve\n\n\nTargets in other Earthfile (relative path, in same repo)\n\nbuild:\n\t# ./services/foobar/Earthfile\n\t# -> contains `deps` target\n\tFROM ./services/foobar+deps\n\t# ..\n\n\nImport targets from other Earthfile\n\nVERSION 0.6\nIMPORT ./services/foobar\n# ..\n\nbuild:\n\tFROM foobar+deps\n\t# ..\n\n\n\nRun docker commands inside a target using WITH DOCKER .. END\n+ Will init a docker daemon that can be used in a RUN command\n+ Recommend using earthly's \"docker-in-docker\" (dind) container earthly/dind:alpine\n\n\nPulling a docker image from docker hub\n\n\nhello:\n\tFROM earthly/dind:alpine\n\tWITH DOCKER --pull hello-world\n\t\tRUN docker run hello-world\n\tEND\n\n\nLoading an image created by another target\n\nmy-hello-world:\n\tFROM ubuntu\n\tCMD echo \"hello world\"\n\tSAVE IMAGE my-hello:latest\n\nhello:\n\tFROM earthly/dind:alpine\n\tWITH DOCKER --load hello:latest=+my-hello-world\n\t\tRUN docker run hello:latest\n\tEND\n\n","id":"https://phlip9.com/notes/reproducible builds/earthly/","title":"earthly"},"https://phlip9.com/notes/reproducible builds/nix/":{"body":"","id":"https://phlip9.com/notes/reproducible builds/nix/","title":"reproducible builds/nix"},"https://phlip9.com/notes/reproducible builds/nix/links/":{"body":"nix links\n\n\nNix - A One Pager\nThe Virus Lounge - depot\nTvix - We are rewriting Nix\nnixbuild - Fast, secure, and scalable nix builds service\ncachix - hosted nix binary cache\nnix.dev - an opinionated guide for devs to get shit done w/ nix\nNixOps - deploy NixOS machines to network or cloud\ndevbox - user-friendly isolated shells and containers built on nix\nxe/site - site using nix\nxe/nixos-configs\ncadey/nixos-configs\nfluidattacks/makes - a \"DevSecOps\" framework powered by nix\ndeterminatesystems/riff - automatically provide ext deps for Rust projects via nix\ndavidwong/nix-by-example (WIP)\nMinaProtocol/mina - some example nix cfg for an OCaml + Rust project\ndeploy-rs - a simple multi-profile Nix-flake deploy tool\nDBCDK/morph - manage existing NixOS hosts (GO)\nzhaofengli/colmena - simple, stateless NixOS deployment tool (Rust)\nlearn (nix syntax) in Y minutes\nyaxitech/ragenix - (r)age-encrypted secrets for NixOS\nprofianinc/infra - example NixOS-based infra\noxalica/nil - Nix Language Server\nnixpkgs/.../linux/sgx - SGX nix packages\nflake-parts - write flake.nix in focused units\nnixcon - nix adventure in cross-compilation\ndrakerossman - Wayland on NixOS\ncolemickens - nixcfg\nNixOS & Flakes Book - An unofficial book for beginners\nserokell/gemini-infra - example nix deployment w/ deploy-rs\npdtpartners/nix-snapshotter - native nix packages to containerd\ndustinlyons/nixos-config - integrated NixOS and nix-darwin setup w/ flakes\nzimbatm - nix packaging, the heretic way (no sandbox)\n\n","id":"https://phlip9.com/notes/reproducible builds/nix/links/","title":"links"},"https://phlip9.com/notes/reproducible builds/nix/nix auto-allocate-uids -> nixbld users/":{"body":"nix auto-allocate-uids -> nixbld users\n\nI've hit an obscure issue with my nix install on Pop!_OS where the nix auto-allocate-uids setting doesn't seem to work quite right with the build sandbox, due to some \"hardening\" in the Debian-based kernel build interacting poorly with the user namespace in the sandbox.\nI installed nix with the DeterminateSystems/nix-installer, which is overall a great experience -- highly recommend. This installer sets you up with auto-allocate-uids for the multi-user install, which avoids littering your system with a bunch of nixbldX users.\nSadly we need those nixbldX users back; here's how to do that:\nfor n in $(seq 1 32); do \\\n sudo useradd \\\n --home-dir /var/empty \\\n --comment \"Nix build user ${n}\" \\\n --gid nixbld \\\n --groups nixbld,kvm \\\n --no-create-home \\\n --no-user-group \\\n --system \\\n --uid $((30000 + n)) \\\n --shell /sbin/nologin \\\n --password \"!\" \\\n nixbld$n \\\n ;\ndone\n\nWe've also added the new nixbldX users to the kvm group, so they can run qemu VMs efficiently -- super handy when running NixOS tests.\nNext let's remove the auto-allocate-uids setting from /etc/nix/nix.conf:\ndiff --git /etc/nix/nix.conf.old /etc/nix/nix.conf\n--- /etc/nix/nix.conf.old\n+++ /etc/nix/nix.conf\n@@ -1,7 +1,9 @@\n # Generated by https://github.com/DeterminateSystems/nix-installer, version 0.9.1.\n-experimental-features = nix-command flakes auto-allocate-uids\n+experimental-features = nix-command flakes\n auto-optimise-store = true\n extra-nix-path = nixpkgs=flake:nixpkgs\n bash-prompt-prefix = (nix:$name)\\040\n build-users-group = nixbld\n-auto-allocate-uids = true\n\nFinally restart the nix daemon:\n$ sudo systemctl restart nix-daemon.service\n\n","id":"https://phlip9.com/notes/reproducible builds/nix/nix auto-allocate-uids -> nixbld users/","title":"nix auto-allocate-uids -> nixbld users"},"https://phlip9.com/notes/reproducible builds/nix/nix debug broken package build/":{"body":"nix debug broken package build\n\nThis technique will add a breakpointHook to the package so that when a build step fails, it'll preserve the build environment and allow you to enter the sandboxed build container for inspection.\nOn the builder, install cntr from nixpkgs or use it in an ephemeral shell:\n$ nix shell nixpkgs#cntr\n\nIn the package, add breakpointHook as a nativeBuildInputs.\n{ # ...\n, breakpointHook\n}:\n nativeBuildInputs = [\n breakpointHook\n ];\n}\n\nWhen the build fails, it'll print out something like:\n$ nix build --print-build-logs .#sgx-sdk\n\nsgx-sdk> build failed in buildPhase with exit code 2\nsgx-sdk> To attach install cntr and run the following command as root:\nsgx-sdk> cntr attach -t command cntr-/nix/store/5hiwc8m04zd00mb3ghfv9mwjmqv3qajv-ripgrep-1.6\n\n[1/0/1 built] building ripgrep-1.6 (buildPhase)\n\nThe build will \"hang\" while we inspect it. Once we CTRL-C it, everything will get cleaned up, so run the following in another shell instance. To enter the build container, just copy the command (with sudo, since it requires root permissions):\n$ sudo cntr attach -t command cntr-/nix/store/5hiwc8m04zd00mb3ghfv9mwjmqv3qajv-ripgrep-1.6\n\n[nixbld@localhost:/var/lib/cntr]$ cd build/source\n\nThe initial shell cntr drops you in still has all your system tools available (git, nvim, etc). Use this shell to do all your editing and file munging. Once that's done, test the build in the fully isolated build environment:\n[nixbld@localhost:/var/lib/cntr]$ cntr exec\nbash-5.2$\n\n","id":"https://phlip9.com/notes/reproducible builds/nix/nix debug broken package build/","title":"nix debug broken package build"},"https://phlip9.com/notes/reproducible builds/nix/nix debug spurrious rebuilds/":{"body":"nix debug spurrious rebuilds\n\nI have a Rust workspace full of cargo crates (and other things). Using ipetkov/crane, the workspace dependencies should only rebuild if the Cargo.toml or Cargo.lock files change. Sadly that wasn't the case--touching any source file would cause a full rebuild from scratch, which takes ages.\nThat's where gabriella439/nix-diff comes to the rescue: point it at two nix derivations and it'll tell you exactly what's different between them. We can use this to debug our rebuild problem.\n# Add `jq` and `nix-diff` to our shell temporarily.\n$ nix shell nixpkgs#jq nixpkgs#nix-diff\n\n# Build the package twice, with an unrelated file change in between.\n$ nix derivation show .#my-pkg | jq -r 'keys[0]' > before_drv\n$ echo \"// bump\" >> ./file/causing/rebuild\n$ nix derivation show .#my-pkg | jq -r 'keys[0]' > after_drv\n\n# Let's see the difference:\n$ nix-diff \"$(cat before_drv)\" \"$(cat after_drv)\"\n\n- /nix/store/5gcg2l4bnmi3plszwrcihyshbzbd4kz1-my-pkg-0.1.0.drv:{out}\n+ /nix/store/rybdvgqwrb6hjwys18yirchq1d20c8rp-my-pkg-0.1.0.drv:{out}\n• The input source named `source` differs\n• The input derivation named `my-pkg-deps-0.1.0` differs\n - /nix/store/v523hpxdbzxwwlkgzb3hdhbclxqh7bm4-my-pkg-deps-0.1.0.drv:{out}\n + /nix/store/9a5044x65ff0jyddpzwx9gbagns4klfa-my-pkg-deps-0.1.0.drv:{out}\n • The input source named `source` differs\n • The environments do not match:\n CFLAGS_wasm32-unknown-none=''\n -isystem /nix/store/9c7h6f3ibkd4p528z3f1ydbm6lr4znpn-clang-16.0.6-lib/lib/clang/16/include -isystem\n + /nix/store/lm1p696bwrkppi746wc4hmqvf117zqsa-source/libc-shim/include\n - /nix/store/hf4arhzcg3g511yzlq9lspgi9s51k5ms-source/libc-shim/include\n ''\n\nOf course... I have an absolute reference to the full source in an env variable. That'll do it. Putting the sub-directory into its own tiny nix store path seems to do the trick. Thanks nix-diff!\n","id":"https://phlip9.com/notes/reproducible builds/nix/nix debug spurrious rebuilds/","title":"nix debug spurrious rebuilds"},"https://phlip9.com/notes/reproducible builds/rebuilderd/":{"body":"rebuilderd\n\nGithub: https://github.com/kpcyrd/rebuilderd/\nIndependent verification system of binary packages.\nWhat: rebuilderd is a build system that attempts to reproduce build artifacts. It compiles the source code in a similar build environment and compares it to the official pre-built artifacts. This helps identify supply-chain compromises. This website hosts a list of public instances publishing their results.\nrebuilderd monitors the package repository of a linux distribution and uses rebuilder backends like archlinux-repro to verify the provided binary packages can be reproduced from the given source code.\nIt tracks the state of successfully verified packages and optionally generates a report of differences with diffoscope for debugging. Note that due to the early state of this technology a failed rebuild is more likely due to an undeterministic build process instead of a supply chain compromise, but if multiple rebuilders you trust report 100% reproducible for the set of packages you use you can be confident that the binaries on your system haven't been tampered with. People are encouraged to run their own rebuilders if they can afford to.\n","id":"https://phlip9.com/notes/reproducible builds/rebuilderd/","title":"rebuilderd"},"https://phlip9.com/notes/reproducible builds/reproducible-builds.org/":{"body":"reproducible-builds.org\n\nWhy does it matter?\n \n #\n \n\n\nWhilst anyone may inspect the source code of free and open source software for malicious flaws, most software is distributed pre-compiled with no method to confirm whether they correspond.\nThis incentivises attacks on developers who release software, not only via traditional exploitation, but also in the forms of political influence, blackmail or even threats of violence.\nThis is particularly a concern for developers collaborating on privacy or security software: attacking these typically result in compromising particularly politically-sensitive targets such as dissidents, journalists and whistleblowers, as well as anyone wishing to communicate securely under a repressive regime.\nWhilst individual developers are a natural target, it additionally encourages attacks on build infrastructure as a successful attack would provide access to a large number of downstream computer systems. By modifying the generated binaries here instead of modifying the upstream source code, illicit changes are essentially invisible to its original authors and users alike.\nThe motivation behind the Reproducible Builds project is therefore to allow verification that no vulnerabilities or backdoors have been introduced during this compilation process. By promising identical results are always generated from a given source, this allows multiple third parties to come to a consensus on a “correct” result, highlighting any deviations as suspect and worthy of scrutiny.\nThis ability to notice if a developer or build system has been compromised then prevents such threats or attacks occurring in the first place, as any compromise can be quickly detected. As a result, front-liners cannot be threatened/coerced into exploiting or exposing their colleagues.\nSeveral free software projects already, or will soon, provide reproducible builds.\nHow?\n \n #\n \n\n\nFirst, the build system needs to be made entirely deterministic: transforming a given source must always create the same result. For example, the current date and time must not be recorded and output always has to be written in the same order.\nSecond, the set of tools used to perform the build and more generally the build environment should either be recorded or pre-defined.\nThird, users should be given a way to recreate a close enough build environment, perform the build process, and validate that the output matches the original build.\nLearn more about how to make your software build reproducibly…\n","id":"https://phlip9.com/notes/reproducible builds/reproducible-builds.org/","title":"reproducible-builds.org"},"https://phlip9.com/notes/router/":{"body":"","id":"https://phlip9.com/notes/router/","title":"router"},"https://phlip9.com/notes/router/lightning router/":{"body":"","id":"https://phlip9.com/notes/router/lightning router/","title":"router/lightning router"},"https://phlip9.com/notes/router/lightning router/captive portal/":{"body":"","id":"https://phlip9.com/notes/router/lightning router/captive portal/","title":"router/lightning router/captive portal"},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"body":"RFC 6585 (Additional HTTP Status Codes)\n\nInternet Engineering Task Force (IETF) M. Nottingham\nRequest for Comments: 6585 Rackspace\nUpdates: 2616 R. Fielding\nCategory: Standards Track Adobe\nISSN: 2070-1721 April 2012\n\nAbstract\n \n #\n \n\n\nThis document specifies additional HyperText Transfer Protocol (HTTP)\nstatus codes for a variety of common situations.\nStatus of This Memo\n \n #\n \n\n\nThis is an Internet Standards Track document.\nThis document is a product of the Internet Engineering Task Force\n(IETF). It represents the consensus of the IETF community. It has\nreceived public review and has been approved for publication by the\nInternet Engineering Steering Group (IESG). Further information on\nInternet Standards is available in Section 2 of RFC 5741.\nInformation about the current status of this document, any errata,\nand how to provide feedback on it may be obtained at\nhttp://www.rfc-editor.org/info/rfc6585.\nCopyright Notice\n \n #\n \n\n\nCopyright (c) 2012 IETF Trust and the persons identified as the\ndocument authors. All rights reserved.\nThis document is subject to BCP 78 and the IETF Trust's Legal\nProvisions Relating to IETF Documents\n(http://trustee.ietf.org/license-info) in effect on the date of\npublication of this document. Please review these documents\ncarefully, as they describe your rights and restrictions with respect\nto this document. Code Components extracted from this document must\ninclude Simplified BSD License text as described in Section 4.e of\nthe Trust Legal Provisions and are provided without warranty as\ndescribed in the Simplified BSD License.\nIntroduction\n \n #\n \n\n\nThis document specifies additional HTTP [RFC2616] status codes for a\nvariety of common situations, to improve interoperability and avoid\nconfusion when other, less precise status codes are used.\nNote that these status codes are optional; servers cannot be required\nto support them. However, because clients will treat unknown status\ncodes as a generic error of the same class (e.g., 499 is treated as\n400 if it is not recognized), they can be safely deployed by existing\nservers (see [RFC2616] Section 6.1.1 for more information).\nRequirements\n \n #\n \n\n\nThe key words \"MUST\", \"MUST NOT\", \"REQUIRED\", \"SHALL\", \"SHALL NOT\",\n\"SHOULD\", \"SHOULD NOT\", \"RECOMMENDED\", \"MAY\", and \"OPTIONAL\" in this\ndocument are to be interpreted as described in [RFC2119].\n428 Precondition Required\n \n #\n \n\n\nThe 428 status code indicates that the origin server requires the\nrequest to be conditional.\nIts typical use is to avoid the \"lost update\" problem, where a client\nGETs a resource's state, modifies it, and PUTs it back to the server,\nwhen meanwhile a third party has modified the state on the server,\nleading to a conflict. By requiring requests to be conditional, the\nserver can assure that clients are working with the correct copies.\nResponses using this status code SHOULD explain how to resubmit the\nrequest successfully. For example:\nHTTP/1.1 428 Precondition Required\nContent-Type: text/html\n<html>\n <head>\n <title>Precondition Required</title>\n </head>\n <body>\n <h1>Precondition Required</h1>\n <p>This request is required to be conditional;\n try using \"If-Match\".</p>\n </body>\n</html>\n\nResponses with the 428 status code MUST NOT be stored by a cache.\n429 Too Many Requests\n \n #\n \n\n\nThe 429 status code indicates that the user has sent too many\nrequests in a given amount of time (\"rate limiting\").\nThe response representations SHOULD include details explaining the\ncondition, and MAY include a Retry-After header indicating how long\nto wait before making a new request.\nFor example:\nHTTP/1.1 429 Too Many Requests\nContent-Type: text/html\nRetry-After: 3600\n <html>\n <head>\n <title>Too Many Requests</title>\n </head>\n <body>\n <h1>Too Many Requests</h1>\n <p>I only allow 50 requests per hour to this Web site per\n logged in user. Try again soon.</p>\n </body>\n </html>\n\nNote that this specification does not define how the origin server\nidentifies the user, nor how it counts requests. For example, an\norigin server that is limiting request rates can do so based upon\ncounts of requests on a per-resource basis, across the entire server,\nor even among a set of servers. Likewise, it might identify the user\nby its authentication credentials, or a stateful cookie.\nResponses with the 429 status code MUST NOT be stored by a cache.\n431 Request Header Fields Too Large\n \n #\n \n\n\nThe 431 status code indicates that the server is unwilling to process\nthe request because its header fields are too large. The request MAY\nbe resubmitted after reducing the size of the request header fields.\nIt can be used both when the set of request header fields in total is\ntoo large, and when a single header field is at fault. In the latter\ncase, the response representation SHOULD specify which header field\nwas too large.\nFor example:\nHTTP/1.1 431 Request Header Fields Too Large\nContent-Type: text/html\n <html>\n <head>\n <title>Request Header Fields Too Large</title>\n </head>\n <body>\n <h1>Request Header Fields Too Large</h1>\n <p>The \"Example\" header was too large.</p>\n </body>\n </html>\n\nResponses with the 431 status code MUST NOT be stored by a cache.\n511 Network Authentication Required ^8c7492\n \n #\n \n\n\nThe 511 status code indicates that the client needs to authenticate\nto gain network access.\nThe response representation SHOULD contain a link to a resource that\nallows the user to submit credentials (e.g., with an HTML form).\nNote that the 511 response SHOULD NOT contain a challenge or the\nlogin interface itself, because browsers would show the login\ninterface as being associated with the originally requested URL,\nwhich may cause confusion.\nThe 511 status SHOULD NOT be generated by origin servers; it is\nintended for use by intercepting proxies that are interposed as a\nmeans of controlling access to the network.\nResponses with the 511 status code MUST NOT be stored by a cache.\nThe 511 Status Code and Captive Portals\n \n #\n \n\n\nThe 511 status code is designed to mitigate problems caused by\n\"captive portals\" to software (especially non-browser agents) that is\nexpecting a response from the server that a request was made to, not\nthe intervening network infrastructure. It is not intended to\nencourage deployment of captive portals -- only to limit the damage\ncaused by them.\nA network operator wishing to require some authentication, acceptance\nof terms, or other user interaction before granting access usually\ndoes so by identifying clients who have not done so (\"unknown\nclients\") using their Media Access Control (MAC) addresses. ^615a1d\nUnknown clients then have all traffic blocked, except for that on TCP\nport 80, which is sent to an HTTP server (the \"login server\")\ndedicated to \"logging in\" unknown clients, and of course traffic to\nthe login server itself. ^521ac1\n511 Captive Portal Example\n \n #\n \n\n\nFor example, a user agent might connect to a network and make the\nfollowing HTTP request on TCP port 80:\nGET /index.htm HTTP/1.1\nHost: www.example.com\n\nUpon receiving such a request, the login server would generate a 511\nresponse:\nHTTP/1.1 511 Network Authentication Required\nContent-Type: text/html\n\n <html>\n <head>\n <title>Network Authentication Required</title>\n <meta http-equiv=\"refresh\"\n content=\"0; url=https://login.example.net/\">\n </head>\n <body>\n <p>You need to <a href=\"https://login.example.net/\">\n authenticate with the local network</a> in order to gain\n access.</p>\n </body>\n </html>\n\nHere, the 511 status code assures that non-browser clients will not\ninterpret the response as being from the origin server, and the META\nHTML element redirects the user agent to the login server.\nSecurity Considerations\n \n #\n \n\n\n428 Precondition Required\n \n #\n \n\n\nThe 428 status code is optional; clients cannot rely upon its use to\nprevent \"lost update\" conflicts.\n429 Too Many Requests\n \n #\n \n\n\nWhen a server is under attack or just receiving a very large number\nof requests from a single party, responding to each with a 429 status\ncode will consume resources.\nTherefore, servers are not required to use the 429 status code; when\nlimiting resource usage, it may be more appropriate to just drop\nconnections, or take other steps.\n431 Request Header Fields Too Large\n \n #\n \n\n\nServers are not required to use the 431 status code; when under\nattack, it may be more appropriate to just drop connections, or take\nother steps.\n511 Network Authentication Required (Security)\n \n #\n \n\n\nIn common use, a response carrying the 511 status code will not come\nfrom the origin server indicated in the request's URL. This presents\nmany security issues; e.g., an attacking intermediary may be\ninserting cookies into the original domain's name space, may be\nobserving cookies or HTTP authentication credentials sent from the\nuser agent, and so on.\nHowever, these risks are not unique to the 511 status code; in other\nwords, a captive portal that is not using this status code introduces\nthe same issues.\nAlso, note that captive portals using this status code on a Secure\nSocket Layer (SSL) or Transport Layer Security (TLS) connection\n(commonly, port 443) will generate a certificate error on the client.\nIANA Considerations\n \n #\n \n\n\nThe HTTP Status Codes registry has been updated with the following\nentries:\n Value: 428\n Description: Precondition Required\n Reference: [RFC6585]\n\n Value: 429\n Description: Too Many Requests\n Reference: [RFC6585]\n\n Value: 431\n Description: Request Header Fields Too Large\n Reference: [RFC6585]\n\n Value: 511\n Description: Network Authentication Required\n Reference: [RFC6585]\n\nReferences\n \n #\n \n\n\n9.1. Normative References\n\\[\nRequirement Levels\", BCP 14, RFC 2119, March 1997.\n\n\\[RFC2616\\] Fielding, R., Gettys, J., Mogul, J., Frystyk, H.,\nMasinter, L., Leach, P., and T. Berners-Lee, \"Hypertext\nTransfer Protocol -- HTTP/1.1\", RFC 2616, June 1999.\n\n9.2. Informative References\n\n\\[CORS\\] van Kesteren, A., Ed., \"Cross-Origin Resource Sharing\",\nW3C Working Draft WD-cors-20100727, July 2010,\n.\n\n\\[Favicon\\] Wikipedia, \"Favicon\", March 2012,\n\\.\n\n\\[OAuth2.0\\] Hammer-Lahav, E., Ed., Recordon, D., and D. Hardt, \"The\nOAuth 2.0 Authorization Protocol\", Work in Progress,\nMarch 2012.\n\nNottingham & Fielding Standards Track \\[Page 7\\]\n\nRFC 6585 Additional HTTP Status Codes April 2012\n\n\\[P3P\\] Marchiori, M., Ed., \"The Platform for Privacy Preferences\n1.0 (P3P1.0) Specification\", W3C Recommendation\nREC-P3P-20020416, April 2002,\n.\n\n\\[RFC4791\\] Daboo, C., Desruisseaux, B., and L. Dusseault,\n\"Calendaring Extensions to WebDAV (CalDAV)\", RFC 4791,\nMarch 2007.\n\n\\[RFC4918\\] Dusseault, L., Ed., \"HTTP Extensions for Web Distributed\nAuthoring and Versioning (WebDAV)\", RFC 4918, June 2007.\n\n\\[WIDGETS\\] Caceres, M., Ed., \"Widget Packaging and XML\nConfiguration\", W3C Recommendation REC-widgets-20110927,\nSeptember 2011, .\n\n\\[WebFinger\\] WebFinger Project, \"WebFingerProtocol (Draft)\",\nJanuary 2010, \\.\n\n## Appendix\n\n### Appendix A. Acknowledgements\n\nThanks to Jan Algermissen and Julian Reschke for their suggestions\nand feedback.\n\n### Appendix B. Issues Raised by Captive Portals\n\nSince clients cannot differentiate between a portal's response and\nthat of the HTTP server that they intended to communicate with, a\nnumber of issues arise. The 511 status code is intended to help\nmitigate some of them.\n\nOne example is the \"favicon.ico\" \\[Favicon\\] commonly used by browsers\nto identify the site being accessed. If the favicon for a given site\nis fetched from a captive portal instead of the intended site (e.g.,\nbecause the user is unauthenticated), it will often \"stick\" in the\nbrowser's cache (most implementations cache favicons aggressively)\nbeyond the portal session, so that it seems as if the portal's\nfavicon has \"taken over\" the legitimate site.\n\nAnother browser-based issue comes about when the Platform for Privacy\nPreferences \\[P3P\\] is supported. Depending on how it is implemented,\nit's possible a browser might interpret a portal's response for the\np3p.xml file as the server's, resulting in the privacy policy (or\nlack thereof) advertised by the portal being interpreted as applying\nto the intended site. Other Web-based protocols such as WebFinger\n\\[WebFinger\\], Cross-Origin Resource Sharing \\[CORS\\], and Open\nAuthorization \\[OAuth2.0\\] may also be vulnerable to such issues.\n\nAlthough HTTP is most widely used with Web browsers, a growing number\nof non-browsing applications use it as a substrate protocol. For\nexample, Web Distributed Authoring and Versioning (WebDAV) \\[RFC4918\\]\nand Calendaring Extensions to WebDAV (CalDAV) \\[RFC4791\\] both use HTTP\nas the basis (for remote authoring and calendaring, respectively).\nUsing these applications from behind a captive portal can result in\nspurious errors being presented to the user, and might result in\ncontent corruption, in extreme cases.\n\nSimilarly, other non-browser applications using HTTP can be affected\nas well, e.g., widgets \\[WIDGETS\\], software updates, and other\nspecialized software such as Twitter clients and the iTunes Music\nStore.\n\nIt should be noted that it's sometimes believed that using HTTP\nredirection to direct traffic to the portal addresses these issues.\nHowever, since many of these uses \"follow\" redirects, this is not a\ngood solution.\n\nAuthors' Addresses\n\nMark Nottingham\nRackspace\n\nEMail: mnot@mnot.net\nURI: http://www.mnot.net/\n\nRoy T. Fielding\nAdobe Systems Incorporated\n345 Park Ave.\nSan Jose, CA 95110\nUSA\n\nEMail: fielding@gbiv.com\nURI: http://roy.gbiv.com/\n\\]\n","id":"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/","title":"RFC 6585 (Additional HTTP Status Codes)"},"https://phlip9.com/notes/router/lightning router/captive portal/arubanetworks captive portal/":{"body":"arubanetworks captive portal\n\nSource: https://www.arubanetworks.com/vrd/GuestAccessAppNote/wwhelp/wwhimpl/js/html/wwhelp.htm#href=Chap3.html#1035623\nCaptive Portal\n \n #\n \n\n\nCaptive portal authentication is a Layer 3 authentication method that redirects users to a captive portal page when they start a web session. The captive portal page can be used for various purposes, such as authenticating the guest using a user name and password, providing an acceptable use policy, or self registration with an email address.\nAuthentication Process\n \n #\n \n\n\nCaptive portal is a Layer 3 authentication, which requires that the devices connect to the network and obtain an IP address and related DNS information before authenticating through the captive portal. The following steps explain the entire captive portal process when the native ArubaOS is used for captive portal authentication:\n\nThe device that is associating to the guest SSID is assigned an initial role (guest-logon role in the example configuration). This initial role allows DHCP, so the user gets an IP address.\nThe user opens a browser and makes an HTTP (or HTTPS) request to some destination (for example, www.bbc.com).\nThe resolver in the device sends a DNS request to resolve the www.bbc.com. The initial role (guest-logon role) permits DNS services, so the resolver can communicate with the DNS server.\nThe DNS server replies with the correct address to www.bbc.com.\nThe resolver tells the browser which IP address to use based on the DNS reply.\nThe browser initiates a TCP connection to port 80 of the www.bbc.com address.\nThe controller intercepts the connection and spoofs the initial TCP handshakes of the HTTP process. At this moment, the client browser thinks it is communicating with the bbc.com server.\nWhen the browser sends the HTTP GET request for the web page, the controller replies saying that bbc.com has “temporarily moved” to https://securelogin.arubanetworks.com/[string that identifies client].\nThe browser closes the connection.\nThe browser attempts to connect with https://securelogin.arubanetworks.com/[string that identifies client], but it first needs to send a DNS request for the address.\nThe actual DNS server responds that it cannot resolve https://securelogin.arubanetworks.com, but the controller intercepts that reply and changes the packet to say that securelogin.arubanetworks.com is at the IP address of the controller itself. Remember that it is critical that the DNS server sends back a reply to the query.  It is only then that the controller can spoof the reply back from the DNS server.  Sending a DNS request without receiving a reply is not sufficient, since without a reply the controller will never help the client resolve securelogin.arubanetworks.com.\nThe browser initiates an HTTPS connection to address of controller, which responds with the captive portal login page, where the guest authenticates.\nAfter successful authentication, the user is assigned the post authentication role (auth-guest role in the example configuration). This is the default role in the captive portal profile.\nAfter authentication, the browser is redirected to bbc.com at the address originally resolved by the DNS. Alternatively, if a welcome page is configured, the browser is redirected to the welcome page.\nTo successfully redirect to the original web page the controller spoofs a reply from bbc.com to tell the client that bbc.com has “permanently moved” to bbc.com. This step corrects the “temporary relocation” that occurred as part of the captive portal login.\nThis causes the client to re-query DNS for the address of www.bbc.com.\nThe browser starts to communicate with the actual bbc.com server.\n\n","id":"https://phlip9.com/notes/router/lightning router/captive portal/arubanetworks captive portal/","title":"arubanetworks captive portal"},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"body":"captive portal (wikipedia)\n\nConnected to:\n \n #\n \n\n\nWi-Fi Web browser MAC address\nOverview\n \n #\n \n\n\nA captive portal is a web page accessed with a web browser that is displayed to newly connected users of a Wi-Fi or wired network before they are granted broader access to network resources. Captive portals are commonly used to present a landing or log-in page which may require authentication, payment, acceptance of an end-user license agreement, acceptable use policy, survey completion, or other valid credentials that both the host and user agree to adhere by. Captive portals are used for a broad range of mobile and pedestrian broadband services – including cable and commercially provided Wi-Fi and home hotspots. A captive portal can also be used to provide access to enterprise or residential wired networks, such as apartment houses, hotel rooms, and business centers.\nThe captive portal is presented to the client and is stored either at the gateway or on a web server hosting the web page. Depending on the feature set of the gateway, websites or TCP ports can be white-listed so that the user would not have to interact with the captive portal in order to use them. The MAC address of attached clients can also be used to bypass the login process for specified devices.\nUses\n \n #\n \n\n\nCaptive portals are primarily used in open wireless networks where the users are shown a welcome message informing them of the conditions of access (allowed ports, liability, etc.). Administrators tend to do this so that their own users take responsibility for their actions and to avoid any legal responsibility. Whether this delegation of responsibility is legally valid is a matter of debate.[1][2]\nOften captive portals are used for marketing and commercial communication purposes. Access to the Internet over open Wi-Fi is prohibited until the user exchanges personal data by filling out a web-based registration form in a web browser. The web-based form either automatically opens in a web browser, or appears when the user opens a web browser and tries to visit any web page. In other words, the user is \"captive\" - unable to access the Internet freely until the user is granted access to the Internet and has \"completed\" the captive portal. This allows the provider of this service to display or send advertisements to users who connect to the Wi-Fi access point. This type of service is also sometimes known as \"social Wi-Fi\", as they may ask for a social network account to login (such as Facebook). Over the past few years, such social Wi-Fi captive portals have become commonplace with various companies offering marketing centered around Wi-Fi data collection.\nThe user can find many types of content in the captive portal, and it's frequent to allow access to the Internet in exchange for viewing content or performing a certain action (often, providing personal data to enable commercial contact); thus, the marketing use of the captive portal is a tool for lead generation (business contacts or potential clients).[citation needed]\nImplementation\n \n #\n \n\n\nThere is more than one way to implement a captive portal.\nHTTP redirect\n \n #\n \n\n\nA common method is to direct all World Wide Web traffic to a web server, which returns an HTTP redirect to a captive portal.[3] When a modern, internet-enabled device first connects to a network, it sends out an HTTP request to a detection URL predefined by its vendor and expects an HTTP status code 200 OK or 204 No Content. If the device receives a HTTP 200 status code, it assumes it has unlimited internet access. Captive portal prompts are displayed when you are able to manipulate this first HTTP message to return a HTTP status code of 302 (redirect) to the captive portal of your choice.[4][5] RFC 6585 specifies 511 Network Authentication Required code.\nICMP redirect\n \n #\n \n\n\nClient traffic can also be redirected using ICMP redirect on the layer 3 level.\nRedirect by DNS\n \n #\n \n\n\nWhen a client requests a World Wide Web resource, DNS is queried by the browser. In a captive portal, the firewall will make sure that only the DNS server(s) provided by the network's DHCP can be used by unauthenticated clients (or, alternatively, it will forward all DNS requests by unauthenticated clients to that DNS server). This DNS server will return the IP address of the captive portal page as a result of all DNS lookups.\nIn order to perform redirection by DNS the captive portal uses DNS hijacking to perform an action similar to a man-in-the-middle attack. To limit the impact of DNS poisoning, a TTL of 0 is typically used.\nLimitations\n \n #\n \n\n\nSecurity\n \n #\n \n\n\nCaptive portals have been known to have incomplete firewall rule sets.[6]\nDNS tunneling\n \n #\n \n\n\nIn some deployments, the rule set will route DNS requests from clients to the Internet, or the provided DNS server will fulfill arbitrary DNS requests from the client. This allows a client to bypass the captive portal and access the open Internet by tunneling arbitrary traffic within DNS packets.\nAutomatic submission\n \n #\n \n\n\nSome captive portals may be configured to allow appropriately equipped user agents to detect the captive portal and automatically authenticate. User agents and supplemental applications such as Apple's Captive Portal Assistant can sometimes transparently bypass the display of captive portal content against the wishes of the service operator as long as they have access to correct credentials, or they may attempt to authenticate with incorrect or obsolete credentials, resulting in unintentional consequences such as accidental account locking.\nMAC spoofing\n \n #\n \n\n\nA captive portal that uses MAC addresses to track connected devices can sometimes be circumvented by re-using a MAC address of previously authenticated device. Once a device has been authenticated to the captive portal using a valid credentials, the gateway adds that device's MAC address to its \"whitelist\"; since MAC addresses can easily be spoofed, any other device can pretend to be the authenticated device and bypass the captive portal. Once the IP and MAC addresses of other connecting computers are found to be authenticated, any machine can spoof the MAC address and Internet Protocol (IP) address of the authenticated target, and be allowed a route through the gateway. For this reason some captive portal solutions created extended authentication mechanisms to limit the risk for usurpation.\nRequire Web Browser\n \n #\n \n\n\nCaptive portals often require the use of a web browser; this is usually the first application that users start after connected to the Internet, but users who first use an email client or other application that relies on the Internet may find the connection not working without explanation, and will then need to open a web browser to validate. This may be problematic for users who do not have any web browser installed on their operating system. It is however sometimes possible to use email and other facilities that do not rely on DNS (e.g. if the application specifies the connection IP rather than the hostname). A similar problem can occur if the client uses AJAX or joins the network with pages already loaded into its web browser, causing undefined behavior (for example, corrupt messages appear) when such a page tries HTTP requests to its origin server.\nSimilarly, as HTTPS connections cannot be redirected (at least not without triggering security warnings), a web browser that only attempts to access secure websites before being authorized by the captive portal will see those attempts fail without explanation (the usual symptom is that the intended website appears to be down or inaccessible).\nPlatforms that have Wi-Fi and a TCP/IP stack but do not have a web browser that supports HTTPS cannot use many captive portals. Such platforms include the Nintendo DS running a game that uses Nintendo Wi-Fi Connection. Non-browser authentication is possible using WISPr, an XML-based authentication protocol for this purpose, or MAC-based authentication or authentications based on other protocols.\nIt is also possible for a platform vendor to enter into a service contract with the operator of a large number of captive portal hotspots to allow free or discounted access to the platform vendor's servers via the hotspot's walled garden. For example, in 2005 Nintendo and Wayport partnered to provide free Wi-Fi access to Nintendo DS users at certain McDonald's restaurants.[7] Also, VoIP SIP ports could be allowed to bypass the gateway to allow phones to work.\n","id":"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/","title":"captive portal (wikipedia)"},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"body":"captive portal\n\ncaptive portal (wikipedia)\nRFC 6585 (Additional HTTP Status Codes) > 511 Network Authentication Required 8c7492\nRFC 6585 (Additional HTTP Status Codes)\n\nInternet Engineering Task Force (IETF) M. Nottingham\nRequest for Comments: 6585 Rackspace\nUpdates: 2616 R. Fielding\nCategory: Standards Track Adobe\nISSN: 2070-1721 April 2012\n\nAbstract\n \n #\n \n\n\nThis document specifies additional HyperText Transfer Protocol (HTTP)\nstatus codes for a variety of common situations.\nStatus of This Memo\n \n #\n \n\n\nThis is an Internet Standards Track document.\nThis document is a product of the Internet Engineering Task Force\n(IETF). It represents the consensus of the IETF community. It has\nreceived public review and has been approved for publication by the\nInternet Engineering Steering Group (IESG). Further information on\nInternet Standards is available in Section 2 of RFC 5741.\nInformation about the current status of this document, any errata,\nand how to provide feedback on it may be obtained at\nhttp://www.rfc-editor.org/info/rfc6585.\nCopyright Notice\n \n #\n \n\n\nCopyright (c) 2012 IETF Trust and the persons identified as the\ndocument authors. All rights reserved.\nThis document is subject to BCP 78 and the IETF Trust's Legal\nProvisions Relating to IETF Documents\n(http://trustee.ietf.org/license-info) in effect on the date of\npublication of this document. Please review these documents\ncarefully, as they describe your rights and restrictions with respect\nto this document. Code Components extracted from this document must\ninclude Simplified BSD License text as described in Section 4.e of\nthe Trust Legal Provisions and are provided without warranty as\ndescribed in the Simplified BSD License.\nIntroduction\n \n #\n \n\n\nThis document specifies additional HTTP [RFC2616] status codes for a\nvariety of common situations, to improve interoperability and avoid\nconfusion when other, less precise status codes are used.\nNote that these status codes are optional; servers cannot be required\nto support them. However, because clients will treat unknown status\ncodes as a generic error of the same class (e.g., 499 is treated as\n400 if it is not recognized), they can be safely deployed by existing\nservers (see [RFC2616] Section 6.1.1 for more information).\nRequirements\n \n #\n \n\n\nThe key words \"MUST\", \"MUST NOT\", \"REQUIRED\", \"SHALL\", \"SHALL NOT\",\n\"SHOULD\", \"SHOULD NOT\", \"RECOMMENDED\", \"MAY\", and \"OPTIONAL\" in this\ndocument are to be interpreted as described in [RFC2119].\n428 Precondition Required\n \n #\n \n\n\nThe 428 status code indicates that the origin server requires the\nrequest to be conditional.\nIts typical use is to avoid the \"lost update\" problem, where a client\nGETs a resource's state, modifies it, and PUTs it back to the server,\nwhen meanwhile a third party has modified the state on the server,\nleading to a conflict. By requiring requests to be conditional, the\nserver can assure that clients are working with the correct copies.\nResponses using this status code SHOULD explain how to resubmit the\nrequest successfully. For example:\nHTTP/1.1 428 Precondition Required\nContent-Type: text/html\n<html>\n <head>\n <title>Precondition Required</title>\n </head>\n <body>\n <h1>Precondition Required</h1>\n <p>This request is required to be conditional;\n try using \"If-Match\".</p>\n </body>\n</html>\n\nResponses with the 428 status code MUST NOT be stored by a cache.\n429 Too Many Requests\n \n #\n \n\n\nThe 429 status code indicates that the user has sent too many\nrequests in a given amount of time (\"rate limiting\").\nThe response representations SHOULD include details explaining the\ncondition, and MAY include a Retry-After header indicating how long\nto wait before making a new request.\nFor example:\nHTTP/1.1 429 Too Many Requests\nContent-Type: text/html\nRetry-After: 3600\n <html>\n <head>\n <title>Too Many Requests</title>\n </head>\n <body>\n <h1>Too Many Requests</h1>\n <p>I only allow 50 requests per hour to this Web site per\n logged in user. Try again soon.</p>\n </body>\n </html>\n\nNote that this specification does not define how the origin server\nidentifies the user, nor how it counts requests. For example, an\norigin server that is limiting request rates can do so based upon\ncounts of requests on a per-resource basis, across the entire server,\nor even among a set of servers. Likewise, it might identify the user\nby its authentication credentials, or a stateful cookie.\nResponses with the 429 status code MUST NOT be stored by a cache.\n431 Request Header Fields Too Large\n \n #\n \n\n\nThe 431 status code indicates that the server is unwilling to process\nthe request because its header fields are too large. The request MAY\nbe resubmitted after reducing the size of the request header fields.\nIt can be used both when the set of request header fields in total is\ntoo large, and when a single header field is at fault. In the latter\ncase, the response representation SHOULD specify which header field\nwas too large.\nFor example:\nHTTP/1.1 431 Request Header Fields Too Large\nContent-Type: text/html\n <html>\n <head>\n <title>Request Header Fields Too Large</title>\n </head>\n <body>\n <h1>Request Header Fields Too Large</h1>\n <p>The \"Example\" header was too large.</p>\n </body>\n </html>\n\nResponses with the 431 status code MUST NOT be stored by a cache.\n511 Network Authentication Required ^8c7492\n \n #\n \n\n\nThe 511 status code indicates that the client needs to authenticate\nto gain network access.\nThe response representation SHOULD contain a link to a resource that\nallows the user to submit credentials (e.g., with an HTML form).\nNote that the 511 response SHOULD NOT contain a challenge or the\nlogin interface itself, because browsers would show the login\ninterface as being associated with the originally requested URL,\nwhich may cause confusion.\nThe 511 status SHOULD NOT be generated by origin servers; it is\nintended for use by intercepting proxies that are interposed as a\nmeans of controlling access to the network.\nResponses with the 511 status code MUST NOT be stored by a cache.\nThe 511 Status Code and Captive Portals\n \n #\n \n\n\nThe 511 status code is designed to mitigate problems caused by\n\"captive portals\" to software (especially non-browser agents) that is\nexpecting a response from the server that a request was made to, not\nthe intervening network infrastructure. It is not intended to\nencourage deployment of captive portals -- only to limit the damage\ncaused by them.\nA network operator wishing to require some authentication, acceptance\nof terms, or other user interaction before granting access usually\ndoes so by identifying clients who have not done so (\"unknown\nclients\") using their Media Access Control (MAC) addresses. ^615a1d\nUnknown clients then have all traffic blocked, except for that on TCP\nport 80, which is sent to an HTTP server (the \"login server\")\ndedicated to \"logging in\" unknown clients, and of course traffic to\nthe login server itself. ^521ac1\n511 Captive Portal Example\n \n #\n \n\n\nFor example, a user agent might connect to a network and make the\nfollowing HTTP request on TCP port 80:\nGET /index.htm HTTP/1.1\nHost: www.example.com\n\nUpon receiving such a request, the login server would generate a 511\nresponse:\nHTTP/1.1 511 Network Authentication Required\nContent-Type: text/html\n\n <html>\n <head>\n <title>Network Authentication Required</title>\n <meta http-equiv=\"refresh\"\n content=\"0; url=https://login.example.net/\">\n </head>\n <body>\n <p>You need to <a href=\"https://login.example.net/\">\n authenticate with the local network</a> in order to gain\n access.</p>\n </body>\n </html>\n\nHere, the 511 status code assures that non-browser clients will not\ninterpret the response as being from the origin server, and the META\nHTML element redirects the user agent to the login server.\nSecurity Considerations\n \n #\n \n\n\n428 Precondition Required\n \n #\n \n\n\nThe 428 status code is optional; clients cannot rely upon its use to\nprevent \"lost update\" conflicts.\n429 Too Many Requests\n \n #\n \n\n\nWhen a server is under attack or just receiving a very large number\nof requests from a single party, responding to each with a 429 status\ncode will consume resources.\nTherefore, servers are not required to use the 429 status code; when\nlimiting resource usage, it may be more appropriate to just drop\nconnections, or take other steps.\n431 Request Header Fields Too Large\n \n #\n \n\n\nServers are not required to use the 431 status code; when under\nattack, it may be more appropriate to just drop connections, or take\nother steps.\n511 Network Authentication Required (Security)\n \n #\n \n\n\nIn common use, a response carrying the 511 status code will not come\nfrom the origin server indicated in the request's URL. This presents\nmany security issues; e.g., an attacking intermediary may be\ninserting cookies into the original domain's name space, may be\nobserving cookies or HTTP authentication credentials sent from the\nuser agent, and so on.\nHowever, these risks are not unique to the 511 status code; in other\nwords, a captive portal that is not using this status code introduces\nthe same issues.\nAlso, note that captive portals using this status code on a Secure\nSocket Layer (SSL) or Transport Layer Security (TLS) connection\n(commonly, port 443) will generate a certificate error on the client.\nIANA Considerations\n \n #\n \n\n\nThe HTTP Status Codes registry has been updated with the following\nentries:\n Value: 428\n Description: Precondition Required\n Reference: [RFC6585]\n\n Value: 429\n Description: Too Many Requests\n Reference: [RFC6585]\n\n Value: 431\n Description: Request Header Fields Too Large\n Reference: [RFC6585]\n\n Value: 511\n Description: Network Authentication Required\n Reference: [RFC6585]\n\nReferences\n \n #\n \n\n\n9.1. Normative References\n\\[\nRequirement Levels\", BCP 14, RFC 2119, March 1997.\n\n\\[RFC2616\\] Fielding, R., Gettys, J., Mogul, J., Frystyk, H.,\nMasinter, L., Leach, P., and T. Berners-Lee, \"Hypertext\nTransfer Protocol -- HTTP/1.1\", RFC 2616, June 1999.\n\n9.2. Informative References\n\n\\[CORS\\] van Kesteren, A., Ed., \"Cross-Origin Resource Sharing\",\nW3C Working Draft WD-cors-20100727, July 2010,\n.\n\n\\[Favicon\\] Wikipedia, \"Favicon\", March 2012,\n\\.\n\n\\[OAuth2.0\\] Hammer-Lahav, E., Ed., Recordon, D., and D. Hardt, \"The\nOAuth 2.0 Authorization Protocol\", Work in Progress,\nMarch 2012.\n\nNottingham & Fielding Standards Track \\[Page 7\\]\n\nRFC 6585 Additional HTTP Status Codes April 2012\n\n\\[P3P\\] Marchiori, M., Ed., \"The Platform for Privacy Preferences\n1.0 (P3P1.0) Specification\", W3C Recommendation\nREC-P3P-20020416, April 2002,\n.\n\n\\[RFC4791\\] Daboo, C., Desruisseaux, B., and L. Dusseault,\n\"Calendaring Extensions to WebDAV (CalDAV)\", RFC 4791,\nMarch 2007.\n\n\\[RFC4918\\] Dusseault, L., Ed., \"HTTP Extensions for Web Distributed\nAuthoring and Versioning (WebDAV)\", RFC 4918, June 2007.\n\n\\[WIDGETS\\] Caceres, M., Ed., \"Widget Packaging and XML\nConfiguration\", W3C Recommendation REC-widgets-20110927,\nSeptember 2011, .\n\n\\[WebFinger\\] WebFinger Project, \"WebFingerProtocol (Draft)\",\nJanuary 2010, \\.\n\n## Appendix\n\n### Appendix A. Acknowledgements\n\nThanks to Jan Algermissen and Julian Reschke for their suggestions\nand feedback.\n\n### Appendix B. Issues Raised by Captive Portals\n\nSince clients cannot differentiate between a portal's response and\nthat of the HTTP server that they intended to communicate with, a\nnumber of issues arise. The 511 status code is intended to help\nmitigate some of them.\n\nOne example is the \"favicon.ico\" \\[Favicon\\] commonly used by browsers\nto identify the site being accessed. If the favicon for a given site\nis fetched from a captive portal instead of the intended site (e.g.,\nbecause the user is unauthenticated), it will often \"stick\" in the\nbrowser's cache (most implementations cache favicons aggressively)\nbeyond the portal session, so that it seems as if the portal's\nfavicon has \"taken over\" the legitimate site.\n\nAnother browser-based issue comes about when the Platform for Privacy\nPreferences \\[P3P\\] is supported. Depending on how it is implemented,\nit's possible a browser might interpret a portal's response for the\np3p.xml file as the server's, resulting in the privacy policy (or\nlack thereof) advertised by the portal being interpreted as applying\nto the intended site. Other Web-based protocols such as WebFinger\n\\[WebFinger\\], Cross-Origin Resource Sharing \\[CORS\\], and Open\nAuthorization \\[OAuth2.0\\] may also be vulnerable to such issues.\n\nAlthough HTTP is most widely used with Web browsers, a growing number\nof non-browsing applications use it as a substrate protocol. For\nexample, Web Distributed Authoring and Versioning (WebDAV) \\[RFC4918\\]\nand Calendaring Extensions to WebDAV (CalDAV) \\[RFC4791\\] both use HTTP\nas the basis (for remote authoring and calendaring, respectively).\nUsing these applications from behind a captive portal can result in\nspurious errors being presented to the user, and might result in\ncontent corruption, in extreme cases.\n\nSimilarly, other non-browser applications using HTTP can be affected\nas well, e.g., widgets \\[WIDGETS\\], software updates, and other\nspecialized software such as Twitter clients and the iTunes Music\nStore.\n\nIt should be noted that it's sometimes believed that using HTTP\nredirection to direct traffic to the portal addresses these issues.\nHowever, since many of these uses \"follow\" redirects, this is not a\ngood solution.\n\nAuthors' Addresses\n\nMark Nottingham\nRackspace\n\nEMail: mnot@mnot.net\nURI: http://www.mnot.net/\n\nRoy T. Fielding\nAdobe Systems Incorporated\n345 Park Ave.\nSan Jose, CA 95110\nUSA\n\nEMail: fielding@gbiv.com\nURI: http://roy.gbiv.com/\n\n# RFC 6585 (Additional HTTP Status Codes)\n\n````\nInternet Engineering Task Force (IETF) M. Nottingham\nRequest for Comments: 6585 Rackspace\nUpdates: 2616 R. Fielding\nCategory: Standards Track Adobe\nISSN: 2070-1721 April 2012\n````\n\n## Abstract\n\nThis document specifies additional HyperText Transfer Protocol (HTTP)\nstatus codes for a variety of common situations.\n\n## Status of This Memo\n\nThis is an Internet Standards Track document.\n\nThis document is a product of the Internet Engineering Task Force\n(IETF). It represents the consensus of the IETF community. It has\nreceived public review and has been approved for publication by the\nInternet Engineering Steering Group (IESG). Further information on\nInternet Standards is available in Section 2 of RFC 5741.\n\nInformation about the current status of this document, any errata,\nand how to provide feedback on it may be obtained at\n.\n\n## Copyright Notice\n\nCopyright (c) 2012 IETF Trust and the persons identified as the\ndocument authors. All rights reserved.\n\nThis document is subject to BCP 78 and the IETF Trust's Legal\nProvisions Relating to IETF Documents\n() in effect on the date of\npublication of this document. Please review these documents\ncarefully, as they describe your rights and restrictions with respect\nto this document. Code Components extracted from this document must\ninclude Simplified BSD License text as described in Section 4.e of\nthe Trust Legal Provisions and are provided without warranty as\ndescribed in the Simplified BSD License.\n\n## Introduction\n\nThis document specifies additional HTTP \\[RFC2616\\] status codes for a\nvariety of common situations, to improve interoperability and avoid\nconfusion when other, less precise status codes are used.\n\nNote that these status codes are optional; servers cannot be required\nto support them. However, because clients will treat unknown status\ncodes as a generic error of the same class (e.g., 499 is treated as\n400 if it is not recognized), they can be safely deployed by existing\nservers (see \\[RFC2616\\] Section 6.1.1 for more information).\n\n## Requirements\n\nThe key words \"MUST\", \"MUST NOT\", \"REQUIRED\", \"SHALL\", \"SHALL NOT\",\n\"SHOULD\", \"SHOULD NOT\", \"RECOMMENDED\", \"MAY\", and \"OPTIONAL\" in this\ndocument are to be interpreted as described in \\[RFC2119\\].\n\n## 428 Precondition Required\n\nThe 428 status code indicates that the origin server requires the\nrequest to be conditional.\n\nIts typical use is to avoid the \"lost update\" problem, where a client\nGETs a resource's state, modifies it, and PUTs it back to the server,\nwhen meanwhile a third party has modified the state on the server,\nleading to a conflict. By requiring requests to be conditional, the\nserver can assure that clients are working with the correct copies.\n\nResponses using this status code SHOULD explain how to resubmit the\nrequest successfully. For example:\n\nHTTP/1.1 428 Precondition Required\nContent-Type: text/html\n\n````html\n\n \n Precondition Required\n \n \n Precondition Required\n This request is required to be conditional;\n try using \"If-Match\".\n \n\n````\n\nResponses with the 428 status code MUST NOT be stored by a cache.\n\n## 429 Too Many Requests\n\nThe 429 status code indicates that the user has sent too many\nrequests in a given amount of time (\"rate limiting\").\n\nThe response representations SHOULD include details explaining the\ncondition, and MAY include a Retry-After header indicating how long\nto wait before making a new request.\n\nFor example:\n\nHTTP/1.1 429 Too Many Requests\nContent-Type: text/html\nRetry-After: 3600\n\n````html\n \n \n Too Many Requests\n \n \n Too Many Requests\n I only allow 50 requests per hour to this Web site per\n logged in user. Try again soon.\n \n \n````\n\nNote that this specification does not define how the origin server\nidentifies the user, nor how it counts requests. For example, an\norigin server that is limiting request rates can do so based upon\ncounts of requests on a per-resource basis, across the entire server,\nor even among a set of servers. Likewise, it might identify the user\nby its authentication credentials, or a stateful cookie.\n\nResponses with the 429 status code MUST NOT be stored by a cache.\n\n## 431 Request Header Fields Too Large\n\nThe 431 status code indicates that the server is unwilling to process\nthe request because its header fields are too large. The request MAY\nbe resubmitted after reducing the size of the request header fields.\n\nIt can be used both when the set of request header fields in total is\ntoo large, and when a single header field is at fault. In the latter\ncase, the response representation SHOULD specify which header field\nwas too large.\n\nFor example:\n\nHTTP/1.1 431 Request Header Fields Too Large\nContent-Type: text/html\n\n````html\n \n \n Request Header Fields Too Large\n \n \n Request Header Fields Too Large\n The \"Example\" header was too large.\n \n \n````\n\nResponses with the 431 status code MUST NOT be stored by a cache.\n\n## 511 Network Authentication Required ^8c7492\n\nThe 511 status code indicates that the client needs to authenticate\nto gain network access.\n\nThe response representation SHOULD contain a link to a resource that\nallows the user to submit credentials (e.g., with an HTML form).\n\nNote that the 511 response SHOULD NOT contain a challenge or the\nlogin interface itself, because browsers would show the login\ninterface as being associated with the originally requested URL,\nwhich may cause confusion.\n\nThe 511 status SHOULD NOT be generated by origin servers; it is\nintended for use by intercepting proxies that are interposed as a\nmeans of controlling access to the network.\n\nResponses with the 511 status code MUST NOT be stored by a cache.\n\n### The 511 Status Code and Captive Portals\n\nThe 511 status code is designed to mitigate problems caused by\n\"captive portals\" to software (especially non-browser agents) that is\nexpecting a response from the server that a request was made to, not\nthe intervening network infrastructure. It is not intended to\nencourage deployment of captive portals -- only to limit the damage\ncaused by them.\n\nA network operator wishing to require some authentication, acceptance\nof terms, or other user interaction before granting access usually\ndoes so by identifying clients who have not done so (\"unknown\nclients\") using their Media Access Control (MAC) addresses. ^615a1d\n\nUnknown clients then have all traffic blocked, except for that on TCP\nport 80, which is sent to an HTTP server (the \"login server\")\ndedicated to \"logging in\" unknown clients, and of course traffic to\nthe login server itself. ^521ac1\n\n#### 511 Captive Portal Example\n\nFor example, a user agent might connect to a network and make the\nfollowing HTTP request on TCP port 80:\n\n````http\nGET /index.htm HTTP/1.1\nHost: www.example.com\n````\n\nUpon receiving such a request, the login server would generate a 511\nresponse:\n\n````http\nHTTP/1.1 511 Network Authentication Required\nContent-Type: text/html\n````\n\n````html\n \n \n Network Authentication Required\n \n \n \n You need to \n authenticate with the local network in order to gain\n access.\n \n \n````\n\nHere, the 511 status code assures that non-browser clients will not\ninterpret the response as being from the origin server, and the META\nHTML element redirects the user agent to the login server.\n\n## Security Considerations\n\n### 428 Precondition Required\n\nThe 428 status code is optional; clients cannot rely upon its use to\nprevent \"lost update\" conflicts.\n\n### 429 Too Many Requests\n\nWhen a server is under attack or just receiving a very large number\nof requests from a single party, responding to each with a 429 status\ncode will consume resources.\n\nTherefore, servers are not required to use the 429 status code; when\nlimiting resource usage, it may be more appropriate to just drop\nconnections, or take other steps.\n\n### 431 Request Header Fields Too Large\n\nServers are not required to use the 431 status code; when under\nattack, it may be more appropriate to just drop connections, or take\nother steps.\n\n### 511 Network Authentication Required (Security)\n\nIn common use, a response carrying the 511 status code will not come\nfrom the origin server indicated in the request's URL. This presents\nmany security issues; e.g., an attacking intermediary may be\ninserting cookies into the original domain's name space, may be\nobserving cookies or HTTP authentication credentials sent from the\nuser agent, and so on.\n\nHowever, these risks are not unique to the 511 status code; in other\nwords, a captive portal that is not using this status code introduces\nthe same issues.\n\nAlso, note that captive portals using this status code on a Secure\nSocket Layer (SSL) or Transport Layer Security (TLS) connection\n(commonly, port 443) will generate a certificate error on the client.\n\n## IANA Considerations\n\nThe HTTP Status Codes registry has been updated with the following\nentries:\n\n````\n Value: 428\n Description: Precondition Required\n Reference: [RFC6585]\n\n Value: 429\n Description: Too Many Requests\n Reference: [RFC6585]\n\n Value: 431\n Description: Request Header Fields Too Large\n Reference: [RFC6585]\n\n Value: 511\n Description: Network Authentication Required\n Reference: [RFC6585]\n````\n\n## References\n\n9.1. Normative References\n\n\\[RFC2119\\] Bradner, S., \"Key words for use in RFCs to Indicate\nRequirement Levels\", BCP 14, RFC 2119, March 1997.\n\n\\[RFC2616\\] Fielding, R., Gettys, J., Mogul, J., Frystyk, H.,\nMasinter, L., Leach, P., and T. Berners-Lee, \"Hypertext\nTransfer Protocol -- HTTP/1.1\", RFC 2616, June 1999.\n\n9.2. Informative References\n\n\\[CORS\\] van Kesteren, A., Ed., \"Cross-Origin Resource Sharing\",\nW3C Working Draft WD-cors-20100727, July 2010,\n.\n\n\\[Favicon\\] Wikipedia, \"Favicon\", March 2012,\n\\.\n\n\\[OAuth2.0\\] Hammer-Lahav, E., Ed., Recordon, D., and D. Hardt, \"The\nOAuth 2.0 Authorization Protocol\", Work in Progress,\nMarch 2012.\n\nNottingham & Fielding Standards Track \\[Page 7\\]\n\nRFC 6585 Additional HTTP Status Codes April 2012\n\n\\[P3P\\] Marchiori, M., Ed., \"The Platform for Privacy Preferences\n1.0 (P3P1.0) Specification\", W3C Recommendation\nREC-P3P-20020416, April 2002,\n.\n\n\\[RFC4791\\] Daboo, C., Desruisseaux, B., and L. Dusseault,\n\"Calendaring Extensions to WebDAV (CalDAV)\", RFC 4791,\nMarch 2007.\n\n\\[RFC4918\\] Dusseault, L., Ed., \"HTTP Extensions for Web Distributed\nAuthoring and Versioning (WebDAV)\", RFC 4918, June 2007.\n\n\\[WIDGETS\\] Caceres, M., Ed., \"Widget Packaging and XML\nConfiguration\", W3C Recommendation REC-widgets-20110927,\nSeptember 2011, .\n\n\\[WebFinger\\] WebFinger Project, \"WebFingerProtocol (Draft)\",\nJanuary 2010, \\.\n\n## Appendix\n\n### Appendix A. Acknowledgements\n\nThanks to Jan Algermissen and Julian Reschke for their suggestions\nand feedback.\n\n### Appendix B. Issues Raised by Captive Portals\n\nSince clients cannot differentiate between a portal's response and\nthat of the HTTP server that they intended to communicate with, a\nnumber of issues arise. The 511 status code is intended to help\nmitigate some of them.\n\nOne example is the \"favicon.ico\" \\[Favicon\\] commonly used by browsers\nto identify the site being accessed. If the favicon for a given site\nis fetched from a captive portal instead of the intended site (e.g.,\nbecause the user is unauthenticated), it will often \"stick\" in the\nbrowser's cache (most implementations cache favicons aggressively)\nbeyond the portal session, so that it seems as if the portal's\nfavicon has \"taken over\" the legitimate site.\n\nAnother browser-based issue comes about when the Platform for Privacy\nPreferences \\[P3P\\] is supported. Depending on how it is implemented,\nit's possible a browser might interpret a portal's response for the\np3p.xml file as the server's, resulting in the privacy policy (or\nlack thereof) advertised by the portal being interpreted as applying\nto the intended site. Other Web-based protocols such as WebFinger\n\\[WebFinger\\], Cross-Origin Resource Sharing \\[CORS\\], and Open\nAuthorization \\[OAuth2.0\\] may also be vulnerable to such issues.\n\nAlthough HTTP is most widely used with Web browsers, a growing number\nof non-browsing applications use it as a substrate protocol. For\nexample, Web Distributed Authoring and Versioning (WebDAV) \\[RFC4918\\]\nand Calendaring Extensions to WebDAV (CalDAV) \\[RFC4791\\] both use HTTP\nas the basis (for remote authoring and calendaring, respectively).\nUsing these applications from behind a captive portal can result in\nspurious errors being presented to the user, and might result in\ncontent corruption, in extreme cases.\n\nSimilarly, other non-browser applications using HTTP can be affected\nas well, e.g., widgets \\[WIDGETS\\], software updates, and other\nspecialized software such as Twitter clients and the iTunes Music\nStore.\n\nIt should be noted that it's sometimes believed that using HTTP\nredirection to direct traffic to the portal addresses these issues.\nHowever, since many of these uses \"follow\" redirects, this is not a\ngood solution.\n\nAuthors' Addresses\n\nMark Nottingham\nRackspace\n\nEMail: mnot@mnot.net\nURI: http://www.mnot.net/\n\nRoy T. Fielding\nAdobe Systems Incorporated\n345 Park Ave.\nSan Jose, CA 95110\nUSA\n\nEMail: fielding@gbiv.com\nURI: http://roy.gbiv.com/\n\n## Redirect Methods\n\n### 1. WiFi Passpoint (Hotspot 2.0)\n\n### 2. [HTTP Redirect](https://www.wikiwand.com/en/Captive_portal#/HTTP_redirect)\n\nWhen client device first connects, it makes an HTTP request to a special endpoint (what?); if the endpoint returns 200 or 204, then it assume unlimited internet. Otherwise, if it returns 302 (redirect) to the captive portal, the device will know that it needs to auth to gain access.\n\nAlternatively, ALL HTTP requests from the client are redirected until auth'ed.\n\nProblem: How does this work when the client is HTTPS only?\n\n#### ArubaNetworks Example\n\n[arubanetworks captive portal](@/router/lightning%20router/captive%20portal/arubanetworks%20captive%20portal.md)\n\n#### HTTP 302 Redirect Example:\n\n````http\n# Client request:\nGET /index.html HTTP/1.1\nHost: www.example.com\n\n# Server response:\nHTTP/1.1 302 Found\nLocation: http://www.iana.org/domains/example/\n````\n\n#### HTTP 511 Example:\n\n#### 511 Captive Portal Example\n\nFor example, a user agent might connect to a network and make the\nfollowing HTTP request on TCP port 80:\n\n````http\nGET /index.htm HTTP/1.1\nHost: www.example.com\n````\n\nUpon receiving such a request, the login server would generate a 511\nresponse:\n\n````http\nHTTP/1.1 511 Network Authentication Required\nContent-Type: text/html\n````\n\n````html\n \n \n Network Authentication Required\n \n \n \n You need to \n authenticate with the local network in order to gain\n access.\n \n \n````\n\nHere, the 511 status code assures that non-browser clients will not\ninterpret the response as being from the origin server, and the META\nHTML element redirects the user agent to the login server.\n\n### 3. ICMP Redirect\n\nTODO\n\n### 4. DNS Redirect\n\nUse [DNS Hijacking](https://www.wikiwand.com/en/DNS_hijacking) to return IP of captive portal for all DNS requests until client is auth'ed.\n\nDNS response should use TTL=0 to avoid poisoning client's DNS cache.\n\nProblem: how does this work if the client has their own DNS server configured (e.g. 8.8.8.8)? Could do DNS packet rewriting I guess...\n\nProblem: when the client looks up `google.com`, what if their local DNS cache is already hot? They will never make a DNS request that we can rewrite.\n\\]\n","id":"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/","title":"captive portal"},"https://phlip9.com/notes/router/lightning router/lightning router overview/":{"body":"lightning router overview\n\nLightning-enabled \"Captive Portal\"\n\"Pay-as-you-go\" internet usage with Lightning\nThesis\n \n #\n \n\n\nFaster, cheaper micro-payments enable finer grained usage billing\nUse Cases\n \n #\n \n\n\n\nCafe / Restaurant / Hotel / Airport\nAppartment: provide WiFi to neighbors\n\nWhat is Purchased (Capacity vs Volume)\n \n #\n \n\n\nOne of:\n\nData Volume\n+ Users purchase a \"data rate\" contract, e.g., $0.01 / MiB, charged every X MiB\n+ Most cost efficient (?), since users pay only for what they use\n+ Provider can charge many users at once\n+ Variable quality, since it makes no guarantees about how much bandwidth capacity you're getting\n+ Good for: emails, browsing, \"spiky\" usage\nBandwidth\n+ Users purchase a \"bandwidth capacity\" contract, e.g., 10 MiB/s, charged every X minutes\n+ Allows users to reserve a \"slice of the pipe\" all to themselves\n+ Some use cases aren't usable without a minimum bandwidth guarantee (Youtube video buffering, gaming lag). Most useful when the router is under heavy usage by many \"data volume\" users.\n+ Good for: gaming, Netflix, Youtube, sustained usage\n\n\nCould also provide \"slow\" connectivity by default, then users pay for better quality.\nAlso need to distinguish Up/Down Volume/Bandwidth\n\nCaptive Portal\n \n #\n \n\n\ncaptive portal\nFlow\n \n #\n \n\n\ncustom auth variables passed in query string\nvariablenotes\nclientipThe ip address of the client to be authenticated\nsessionlengthlength of session - minutes\nuploadratemaximum allowed upload data rate - kbits/sec\ndownloadratemaximum allowed download data rate - kbits/sec\nuploadquotaallowed upload data quota - kBytes\ndownloadquotaallowed download data quota - kBytes\ncustomA custom data string that will be sent to BinAuth\n\n\nclient gets captured by openNDS\nopenNDS redirects client to FAS API along w/ encrypted token (?) (depends on \"security level\")\nFAS API decides whether to auth client by passing them the decrypted token, client hits gateway:port/opennds_auth?tok=XXX with decrypted token to auth.\nif client follows lightning flow, FAS API can notify openNDS to increase client\n\n","id":"https://phlip9.com/notes/router/lightning router/lightning router overview/","title":"lightning router overview"},"https://phlip9.com/notes/statistics probability/":{"body":"","id":"https://phlip9.com/notes/statistics probability/","title":"statistics probability"},"https://phlip9.com/notes/statistics probability/CDF confidence bands - DKW inequality/":{"body":"CDF confidence bands - DKW inequality\n\n\\[\n\\renewcommand{\\Pr}[1]{\\text{Pr}\\left[ #1 \\right]}\n\\def\\eps{\\varepsilon}\n\\]\nOverview\n \n #\n \n\n\nLet's say I have a well known distribution defined by a CDF $F(x)$. I also sample an empirical CDF $F_n(x)$ from a population. Given some confidence parameter, the DKW Inequality bounds how close a random ECDF $F_n(x)$ will be to the true CDF from which the samples are drawn.\nInequality\n \n #\n \n\n\nThe inequality itself states the probability that the Kolmogorov-Smirnov Statistic violates some bound (the K-S statistic is just $||F_n(x) - F(x)||_{\\text{max}}$)\n\\[\n\\Pr{\\sup_{x} \\; \\Bigl|F_n(x) - F(x)\\Bigr| > \\eps} \\le 2 e^{-2 n \\eps^2} \\qquad \\text{for every } \\eps > 0.\n\\]\nNote: there is an extended inequality for a multivariate $F$. The bound changes from $2 e^{(\\cdots)}$ to $2k \\, e^{(\\cdots)}$, where $k$ is the vector dimension.\nCDF Confidence Bands\n \n #\n \n\n\nWe can use the DKW Inequality to produce a \"band\" around our true CDF that must contain our empirical CDF with some confidence probability.\nWith a failure probability $\\alpha$, our sampled ECDF will sit outside the interval\n\\[\n\\Bigl[ F(x) - \\eps,\\; F(x) + \\eps \\Bigr] \\qquad \\text{where } \\eps = \\sqrt{\\frac{\\ln \\frac{2}{\\alpha}}{2n}}\n\\]\nPros\n \n #\n \n\n\n\nallows us to contain the entire CDF with a single band value.\nnon-parametric - requires no assumptions about the sample distribution.\n\nCons\n \n #\n \n\n\n\nprovides weak guarantees at the tails, tighter bounds around the median\npointwise approaches (what?) can provide tighter bounds at each individual value\nnon-parametric - provides weaker bounds than others with more assumptions.\n\nExample Bounds\n \n #\n \n\n\n$n$$\\alpha$$\\eps$\n100.10.38702275602049496\n100.010.5146997846583985\n100.0010.6164779987778186\n\n1000.10.12238734153404082\n1000.010.16276236307187292\n1000.0010.19494746035204052\n\n10000.10.038702275602049495\n10000.010.05146997846583985\n10000.0010.06164779987778186\n\n100000.10.012238734153404082\n100000.010.016276236307187292\n100000.0010.019494746035204052\n\n200000.10.008654091913011426\n200000.010.011509037065006824\n200000.0010.013784867119002347\n\nLinks\n \n #\n \n\n\n\nDKW Inequality (wikiwand)\nENS PSL Fact Sheet 1: DKW Inequality\nOn the tight constant in the multivariate DKW Inequality\nKolmogorov-Smirnov Statistic (wikiwand)\n\n","id":"https://phlip9.com/notes/statistics probability/CDF confidence bands - DKW inequality/","title":"CDF confidence bands - DKW inequality"},"https://phlip9.com/notes/statistics probability/G-test - multinomial goodness-of-fit/":{"body":"G-test - multinomial goodness-of-fit\n\n\\[\n\\def\\Chi{\\mathcal{X}}\n\\]\nOverview\n \n #\n \n\n\n\n$G$ is a test-statistic. Asymptotically the same as the $\\Chi^2$ test-statistic.\nUsed for goodness-of-fit test b/w observed and hypothesized multinomial distributions.\nWe use the $\\Chi^2$ distribution to compute our desired $G$ threshold from a given $p$-value.\nIt's a log-likelihood ratio. Closely related to KL-divergence and $\\Chi^2$ statistic.\n\nTest Statistic\n \n #\n \n\n\nIn terms of observed counts, $O_i \\ge 0$, and expected counts, $E_i > 0$\n\\[\nG = 2 \\sum_i O_i \\cdot \\ln\\Bigl( \\frac{O_i}{E_i} \\Bigr)\n\\]\nIn terms of probabilities $\\hat{p}_i$ and $p_i$ (estimated and expected resp.) and number of samples $n$:\n\\[\n\\begin{align*}\n\tG &= 2 \\sum_i \\hat{p}_i \\cdot n \\cdot \\ln\\Bigl( \\frac{\\hat{p}_i \\cdot n}{p_i \\cdot n} \\Bigr) \\\\\n\t&= 2 \\sum_i \\hat{p}_i \\cdot n \\cdot \\ln\\Bigl( \\frac{\\hat{p}_i}{p_i} \\Bigr) \\\\\n\t&= 2 n \\sum_i \\hat{p}_i \\cdot \\ln\\Bigl( \\frac{\\hat{p}_i}{p_i} \\Bigr) \\\\\n\t&= 2 \\, n \\; D_{\\text{KL}}(\\hat{p} \\;||\\; p)\n\\end{align*}\n\\]\nwhere $D_{\\text{KL}}(\\hat{p} \\;||\\; p)$ is the Kullback-Leibler divergence.\nExample Implementation\n \n #\n \n\n\nSource: https://github.com/phlip9/kcddice/blob/master/kcddice/src/stats.rs\nuse claim::{debug_assert_ge, debug_assert_le};\nuse ndarray::{ArrayView1, Zip};\nuse statrs::distribution::{ChiSquared, ContinuousCDF};\n\nconst EPS: f64 = 1e-10;\n\n/// Return true iff `supp(p) ⊆ supp(q)` for dense PMFs `p` and `q`.\nfn is_pmf_subset(p: ArrayView1<f64>, q: ArrayView1<f64>) -> bool {\n Zip::from(p).and(q).all(|&p_i, &q_i| {\n // A = (q_i == 0.0)\n // B = (p_i == 0.0)\n // (A ==> B) <==> (¬A ∨ B)\n (q_i > 0.0) || (p_i <= 0.0)\n })\n}\n\n/// Compute the [KL-divergence](https://www.wikiwand.com/en/Kullback%E2%80%93Leibler_divergence).\n/// between dense PMFs `p` and `q`.\n///\n/// `D_{KL}(p || q) = \\sum_i p_i * \\ln(p_i / q_i)`\n///\n/// Note: p's support must be a strict subset of q's support!\n/// this is also referred to as the \"absolute continuity\" assumption,\n/// where `q_i = 0` implies `p_i = 0`.\nfn kl_divergence(p: ArrayView1<f64>, q: ArrayView1<f64>) -> f64 {\n // caller should check this before\n debug_assert!(is_pmf_subset(p, q));\n\n Zip::from(p)\n .and(q)\n .fold(0.0, |sum, &p_i, &q_i| sum + kl_div_term(p_i, q_i))\n}\n\n#[inline]\nfn kl_div_term(p_i: f64, q_i: f64) -> f64 {\n if q_i > EPS {\n if p_i > EPS {\n p_i * (p_i / q_i).ln()\n } else {\n 0.0\n }\n } else {\n if p_i > EPS {\n debug_assert!(false);\n f64::INFINITY\n } else {\n 0.0\n }\n }\n}\n\n/// The G-test statistic.\n///\n/// * Used for comparing observed multinomial distribution with expected\n/// hypothesis multinomial distribution.\n/// * Asmyptotically approximates chi^2-test statistic.\n///\n/// `n`: the number of samples\n/// `p`: the expected PMF\n/// `p_hat`: the observed PMF\n///\n/// G-test: https://www.wikiwand.com/en/G-test\nfn g_test(n: usize, p: ArrayView1<f64>, p_hat: ArrayView1<f64>) -> f64 {\n (n as f64) * (2.0 * kl_divergence(p_hat, p))\n}\n\nSee also: https://github.com/msberends/AMR/blob/main/R/g.test.R\n","id":"https://phlip9.com/notes/statistics probability/G-test - multinomial goodness-of-fit/","title":"G-test - multinomial goodness-of-fit"},"https://phlip9.com/notes/statistics probability/MAD - median absolute deviation/":{"body":"MAD - median absolute deviation\n\nWikiwand: https://www.wikiwand.com/en/Median_absolute_deviation\nR Docs: https://www.rdocumentation.org/packages/stats/versions/3.6.2/topics/mad\nMAD is a measure of statistical dispersion (like stddev) but is more resilient to outliers\nMAD = median(abs(X - median(X)))\nstddev_estimate = k * MAD\nfor normally distributed data, k = 1.4826\n","id":"https://phlip9.com/notes/statistics probability/MAD - median absolute deviation/","title":"MAD - median absolute deviation"},"https://phlip9.com/notes/statistics probability/cheat sheet/":{"body":"cheat sheet\n\n\\[\n\\renewcommand{\\Pr}[1]{\\text{Pr}\\left[ #1 \\right]}\n\\]\nLaw of Total Probability\n \n #\n \n\n\n\\[\n\\begin{align*}\n\t\\Pr{A}\n\t&= \\sum_n \\Pr{A,\\, B_n} \\\\\n\t&= \\sum_n \\Pr{A \\;|\\; B_n} \\cdot \\Pr{B_n} \\\\\n \\\\\n\t\\Pr{A \\;|\\; C}\n\t&= \\sum_n \\Pr{A \\;|\\; C,\\, B_n} \\cdot \\Pr{B_n \\;|\\; C} \\\\\n\t&= \\sum_n \\Pr{A \\;|\\; C,\\, B_n} \\cdot \\Pr{B_n} \\qquad \\text{(if $B_n$ and $C$ indep.)}\n\\end{align*}\n\\]\n","id":"https://phlip9.com/notes/statistics probability/cheat sheet/","title":"cheat sheet"},"https://phlip9.com/notes/statistics probability/herbie - float error fixer/":{"body":"herbie - float error fixer\n\n\nFind and fix floating-point problems:\n \n #\n \n\n\nsqrt(x+1) - sqrt(x) → 1/(sqrt(x+1) + sqrt(x))\nHerbie detects inaccurate expressions and finds more accurate replacements. The red expression is inaccurate when x > 1; Herbie's replacement, in blue, is accurate for all x.\n\n\nSite: https://herbie.uwplse.org/\nGithub: https://github.com/herbie-fp/herbie\n\n","id":"https://phlip9.com/notes/statistics probability/herbie - float error fixer/","title":"herbie - float error fixer"},"https://phlip9.com/notes/statistics probability/kelly criterion + ELO/":{"body":"kelly criterion + ELO\n\nQ = lambda r: 10**(r/400)\nE = lambda r1, r2: Q(r1) / (Q(r1) + Q(r2))\nK = lambda p, b: p - (1 - p) / b\nA = lambda P, E_g, E_o, Y: print(\"Y: %d, N: %d\" % (P * K(E(E_g, E_o), (1 / Y) - 1), P * K(1 - E(E_g, E_o), (1 / (1 - Y)) - 1)))\n\n","id":"https://phlip9.com/notes/statistics probability/kelly criterion + ELO/","title":"kelly criterion + ELO"},"https://phlip9.com/notes/statistics probability/multinomial distribution/":{"body":"multinomial distribution\n\n\\[\n\\renewcommand{\\Pr}[1]{\\text{Pr}\\left[ #1 \\right]}\n\\def\\eps{\\varepsilon}\n\\def\\E{\\mathbb{E}}\n\\]\nExample\n \n #\n \n\n\nYou have a k-sided, weighted die. The weight each face $i = 1, \\ldots, k$ is $p_i$. You roll the die $n$ times. The distribution of faces rolled will follow a Multinomial Distribution.\nOverview\n \n #\n \n\n\nPropertyValue\nParameters$n > 0$ number of trials, $p_1, \\ldots, p_k$ event probabilities, where $\\sum_{i} p_i = n$\nSupport$i \\in \\set{1, \\ldots, k}, ; x_i \\in \\set{0, \\ldots, k}, \\text{ with } \\sum_i x_i = n$\nPMF$\\Pr{X = \\set{x_1, \\ldots, x_k}} = \\frac{n!}{x_1! \\cdots x_n!} p_1^{x_1} \\cdots p_k^{x_k}$\nMean$\\E[X_i] = n \\cdot p_i$\nVariance$Var(X_i) = n p_i (1 - p_i), ; Cov(X_i, X_j) = -n p_i p_j ; (i \\ne j)$\n\nStatistical Inference\n \n #\n \n\n\nEquivalence Tests\n \n #\n \n\n\nOstrovski 2017 - Testing equivalence of multinomial distributions\nWikiwand - Multinomial Test\nResin 2021 - A Simple Algorithm for Exact Multinomial Tests\nGoodness-of-fit Tests\n \n #\n \n\n\nIdeally, we could use an exact test, where we check if the observed counts $X$ lie in some failure region (according to some criterion) with some confidence probability $p_{significance}$, for example. The criterion will claim the $X$ is not the same as our hypothesized distribution if $X$ lies in the failure region. We choose the size of our failure region based on our initial choice of confidence (greater required confidence implies greater sized failure region).\n\\[\np_{significance} = \\sum_{X \\;\\in\\; \\text{region}} \\text{multinomial-pmf}(X)\n\\]\nUnfortunately, the multinomial CDF and PMF have an absurdly huge support for any non-trivial $n$ and $k$, and we need to calculate the CDF by just exhaustively computing the joint probabilities, which makes this approach computationally infeasible, since any non-trivial region is just too big. :'(\nInstead, we need derived random variables, called test statistics, which are more mathematically convenient or more computationally tractable, and compare their observed values against the failure regions projected into the test-statistic's distribution.\nG-test - multinomial goodness-of-fit\nWikiwand - Pearson's chi-squared test\nWikiwand - G-test / log-likelihood ratio test\nExample Implementation\n \n #\n \n\n\nUsing g_test defined in G-test - multinomial goodness-of-fit > Example Implementation.\nuse claim::{debug_assert_ge, debug_assert_le};\nuse ndarray::ArrayView1;\nuse statrs::distribution::{ChiSquared, ContinuousCDF};\n\n/// A goodness-of-fit test between a hypothesized multinomial distribution, `p`,\n/// and an experimentally observed distribution, `p_hat`, both represented as\n/// dense PMFs. `n` is the number of samples taken to construct `p_hat`.\n///\n/// Returns a p-value, `Pr[G(x) >= p-value | H_0: x ~ p]`.\nfn multinomial_test(n: usize, p: ArrayView1<f64>, p_hat: ArrayView1<f64>) -> f64 {\n // want to compute the DOF (nnz of p)\n let nnz = p.fold(0.0, |nnz, &x| nnz + if x > 0.0 { 1.0 } else { 0.0 });\n let dof = nnz - 1.0;\n\n debug_assert_le!(nnz, p.dim() as f64);\n debug_assert_ge!(dof, 1.0);\n\n // impossible to draw p_hat from p\n if !is_pmf_subset(p_hat, p) {\n return 0.0;\n }\n\n let g = g_test(n, p, p_hat);\n let pvalue = 1.0 - chisq_cdf(dof, g);\n\n println!(\n \"multinomial_test: n: {n}, |p|: {}, dof: {dof}, g: {g}, p-value: {pvalue}\",\n p.dim()\n );\n\n pvalue\n}\n\n","id":"https://phlip9.com/notes/statistics probability/multinomial distribution/","title":"multinomial distribution"},"https://phlip9.com/notes/statistics probability/p-value/":{"body":"p-value\n\nsee: https://www.wikiwand.com/en/P-value\n\\[\n\\renewcommand{\\Pr}[1]{\\text{Pr}\\left[ #1 \\right]}\n\\def\\eps{\\varepsilon}\n\\def\\E{\\mathbb{E}}\n\\def\\pv{p\\text{-value}}\n\\]\nOverview\n \n #\n \n\n\n\nThe p-value is a r.v.\nFor a given observation, it's the probability of obtaining observing results at least as \"extreme\" as the currently observed result, given the null hypothesis is correct.\nImagine $f(x)$ is some criterion r.v. which returns the probability of finding more extreme results than some observation $x$. In this case, the null hypothesis is also a distribution which we're assuming $x$ is sampled from.\n\n\\[\n\\pv(x) = p \\in [0, 1] \\;:\\; \\Pr{f(x) \\ge p \\;|\\; x \\sim H_0}\n\\]\n\nUsed in null-hypothesis significance testing.\nDifferent from the transposed conditional probability\n\n\\[\n\\times \\;\\; \\Pr{x \\sim H_0 \\;|\\; f(x) \\ge \\pv}\n\\]\n\\[\n\\begin{align*}\n\t\\Pr{x \\sim H_0 \\;|\\; f(x) \\ge \\pv}\n\t&= \\Pr{f(x) \\ge \\pv \\;|\\; x \\sim H_0} \\cdot \\frac{\\Pr{f(x) \\ge \\pv}}{\\Pr{x \\sim H_0}} \\\\\n\\end{align*}\n\\]\nTraps\n \n #\n \n\n\n\np-value is conditional probability, not probability the null-hypothesis is true nor probability alternative-hypothesis is false.\np-value is only statement about the relation of the observed data to the null-hypothesis.\np-value significance of 0.05 is only convention.\np-value doesn't indicate size or importance of an effect.\n\n","id":"https://phlip9.com/notes/statistics probability/p-value/","title":"p-value"},"https://phlip9.com/notes/statistics probability/standard error/":{"body":"standard error\n\nSource: https://www.wikiwand.com/en/Standard_error\n\\[\n\\def\\E{\\mathbb{E}}\n\\]\nThe standard error of a statistic, is the stddev of its finite-sample distribution.\nImportant: it's read like $stderr(\\phi)$ where $\\phi$ is the statistic under study.\nExample: prob. the most common is the standard error of the mean (SEM), or $\\sigma_{\\mu_x}$, in which case the statistic $\\phi$ is just the sample mean, $\\mu_x$.\n\nThe sample mean has its own mean and variance, separate from the sample population mean and variance.\nImagine we take $n$ samples from the population and record the sample mean. If we repeat this process multiple times, we'll end up with multiple observations of the sample mean. You can see that the sample means will cluster around the true mean, converging to it as $n \\rightarrow \\infty$.\nFortunately, we don't actually have to take $n$ separate samples, since there is a mathematical relation b/w an overall sample's statistic and the standard error of the mean.\n\nExact Value\n \n #\n \n\n\nIf we know $\\sigma$, the standard deviation of the population (which is rarely true), we can exactly compute $\\sigma_{\\mu_x}$:\nLet $x_1, \\ldots, x_n$ be i.i.d. samples, with true standard deviation $\\sigma$. Then the r.v. $\\mu_x = \\E[x]$ will have standard deviation:\n\\[\n\\sigma_{\\mu_x} = \\frac{\\sigma}{\\sqrt{n}}\n\\]\nIntuitively, as we decrease $n$ the number of samples, the sample mean $\\mu_x$ becomes less accurate.\nDerivation\n \n #\n \n\n\nLet $\\Sigma = \\sum_i^n x_i$ be a r.v. for the sum of all i.i.d. samples. The variance $Var(\\Sigma)$ is then\n\\[\nVar(\\Sigma) = Var(x_1) + \\cdots + Var(x_n) = \\sigma^2 + \\cdots + \\sigma^2 = n \\cdot \\sigma^2\n\\]\nRecall that $\\sigma$ is the true population stddev. Next, the sample mean in terms of $\\Sigma$ is\n\\[\n\\mu_x = \\E[x] = \\frac{x_1 + \\cdots + x_n}{n} = \\frac{\\Sigma}{n}\n\\]\nwhich has variance\n\\[\nVar(\\mu_x) = Var(\\frac{\\Sigma}{n}) = \\frac{n \\cdot \\sigma^2}{n^2} = \\frac{\\sigma^2}{n}\n\\]\nand stddev\n\\[\n\\sigma_{\\mu_x} = \\sqrt{Var(\\mu_x)} = \\frac{\\sigma}{\\sqrt{n}}\n\\]\nwhich is our desired value, the standard error of the mean (SEM).\nEstimate\n \n #\n \n\n\nIn the likely event we don't know the true population stddev $\\sigma$, we typically use an estimate of $\\sigma_{\\mu_x}$, which we call $\\hat{\\sigma}_{\\mu_x}$ or also $s_{\\mu_x}$.\nThe typical estimate is just replacing the true pop. stddev $\\sigma$ with our observed sample stddev $\\sigma_x$.\n\\[\n\\sigma_{\\mu_x} \\approx \\hat{\\sigma}_{\\mu_x} = \\frac{\\sigma_x}{\\sqrt{n}}\n\\]\nNote: this is only true iff. the samples are i.i.d. (i.e., uncorrelated). For correlated samples, you gotta use the Markov chain central limit theorem to compute the variance.\nImplications\n \n #\n \n\n\nAs you can see, $\\sigma_{\\mu_x}$ scales inverse quadratically with the number of samples $n$.\n\nRoughly, if you take more samples, the dispersion of the sample mean gets tighter around the true mean.\nIn other words, as we increase the number of samples, our sample mean will converge to the true mean.\nHowever, since this dispersion scales inverse quadratically, we need 4x the number of samples in order to 1/2 the dispersion.\n\n","id":"https://phlip9.com/notes/statistics probability/standard error/","title":"standard error"},"https://phlip9.com/notes/statistics probability/testing whether a coin is fair/":{"body":"testing whether a coin is fair\n\nSource: https://www.wikiwand.com/en/Checking_whether_a_coin_is_fair\n\ngood problem for applying principles of statistical inference\ngood problem for comparing different methods of statistical inference.\n\nfor inference, the key questions\n\nhow many trials should we take?\ngiven some # of trials, how accurate is our estimate of Pr[H]?\n\nmore rigorously, the problem is about determining the parameters of a Bernoulli process given only a limited # of trials.\nthis article covers two methods (of many):\n\n\nPosterior PDF (Bayesian approach)\ninit: true p_H unknown. uncertainty represented by prior distribution. posterior distribution obtained by combining prior and likelihood function (represents information obtained throught the experiment).\np_fair can be obtained by integrating the PDF of the posterior over the \"fair\" masses?\nBayesian approach is biased by prior (which could be good if it's accurate).\n\n\nEstimator of true probability (Frequentist approach)\nassumes experimenter can toss the coin however many times they wish. first, you decide on a desired level of confidence and tolerable margin of error, which give you the minimum number of tosses needed to perform the experiment.\n\n\nPosterior PDF\n \n #\n \n\n\nTODO\nEstimator of true probability\n \n #\n \n\n\nThis method depends on two paramters:\n\n($Z$) the confidence level, given by a Z-value of the standard normal distribution. Recall that $Z = \\frac{\\mu_x - \\mu}{\\sigma_{\\mu_x}}$, i.e., deviation of the sample mean $\\mu_x$ from the population mean $\\mu$, divided by the standard error of the mean $\\sigma_{\\mu_x}$. Intuitively, if the sample mean deviates by exactly \"one sigma\", the Z-value is then 1.0.\n($E$) the maximum acceptable error\n\nSome example $Z$-values:\n$Z$-valueConfidence levelComment\n0.674550.000%\n1.000068.269%$\\sigma$\n1.959995.000%\n3.290599.900%\"three nines\"\n4.000099.993%$4 \\cdot \\sigma$\n4.417299.999%\"five nines\"\n\nLet $r$ be the actual probability of obtaining heads.\nLet $p$ be the estimated probability of obtaining heads.\nHere, we just use the MLE for $p$, i.e., $p = \\frac{h}{h + t}$ with naximum margin of error $E > |p - r|$.\nRecall, the standard error, $s_p$, for the estimate $p$ is:\n$$\ns_p = \\sqrt{\\frac{p \\cdot (1-p)}{n}}\n$$\nThe maximum error is given by $E = Z \\cdot s_p$, but we can simplify this with an approximation:\nNotice that $s_p$ is greatest when $p = (1 - p) = 0.5$. It follows then that $s_p \\le \\sqrt{\\frac{0.5 \\cdot 0.5}{n}} = \\frac{1}{2 \\sqrt{n}}$. Consequently, $E \\le \\frac{Z}{2 \\sqrt{n}}$.\nThe maximum required number of trials $n$ then follows:\n\\[\nn \\le \\frac{Z^2}{4 \\cdot E^2}\n\\]\nExamples\n \n #\n \n\n\n$E$$Z$$n$\n\n0.11.025\n0.12.0100\n0.13.0225\n0.14.0400\n0.15.0625\n\n0.011.02500\n0.012.010000\n0.013.022500\n0.014.040000\n0.015.062500\n\n0.0011.02.50e5\n0.0012.01.00e6\n0.0013.02.25e6\n0.0014.04.00e6\n0.0015.06.25e6\n\nGeneral Case\n \n #\n \n\n\nConsider the distribution of the sample mean, $\\mu_x$, (assuming we took many samples with $n$ trials each). Note the population mean $\\mu$ and the standard error of the mean, $\\sigma_{\\mu_x}$ (the stddev of the sample mean).\n\nOne interesting question is: given a fixed number of trials, say $n = 1000$, what should our maximum tolerated absolute deviation, $E$, be? What is our key parameter for choosing a good $E$?\n\nWe should choose $E$ based on our required confidence. Given that the samples are actually drawn from the population, we want some small probability of failure (or inversely, a large probability of success), where our statistical criterion decides that the samples are not actually drawn from the population.\nUsing the maximum absolute deviation $E$ as a criterion, we will claim the two distributions are not the same if the sample mean $\\mu_x$ lies within the red \"fail\" zone above.\nMore precisely, our failure probability is the probability that $\\mu_x$ is outside of the interval $[\\mu - E, \\mu + E]$:\n\\[\nPr[failure] = Pr[(\\mu_x < \\mu - E) \\cup (\\mu + E < \\mu_x)]\n\\]\nSince the sample mean is normal (law of large numbers), the upper and lower probabilities are identical, so we can simplify as\n\\[\nPr[failure] = 2 \\cdot Pr[\\mu_x < \\mu - E] = 2 \\cdot F_\\mu(\\mu - E)\n\\]\nwhere $F_\\mu$ is the CDF of the normal distribution $N(\\mu, \\sigma_{\\mu_x})$. By normalizing the interval bounds in terms of the standard normal distribution, we can see\n\\[\nPr[failure] = 2 \\cdot \\Phi\\left(\\frac{(\\mu - E) - \\mu}{\\sigma_{\\mu_x}} \\right) = 2 \\cdot \\Phi\\left(\\frac{-E}{\\sigma_{\\mu_x}} \\right)\n\\]\nwhere $\\Phi$ is the CDF of the standard normal distribution. Given a desired $p_f = Pr[failure]$, we can compute the error bounds $E$\n\\[\n\\begin{align*}\n\tp_f &= 2 \\cdot \\Phi\\left(\\frac{-E}{\\sigma_{\\mu_x}} \\right) \\\\\n\t\\frac{-E}{\\sigma_{\\mu_x}} &= \\Phi^{-1}(p_f / 2) \\\\\n\tE &= -\\sigma_{\\mu_x} \\cdot \\Phi^{-1}(p_f / 2) \\\\\n\\end{align*}\n\\]\nOf course, it can be annoying to compute the inverse normal CDF, so it's often useful to frame $p_f$ in terms of the Z-score, or \"standard sigma's from the mean (0)\". There's a convenient table above, showing the Z-value alongside the $1-p_f$ success probability for a few values.\nFor example, if our standard error of the mean is $\\sigma_{\\mu_x} = 50$ and our desired confidence is $\\sigma_{std} = 5.0$, then our error bound is $E = \\sigma_{\\mu_x} \\cdot \\sigma_{std} = 250$.\nIf we take more samples, our SME might only be $\\sigma_{\\mu_x} = 15$. For the same confidence, our required error bounds would only be $E = 75$.\nLikewise, if we decrease our desired confidence to only $\\sigma_{std} = 1.5$ while our $\\sigma_{\\mu_x} = 50$, the required error bounds are also $E = 75$.\nIntuitions\n \n #\n \n\n\n\nTake more samples to allow tighter error tolerance or allow lower required confidence (for the same failure probabilty).\nUsing a very high required confidence can make your absolute error bound very large, which might mean you are not really saying much about the sample distribution.\n\n","id":"https://phlip9.com/notes/statistics probability/testing whether a coin is fair/","title":"testing whether a coin is fair"},"https://phlip9.com/notes/statistics probability/winsorize/":{"body":"winsorize\n\nSource: https://www.wikiwand.com/en/Winsorizing\nCheap way to remove outliers from samples.\n\nTL;DR: winsorize(X, q in [0,0.5]) replaces all elements in X below quantile q and above quantile 1-q with the quantile q and 1-q respectively.\nJust clamps outliers above and below a quantile.\nEffectively removes outliers without changing the number of samples (length of X).\nUsed in cargo's default bench harness when taking timing samples.\n\nExample Implementation\n \n #\n \n\n\nSource: https://github.com/phlip9/idris2-aoc21/blob/master/src/Bench.idr\nimport Data.List\nimport Data.List1\nimport Data.String\nimport Data.Vec\nimport Scratch\nimport System.Clock\nimport System.Random\n\n%default total\n\n||| Clamp `x` to the range `[min, max]`. Assumes `min <= max`.\nclamp : Ord a => (min : a) -> (max : a) -> (x : a) -> a\nclamp min max x = if x > max then max\n else if x < min then min\n else x\n\n||| Linearly interpolate between `x0` and `x1` according to the scale parameter `t`.\n||| For example, `lerp` returns `x0` when `t = 0` and `x1` when `t = 1`.\nlerp : Num a => Neg a => (x0 : a) -> (x1 : a) -> (t : a) -> a\nlerp x0 x1 t = (1 - t) * x0 + (t * x1)\n\n||| Linearly interpolate between `x0` and `x1` then clamp in the range `[x0, x1]`.\n||| Useful for handling scale parameters `t ∉ [0, 1]`\nlerpClamp : Ord a => Num a => Neg a => (x0 : a) -> (x1 : a) -> (t : a) -> a\nlerpClamp x0 x1 t = clamp x0 x1 (lerp x0 x1 t)\n\n||| Truncate a float number returning the whole part. Truncate works\n||| correctly on negative numbers, unlike `floor`.\n||| For example, `trunc 3.58 == 3.0` and `trunc (-4.9) == (-4.0)`\ntrunc : F64 -> F64\ntrunc x = cast {to=F64} $ cast {to=Integer} x\n\n||| Return the fractional part of a float number.\n||| For example, `frac 3.58 == 0.58` and `fract (-4.9) == (-0.9)`\nfract : F64 -> F64\nfract x = x - trunc x\n\ndata Interval a\n = OpenAbove a -- [a ..)\n | OpenBelow a -- (.. a]\n | Closed a a -- [a .. b]\n\n||| Return the fractional index of a list as an `Interval` of the adjacent integer\n||| number entries. A negative index will result in an `OpenBelow` interval while\n||| an index greater than the largest integer index will result in an `OpenAbove`\n||| interval.\nfractIndex : (xs : List1 a) -> (idx : F64) -> Interval a\nfractIndex (x ::: xs) idx = if idx < 0.0 then OpenBelow x\n else go x xs (cast idx)\nwhere\n go : a -> List a -> Nat -> Interval a\n go x [] idx = OpenAbove x\n go x (y :: _) 0 = Closed x y\n go _ (y :: ys) (S idx) = go y ys idx\n\n||| Return the empirical quantile, interpolating between the two adjacent integer\n||| number entries.\n||| Assumes `xs` is sorted. Handles `q ∉ [0, 1]` by returning the min or max\n||| respectively.\nempiricalQuantile : (xs : List1 F64) -> (q : F64) -> F64\nempiricalQuantile xs q\n = let n = cast {to=F64} $ length xs\n idx = (n * q) - 1\n t = fract idx in\n case fractIndex xs idx of\n OpenAbove x => x\n OpenBelow x => x\n Closed x y => lerpClamp x y t\n\n||| Replace elements below/above `q`/`1-q` quantile with the `q`/`1-q` quantile\n||| respectively. Reduces impact of outliers without changing the number of samples.\n|||\n||| Note: assumes xs is sorted\n||| See: https://en.wikipedia.org/wiki/Winsorising\n|||\n||| ### Example\n|||\n||| ```idris2\n||| > winsorize [1.0,2,3,4,5,6,7,8,9,10] 0.25\n||| [2.5 2.5, 3.0, 4.0, 5.0, 6.0, 7.0, 7.5, 7.5, 7.5]\n||| ```\nwinsorize : (xs : List1 F64) -> (q : F64) -> List1 F64\nwinsorize xs q\n = let q = clamp 0.0 1.0 q\n q = if q > 0.5 then 1.0 - q else q\n lo = empiricalQuantile xs q\n hi = empiricalQuantile xs (1.0 - q) in\n map (clamp lo hi) xs\n\nwinsorizeUnsorted : (xs : List1 F64) -> (q : F64) -> List1 F64\nwinsorizeUnsorted xs q = winsorize (sort xs) q\n\n","id":"https://phlip9.com/notes/statistics probability/winsorize/","title":"winsorize"}},"docInfo":{"https://phlip9.com/notes/":{"body":27,"title":1},"https://phlip9.com/notes/AI ML/":{"body":0,"title":2},"https://phlip9.com/notes/AI ML/Expectimax Search/":{"body":479,"title":2},"https://phlip9.com/notes/AI ML/Markov Decision Process (MDP)/":{"body":725,"title":4},"https://phlip9.com/notes/WSL/":{"body":0,"title":1},"https://phlip9.com/notes/WSL/WSL2 custom kernel/":{"body":331,"title":3},"https://phlip9.com/notes/__pub/":{"body":0,"title":1},"https://phlip9.com/notes/android/":{"body":0,"title":1},"https://phlip9.com/notes/android/ADB over TCP inside WSL2/":{"body":248,"title":5},"https://phlip9.com/notes/android/OTA updates for rooted android phone/":{"body":150,"title":5},"https://phlip9.com/notes/android/android cli setup/":{"body":415,"title":3},"https://phlip9.com/notes/android/building signal-android in WSL2/":{"body":1018,"title":4},"https://phlip9.com/notes/android/linux ADB udev setup/":{"body":61,"title":4},"https://phlip9.com/notes/android/root phone with magisk/":{"body":405,"title":3},"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/":{"body":0,"title":17},"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/financial instituion/":{"body":62,"title":2},"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/foreign bank account report (FBAR)/":{"body":365,"title":5},"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/monetary instruments/":{"body":54,"title":2},"https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/money services business (MSB)/":{"body":321,"title":4},"https://phlip9.com/notes/b l o c k c h a i n/":{"body":0,"title":8},"https://phlip9.com/notes/b l o c k c h a i n/aptos/":{"body":27,"title":1},"https://phlip9.com/notes/b l o c k c h a i n/bip158 - compact block filters/":{"body":56,"title":4},"https://phlip9.com/notes/b l o c k c h a i n/btc utreexo - utxo accumulator/":{"body":164,"title":4},"https://phlip9.com/notes/b l o c k c h a i n/fastpay/":{"body":533,"title":1},"https://phlip9.com/notes/b l o c k c h a i n/oasis/":{"body":1501,"title":1},"https://phlip9.com/notes/b l o c k c h a i n/sui/":{"body":25,"title":1},"https://phlip9.com/notes/btc-ln/":{"body":0,"title":2},"https://phlip9.com/notes/btc-ln/BOLT 11 - invoices/":{"body":157,"title":3},"https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/":{"body":1513,"title":5},"https://phlip9.com/notes/btc-ln/BOLT 4 - onion routing protocol/":{"body":157,"title":5},"https://phlip9.com/notes/btc-ln/BOLT 7 - p2p node and channel discovery/":{"body":217,"title":6},"https://phlip9.com/notes/btc-ln/BOLT 8 - secure noise transport/":{"body":106,"title":5},"https://phlip9.com/notes/btc-ln/atomic multipath payments (AMP)/":{"body":275,"title":4},"https://phlip9.com/notes/btc-ln/breez lightning service providers/":{"body":395,"title":4},"https://phlip9.com/notes/btc-ln/hosted channels/":{"body":46,"title":2},"https://phlip9.com/notes/btc-ln/lightning libs/":{"body":86,"title":2},"https://phlip9.com/notes/btc-ln/lightning network notes/":{"body":84,"title":3},"https://phlip9.com/notes/btc-ln/lightning rod/":{"body":94,"title":2},"https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/":{"body":667,"title":3},"https://phlip9.com/notes/btc-ln/submarine swaps/":{"body":250,"title":2},"https://phlip9.com/notes/btc-ln/zero-conf channels/":{"body":92,"title":3},"https://phlip9.com/notes/combinatorics/":{"body":0,"title":1},"https://phlip9.com/notes/combinatorics/k-combinations of a multiset/":{"body":525,"title":3},"https://phlip9.com/notes/confidential computing/":{"body":0,"title":2},"https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/":{"body":1470,"title":3},"https://phlip9.com/notes/confidential computing/fortanix rust tutorial/":{"body":1600,"title":3},"https://phlip9.com/notes/confidential computing/gramine/":{"body":690,"title":1},"https://phlip9.com/notes/confidential computing/intel SGX/":{"body":0,"title":3},"https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/":{"body":2465,"title":2},"https://phlip9.com/notes/confidential computing/intel SGX/overview/":{"body":1217,"title":1},"https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/":{"body":998,"title":2},"https://phlip9.com/notes/confidential computing/intel SGX/sealing/":{"body":1130,"title":1},"https://phlip9.com/notes/confidential computing/intel SGX/secure time/":{"body":405,"title":2},"https://phlip9.com/notes/confidential computing/intel TDX/":{"body":211,"title":2},"https://phlip9.com/notes/confidential computing/marblerun/":{"body":330,"title":1},"https://phlip9.com/notes/confidential computing/mystikos/":{"body":86,"title":1},"https://phlip9.com/notes/confidential computing/remote attestation protocols/":{"body":872,"title":3},"https://phlip9.com/notes/crypto/":{"body":0,"title":1},"https://phlip9.com/notes/crypto/(talk) authenticated data structures for stateless validation/":{"body":215,"title":6},"https://phlip9.com/notes/crypto/TLS self-signed pubkey-only certs/":{"body":116,"title":5},"https://phlip9.com/notes/crypto/acme protocol/":{"body":445,"title":2},"https://phlip9.com/notes/crypto/biscuit authz/":{"body":176,"title":2},"https://phlip9.com/notes/crypto/dex - open-source OIDC & OAuth 2.0 provider/":{"body":55,"title":7},"https://phlip9.com/notes/crypto/hkdf-sha256/":{"body":868,"title":2},"https://phlip9.com/notes/crypto/smallstep - private online CA & ACME server/":{"body":30,"title":6},"https://phlip9.com/notes/crypto/tls exported keying material/":{"body":59,"title":4},"https://phlip9.com/notes/crypto/zkdocs/":{"body":13,"title":1},"https://phlip9.com/notes/design/":{"body":0,"title":1},"https://phlip9.com/notes/design/form design/":{"body":278,"title":2},"https://phlip9.com/notes/devops/":{"body":0,"title":1},"https://phlip9.com/notes/devops/AKS - azure kubernetes service/":{"body":43,"title":4},"https://phlip9.com/notes/devops/algo wireguard VPN server/":{"body":290,"title":4},"https://phlip9.com/notes/devops/azure CLI/":{"body":427,"title":2},"https://phlip9.com/notes/devops/consul/":{"body":138,"title":1},"https://phlip9.com/notes/devops/deployment strategies/":{"body":262,"title":2},"https://phlip9.com/notes/devops/docker compose/":{"body":90,"title":2},"https://phlip9.com/notes/devops/k3s/":{"body":34,"title":1},"https://phlip9.com/notes/devops/kind (kubernetes in docker)/":{"body":28,"title":3},"https://phlip9.com/notes/devops/kubernetes/":{"body":15,"title":1},"https://phlip9.com/notes/devops/linkerd/":{"body":68,"title":1},"https://phlip9.com/notes/devops/minikube/":{"body":19,"title":1},"https://phlip9.com/notes/devops/nomad/":{"body":210,"title":1},"https://phlip9.com/notes/devops/o11y/":{"body":0,"title":1},"https://phlip9.com/notes/devops/o11y/jaeger oss e2e tracing/":{"body":10,"title":4},"https://phlip9.com/notes/devops/secrets/":{"body":0,"title":1},"https://phlip9.com/notes/devops/secrets/1password - secrets automation/":{"body":79,"title":3},"https://phlip9.com/notes/devops/secrets/doppler/":{"body":11,"title":1},"https://phlip9.com/notes/devops/secrets/ejson (Shopify)/":{"body":73,"title":2},"https://phlip9.com/notes/devops/secrets/ejson-kms (AWS)/":{"body":172,"title":3},"https://phlip9.com/notes/devops/secrets/envkey/":{"body":31,"title":1},"https://phlip9.com/notes/devops/secrets/fortanix DSM/":{"body":19,"title":2},"https://phlip9.com/notes/devops/secrets/mozilla SOPS/":{"body":65,"title":2},"https://phlip9.com/notes/devops/secrets/sops-nix/":{"body":12,"title":2},"https://phlip9.com/notes/devops/secrets/sy - share secrets safely/":{"body":34,"title":4},"https://phlip9.com/notes/devops/service mesh/":{"body":171,"title":2},"https://phlip9.com/notes/distributed systems/":{"body":0,"title":2},"https://phlip9.com/notes/distributed systems/papers/":{"body":0,"title":2},"https://phlip9.com/notes/distributed systems/papers/(2020) Semi-Fast Byzantine-tolerant Shared Register without Reliable Broadcast/":{"body":338,"title":10},"https://phlip9.com/notes/distributed systems/papers/(2021) Leaderless Consensus/":{"body":87,"title":3},"https://phlip9.com/notes/distributed systems/the siren song of backpressure/":{"body":669,"title":3},"https://phlip9.com/notes/fuzzing/":{"body":0,"title":1},"https://phlip9.com/notes/fuzzing/bolero - fuzzing + property testing/":{"body":25,"title":4},"https://phlip9.com/notes/fuzzing/fuzzcheck-rs/":{"body":223,"title":2},"https://phlip9.com/notes/fuzzing/fuzzing/":{"body":245,"title":1},"https://phlip9.com/notes/ios/":{"body":0,"title":1},"https://phlip9.com/notes/ios/ios setup/":{"body":144,"title":2},"https://phlip9.com/notes/keyboards/":{"body":0,"title":1},"https://phlip9.com/notes/keyboards/moergo glove80/":{"body":320,"title":2},"https://phlip9.com/notes/lang/":{"body":0,"title":1},"https://phlip9.com/notes/lang/ATS/":{"body":0,"title":1},"https://phlip9.com/notes/lang/ATS/ATS2 Notes/":{"body":2170,"title":2},"https://phlip9.com/notes/lang/ATS/Install ATS2/":{"body":78,"title":2},"https://phlip9.com/notes/lang/flutter/":{"body":0,"title":1},"https://phlip9.com/notes/lang/flutter/dart lang/":{"body":1553,"title":2},"https://phlip9.com/notes/lang/flutter/flutter setup/":{"body":343,"title":2},"https://phlip9.com/notes/lang/gdb ref/":{"body":294,"title":2},"https://phlip9.com/notes/lang/koka-lang/":{"body":87,"title":2},"https://phlip9.com/notes/lang/lua/":{"body":873,"title":1},"https://phlip9.com/notes/lang/operator fixity and precedence/":{"body":443,"title":3},"https://phlip9.com/notes/lang/rust/":{"body":0,"title":1},"https://phlip9.com/notes/lang/rust/optimizing binary size/":{"body":752,"title":3},"https://phlip9.com/notes/lang/rust/rr with rust/":{"body":460,"title":2},"https://phlip9.com/notes/lang/rust/rust verification tools/":{"body":99,"title":3},"https://phlip9.com/notes/lang/rust/rust x SGX/":{"body":22,"title":3},"https://phlip9.com/notes/lang/rust/self-referencing structs/":{"body":9,"title":3},"https://phlip9.com/notes/lang/rust/sycamore x futures/":{"body":99,"title":3},"https://phlip9.com/notes/lang/rust/understanding sycamore reactivity/":{"body":204,"title":3},"https://phlip9.com/notes/management/":{"body":0,"title":1},"https://phlip9.com/notes/management/relieve often - why generals were more successful in WWII/":{"body":176,"title":5},"https://phlip9.com/notes/misc/":{"body":0,"title":1},"https://phlip9.com/notes/misc/arm target triples/":{"body":47,"title":3},"https://phlip9.com/notes/misc/envsubst/":{"body":75,"title":1},"https://phlip9.com/notes/misc/git multirepo to monorepo/":{"body":1083,"title":3},"https://phlip9.com/notes/misc/kintsugi/":{"body":621,"title":1},"https://phlip9.com/notes/misc/optimization solvers/":{"body":111,"title":2},"https://phlip9.com/notes/misc/pop_OS! tweaks/":{"body":122,"title":2},"https://phlip9.com/notes/misc/prepping RPI for embedded dev/":{"body":154,"title":4},"https://phlip9.com/notes/misc/rgbxmas/":{"body":2909,"title":1},"https://phlip9.com/notes/misc/scanning QR codes on desktop/":{"body":13,"title":4},"https://phlip9.com/notes/misc/setting up a headless raspbian boot image/":{"body":335,"title":6},"https://phlip9.com/notes/misc/uptime to downtime conversion/":{"body":28,"title":3},"https://phlip9.com/notes/misc/water distillation setup/":{"body":77,"title":3},"https://phlip9.com/notes/networking/":{"body":0,"title":1},"https://phlip9.com/notes/networking/CIDR/":{"body":374,"title":1},"https://phlip9.com/notes/networking/ipv6 address space/":{"body":234,"title":3},"https://phlip9.com/notes/networking/network interface card (NIC)/":{"body":198,"title":4},"https://phlip9.com/notes/networking/network interfaces/":{"body":1238,"title":2},"https://phlip9.com/notes/nvim/":{"body":0,"title":1},"https://phlip9.com/notes/nvim/universal-ctags Notes/":{"body":66,"title":3},"https://phlip9.com/notes/performance/":{"body":0,"title":1},"https://phlip9.com/notes/performance/bit hacks/":{"body":1976,"title":2},"https://phlip9.com/notes/performance/dtrace on macOS/":{"body":661,"title":2},"https://phlip9.com/notes/performance/profiling/":{"body":85,"title":1},"https://phlip9.com/notes/performance/simdjson talk/":{"body":472,"title":2},"https://phlip9.com/notes/postgres/":{"body":0,"title":1},"https://phlip9.com/notes/postgres/postgres performance tuning/":{"body":213,"title":3},"https://phlip9.com/notes/postgres/snippets/":{"body":205,"title":1},"https://phlip9.com/notes/postgres/types of scans/":{"body":324,"title":2},"https://phlip9.com/notes/reproducible builds/":{"body":0,"title":2},"https://phlip9.com/notes/reproducible builds/earthly/":{"body":838,"title":1},"https://phlip9.com/notes/reproducible builds/nix/":{"body":0,"title":2},"https://phlip9.com/notes/reproducible builds/nix/links/":{"body":174,"title":1},"https://phlip9.com/notes/reproducible builds/nix/nix auto-allocate-uids -> nixbld users/":{"body":178,"title":6},"https://phlip9.com/notes/reproducible builds/nix/nix debug broken package build/":{"body":150,"title":5},"https://phlip9.com/notes/reproducible builds/nix/nix debug spurrious rebuilds/":{"body":167,"title":4},"https://phlip9.com/notes/reproducible builds/rebuilderd/":{"body":103,"title":1},"https://phlip9.com/notes/reproducible builds/reproducible-builds.org/":{"body":226,"title":2},"https://phlip9.com/notes/router/":{"body":0,"title":1},"https://phlip9.com/notes/router/lightning router/":{"body":0,"title":2},"https://phlip9.com/notes/router/lightning router/captive portal/":{"body":0,"title":3},"https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/":{"body":1299,"title":6},"https://phlip9.com/notes/router/lightning router/captive portal/arubanetworks captive portal/":{"body":324,"title":3},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/":{"body":836,"title":3},"https://phlip9.com/notes/router/lightning router/captive portal/captive portal/":{"body":2789,"title":2},"https://phlip9.com/notes/router/lightning router/lightning router overview/":{"body":221,"title":3},"https://phlip9.com/notes/statistics probability/":{"body":0,"title":2},"https://phlip9.com/notes/statistics probability/CDF confidence bands - DKW inequality/":{"body":193,"title":5},"https://phlip9.com/notes/statistics probability/G-test - multinomial goodness-of-fit/":{"body":293,"title":5},"https://phlip9.com/notes/statistics probability/MAD - median absolute deviation/":{"body":28,"title":4},"https://phlip9.com/notes/statistics probability/cheat sheet/":{"body":43,"title":2},"https://phlip9.com/notes/statistics probability/herbie - float error fixer/":{"body":37,"title":4},"https://phlip9.com/notes/statistics probability/kelly criterion + ELO/":{"body":45,"title":3},"https://phlip9.com/notes/statistics probability/multinomial distribution/":{"body":335,"title":2},"https://phlip9.com/notes/statistics probability/p-value/":{"body":131,"title":2},"https://phlip9.com/notes/statistics probability/standard error/":{"body":270,"title":2},"https://phlip9.com/notes/statistics probability/testing whether a coin is fair/":{"body":569,"title":4},"https://phlip9.com/notes/statistics probability/winsorize/":{"body":471,"title":1}},"length":187},"lang":"English"}; \ No newline at end of file diff --git a/site.webmanifest b/site.webmanifest new file mode 100644 index 0000000000..c941f4751a --- /dev/null +++ b/site.webmanifest @@ -0,0 +1,19 @@ +{ + "name": "", + "short_name": "", + "icons": [ + { + "src": "/android-chrome-192x192.png", + "sizes": "192x192", + "type": "image/png" + }, + { + "src": "/android-chrome-512x512.png", + "sizes": "512x512", + "type": "image/png" + } + ], + "theme_color": "#383866", + "background_color": "#1e1e21", + "display": "standalone" +} diff --git a/sitemap.xml b/sitemap.xml new file mode 100644 index 0000000000..4cf7c28989 --- /dev/null +++ b/sitemap.xml @@ -0,0 +1,912 @@ + + + + https://phlip9.com/notes/ + + + https://phlip9.com/notes/AI ML/ + + + https://phlip9.com/notes/AI ML/Expectimax Search/ + 2024-10-21T04:08:44.786612 + + + https://phlip9.com/notes/AI ML/Markov Decision Process (MDP)/ + 2024-10-21T04:08:44.786612 + + + https://phlip9.com/notes/WSL/ + + + https://phlip9.com/notes/WSL/WSL2 custom kernel/ + 2024-10-21T04:08:44.790612 + + + https://phlip9.com/notes/__pub/ + + + https://phlip9.com/notes/android/ + + + https://phlip9.com/notes/android/ADB over TCP inside WSL2/ + 2024-10-21T04:08:44.978615 + + + https://phlip9.com/notes/android/OTA updates for rooted android phone/ + 2024-10-21T04:08:44.978615 + + + https://phlip9.com/notes/android/android cli setup/ + 2024-10-21T04:08:44.978615 + + + https://phlip9.com/notes/android/building signal-android in WSL2/ + 2024-10-21T04:08:44.978615 + + + https://phlip9.com/notes/android/linux ADB udev setup/ + 2024-10-21T04:08:44.978615 + + + https://phlip9.com/notes/android/root phone with magisk/ + 2024-10-21T04:08:44.978615 + + + https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/ + + + https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/financial instituion/ + 2024-10-21T04:08:44.978615 + + + https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/foreign bank account report (FBAR)/ + 2024-10-21T04:08:44.978615 + + + https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/monetary instruments/ + 2024-10-21T04:08:44.978615 + + + https://phlip9.com/notes/b i g m o n e y l a w r e g u l a t i o n/money services business (MSB)/ + 2024-10-21T04:08:44.978615 + + + https://phlip9.com/notes/b l o c k c h a i n/ + + + https://phlip9.com/notes/b l o c k c h a i n/aptos/ + 2024-10-21T04:08:44.978615 + + + https://phlip9.com/notes/b l o c k c h a i n/bip158 - compact block filters/ + 2024-10-21T04:08:44.978615 + + + https://phlip9.com/notes/b l o c k c h a i n/btc utreexo - utxo accumulator/ + 2024-10-21T04:08:44.978615 + + + https://phlip9.com/notes/b l o c k c h a i n/fastpay/ + 2024-10-21T04:08:44.978615 + + + https://phlip9.com/notes/b l o c k c h a i n/oasis/ + 2024-10-21T04:08:44.978615 + + + https://phlip9.com/notes/b l o c k c h a i n/sui/ + 2024-10-21T04:08:44.978615 + + + https://phlip9.com/notes/btc-ln/ + + + https://phlip9.com/notes/btc-ln/BOLT 11 - invoices/ + 2024-10-21T04:08:44.982615 + + + https://phlip9.com/notes/btc-ln/BOLT 2 - channel management protocol/ + 2024-10-21T04:08:44.982615 + + + https://phlip9.com/notes/btc-ln/BOLT 4 - onion routing protocol/ + 2024-10-21T04:08:44.982615 + + + https://phlip9.com/notes/btc-ln/BOLT 7 - p2p node and channel discovery/ + 2024-10-21T04:08:44.982615 + + + https://phlip9.com/notes/btc-ln/BOLT 8 - secure noise transport/ + 2024-10-21T04:08:44.982615 + + + https://phlip9.com/notes/btc-ln/atomic multipath payments (AMP)/ + 2024-10-21T04:08:44.982615 + + + https://phlip9.com/notes/btc-ln/breez lightning service providers/ + 2024-10-21T04:08:44.982615 + + + https://phlip9.com/notes/btc-ln/hosted channels/ + 2024-10-21T04:08:44.982615 + + + https://phlip9.com/notes/btc-ln/lightning libs/ + 2024-10-21T04:08:44.982615 + + + https://phlip9.com/notes/btc-ln/lightning network notes/ + 2024-10-21T04:08:44.982615 + + + https://phlip9.com/notes/btc-ln/lightning rod/ + 2024-10-21T04:08:44.982615 + + + https://phlip9.com/notes/btc-ln/lightningdevkit - rust-lightning/ + 2024-10-21T04:08:44.982615 + + + https://phlip9.com/notes/btc-ln/submarine swaps/ + 2024-10-21T04:08:44.982615 + + + https://phlip9.com/notes/btc-ln/zero-conf channels/ + 2024-10-21T04:08:44.982615 + + + https://phlip9.com/notes/combinatorics/ + + + https://phlip9.com/notes/combinatorics/k-combinations of a multiset/ + 2024-10-21T04:08:44.982615 + + + https://phlip9.com/notes/confidential computing/ + + + https://phlip9.com/notes/confidential computing/enarx (WASM TEE)/ + 2024-10-21T04:08:44.982615 + + + https://phlip9.com/notes/confidential computing/fortanix rust tutorial/ + 2024-10-21T04:08:44.982615 + + + https://phlip9.com/notes/confidential computing/gramine/ + 2024-10-21T04:08:44.982615 + + + https://phlip9.com/notes/confidential computing/intel SGX/ + + + https://phlip9.com/notes/confidential computing/intel SGX/SGX lingo/ + 2024-10-21T04:08:44.982615 + + + https://phlip9.com/notes/confidential computing/intel SGX/overview/ + 2024-10-21T04:08:44.982615 + + + https://phlip9.com/notes/confidential computing/intel SGX/remote attestation/ + 2024-10-21T04:08:44.982615 + + + https://phlip9.com/notes/confidential computing/intel SGX/sealing/ + 2024-10-21T04:08:44.982615 + + + https://phlip9.com/notes/confidential computing/intel SGX/secure time/ + 2024-10-21T04:08:44.982615 + + + https://phlip9.com/notes/confidential computing/intel TDX/ + 2024-10-21T04:08:44.982615 + + + https://phlip9.com/notes/confidential computing/marblerun/ + 2024-10-21T04:08:44.982615 + + + https://phlip9.com/notes/confidential computing/mystikos/ + 2024-10-21T04:08:44.982615 + + + https://phlip9.com/notes/confidential computing/remote attestation protocols/ + 2024-10-21T04:08:44.982615 + + + https://phlip9.com/notes/crypto/ + + + https://phlip9.com/notes/crypto/(talk) authenticated data structures for stateless validation/ + 2024-10-21T04:08:44.982615 + + + https://phlip9.com/notes/crypto/TLS self-signed pubkey-only certs/ + 2024-10-21T04:08:44.982615 + + + https://phlip9.com/notes/crypto/acme protocol/ + 2024-10-21T04:08:44.982615 + + + https://phlip9.com/notes/crypto/biscuit authz/ + 2024-10-21T04:08:44.982615 + + + https://phlip9.com/notes/crypto/dex - open-source OIDC & OAuth 2.0 provider/ + 2024-10-21T04:08:44.982615 + + + https://phlip9.com/notes/crypto/hkdf-sha256/ + 2024-10-21T04:08:44.982615 + + + https://phlip9.com/notes/crypto/smallstep - private online CA & ACME server/ + 2024-10-21T04:08:44.982615 + + + https://phlip9.com/notes/crypto/tls exported keying material/ + 2024-10-21T04:08:44.982615 + + + https://phlip9.com/notes/crypto/zkdocs/ + 2024-10-21T04:08:44.982615 + + + https://phlip9.com/notes/design/ + + + https://phlip9.com/notes/design/form design/ + 2024-10-21T04:08:44.982615 + + + https://phlip9.com/notes/devops/ + + + https://phlip9.com/notes/devops/AKS - azure kubernetes service/ + 2024-10-21T04:08:44.986615 + + + https://phlip9.com/notes/devops/algo wireguard VPN server/ + 2024-10-21T04:08:44.986615 + + + https://phlip9.com/notes/devops/azure CLI/ + 2024-10-21T04:08:44.986615 + + + https://phlip9.com/notes/devops/consul/ + 2024-10-21T04:08:44.986615 + + + https://phlip9.com/notes/devops/deployment strategies/ + 2024-10-21T04:08:44.986615 + + + https://phlip9.com/notes/devops/docker compose/ + 2024-10-21T04:08:44.986615 + + + https://phlip9.com/notes/devops/k3s/ + 2024-10-21T04:08:44.986615 + + + https://phlip9.com/notes/devops/kind (kubernetes in docker)/ + 2024-10-21T04:08:44.986615 + + + https://phlip9.com/notes/devops/kubernetes/ + 2024-10-21T04:08:44.986615 + + + https://phlip9.com/notes/devops/linkerd/ + 2024-10-21T04:08:44.986615 + + + https://phlip9.com/notes/devops/minikube/ + 2024-10-21T04:08:44.986615 + + + https://phlip9.com/notes/devops/nomad/ + 2024-10-21T04:08:44.986615 + + + https://phlip9.com/notes/devops/o11y/ + + + https://phlip9.com/notes/devops/o11y/jaeger oss e2e tracing/ + 2024-10-21T04:08:44.986615 + + + https://phlip9.com/notes/devops/secrets/ + + + https://phlip9.com/notes/devops/secrets/1password - secrets automation/ + 2024-10-21T04:08:44.986615 + + + https://phlip9.com/notes/devops/secrets/doppler/ + 2024-10-21T04:08:44.986615 + + + https://phlip9.com/notes/devops/secrets/ejson (Shopify)/ + 2024-10-21T04:08:44.986615 + + + https://phlip9.com/notes/devops/secrets/ejson-kms (AWS)/ + 2024-10-21T04:08:44.986615 + + + https://phlip9.com/notes/devops/secrets/envkey/ + 2024-10-21T04:08:44.986615 + + + https://phlip9.com/notes/devops/secrets/fortanix DSM/ + 2024-10-21T04:08:44.986615 + + + https://phlip9.com/notes/devops/secrets/mozilla SOPS/ + 2024-10-21T04:08:44.986615 + + + https://phlip9.com/notes/devops/secrets/sops-nix/ + 2024-10-21T04:08:44.986615 + + + https://phlip9.com/notes/devops/secrets/sy - share secrets safely/ + 2024-10-21T04:08:44.986615 + + + https://phlip9.com/notes/devops/service mesh/ + 2024-10-21T04:08:44.986615 + + + https://phlip9.com/notes/distributed systems/ + + + https://phlip9.com/notes/distributed systems/papers/ + + + https://phlip9.com/notes/distributed systems/papers/(2020) Semi-Fast Byzantine-tolerant Shared Register without Reliable Broadcast/ + 2024-10-21T04:08:44.986615 + + + https://phlip9.com/notes/distributed systems/papers/(2021) Leaderless Consensus/ + 2024-10-21T04:08:44.986615 + + + https://phlip9.com/notes/distributed systems/the siren song of backpressure/ + 2024-10-21T04:08:44.986615 + + + https://phlip9.com/notes/fuzzing/ + + + https://phlip9.com/notes/fuzzing/bolero - fuzzing + property testing/ + 2024-10-21T04:08:44.986615 + + + https://phlip9.com/notes/fuzzing/fuzzcheck-rs/ + 2024-10-21T04:08:44.986615 + + + https://phlip9.com/notes/fuzzing/fuzzing/ + 2024-10-21T04:08:44.986615 + + + https://phlip9.com/notes/ios/ + + + https://phlip9.com/notes/ios/ios setup/ + 2024-10-21T04:08:44.986615 + + + https://phlip9.com/notes/keyboards/ + + + https://phlip9.com/notes/keyboards/moergo glove80/ + 2024-10-21T04:08:44.990615 + + + https://phlip9.com/notes/lang/ + + + https://phlip9.com/notes/lang/ATS/ + + + https://phlip9.com/notes/lang/ATS/ATS2 Notes/ + 2024-10-21T04:08:44.990615 + + + https://phlip9.com/notes/lang/ATS/Install ATS2/ + 2024-10-21T04:08:44.990615 + + + https://phlip9.com/notes/lang/flutter/ + + + https://phlip9.com/notes/lang/flutter/dart lang/ + 2024-10-21T04:08:44.990615 + + + https://phlip9.com/notes/lang/flutter/flutter setup/ + 2024-10-21T04:08:44.990615 + + + https://phlip9.com/notes/lang/gdb ref/ + 2024-10-21T04:08:44.990615 + + + https://phlip9.com/notes/lang/koka-lang/ + 2024-10-21T04:08:44.990615 + + + https://phlip9.com/notes/lang/lua/ + 2024-10-21T04:08:44.990615 + + + https://phlip9.com/notes/lang/operator fixity and precedence/ + 2024-10-21T04:08:44.990615 + + + https://phlip9.com/notes/lang/rust/ + + + https://phlip9.com/notes/lang/rust/optimizing binary size/ + 2024-10-21T04:08:44.990615 + + + https://phlip9.com/notes/lang/rust/rr with rust/ + 2024-10-21T04:08:44.990615 + + + https://phlip9.com/notes/lang/rust/rust verification tools/ + 2024-10-21T04:08:44.990615 + + + https://phlip9.com/notes/lang/rust/rust x SGX/ + 2024-10-21T04:08:44.990615 + + + https://phlip9.com/notes/lang/rust/self-referencing structs/ + 2024-10-21T04:08:44.990615 + + + https://phlip9.com/notes/lang/rust/sycamore x futures/ + 2024-10-21T04:08:44.990615 + + + https://phlip9.com/notes/lang/rust/understanding sycamore reactivity/ + 2024-10-21T04:08:44.990615 + + + https://phlip9.com/notes/management/ + + + https://phlip9.com/notes/management/relieve often - why generals were more successful in WWII/ + 2024-10-21T04:08:44.990615 + + + https://phlip9.com/notes/misc/ + + + https://phlip9.com/notes/misc/arm target triples/ + 2024-10-21T04:08:44.994615 + + + https://phlip9.com/notes/misc/envsubst/ + 2024-10-21T04:08:44.994615 + + + https://phlip9.com/notes/misc/git multirepo to monorepo/ + 2024-10-21T04:08:44.994615 + + + https://phlip9.com/notes/misc/kintsugi/ + 2024-10-21T04:08:44.994615 + + + https://phlip9.com/notes/misc/optimization solvers/ + 2024-10-21T04:08:44.994615 + + + https://phlip9.com/notes/misc/pop_OS! tweaks/ + 2024-10-21T04:08:44.994615 + + + https://phlip9.com/notes/misc/prepping RPI for embedded dev/ + 2024-10-21T04:08:44.994615 + + + https://phlip9.com/notes/misc/rgbxmas/ + 2024-10-21T04:08:44.994615 + + + https://phlip9.com/notes/misc/scanning QR codes on desktop/ + 2024-10-21T04:08:44.994615 + + + https://phlip9.com/notes/misc/setting up a headless raspbian boot image/ + 2024-10-21T04:08:44.994615 + + + https://phlip9.com/notes/misc/uptime to downtime conversion/ + 2024-10-21T04:08:44.994615 + + + https://phlip9.com/notes/misc/water distillation setup/ + 2024-10-21T04:08:44.994615 + + + https://phlip9.com/notes/networking/ + + + https://phlip9.com/notes/networking/CIDR/ + 2024-10-21T04:08:44.994615 + + + https://phlip9.com/notes/networking/ipv6 address space/ + 2024-10-21T04:08:44.994615 + + + https://phlip9.com/notes/networking/network interface card (NIC)/ + 2024-10-21T04:08:44.994615 + + + https://phlip9.com/notes/networking/network interfaces/ + 2024-10-21T04:08:44.994615 + + + https://phlip9.com/notes/nvim/ + + + https://phlip9.com/notes/nvim/universal-ctags Notes/ + 2024-10-21T04:08:44.994615 + + + https://phlip9.com/notes/performance/ + + + https://phlip9.com/notes/performance/bit hacks/ + 2024-10-21T04:08:44.994615 + + + https://phlip9.com/notes/performance/dtrace on macOS/ + 2024-10-21T04:08:44.994615 + + + https://phlip9.com/notes/performance/profiling/ + 2024-10-21T04:08:44.994615 + + + https://phlip9.com/notes/performance/simdjson talk/ + 2024-10-21T04:08:44.994615 + + + https://phlip9.com/notes/postgres/ + + + https://phlip9.com/notes/postgres/postgres performance tuning/ + 2024-10-21T04:08:44.994615 + + + https://phlip9.com/notes/postgres/snippets/ + 2024-10-21T04:08:44.994615 + + + https://phlip9.com/notes/postgres/types of scans/ + 2024-10-21T04:08:44.994615 + + + https://phlip9.com/notes/reproducible builds/ + + + https://phlip9.com/notes/reproducible builds/earthly/ + 2024-10-21T04:08:44.994615 + + + https://phlip9.com/notes/reproducible builds/nix/ + + + https://phlip9.com/notes/reproducible builds/nix/links/ + 2024-10-21T04:08:44.994615 + + + https://phlip9.com/notes/reproducible builds/nix/nix auto-allocate-uids -> nixbld users/ + 2024-10-21T04:08:44.994615 + + + https://phlip9.com/notes/reproducible builds/nix/nix debug broken package build/ + 2024-10-21T04:08:44.994615 + + + https://phlip9.com/notes/reproducible builds/nix/nix debug spurrious rebuilds/ + 2024-10-21T04:08:44.994615 + + + https://phlip9.com/notes/reproducible builds/rebuilderd/ + 2024-10-21T04:08:44.998615 + + + https://phlip9.com/notes/reproducible builds/reproducible-builds.org/ + 2024-10-21T04:08:44.998615 + + + https://phlip9.com/notes/router/ + + + https://phlip9.com/notes/router/lightning router/ + + + https://phlip9.com/notes/router/lightning router/captive portal/ + + + https://phlip9.com/notes/router/lightning router/captive portal/RFC 6585 (Additional HTTP Status Codes)/ + 2024-10-21T04:08:44.998615 + + + https://phlip9.com/notes/router/lightning router/captive portal/arubanetworks captive portal/ + 2024-10-21T04:08:44.998615 + + + https://phlip9.com/notes/router/lightning router/captive portal/captive portal (wikipedia)/ + 2024-10-21T04:08:44.998615 + + + https://phlip9.com/notes/router/lightning router/captive portal/captive portal/ + 2024-10-21T04:08:44.998615 + + + https://phlip9.com/notes/router/lightning router/lightning router overview/ + 2024-10-21T04:08:44.998615 + + + https://phlip9.com/notes/statistics probability/ + + + https://phlip9.com/notes/statistics probability/CDF confidence bands - DKW inequality/ + 2024-10-21T04:08:44.998615 + + + https://phlip9.com/notes/statistics probability/G-test - multinomial goodness-of-fit/ + 2024-10-21T04:08:44.998615 + + + https://phlip9.com/notes/statistics probability/MAD - median absolute deviation/ + 2024-10-21T04:08:44.998615 + + + https://phlip9.com/notes/statistics probability/cheat sheet/ + 2024-10-21T04:08:44.998615 + + + https://phlip9.com/notes/statistics probability/herbie - float error fixer/ + 2024-10-21T04:08:44.998615 + + + https://phlip9.com/notes/statistics probability/kelly criterion + ELO/ + 2024-10-21T04:08:44.998615 + + + https://phlip9.com/notes/statistics probability/multinomial distribution/ + 2024-10-21T04:08:44.998615 + + + https://phlip9.com/notes/statistics probability/p-value/ + 2024-10-21T04:08:44.998615 + + + https://phlip9.com/notes/statistics probability/standard error/ + 2024-10-21T04:08:44.998615 + + + https://phlip9.com/notes/statistics probability/testing whether a coin is fair/ + 2024-10-21T04:08:44.998615 + + + https://phlip9.com/notes/statistics probability/winsorize/ + 2024-10-21T04:08:44.998615 + + + https://phlip9.com/notes/tags/ + + + https://phlip9.com/notes/tags/algebraic-effects/ + + + https://phlip9.com/notes/tags/android/ + + + https://phlip9.com/notes/tags/aptos/ + + + https://phlip9.com/notes/tags/ats/ + + + https://phlip9.com/notes/tags/azure/ + + + https://phlip9.com/notes/tags/bash/ + + + https://phlip9.com/notes/tags/blockchain/ + + + https://phlip9.com/notes/tags/breez/ + + + https://phlip9.com/notes/tags/btc/ + + + https://phlip9.com/notes/tags/captive-portal/ + + + https://phlip9.com/notes/tags/circuitpython/ + + + https://phlip9.com/notes/tags/combinatorics/ + + + https://phlip9.com/notes/tags/confidential-computing/ + + + https://phlip9.com/notes/tags/containers/ + + + https://phlip9.com/notes/tags/crypto/ + + + https://phlip9.com/notes/tags/dart/ + + + https://phlip9.com/notes/tags/devops/ + + + https://phlip9.com/notes/tags/diem/ + + + https://phlip9.com/notes/tags/distributed-systems/ + + + https://phlip9.com/notes/tags/docker/ + + + https://phlip9.com/notes/tags/earthly/ + + + https://phlip9.com/notes/tags/fastpay/ + + + https://phlip9.com/notes/tags/flutter/ + + + https://phlip9.com/notes/tags/fortanix-edp/ + + + https://phlip9.com/notes/tags/fuzzing/ + + + https://phlip9.com/notes/tags/git/ + + + https://phlip9.com/notes/tags/glove80/ + + + https://phlip9.com/notes/tags/gramine/ + + + https://phlip9.com/notes/tags/hashicorp/ + + + https://phlip9.com/notes/tags/ios/ + + + https://phlip9.com/notes/tags/ipv6/ + + + https://phlip9.com/notes/tags/k3s/ + + + https://phlip9.com/notes/tags/keyboards/ + + + https://phlip9.com/notes/tags/kubernetes/ + + + https://phlip9.com/notes/tags/ldk/ + + + https://phlip9.com/notes/tags/libos/ + + + https://phlip9.com/notes/tags/lightning/ + + + https://phlip9.com/notes/tags/linkerd/ + + + https://phlip9.com/notes/tags/lsp/ + + + https://phlip9.com/notes/tags/marble-run/ + + + https://phlip9.com/notes/tags/minikube/ + + + https://phlip9.com/notes/tags/mysten/ + + + https://phlip9.com/notes/tags/mystikos/ + + + https://phlip9.com/notes/tags/networking/ + + + https://phlip9.com/notes/tags/nix/ + + + https://phlip9.com/notes/tags/noise/ + + + https://phlip9.com/notes/tags/nomad/ + + + https://phlip9.com/notes/tags/orchestration/ + + + https://phlip9.com/notes/tags/perf/ + + + https://phlip9.com/notes/tags/pki/ + + + https://phlip9.com/notes/tags/postgres/ + + + https://phlip9.com/notes/tags/property-testing/ + + + https://phlip9.com/notes/tags/regulation/ + + + https://phlip9.com/notes/tags/reproducible-builds/ + + + https://phlip9.com/notes/tags/root/ + + + https://phlip9.com/notes/tags/rust/ + + + https://phlip9.com/notes/tags/service-mesh/ + + + https://phlip9.com/notes/tags/sgx/ + + + https://phlip9.com/notes/tags/simd/ + + + https://phlip9.com/notes/tags/sql/ + + + https://phlip9.com/notes/tags/ssh/ + + + https://phlip9.com/notes/tags/sycamore/ + + + https://phlip9.com/notes/tags/tax/ + + + https://phlip9.com/notes/tags/tls/ + + + https://phlip9.com/notes/tags/tracing/ + + diff --git a/statistics probability/CDF confidence bands - DKW inequality/index.html b/statistics probability/CDF confidence bands - DKW inequality/index.html new file mode 100644 index 0000000000..f11aee7aa5 --- /dev/null +++ b/statistics probability/CDF confidence bands - DKW inequality/index.html @@ -0,0 +1,94 @@ +CDF confidence bands - DKW inequality | philip's notes

                                                                                CDF confidence bands - DKW inequality

                                                                                2022-03-08 · 2 min read

                                                                                  \[ \renewcommand{\Pr}[1]{\text{Pr}\left[ #1 \right]} \def\eps{\varepsilon} \]

                                                                                  Overview #

                                                                                  Let's say I have a well known distribution defined by a CDF $F(x)$. I also sample an empirical CDF $F_n(x)$ from a population. Given some confidence parameter, the DKW Inequality bounds how close a random ECDF $F_n(x)$ will be to the true CDF from which the samples are drawn.

                                                                                  Inequality #

                                                                                  The inequality itself states the probability that the Kolmogorov-Smirnov Statistic violates some bound (the K-S statistic is just $||F_n(x) - F(x)||_{\text{max}}$)

                                                                                  \[ \Pr{\sup_{x} \; \Bigl|F_n(x) - F(x)\Bigr| > \eps} \le 2 e^{-2 n \eps^2} \qquad \text{for every } \eps > 0. \]

                                                                                  Note: there is an extended inequality for a multivariate $F$. The bound changes from $2 e^{(\cdots)}$ to $2k \, e^{(\cdots)}$, where $k$ is the vector dimension.

                                                                                  CDF Confidence Bands #

                                                                                  We can use the DKW Inequality to produce a "band" around our true CDF that must contain our empirical CDF with some confidence probability.

                                                                                  With a failure probability $\alpha$, our sampled ECDF will sit outside the interval

                                                                                  \[ \Bigl[ F(x) - \eps,\; F(x) + \eps \Bigr] \qquad \text{where } \eps = \sqrt{\frac{\ln \frac{2}{\alpha}}{2n}} \]

                                                                                  Pros #

                                                                                  1. allows us to contain the entire CDF with a single band value.
                                                                                  2. non-parametric - requires no assumptions about the sample distribution.

                                                                                  Cons #

                                                                                  1. provides weak guarantees at the tails, tighter bounds around the median
                                                                                  2. pointwise approaches (what?) can provide tighter bounds at each individual value
                                                                                  3. non-parametric - provides weaker bounds than others with more assumptions.

                                                                                  Example Bounds #

                                                                                  $n$$\alpha$$\eps$
                                                                                  100.10.38702275602049496
                                                                                  100.010.5146997846583985
                                                                                  100.0010.6164779987778186
                                                                                  1000.10.12238734153404082
                                                                                  1000.010.16276236307187292
                                                                                  1000.0010.19494746035204052
                                                                                  10000.10.038702275602049495
                                                                                  10000.010.05146997846583985
                                                                                  10000.0010.06164779987778186
                                                                                  100000.10.012238734153404082
                                                                                  100000.010.016276236307187292
                                                                                  100000.0010.019494746035204052
                                                                                  200000.10.008654091913011426
                                                                                  200000.010.011509037065006824
                                                                                  200000.0010.013784867119002347
                                                                                  1. DKW Inequality (wikiwand)
                                                                                  2. ENS PSL Fact Sheet 1: DKW Inequality
                                                                                  3. On the tight constant in the multivariate DKW Inequality
                                                                                  4. Kolmogorov-Smirnov Statistic (wikiwand)
                                                                                  \ No newline at end of file diff --git a/statistics probability/G-test - multinomial goodness-of-fit/index.html b/statistics probability/G-test - multinomial goodness-of-fit/index.html new file mode 100644 index 0000000000..a35c618289 --- /dev/null +++ b/statistics probability/G-test - multinomial goodness-of-fit/index.html @@ -0,0 +1,168 @@ +G-test - multinomial goodness-of-fit | philip's notes

                                                                                  G-test - multinomial goodness-of-fit

                                                                                  2022-03-08 · 3 min read

                                                                                    \[ \def\Chi{\mathcal{X}} \]

                                                                                    Overview #

                                                                                    • $G$ is a test-statistic. Asymptotically the same as the $\Chi^2$ test-statistic.
                                                                                    • Used for goodness-of-fit test b/w observed and hypothesized multinomial distributions.
                                                                                    • We use the $\Chi^2$ distribution to compute our desired $G$ threshold from a given $p$-value.
                                                                                    • It's a log-likelihood ratio. Closely related to KL-divergence and $\Chi^2$ statistic.

                                                                                    Test Statistic #

                                                                                    In terms of observed counts, $O_i \ge 0$, and expected counts, $E_i > 0$

                                                                                    \[ G = 2 \sum_i O_i \cdot \ln\Bigl( \frac{O_i}{E_i} \Bigr) \]

                                                                                    In terms of probabilities $\hat{p}_i$ and $p_i$ (estimated and expected resp.) and number of samples $n$:

                                                                                    \[ \begin{align*} G &= 2 \sum_i \hat{p}_i \cdot n \cdot \ln\Bigl( \frac{\hat{p}_i \cdot n}{p_i \cdot n} \Bigr) \\ &= 2 \sum_i \hat{p}_i \cdot n \cdot \ln\Bigl( \frac{\hat{p}_i}{p_i} \Bigr) \\ &= 2 n \sum_i \hat{p}_i \cdot \ln\Bigl( \frac{\hat{p}_i}{p_i} \Bigr) \\ &= 2 \, n \; D_{\text{KL}}(\hat{p} \;||\; p) \end{align*} \]

                                                                                    where $D_{\text{KL}}(\hat{p} \;||\; p)$ is the Kullback-Leibler divergence.

                                                                                    Example Implementation #

                                                                                    Source: https://github.com/phlip9/kcddice/blob/master/kcddice/src/stats.rs

                                                                                    use claim::{debug_assert_ge, debug_assert_le};
                                                                                    +use ndarray::{ArrayView1, Zip};
                                                                                    +use statrs::distribution::{ChiSquared, ContinuousCDF};
                                                                                    +
                                                                                    +const EPS: f64 = 1e-10;
                                                                                    +
                                                                                    +/// Return true iff `supp(p) ⊆ supp(q)` for dense PMFs `p` and `q`.
                                                                                    +fn is_pmf_subset(p: ArrayView1<f64>, q: ArrayView1<f64>) -> bool {
                                                                                    +    Zip::from(p).and(q).all(|&p_i, &q_i| {
                                                                                    +        // A = (q_i == 0.0)
                                                                                    +        // B = (p_i == 0.0)
                                                                                    +        // (A ==> B) <==> (¬A ∨ B)
                                                                                    +        (q_i > 0.0) || (p_i <= 0.0)
                                                                                    +    })
                                                                                    +}
                                                                                    +
                                                                                    +/// Compute the [KL-divergence](https://www.wikiwand.com/en/Kullback%E2%80%93Leibler_divergence).
                                                                                    +/// between dense PMFs `p` and `q`.
                                                                                    +///
                                                                                    +/// `D_{KL}(p || q) = \sum_i p_i * \ln(p_i / q_i)`
                                                                                    +///
                                                                                    +/// Note: p's support must be a strict subset of q's support!
                                                                                    +///       this is also referred to as the "absolute continuity" assumption,
                                                                                    +///       where `q_i = 0` implies `p_i = 0`.
                                                                                    +fn kl_divergence(p: ArrayView1<f64>, q: ArrayView1<f64>) -> f64 {
                                                                                    +    // caller should check this before
                                                                                    +    debug_assert!(is_pmf_subset(p, q));
                                                                                    +
                                                                                    +    Zip::from(p)
                                                                                    +        .and(q)
                                                                                    +        .fold(0.0, |sum, &p_i, &q_i| sum + kl_div_term(p_i, q_i))
                                                                                    +}
                                                                                    +
                                                                                    +#[inline]
                                                                                    +fn kl_div_term(p_i: f64, q_i: f64) -> f64 {
                                                                                    +    if q_i > EPS {
                                                                                    +        if p_i > EPS {
                                                                                    +            p_i * (p_i / q_i).ln()
                                                                                    +        } else {
                                                                                    +            0.0
                                                                                    +        }
                                                                                    +    } else {
                                                                                    +        if p_i > EPS {
                                                                                    +            debug_assert!(false);
                                                                                    +            f64::INFINITY
                                                                                    +        } else {
                                                                                    +            0.0
                                                                                    +        }
                                                                                    +    }
                                                                                    +}
                                                                                    +
                                                                                    +/// The G-test statistic.
                                                                                    +///
                                                                                    +/// * Used for comparing observed multinomial distribution with expected
                                                                                    +///   hypothesis multinomial distribution.
                                                                                    +/// * Asmyptotically approximates chi^2-test statistic.
                                                                                    +///
                                                                                    +/// `n`: the number of samples
                                                                                    +/// `p`: the expected PMF
                                                                                    +/// `p_hat`: the observed PMF
                                                                                    +///
                                                                                    +/// G-test: https://www.wikiwand.com/en/G-test
                                                                                    +fn g_test(n: usize, p: ArrayView1<f64>, p_hat: ArrayView1<f64>) -> f64 {
                                                                                    +    (n as f64) * (2.0 * kl_divergence(p_hat, p))
                                                                                    +}
                                                                                    +

                                                                                    See also: https://github.com/msberends/AMR/blob/main/R/g.test.R

                                                                                    \ No newline at end of file diff --git a/statistics probability/MAD - median absolute deviation/index.html b/statistics probability/MAD - median absolute deviation/index.html new file mode 100644 index 0000000000..9ca603af68 --- /dev/null +++ b/statistics probability/MAD - median absolute deviation/index.html @@ -0,0 +1,94 @@ +MAD - median absolute deviation | philip's notes

                                                                                    MAD - median absolute deviation

                                                                                    2022-03-15 · 1 min read

                                                                                      Wikiwand: https://www.wikiwand.com/en/Median_absolute_deviation

                                                                                      R Docs: https://www.rdocumentation.org/packages/stats/versions/3.6.2/topics/mad

                                                                                      MAD is a measure of statistical dispersion (like stddev) but is more resilient to outliers

                                                                                      MAD = median(abs(X - median(X)))

                                                                                      stddev_estimate = k * MAD

                                                                                      for normally distributed data, k = 1.4826

                                                                                      \ No newline at end of file diff --git a/statistics probability/cheat sheet/index.html b/statistics probability/cheat sheet/index.html new file mode 100644 index 0000000000..ef517d914f --- /dev/null +++ b/statistics probability/cheat sheet/index.html @@ -0,0 +1,91 @@ +cheat sheet | philip's notes

                                                                                      cheat sheet

                                                                                      2022-03-12 · 1 min read

                                                                                        \[ \renewcommand{\Pr}[1]{\text{Pr}\left[ #1 \right]} \]

                                                                                        Law of Total Probability #

                                                                                        \[ \begin{align*} \Pr{A} &= \sum_n \Pr{A,\, B_n} \\ &= \sum_n \Pr{A \;|\; B_n} \cdot \Pr{B_n} \\ \\ \Pr{A \;|\; C} &= \sum_n \Pr{A \;|\; C,\, B_n} \cdot \Pr{B_n \;|\; C} \\ &= \sum_n \Pr{A \;|\; C,\, B_n} \cdot \Pr{B_n} \qquad \text{(if $B_n$ and $C$ indep.)} \end{align*} \]
                                                                                        \ No newline at end of file diff --git a/statistics probability/herbie - float error fixer/index.html b/statistics probability/herbie - float error fixer/index.html new file mode 100644 index 0000000000..306183debe --- /dev/null +++ b/statistics probability/herbie - float error fixer/index.html @@ -0,0 +1,94 @@ +herbie - float error fixer | philip's notes

                                                                                        herbie - float error fixer

                                                                                        2023-11-15 · 1 min read

                                                                                          Find and fix floating-point problems: #

                                                                                          sqrt(x+1) - sqrt(x)1/(sqrt(x+1) + sqrt(x))

                                                                                          Herbie detects inaccurate expressions and finds more accurate replacements. The red expression is inaccurate when x > 1; Herbie's replacement, in blue, is accurate for all x.

                                                                                          \ No newline at end of file diff --git a/statistics probability/index.html b/statistics probability/index.html new file mode 100644 index 0000000000..f40f2f3664 --- /dev/null +++ b/statistics probability/index.html @@ -0,0 +1,73 @@ +statistics probability | philip's notes

                                                                                          statistics probability

                                                                                          cheat sheet →

                                                                                          2022-03-12 · 1 min read

                                                                                          herbie - float error fixer →

                                                                                          2023-11-15 · 1 min read

                                                                                          kelly criterion + ELO →

                                                                                          2021-12-15 · 1 min read

                                                                                          multinomial distribution →

                                                                                          2022-03-08 · 3 min read

                                                                                          p-value →

                                                                                          2022-03-09 · 2 min read

                                                                                          standard error →

                                                                                          2022-03-07 · 3 min read

                                                                                          testing whether a coin is fair →

                                                                                          2022-03-06 · 6 min read

                                                                                          winsorize →

                                                                                          2022-03-15 · 3 min read

                                                                                          \ No newline at end of file diff --git a/statistics probability/kelly criterion + ELO/index.html b/statistics probability/kelly criterion + ELO/index.html new file mode 100644 index 0000000000..5ce2f6f5b3 --- /dev/null +++ b/statistics probability/kelly criterion + ELO/index.html @@ -0,0 +1,95 @@ +kelly criterion + ELO | philip's notes

                                                                                          kelly criterion + ELO

                                                                                          2021-12-15 · 1 min read

                                                                                            Q = lambda r: 10**(r/400)
                                                                                            +E = lambda r1, r2: Q(r1) / (Q(r1) + Q(r2))
                                                                                            +K = lambda p, b: p - (1 - p) / b
                                                                                            +A = lambda P, E_g, E_o, Y: print("Y: %d, N: %d" % (P * K(E(E_g, E_o), (1 / Y) - 1), P * K(1 - E(E_g, E_o), (1 / (1 - Y)) - 1)))
                                                                                            +
                                                                                            \ No newline at end of file diff --git a/statistics probability/multinomial distribution/index.html b/statistics probability/multinomial distribution/index.html new file mode 100644 index 0000000000..2c02749f1d --- /dev/null +++ b/statistics probability/multinomial distribution/index.html @@ -0,0 +1,123 @@ +multinomial distribution | philip's notes

                                                                                            multinomial distribution

                                                                                            2022-03-08 · 3 min read

                                                                                              \[ \renewcommand{\Pr}[1]{\text{Pr}\left[ #1 \right]} \def\eps{\varepsilon} \def\E{\mathbb{E}} \]

                                                                                              Example #

                                                                                              You have a k-sided, weighted die. The weight each face $i = 1, \ldots, k$ is $p_i$. You roll the die $n$ times. The distribution of faces rolled will follow a Multinomial Distribution.

                                                                                              Overview #

                                                                                              PropertyValue
                                                                                              Parameters$n > 0$ number of trials, $p_1, \ldots, p_k$ event probabilities, where $\sum_{i} p_i = n$
                                                                                              Support$i \in \set{1, \ldots, k}, ; x_i \in \set{0, \ldots, k}, \text{ with } \sum_i x_i = n$
                                                                                              PMF$\Pr{X = \set{x_1, \ldots, x_k}} = \frac{n!}{x_1! \cdots x_n!} p_1^{x_1} \cdots p_k^{x_k}$
                                                                                              Mean$\E[X_i] = n \cdot p_i$
                                                                                              Variance$Var(X_i) = n p_i (1 - p_i), ; Cov(X_i, X_j) = -n p_i p_j ; (i \ne j)$

                                                                                              Statistical Inference #

                                                                                              Equivalence Tests #

                                                                                              Ostrovski 2017 - Testing equivalence of multinomial distributions

                                                                                              Wikiwand - Multinomial Test

                                                                                              Resin 2021 - A Simple Algorithm for Exact Multinomial Tests

                                                                                              Goodness-of-fit Tests #

                                                                                              Ideally, we could use an exact test, where we check if the observed counts $X$ lie in some failure region (according to some criterion) with some confidence probability $p_{significance}$, for example. The criterion will claim the $X$ is not the same as our hypothesized distribution if $X$ lies in the failure region. We choose the size of our failure region based on our initial choice of confidence (greater required confidence implies greater sized failure region).

                                                                                              \[ p_{significance} = \sum_{X \;\in\; \text{region}} \text{multinomial-pmf}(X) \]

                                                                                              Unfortunately, the multinomial CDF and PMF have an absurdly huge support for any non-trivial $n$ and $k$, and we need to calculate the CDF by just exhaustively computing the joint probabilities, which makes this approach computationally infeasible, since any non-trivial region is just too big. :'(

                                                                                              Instead, we need derived random variables, called test statistics, which are more mathematically convenient or more computationally tractable, and compare their observed values against the failure regions projected into the test-statistic's distribution.

                                                                                              G-test - multinomial goodness-of-fit

                                                                                              Wikiwand - Pearson's chi-squared test

                                                                                              Wikiwand - G-test / log-likelihood ratio test

                                                                                              Example Implementation #

                                                                                              Using g_test defined in G-test - multinomial goodness-of-fit > Example Implementation.

                                                                                              use claim::{debug_assert_ge, debug_assert_le};
                                                                                              +use ndarray::ArrayView1;
                                                                                              +use statrs::distribution::{ChiSquared, ContinuousCDF};
                                                                                              +
                                                                                              +/// A goodness-of-fit test between a hypothesized multinomial distribution, `p`,
                                                                                              +/// and an experimentally observed distribution, `p_hat`, both represented as
                                                                                              +/// dense PMFs. `n` is the number of samples taken to construct `p_hat`.
                                                                                              +///
                                                                                              +/// Returns a p-value, `Pr[G(x) >= p-value | H_0: x ~ p]`.
                                                                                              +fn multinomial_test(n: usize, p: ArrayView1<f64>, p_hat: ArrayView1<f64>) -> f64 {
                                                                                              +    // want to compute the DOF (nnz of p)
                                                                                              +    let nnz = p.fold(0.0, |nnz, &x| nnz + if x > 0.0 { 1.0 } else { 0.0 });
                                                                                              +    let dof = nnz - 1.0;
                                                                                              +
                                                                                              +    debug_assert_le!(nnz, p.dim() as f64);
                                                                                              +    debug_assert_ge!(dof, 1.0);
                                                                                              +
                                                                                              +    // impossible to draw p_hat from p
                                                                                              +    if !is_pmf_subset(p_hat, p) {
                                                                                              +        return 0.0;
                                                                                              +    }
                                                                                              +
                                                                                              +    let g = g_test(n, p, p_hat);
                                                                                              +    let pvalue = 1.0 - chisq_cdf(dof, g);
                                                                                              +
                                                                                              +    println!(
                                                                                              +        "multinomial_test: n: {n}, |p|: {}, dof: {dof}, g: {g}, p-value: {pvalue}",
                                                                                              +        p.dim()
                                                                                              +    );
                                                                                              +
                                                                                              +    pvalue
                                                                                              +}
                                                                                              +
                                                                                              \ No newline at end of file diff --git a/statistics probability/p-value/index.html b/statistics probability/p-value/index.html new file mode 100644 index 0000000000..d9d7360040 --- /dev/null +++ b/statistics probability/p-value/index.html @@ -0,0 +1,94 @@ +p-value | philip's notes

                                                                                              p-value

                                                                                              2022-03-09 · 2 min read

                                                                                                see: https://www.wikiwand.com/en/P-value

                                                                                                \[ \renewcommand{\Pr}[1]{\text{Pr}\left[ #1 \right]} \def\eps{\varepsilon} \def\E{\mathbb{E}} \def\pv{p\text{-value}} \]

                                                                                                Overview #

                                                                                                • The p-value is a r.v.
                                                                                                • For a given observation, it's the probability of obtaining observing results at least as "extreme" as the currently observed result, given the null hypothesis is correct.
                                                                                                • Imagine $f(x)$ is some criterion r.v. which returns the probability of finding more extreme results than some observation $x$. In this case, the null hypothesis is also a distribution which we're assuming $x$ is sampled from.
                                                                                                \[ \pv(x) = p \in [0, 1] \;:\; \Pr{f(x) \ge p \;|\; x \sim H_0} \]
                                                                                                • Used in null-hypothesis significance testing.
                                                                                                • Different from the transposed conditional probability
                                                                                                \[ \times \;\; \Pr{x \sim H_0 \;|\; f(x) \ge \pv} \] \[ \begin{align*} \Pr{x \sim H_0 \;|\; f(x) \ge \pv} &= \Pr{f(x) \ge \pv \;|\; x \sim H_0} \cdot \frac{\Pr{f(x) \ge \pv}}{\Pr{x \sim H_0}} \\ \end{align*} \]

                                                                                                Traps #

                                                                                                1. p-value is conditional probability, not probability the null-hypothesis is true nor probability alternative-hypothesis is false.
                                                                                                2. p-value is only statement about the relation of the observed data to the null-hypothesis.
                                                                                                3. p-value significance of 0.05 is only convention.
                                                                                                4. p-value doesn't indicate size or importance of an effect.
                                                                                                \ No newline at end of file diff --git a/statistics probability/standard error/index.html b/statistics probability/standard error/index.html new file mode 100644 index 0000000000..bff3498901 --- /dev/null +++ b/statistics probability/standard error/index.html @@ -0,0 +1,91 @@ +standard error | philip's notes

                                                                                                standard error

                                                                                                2022-03-07 · 3 min read

                                                                                                  Source: https://www.wikiwand.com/en/Standard_error

                                                                                                  \[ \def\E{\mathbb{E}} \]

                                                                                                  The standard error of a statistic, is the stddev of its finite-sample distribution.

                                                                                                  Important: it's read like $stderr(\phi)$ where $\phi$ is the statistic under study.

                                                                                                  Example: prob. the most common is the standard error of the mean (SEM), or $\sigma_{\mu_x}$, in which case the statistic $\phi$ is just the sample mean, $\mu_x$.

                                                                                                  • The sample mean has its own mean and variance, separate from the sample population mean and variance.
                                                                                                  • Imagine we take $n$ samples from the population and record the sample mean. If we repeat this process multiple times, we'll end up with multiple observations of the sample mean. You can see that the sample means will cluster around the true mean, converging to it as $n \rightarrow \infty$.
                                                                                                  • Fortunately, we don't actually have to take $n$ separate samples, since there is a mathematical relation b/w an overall sample's statistic and the standard error of the mean.

                                                                                                  Exact Value #

                                                                                                  If we know $\sigma$, the standard deviation of the population (which is rarely true), we can exactly compute $\sigma_{\mu_x}$:

                                                                                                  Let $x_1, \ldots, x_n$ be i.i.d. samples, with true standard deviation $\sigma$. Then the r.v. $\mu_x = \E[x]$ will have standard deviation:

                                                                                                  \[ \sigma_{\mu_x} = \frac{\sigma}{\sqrt{n}} \]

                                                                                                  Intuitively, as we decrease $n$ the number of samples, the sample mean $\mu_x$ becomes less accurate.

                                                                                                  Derivation #

                                                                                                  Let $\Sigma = \sum_i^n x_i$ be a r.v. for the sum of all i.i.d. samples. The variance $Var(\Sigma)$ is then

                                                                                                  \[ Var(\Sigma) = Var(x_1) + \cdots + Var(x_n) = \sigma^2 + \cdots + \sigma^2 = n \cdot \sigma^2 \]

                                                                                                  Recall that $\sigma$ is the true population stddev. Next, the sample mean in terms of $\Sigma$ is

                                                                                                  \[ \mu_x = \E[x] = \frac{x_1 + \cdots + x_n}{n} = \frac{\Sigma}{n} \]

                                                                                                  which has variance

                                                                                                  \[ Var(\mu_x) = Var(\frac{\Sigma}{n}) = \frac{n \cdot \sigma^2}{n^2} = \frac{\sigma^2}{n} \]

                                                                                                  and stddev

                                                                                                  \[ \sigma_{\mu_x} = \sqrt{Var(\mu_x)} = \frac{\sigma}{\sqrt{n}} \]

                                                                                                  which is our desired value, the standard error of the mean (SEM).

                                                                                                  Estimate #

                                                                                                  In the likely event we don't know the true population stddev $\sigma$, we typically use an estimate of $\sigma_{\mu_x}$, which we call $\hat{\sigma}_{\mu_x}$ or also $s_{\mu_x}$.

                                                                                                  The typical estimate is just replacing the true pop. stddev $\sigma$ with our observed sample stddev $\sigma_x$.

                                                                                                  \[ \sigma_{\mu_x} \approx \hat{\sigma}_{\mu_x} = \frac{\sigma_x}{\sqrt{n}} \]

                                                                                                  Note: this is only true iff. the samples are i.i.d. (i.e., uncorrelated). For correlated samples, you gotta use the Markov chain central limit theorem to compute the variance.

                                                                                                  Implications #

                                                                                                  As you can see, $\sigma_{\mu_x}$ scales inverse quadratically with the number of samples $n$.

                                                                                                  • Roughly, if you take more samples, the dispersion of the sample mean gets tighter around the true mean.
                                                                                                  • In other words, as we increase the number of samples, our sample mean will converge to the true mean.
                                                                                                  • However, since this dispersion scales inverse quadratically, we need 4x the number of samples in order to 1/2 the dispersion.
                                                                                                  \ No newline at end of file diff --git a/statistics probability/testing whether a coin is fair/index.html b/statistics probability/testing whether a coin is fair/index.html new file mode 100644 index 0000000000..0037559eec --- /dev/null +++ b/statistics probability/testing whether a coin is fair/index.html @@ -0,0 +1,91 @@ +testing whether a coin is fair | philip's notes

                                                                                                  testing whether a coin is fair

                                                                                                  2022-03-06 · 6 min read

                                                                                                    Source: https://www.wikiwand.com/en/Checking_whether_a_coin_is_fair

                                                                                                    • good problem for applying principles of statistical inference
                                                                                                    • good problem for comparing different methods of statistical inference.

                                                                                                    for inference, the key questions

                                                                                                    1. how many trials should we take?
                                                                                                    2. given some # of trials, how accurate is our estimate of Pr[H]?

                                                                                                    more rigorously, the problem is about determining the parameters of a Bernoulli process given only a limited # of trials.

                                                                                                    this article covers two methods (of many):

                                                                                                    1. Posterior PDF (Bayesian approach)

                                                                                                      init: true p_H unknown. uncertainty represented by prior distribution. posterior distribution obtained by combining prior and likelihood function (represents information obtained throught the experiment).

                                                                                                      p_fair can be obtained by integrating the PDF of the posterior over the "fair" masses?

                                                                                                      Bayesian approach is biased by prior (which could be good if it's accurate).

                                                                                                    2. Estimator of true probability (Frequentist approach)

                                                                                                      assumes experimenter can toss the coin however many times they wish. first, you decide on a desired level of confidence and tolerable margin of error, which give you the minimum number of tosses needed to perform the experiment.

                                                                                                    Posterior PDF #

                                                                                                    TODO

                                                                                                    Estimator of true probability #

                                                                                                    This method depends on two paramters:

                                                                                                    1. ($Z$) the confidence level, given by a Z-value of the standard normal distribution. Recall that $Z = \frac{\mu_x - \mu}{\sigma_{\mu_x}}$, i.e., deviation of the sample mean $\mu_x$ from the population mean $\mu$, divided by the standard error of the mean $\sigma_{\mu_x}$. Intuitively, if the sample mean deviates by exactly "one sigma", the Z-value is then 1.0.
                                                                                                    2. ($E$) the maximum acceptable error

                                                                                                    Some example $Z$-values:
                                                                                                    $Z$-valueConfidence levelComment
                                                                                                    0.674550.000%
                                                                                                    1.000068.269%$\sigma$
                                                                                                    1.959995.000%
                                                                                                    3.290599.900%"three nines"
                                                                                                    4.000099.993%$4 \cdot \sigma$
                                                                                                    4.417299.999%"five nines"

                                                                                                    Let $r$ be the actual probability of obtaining heads. Let $p$ be the estimated probability of obtaining heads.

                                                                                                    Here, we just use the MLE for $p$, i.e., $p = \frac{h}{h + t}$ with naximum margin of error $E > |p - r|$.

                                                                                                    Recall, the standard error, $s_p$, for the estimate $p$ is: $$ s_p = \sqrt{\frac{p \cdot (1-p)}{n}} $$

                                                                                                    The maximum error is given by $E = Z \cdot s_p$, but we can simplify this with an approximation:

                                                                                                    Notice that $s_p$ is greatest when $p = (1 - p) = 0.5$. It follows then that $s_p \le \sqrt{\frac{0.5 \cdot 0.5}{n}} = \frac{1}{2 \sqrt{n}}$. Consequently, $E \le \frac{Z}{2 \sqrt{n}}$.

                                                                                                    The maximum required number of trials $n$ then follows:

                                                                                                    \[ n \le \frac{Z^2}{4 \cdot E^2} \]

                                                                                                    Examples #

                                                                                                    $E$$Z$$n$
                                                                                                    0.11.025
                                                                                                    0.12.0100
                                                                                                    0.13.0225
                                                                                                    0.14.0400
                                                                                                    0.15.0625
                                                                                                    0.011.02500
                                                                                                    0.012.010000
                                                                                                    0.013.022500
                                                                                                    0.014.040000
                                                                                                    0.015.062500
                                                                                                    0.0011.02.50e5
                                                                                                    0.0012.01.00e6
                                                                                                    0.0013.02.25e6
                                                                                                    0.0014.04.00e6
                                                                                                    0.0015.06.25e6

                                                                                                    General Case #

                                                                                                    Consider the distribution of the sample mean, $\mu_x$, (assuming we took many samples with $n$ trials each). Note the population mean $\mu$ and the standard error of the mean, $\sigma_{\mu_x}$ (the stddev of the sample mean).

                                                                                                    standard error of the mean.png

                                                                                                    One interesting question is: given a fixed number of trials, say $n = 1000$, what should our maximum tolerated absolute deviation, $E$, be? What is our key parameter for choosing a good $E$?

                                                                                                    standard error of the mean(1).png

                                                                                                    We should choose $E$ based on our required confidence. Given that the samples are actually drawn from the population, we want some small probability of failure (or inversely, a large probability of success), where our statistical criterion decides that the samples are not actually drawn from the population.

                                                                                                    Using the maximum absolute deviation $E$ as a criterion, we will claim the two distributions are not the same if the sample mean $\mu_x$ lies within the red "fail" zone above.

                                                                                                    More precisely, our failure probability is the probability that $\mu_x$ is outside of the interval $[\mu - E, \mu + E]$:

                                                                                                    \[ Pr[failure] = Pr[(\mu_x < \mu - E) \cup (\mu + E < \mu_x)] \]

                                                                                                    Since the sample mean is normal (law of large numbers), the upper and lower probabilities are identical, so we can simplify as

                                                                                                    \[ Pr[failure] = 2 \cdot Pr[\mu_x < \mu - E] = 2 \cdot F_\mu(\mu - E) \]

                                                                                                    where $F_\mu$ is the CDF of the normal distribution $N(\mu, \sigma_{\mu_x})$. By normalizing the interval bounds in terms of the standard normal distribution, we can see

                                                                                                    \[ Pr[failure] = 2 \cdot \Phi\left(\frac{(\mu - E) - \mu}{\sigma_{\mu_x}} \right) = 2 \cdot \Phi\left(\frac{-E}{\sigma_{\mu_x}} \right) \]

                                                                                                    where $\Phi$ is the CDF of the standard normal distribution. Given a desired $p_f = Pr[failure]$, we can compute the error bounds $E$

                                                                                                    \[ \begin{align*} p_f &= 2 \cdot \Phi\left(\frac{-E}{\sigma_{\mu_x}} \right) \\ \frac{-E}{\sigma_{\mu_x}} &= \Phi^{-1}(p_f / 2) \\ E &= -\sigma_{\mu_x} \cdot \Phi^{-1}(p_f / 2) \\ \end{align*} \]

                                                                                                    Of course, it can be annoying to compute the inverse normal CDF, so it's often useful to frame $p_f$ in terms of the Z-score, or "standard sigma's from the mean (0)". There's a convenient table above, showing the Z-value alongside the $1-p_f$ success probability for a few values.

                                                                                                    For example, if our standard error of the mean is $\sigma_{\mu_x} = 50$ and our desired confidence is $\sigma_{std} = 5.0$, then our error bound is $E = \sigma_{\mu_x} \cdot \sigma_{std} = 250$.

                                                                                                    If we take more samples, our SME might only be $\sigma_{\mu_x} = 15$. For the same confidence, our required error bounds would only be $E = 75$.

                                                                                                    Likewise, if we decrease our desired confidence to only $\sigma_{std} = 1.5$ while our $\sigma_{\mu_x} = 50$, the required error bounds are also $E = 75$.

                                                                                                    Intuitions #

                                                                                                    • Take more samples to allow tighter error tolerance or allow lower required confidence (for the same failure probabilty).
                                                                                                    • Using a very high required confidence can make your absolute error bound very large, which might mean you are not really saying much about the sample distribution.
                                                                                                    \ No newline at end of file diff --git a/statistics probability/winsorize/index.html b/statistics probability/winsorize/index.html new file mode 100644 index 0000000000..9eabf0f89f --- /dev/null +++ b/statistics probability/winsorize/index.html @@ -0,0 +1,182 @@ +winsorize | philip's notes

                                                                                                    winsorize

                                                                                                    2022-03-15 · 3 min read

                                                                                                      Source: https://www.wikiwand.com/en/Winsorizing

                                                                                                      Cheap way to remove outliers from samples.

                                                                                                      • TL;DR: winsorize(X, q in [0,0.5]) replaces all elements in X below quantile q and above quantile 1-q with the quantile q and 1-q respectively.
                                                                                                      • Just clamps outliers above and below a quantile.
                                                                                                      • Effectively removes outliers without changing the number of samples (length of X).
                                                                                                      • Used in cargo's default bench harness when taking timing samples.

                                                                                                      Example Implementation #

                                                                                                      Source: https://github.com/phlip9/idris2-aoc21/blob/master/src/Bench.idr

                                                                                                      import Data.List
                                                                                                      +import Data.List1
                                                                                                      +import Data.String
                                                                                                      +import Data.Vec
                                                                                                      +import Scratch
                                                                                                      +import System.Clock
                                                                                                      +import System.Random
                                                                                                      +
                                                                                                      +%default total
                                                                                                      +
                                                                                                      +||| Clamp `x` to the range `[min, max]`. Assumes `min <= max`.
                                                                                                      +clamp : Ord a => (min : a) -> (max : a) -> (x : a) -> a
                                                                                                      +clamp min max x = if x > max then max
                                                                                                      +                  else if x < min then min
                                                                                                      +                  else x
                                                                                                      +
                                                                                                      +||| Linearly interpolate between `x0` and `x1` according to the scale parameter `t`.
                                                                                                      +||| For example, `lerp` returns `x0` when `t = 0` and `x1` when `t = 1`.
                                                                                                      +lerp : Num a => Neg a => (x0 : a) -> (x1 : a) -> (t : a) -> a
                                                                                                      +lerp x0 x1 t = (1 - t) * x0 + (t * x1)
                                                                                                      +
                                                                                                      +||| Linearly interpolate between `x0` and `x1` then clamp in the range `[x0, x1]`.
                                                                                                      +||| Useful for handling scale parameters `t ∉ [0, 1]`
                                                                                                      +lerpClamp : Ord a => Num a => Neg a => (x0 : a) -> (x1 : a) -> (t : a) -> a
                                                                                                      +lerpClamp x0 x1 t = clamp x0 x1 (lerp x0 x1 t)
                                                                                                      +
                                                                                                      +||| Truncate a float number returning the whole part. Truncate works
                                                                                                      +||| correctly on negative numbers, unlike `floor`.
                                                                                                      +||| For example, `trunc 3.58 == 3.0` and `trunc (-4.9) == (-4.0)`
                                                                                                      +trunc : F64 -> F64
                                                                                                      +trunc x = cast {to=F64} $ cast {to=Integer} x
                                                                                                      +
                                                                                                      +||| Return the fractional part of a float number.
                                                                                                      +||| For example, `frac 3.58 == 0.58` and `fract (-4.9) == (-0.9)`
                                                                                                      +fract : F64 -> F64
                                                                                                      +fract x = x - trunc x
                                                                                                      +
                                                                                                      +data Interval a
                                                                                                      +  = OpenAbove a -- [a ..)
                                                                                                      +  | OpenBelow a -- (.. a]
                                                                                                      +  | Closed a a -- [a .. b]
                                                                                                      +
                                                                                                      +||| Return the fractional index of a list as an `Interval` of the adjacent integer
                                                                                                      +||| number entries. A negative index will result in an `OpenBelow` interval while
                                                                                                      +||| an index greater than the largest integer index will result in an `OpenAbove`
                                                                                                      +||| interval.
                                                                                                      +fractIndex : (xs : List1 a) -> (idx : F64) -> Interval a
                                                                                                      +fractIndex (x ::: xs) idx = if idx < 0.0 then OpenBelow x
                                                                                                      +                            else go x xs (cast idx)
                                                                                                      +where
                                                                                                      +  go : a -> List a -> Nat -> Interval a
                                                                                                      +  go x [] idx = OpenAbove x
                                                                                                      +  go x (y :: _) 0 = Closed x y
                                                                                                      +  go _ (y :: ys) (S idx) = go y ys idx
                                                                                                      +
                                                                                                      +||| Return the empirical quantile, interpolating between the two adjacent integer
                                                                                                      +||| number entries.
                                                                                                      +||| Assumes `xs` is sorted. Handles `q ∉ [0, 1]` by returning the min or max
                                                                                                      +||| respectively.
                                                                                                      +empiricalQuantile : (xs : List1 F64) -> (q : F64) -> F64
                                                                                                      +empiricalQuantile xs q
                                                                                                      +  = let n = cast {to=F64} $ length xs
                                                                                                      +        idx = (n * q) - 1
                                                                                                      +        t = fract idx in
                                                                                                      +        case fractIndex xs idx of
                                                                                                      +             OpenAbove x => x
                                                                                                      +             OpenBelow x => x
                                                                                                      +             Closed x y => lerpClamp x y t
                                                                                                      +
                                                                                                      +||| Replace elements below/above `q`/`1-q` quantile with the `q`/`1-q` quantile
                                                                                                      +||| respectively. Reduces impact of outliers without changing the number of samples.
                                                                                                      +|||
                                                                                                      +||| Note: assumes xs is sorted
                                                                                                      +||| See: https://en.wikipedia.org/wiki/Winsorising
                                                                                                      +|||
                                                                                                      +||| ### Example
                                                                                                      +|||
                                                                                                      +||| ```idris2
                                                                                                      +||| > winsorize [1.0,2,3,4,5,6,7,8,9,10] 0.25
                                                                                                      +||| [2.5 2.5, 3.0, 4.0, 5.0, 6.0, 7.0, 7.5, 7.5, 7.5]
                                                                                                      +||| ```
                                                                                                      +winsorize : (xs : List1 F64) -> (q : F64) -> List1 F64
                                                                                                      +winsorize xs q
                                                                                                      +  = let q = clamp 0.0 1.0 q
                                                                                                      +        q = if q > 0.5 then 1.0 - q else q
                                                                                                      +        lo = empiricalQuantile xs q
                                                                                                      +        hi = empiricalQuantile xs (1.0 - q) in
                                                                                                      +        map (clamp lo hi) xs
                                                                                                      +
                                                                                                      +winsorizeUnsorted : (xs : List1 F64) -> (q : F64) -> List1 F64
                                                                                                      +winsorizeUnsorted xs q = winsorize (sort xs) q
                                                                                                      +
                                                                                                      \ No newline at end of file diff --git a/tags/algebraic-effects/index.html b/tags/algebraic-effects/index.html new file mode 100644 index 0000000000..752b1044da --- /dev/null +++ b/tags/algebraic-effects/index.html @@ -0,0 +1,71 @@ +#algebraic-effects | philip's notes

                                                                                                      #algebraic-effects

                                                                                                      koka-lang →

                                                                                                      2021-12-31 · 1 min read

                                                                                                      \ No newline at end of file diff --git a/tags/android/index.html b/tags/android/index.html new file mode 100644 index 0000000000..dddb733494 --- /dev/null +++ b/tags/android/index.html @@ -0,0 +1,68 @@ +#android | philip's notes

                                                                                                      #android

                                                                                                      android cli setup →

                                                                                                      2022-12-02 · 4 min read

                                                                                                      flutter setup →

                                                                                                      2022-12-02 · 3 min read

                                                                                                      root phone with magisk →

                                                                                                      2022-01-15 · 4 min read

                                                                                                      \ No newline at end of file diff --git a/tags/aptos/index.html b/tags/aptos/index.html new file mode 100644 index 0000000000..ca6ab47a87 --- /dev/null +++ b/tags/aptos/index.html @@ -0,0 +1,68 @@ +#aptos | philip's notes

                                                                                                      #aptos

                                                                                                      aptos →

                                                                                                      2022-04-06 · 1 min read

                                                                                                      \ No newline at end of file diff --git a/tags/ats/index.html b/tags/ats/index.html new file mode 100644 index 0000000000..f26f1fa7f0 --- /dev/null +++ b/tags/ats/index.html @@ -0,0 +1,68 @@ +#ats | philip's notes

                                                                                                      #ats

                                                                                                      ATS2 Notes →

                                                                                                      2022-01-17 · 17 min read

                                                                                                      Install ATS2 →

                                                                                                      2022-01-11 · 1 min read

                                                                                                      \ No newline at end of file diff --git a/tags/azure/index.html b/tags/azure/index.html new file mode 100644 index 0000000000..f0d1707859 --- /dev/null +++ b/tags/azure/index.html @@ -0,0 +1,68 @@ +#azure | philip's notes

                                                                                                      #azure

                                                                                                      AKS - azure kubernetes service →

                                                                                                      2022-03-25 · 1 min read

                                                                                                      azure CLI →

                                                                                                      2022-02-18 · 4 min read

                                                                                                      \ No newline at end of file diff --git a/tags/bash/index.html b/tags/bash/index.html new file mode 100644 index 0000000000..fa72a8a232 --- /dev/null +++ b/tags/bash/index.html @@ -0,0 +1,68 @@ +#bash | philip's notes

                                                                                                      #bash

                                                                                                      envsubst →

                                                                                                      2022-10-28 · 1 min read

                                                                                                      \ No newline at end of file diff --git a/tags/blockchain/index.html b/tags/blockchain/index.html new file mode 100644 index 0000000000..663e914981 --- /dev/null +++ b/tags/blockchain/index.html @@ -0,0 +1,68 @@ +#blockchain | philip's notes

                                                                                                      #blockchain

                                                                                                      oasis →

                                                                                                      2022-04-14 · 13 min read

                                                                                                      aptos →

                                                                                                      2022-04-06 · 1 min read

                                                                                                      fastpay →

                                                                                                      2022-04-06 · 4 min read

                                                                                                      sui →

                                                                                                      2022-04-06 · 1 min read

                                                                                                      \ No newline at end of file diff --git a/tags/breez/index.html b/tags/breez/index.html new file mode 100644 index 0000000000..575c766398 --- /dev/null +++ b/tags/breez/index.html @@ -0,0 +1,68 @@ +#breez | philip's notes

                                                                                                      #breez

                                                                                                      \ No newline at end of file diff --git a/tags/btc/index.html b/tags/btc/index.html new file mode 100644 index 0000000000..d779ec4c2c --- /dev/null +++ b/tags/btc/index.html @@ -0,0 +1,68 @@ +#btc | philip's notes

                                                                                                      #btc

                                                                                                      bip158 - compact block filters →

                                                                                                      2022-09-16 · 1 min read

                                                                                                      btc utreexo - utxo accumulator →

                                                                                                      2022-09-16 · 2 min read

                                                                                                      \ No newline at end of file diff --git a/tags/captive-portal/index.html b/tags/captive-portal/index.html new file mode 100644 index 0000000000..99be978fca --- /dev/null +++ b/tags/captive-portal/index.html @@ -0,0 +1,71 @@ +#captive-portal | philip's notes

                                                                                                      #captive-portal

                                                                                                      arubanetworks captive portal →

                                                                                                      2021-12-02 · 3 min read

                                                                                                      captive portal (wikipedia) →

                                                                                                      2021-12-02 · 10 min read

                                                                                                      captive portal →

                                                                                                      2021-12-02 · 23 min read

                                                                                                      \ No newline at end of file diff --git a/tags/circuitpython/index.html b/tags/circuitpython/index.html new file mode 100644 index 0000000000..5c65e22aa7 --- /dev/null +++ b/tags/circuitpython/index.html @@ -0,0 +1,68 @@ +#circuitpython | philip's notes

                                                                                                      #circuitpython

                                                                                                      rgbxmas →

                                                                                                      2022-12-21 · 21 min read

                                                                                                      \ No newline at end of file diff --git a/tags/combinatorics/index.html b/tags/combinatorics/index.html new file mode 100644 index 0000000000..329750f118 --- /dev/null +++ b/tags/combinatorics/index.html @@ -0,0 +1,68 @@ +#combinatorics | philip's notes

                                                                                                      #combinatorics

                                                                                                      k-combinations of a multiset →

                                                                                                      2022-02-08 · 5 min read

                                                                                                      \ No newline at end of file diff --git a/tags/confidential-computing/index.html b/tags/confidential-computing/index.html new file mode 100644 index 0000000000..f71b52f4c7 --- /dev/null +++ b/tags/confidential-computing/index.html @@ -0,0 +1,71 @@ +#confidential-computing | philip's notes

                                                                                                      #confidential-computing

                                                                                                      remote attestation protocols →

                                                                                                      2022-05-15 · 8 min read

                                                                                                      sealing →

                                                                                                      2022-04-14 · 9 min read

                                                                                                      SGX lingo →

                                                                                                      2022-04-12 · 21 min read

                                                                                                      remote attestation →

                                                                                                      2022-04-12 · 10 min read

                                                                                                      marblerun →

                                                                                                      2022-03-29 · 3 min read

                                                                                                      gramine →

                                                                                                      2022-03-26 · 5 min read

                                                                                                      enarx (WASM TEE) →

                                                                                                      2022-02-17 · 13 min read

                                                                                                      fortanix rust tutorial →

                                                                                                      2022-02-17 · 12 min read

                                                                                                      intel TDX →

                                                                                                      2022-02-17 · 2 min read

                                                                                                      rust x SGX →

                                                                                                      2022-02-17 · 1 min read

                                                                                                      overview →

                                                                                                      2022-02-13 · 12 min read

                                                                                                      \ No newline at end of file diff --git a/tags/containers/index.html b/tags/containers/index.html new file mode 100644 index 0000000000..20a2785975 --- /dev/null +++ b/tags/containers/index.html @@ -0,0 +1,68 @@ +#containers | philip's notes

                                                                                                      #containers

                                                                                                      docker compose →

                                                                                                      2022-03-25 · 1 min read

                                                                                                      \ No newline at end of file diff --git a/tags/crypto/index.html b/tags/crypto/index.html new file mode 100644 index 0000000000..858c8520a9 --- /dev/null +++ b/tags/crypto/index.html @@ -0,0 +1,68 @@ +#crypto | philip's notes

                                                                                                      #crypto

                                                                                                      hkdf-sha256 →

                                                                                                      2022-11-18 · 7 min read

                                                                                                      remote attestation protocols →

                                                                                                      2022-05-15 · 8 min read

                                                                                                      zkdocs →

                                                                                                      2022-05-06 · 1 min read

                                                                                                      \ No newline at end of file diff --git a/tags/dart/index.html b/tags/dart/index.html new file mode 100644 index 0000000000..afe4c5b680 --- /dev/null +++ b/tags/dart/index.html @@ -0,0 +1,68 @@ +#dart | philip's notes

                                                                                                      #dart

                                                                                                      dart lang →

                                                                                                      2022-12-05 · 12 min read

                                                                                                      \ No newline at end of file diff --git a/tags/devops/index.html b/tags/devops/index.html new file mode 100644 index 0000000000..1445afbc89 --- /dev/null +++ b/tags/devops/index.html @@ -0,0 +1,68 @@ +#devops | philip's notes

                                                                                                      #devops

                                                                                                      kind (kubernetes in docker) →

                                                                                                      2022-04-25 · 1 min read

                                                                                                      jaeger oss e2e tracing →

                                                                                                      2022-04-06 · 1 min read

                                                                                                      consul →

                                                                                                      2022-03-29 · 1 min read

                                                                                                      AKS - azure kubernetes service →

                                                                                                      2022-03-25 · 1 min read

                                                                                                      deployment strategies →

                                                                                                      2022-03-25 · 2 min read

                                                                                                      k3s →

                                                                                                      2022-03-25 · 1 min read

                                                                                                      linkerd →

                                                                                                      2022-03-25 · 1 min read

                                                                                                      minikube →

                                                                                                      2022-03-25 · 1 min read

                                                                                                      nomad →

                                                                                                      2022-03-25 · 2 min read

                                                                                                      service mesh →

                                                                                                      2022-03-25 · 2 min read

                                                                                                      \ No newline at end of file diff --git a/tags/diem/index.html b/tags/diem/index.html new file mode 100644 index 0000000000..38980ea058 --- /dev/null +++ b/tags/diem/index.html @@ -0,0 +1,68 @@ +#diem | philip's notes

                                                                                                      #diem

                                                                                                      aptos →

                                                                                                      2022-04-06 · 1 min read

                                                                                                      the siren song of backpressure →

                                                                                                      2021-06-02 · 6 min read

                                                                                                      \ No newline at end of file diff --git a/tags/distributed-systems/index.html b/tags/distributed-systems/index.html new file mode 100644 index 0000000000..84845d08ae --- /dev/null +++ b/tags/distributed-systems/index.html @@ -0,0 +1,71 @@ +#distributed-systems | philip's notes

                                                                                                      #distributed-systems

                                                                                                      the siren song of backpressure →

                                                                                                      2021-06-02 · 6 min read

                                                                                                      \ No newline at end of file diff --git a/tags/docker/index.html b/tags/docker/index.html new file mode 100644 index 0000000000..6dc20e198a --- /dev/null +++ b/tags/docker/index.html @@ -0,0 +1,68 @@ +#docker | philip's notes

                                                                                                      #docker

                                                                                                      kind (kubernetes in docker) →

                                                                                                      2022-04-25 · 1 min read

                                                                                                      earthly →

                                                                                                      2022-04-05 · 7 min read

                                                                                                      mystikos →

                                                                                                      2022-03-26 · 1 min read

                                                                                                      docker compose →

                                                                                                      2022-03-25 · 1 min read

                                                                                                      \ No newline at end of file diff --git a/tags/earthly/index.html b/tags/earthly/index.html new file mode 100644 index 0000000000..1964c8ae4f --- /dev/null +++ b/tags/earthly/index.html @@ -0,0 +1,68 @@ +#earthly | philip's notes

                                                                                                      #earthly

                                                                                                      earthly →

                                                                                                      2022-04-05 · 7 min read

                                                                                                      \ No newline at end of file diff --git a/tags/fastpay/index.html b/tags/fastpay/index.html new file mode 100644 index 0000000000..c3d5bf9a4e --- /dev/null +++ b/tags/fastpay/index.html @@ -0,0 +1,68 @@ +#fastpay | philip's notes

                                                                                                      #fastpay

                                                                                                      fastpay →

                                                                                                      2022-04-06 · 4 min read

                                                                                                      sui →

                                                                                                      2022-04-06 · 1 min read

                                                                                                      \ No newline at end of file diff --git a/tags/flutter/index.html b/tags/flutter/index.html new file mode 100644 index 0000000000..484838b14b --- /dev/null +++ b/tags/flutter/index.html @@ -0,0 +1,68 @@ +#flutter | philip's notes

                                                                                                      #flutter

                                                                                                      dart lang →

                                                                                                      2022-12-05 · 12 min read

                                                                                                      flutter setup →

                                                                                                      2022-12-02 · 3 min read

                                                                                                      \ No newline at end of file diff --git a/tags/fortanix-edp/index.html b/tags/fortanix-edp/index.html new file mode 100644 index 0000000000..cec27f08b7 --- /dev/null +++ b/tags/fortanix-edp/index.html @@ -0,0 +1,71 @@ +#fortanix-edp | philip's notes

                                                                                                      #fortanix-edp

                                                                                                      fortanix rust tutorial →

                                                                                                      2022-02-17 · 12 min read

                                                                                                      \ No newline at end of file diff --git a/tags/fuzzing/index.html b/tags/fuzzing/index.html new file mode 100644 index 0000000000..5c95a84346 --- /dev/null +++ b/tags/fuzzing/index.html @@ -0,0 +1,68 @@ +#fuzzing | philip's notes

                                                                                                      #fuzzing

                                                                                                      fuzzcheck-rs →

                                                                                                      2022-08-21 · 2 min read

                                                                                                      fuzzing →

                                                                                                      2022-03-29 · 4 min read

                                                                                                      \ No newline at end of file diff --git a/tags/git/index.html b/tags/git/index.html new file mode 100644 index 0000000000..7bf7f944f2 --- /dev/null +++ b/tags/git/index.html @@ -0,0 +1,68 @@ +#git | philip's notes

                                                                                                      #git

                                                                                                      git multirepo to monorepo →

                                                                                                      2022-08-16 · 9 min read

                                                                                                      \ No newline at end of file diff --git a/tags/glove80/index.html b/tags/glove80/index.html new file mode 100644 index 0000000000..f58d4325e1 --- /dev/null +++ b/tags/glove80/index.html @@ -0,0 +1,68 @@ +#glove80 | philip's notes

                                                                                                      #glove80

                                                                                                      moergo glove80 →

                                                                                                      2023-08-28 · 3 min read

                                                                                                      \ No newline at end of file diff --git a/tags/gramine/index.html b/tags/gramine/index.html new file mode 100644 index 0000000000..f5327f17ee --- /dev/null +++ b/tags/gramine/index.html @@ -0,0 +1,68 @@ +#gramine | philip's notes

                                                                                                      #gramine

                                                                                                      gramine →

                                                                                                      2022-03-26 · 5 min read

                                                                                                      \ No newline at end of file diff --git a/tags/hashicorp/index.html b/tags/hashicorp/index.html new file mode 100644 index 0000000000..9ef9dc352e --- /dev/null +++ b/tags/hashicorp/index.html @@ -0,0 +1,68 @@ +#hashicorp | philip's notes

                                                                                                      #hashicorp

                                                                                                      consul →

                                                                                                      2022-03-29 · 1 min read

                                                                                                      nomad →

                                                                                                      2022-03-25 · 2 min read

                                                                                                      \ No newline at end of file diff --git a/tags/index.html b/tags/index.html new file mode 100644 index 0000000000..dd92e5675d --- /dev/null +++ b/tags/index.html @@ -0,0 +1,50 @@ +tags | philip's notes

                                                                                                      tags

                                                                                                      \ No newline at end of file diff --git a/tags/ios/index.html b/tags/ios/index.html new file mode 100644 index 0000000000..1c0b8acd86 --- /dev/null +++ b/tags/ios/index.html @@ -0,0 +1,68 @@ +#ios | philip's notes

                                                                                                      #ios

                                                                                                      ios setup →

                                                                                                      2023-01-09 · 2 min read

                                                                                                      \ No newline at end of file diff --git a/tags/ipv6/index.html b/tags/ipv6/index.html new file mode 100644 index 0000000000..d67e17bf14 --- /dev/null +++ b/tags/ipv6/index.html @@ -0,0 +1,68 @@ +#ipv6 | philip's notes

                                                                                                      #ipv6

                                                                                                      ipv6 address space →

                                                                                                      2022-04-24 · 3 min read

                                                                                                      \ No newline at end of file diff --git a/tags/k3s/index.html b/tags/k3s/index.html new file mode 100644 index 0000000000..4cb3b06c43 --- /dev/null +++ b/tags/k3s/index.html @@ -0,0 +1,68 @@ +#k3s | philip's notes

                                                                                                      #k3s

                                                                                                      k3s →

                                                                                                      2022-03-25 · 1 min read

                                                                                                      \ No newline at end of file diff --git a/tags/keyboards/index.html b/tags/keyboards/index.html new file mode 100644 index 0000000000..0ca0c59dcf --- /dev/null +++ b/tags/keyboards/index.html @@ -0,0 +1,68 @@ +#keyboards | philip's notes

                                                                                                      #keyboards

                                                                                                      moergo glove80 →

                                                                                                      2023-08-28 · 3 min read

                                                                                                      \ No newline at end of file diff --git a/tags/kubernetes/index.html b/tags/kubernetes/index.html new file mode 100644 index 0000000000..b871ea46fc --- /dev/null +++ b/tags/kubernetes/index.html @@ -0,0 +1,68 @@ +#kubernetes | philip's notes

                                                                                                      #kubernetes

                                                                                                      kind (kubernetes in docker) →

                                                                                                      2022-04-25 · 1 min read

                                                                                                      marblerun →

                                                                                                      2022-03-29 · 3 min read

                                                                                                      AKS - azure kubernetes service →

                                                                                                      2022-03-25 · 1 min read

                                                                                                      k3s →

                                                                                                      2022-03-25 · 1 min read

                                                                                                      kubernetes →

                                                                                                      2022-03-25 · 1 min read

                                                                                                      linkerd →

                                                                                                      2022-03-25 · 1 min read

                                                                                                      minikube →

                                                                                                      2022-03-25 · 1 min read

                                                                                                      nomad →

                                                                                                      2022-03-25 · 2 min read

                                                                                                      service mesh →

                                                                                                      2022-03-25 · 2 min read

                                                                                                      \ No newline at end of file diff --git a/tags/ldk/index.html b/tags/ldk/index.html new file mode 100644 index 0000000000..c6a932a9bc --- /dev/null +++ b/tags/ldk/index.html @@ -0,0 +1,68 @@ +#LDK | philip's notes

                                                                                                      #LDK

                                                                                                      \ No newline at end of file diff --git a/tags/libos/index.html b/tags/libos/index.html new file mode 100644 index 0000000000..6fef770332 --- /dev/null +++ b/tags/libos/index.html @@ -0,0 +1,68 @@ +#libOS | philip's notes

                                                                                                      #libOS

                                                                                                      gramine →

                                                                                                      2022-03-26 · 5 min read

                                                                                                      mystikos →

                                                                                                      2022-03-26 · 1 min read

                                                                                                      enarx (WASM TEE) →

                                                                                                      2022-02-17 · 13 min read

                                                                                                      \ No newline at end of file diff --git a/tags/lightning/index.html b/tags/lightning/index.html new file mode 100644 index 0000000000..74df019123 --- /dev/null +++ b/tags/lightning/index.html @@ -0,0 +1,68 @@ +#lightning | philip's notes

                                                                                                      #lightning

                                                                                                      BOLT 11 - invoices →

                                                                                                      2022-04-10 · 2 min read

                                                                                                      lightning network notes →

                                                                                                      2022-03-17 · 1 min read

                                                                                                      hosted channels →

                                                                                                      2021-12-12 · 1 min read

                                                                                                      lightning libs →

                                                                                                      2021-12-12 · 1 min read

                                                                                                      lightning rod →

                                                                                                      2021-12-12 · 1 min read

                                                                                                      submarine swaps →

                                                                                                      2021-12-12 · 3 min read

                                                                                                      lightning router overview →

                                                                                                      2021-12-02 · 2 min read

                                                                                                      \ No newline at end of file diff --git a/tags/linkerd/index.html b/tags/linkerd/index.html new file mode 100644 index 0000000000..c6a1bf8ffc --- /dev/null +++ b/tags/linkerd/index.html @@ -0,0 +1,68 @@ +#linkerd | philip's notes

                                                                                                      #linkerd

                                                                                                      linkerd →

                                                                                                      2022-03-25 · 1 min read

                                                                                                      \ No newline at end of file diff --git a/tags/lsp/index.html b/tags/lsp/index.html new file mode 100644 index 0000000000..8899998fd4 --- /dev/null +++ b/tags/lsp/index.html @@ -0,0 +1,68 @@ +#LSP | philip's notes

                                                                                                      #LSP

                                                                                                      \ No newline at end of file diff --git a/tags/marble-run/index.html b/tags/marble-run/index.html new file mode 100644 index 0000000000..d4fb267d94 --- /dev/null +++ b/tags/marble-run/index.html @@ -0,0 +1,71 @@ +#marble-run | philip's notes

                                                                                                      #marble-run

                                                                                                      marblerun →

                                                                                                      2022-03-29 · 3 min read

                                                                                                      \ No newline at end of file diff --git a/tags/minikube/index.html b/tags/minikube/index.html new file mode 100644 index 0000000000..1e69577cbc --- /dev/null +++ b/tags/minikube/index.html @@ -0,0 +1,68 @@ +#minikube | philip's notes

                                                                                                      #minikube

                                                                                                      minikube →

                                                                                                      2022-03-25 · 1 min read

                                                                                                      \ No newline at end of file diff --git a/tags/mysten/index.html b/tags/mysten/index.html new file mode 100644 index 0000000000..e2b026b088 --- /dev/null +++ b/tags/mysten/index.html @@ -0,0 +1,68 @@ +#mysten | philip's notes

                                                                                                      #mysten

                                                                                                      sui →

                                                                                                      2022-04-06 · 1 min read

                                                                                                      \ No newline at end of file diff --git a/tags/mystikos/index.html b/tags/mystikos/index.html new file mode 100644 index 0000000000..06a900ca84 --- /dev/null +++ b/tags/mystikos/index.html @@ -0,0 +1,68 @@ +#mystikos | philip's notes

                                                                                                      #mystikos

                                                                                                      mystikos →

                                                                                                      2022-03-26 · 1 min read

                                                                                                      \ No newline at end of file diff --git a/tags/networking/index.html b/tags/networking/index.html new file mode 100644 index 0000000000..da6826114a --- /dev/null +++ b/tags/networking/index.html @@ -0,0 +1,68 @@ +#networking | philip's notes

                                                                                                      #networking

                                                                                                      ipv6 address space →

                                                                                                      2022-04-24 · 3 min read

                                                                                                      CIDR →

                                                                                                      2022-04-17 · 4 min read

                                                                                                      network interface card (NIC) →

                                                                                                      2022-04-17 · 2 min read

                                                                                                      network interfaces →

                                                                                                      2022-04-17 · 10 min read

                                                                                                      \ No newline at end of file diff --git a/tags/nix/index.html b/tags/nix/index.html new file mode 100644 index 0000000000..8793cc0819 --- /dev/null +++ b/tags/nix/index.html @@ -0,0 +1,68 @@ +#nix | philip's notes

                                                                                                      #nix

                                                                                                      nix debug spurrious rebuilds →

                                                                                                      2023-09-27 · 2 min read

                                                                                                      nix debug broken package build →

                                                                                                      2023-09-07 · 2 min read

                                                                                                      links →

                                                                                                      2022-08-05 · 2 min read

                                                                                                      \ No newline at end of file diff --git a/tags/noise/index.html b/tags/noise/index.html new file mode 100644 index 0000000000..563e9dc664 --- /dev/null +++ b/tags/noise/index.html @@ -0,0 +1,68 @@ +#noise | philip's notes

                                                                                                      #noise

                                                                                                      \ No newline at end of file diff --git a/tags/nomad/index.html b/tags/nomad/index.html new file mode 100644 index 0000000000..ed29425d40 --- /dev/null +++ b/tags/nomad/index.html @@ -0,0 +1,68 @@ +#nomad | philip's notes

                                                                                                      #nomad

                                                                                                      nomad →

                                                                                                      2022-03-25 · 2 min read

                                                                                                      \ No newline at end of file diff --git a/tags/orchestration/index.html b/tags/orchestration/index.html new file mode 100644 index 0000000000..beb661ea07 --- /dev/null +++ b/tags/orchestration/index.html @@ -0,0 +1,68 @@ +#orchestration | philip's notes

                                                                                                      #orchestration

                                                                                                      AKS - azure kubernetes service →

                                                                                                      2022-03-25 · 1 min read

                                                                                                      k3s →

                                                                                                      2022-03-25 · 1 min read

                                                                                                      minikube →

                                                                                                      2022-03-25 · 1 min read

                                                                                                      nomad →

                                                                                                      2022-03-25 · 2 min read

                                                                                                      \ No newline at end of file diff --git a/tags/perf/index.html b/tags/perf/index.html new file mode 100644 index 0000000000..d386e3832a --- /dev/null +++ b/tags/perf/index.html @@ -0,0 +1,68 @@ +#perf | philip's notes

                                                                                                      #perf

                                                                                                      postgres performance tuning →

                                                                                                      2023-10-23 · 2 min read

                                                                                                      self-referencing structs →

                                                                                                      2022-04-06 · 1 min read

                                                                                                      simdjson talk →

                                                                                                      2022-03-26 · 4 min read

                                                                                                      bit hacks →

                                                                                                      2022-02-10 · 14 min read

                                                                                                      profiling →

                                                                                                      2022-02-08 · 1 min read

                                                                                                      \ No newline at end of file diff --git a/tags/pki/index.html b/tags/pki/index.html new file mode 100644 index 0000000000..ee674cf65c --- /dev/null +++ b/tags/pki/index.html @@ -0,0 +1,68 @@ +#pki | philip's notes

                                                                                                      #pki

                                                                                                      acme protocol →

                                                                                                      2022-08-19 · 4 min read

                                                                                                      \ No newline at end of file diff --git a/tags/postgres/index.html b/tags/postgres/index.html new file mode 100644 index 0000000000..15d12e55a1 --- /dev/null +++ b/tags/postgres/index.html @@ -0,0 +1,68 @@ +#postgres | philip's notes

                                                                                                      #postgres

                                                                                                      postgres performance tuning →

                                                                                                      2023-10-23 · 2 min read

                                                                                                      snippets →

                                                                                                      2023-07-21 · 2 min read

                                                                                                      types of scans →

                                                                                                      2022-10-24 · 3 min read

                                                                                                      \ No newline at end of file diff --git a/tags/property-testing/index.html b/tags/property-testing/index.html new file mode 100644 index 0000000000..3e65af58fa --- /dev/null +++ b/tags/property-testing/index.html @@ -0,0 +1,71 @@ +#property-testing | philip's notes

                                                                                                      #property-testing

                                                                                                      fuzzcheck-rs →

                                                                                                      2022-08-21 · 2 min read

                                                                                                      \ No newline at end of file diff --git a/tags/regulation/index.html b/tags/regulation/index.html new file mode 100644 index 0000000000..fd78e7c4f8 --- /dev/null +++ b/tags/regulation/index.html @@ -0,0 +1,68 @@ +#regulation | philip's notes

                                                                                                      #regulation

                                                                                                      financial instituion →

                                                                                                      2022-04-05 · 1 min read

                                                                                                      money services business (MSB) →

                                                                                                      2022-04-05 · 4 min read

                                                                                                      \ No newline at end of file diff --git a/tags/reproducible-builds/index.html b/tags/reproducible-builds/index.html new file mode 100644 index 0000000000..8e4427cf59 --- /dev/null +++ b/tags/reproducible-builds/index.html @@ -0,0 +1,71 @@ +#reproducible-builds | philip's notes

                                                                                                      #reproducible-builds

                                                                                                      earthly →

                                                                                                      2022-04-05 · 7 min read

                                                                                                      rebuilderd →

                                                                                                      2022-02-17 · 1 min read

                                                                                                      reproducible-builds.org →

                                                                                                      2022-02-17 · 2 min read

                                                                                                      \ No newline at end of file diff --git a/tags/root/index.html b/tags/root/index.html new file mode 100644 index 0000000000..a5734fdb26 --- /dev/null +++ b/tags/root/index.html @@ -0,0 +1,68 @@ +#root | philip's notes

                                                                                                      #root

                                                                                                      root phone with magisk →

                                                                                                      2022-01-15 · 4 min read

                                                                                                      \ No newline at end of file diff --git a/tags/rust/index.html b/tags/rust/index.html new file mode 100644 index 0000000000..04a10342a3 --- /dev/null +++ b/tags/rust/index.html @@ -0,0 +1,68 @@ +#rust | philip's notes

                                                                                                      #rust

                                                                                                      hkdf-sha256 →

                                                                                                      2022-11-18 · 7 min read

                                                                                                      fuzzcheck-rs →

                                                                                                      2022-08-21 · 2 min read

                                                                                                      rr with rust →

                                                                                                      2022-07-30 · 4 min read

                                                                                                      self-referencing structs →

                                                                                                      2022-04-06 · 1 min read

                                                                                                      sycamore x futures →

                                                                                                      2022-03-29 · 2 min read

                                                                                                      optimizing binary size →

                                                                                                      2022-02-20 · 6 min read

                                                                                                      rust x SGX →

                                                                                                      2022-02-17 · 1 min read

                                                                                                      k-combinations of a multiset →

                                                                                                      2022-02-08 · 5 min read

                                                                                                      rust verification tools →

                                                                                                      2022-01-13 · 1 min read

                                                                                                      \ No newline at end of file diff --git a/tags/service-mesh/index.html b/tags/service-mesh/index.html new file mode 100644 index 0000000000..87f07a3d3c --- /dev/null +++ b/tags/service-mesh/index.html @@ -0,0 +1,71 @@ +#service-mesh | philip's notes

                                                                                                      #service-mesh

                                                                                                      marblerun →

                                                                                                      2022-03-29 · 3 min read

                                                                                                      consul →

                                                                                                      2022-03-29 · 1 min read

                                                                                                      linkerd →

                                                                                                      2022-03-25 · 1 min read

                                                                                                      service mesh →

                                                                                                      2022-03-25 · 2 min read

                                                                                                      \ No newline at end of file diff --git a/tags/sgx/index.html b/tags/sgx/index.html new file mode 100644 index 0000000000..172c8c7f8b --- /dev/null +++ b/tags/sgx/index.html @@ -0,0 +1,68 @@ +#sgx | philip's notes

                                                                                                      #sgx

                                                                                                      remote attestation protocols →

                                                                                                      2022-05-15 · 8 min read

                                                                                                      secure time →

                                                                                                      2022-04-21 · 4 min read

                                                                                                      oasis →

                                                                                                      2022-04-14 · 13 min read

                                                                                                      sealing →

                                                                                                      2022-04-14 · 9 min read

                                                                                                      SGX lingo →

                                                                                                      2022-04-12 · 21 min read

                                                                                                      remote attestation →

                                                                                                      2022-04-12 · 10 min read

                                                                                                      marblerun →

                                                                                                      2022-03-29 · 3 min read

                                                                                                      gramine →

                                                                                                      2022-03-26 · 5 min read

                                                                                                      mystikos →

                                                                                                      2022-03-26 · 1 min read

                                                                                                      enarx (WASM TEE) →

                                                                                                      2022-02-17 · 13 min read

                                                                                                      fortanix rust tutorial →

                                                                                                      2022-02-17 · 12 min read

                                                                                                      rust x SGX →

                                                                                                      2022-02-17 · 1 min read

                                                                                                      overview →

                                                                                                      2022-02-13 · 12 min read

                                                                                                      \ No newline at end of file diff --git a/tags/simd/index.html b/tags/simd/index.html new file mode 100644 index 0000000000..35289bbb7e --- /dev/null +++ b/tags/simd/index.html @@ -0,0 +1,68 @@ +#simd | philip's notes

                                                                                                      #simd

                                                                                                      simdjson talk →

                                                                                                      2022-03-26 · 4 min read

                                                                                                      \ No newline at end of file diff --git a/tags/sql/index.html b/tags/sql/index.html new file mode 100644 index 0000000000..91ea08dbb7 --- /dev/null +++ b/tags/sql/index.html @@ -0,0 +1,68 @@ +#sql | philip's notes

                                                                                                      #sql

                                                                                                      types of scans →

                                                                                                      2022-10-24 · 3 min read

                                                                                                      \ No newline at end of file diff --git a/tags/ssh/index.html b/tags/ssh/index.html new file mode 100644 index 0000000000..3bbbef9a34 --- /dev/null +++ b/tags/ssh/index.html @@ -0,0 +1,68 @@ +#ssh | philip's notes

                                                                                                      #ssh

                                                                                                      \ No newline at end of file diff --git a/tags/sycamore/index.html b/tags/sycamore/index.html new file mode 100644 index 0000000000..3dd894a33e --- /dev/null +++ b/tags/sycamore/index.html @@ -0,0 +1,68 @@ +#sycamore | philip's notes

                                                                                                      #sycamore

                                                                                                      sycamore x futures →

                                                                                                      2022-03-29 · 2 min read

                                                                                                      \ No newline at end of file diff --git a/tags/tax/index.html b/tags/tax/index.html new file mode 100644 index 0000000000..e7ba375b2f --- /dev/null +++ b/tags/tax/index.html @@ -0,0 +1,68 @@ +#tax | philip's notes

                                                                                                      #tax

                                                                                                      financial instituion →

                                                                                                      2022-04-05 · 1 min read

                                                                                                      \ No newline at end of file diff --git a/tags/tls/index.html b/tags/tls/index.html new file mode 100644 index 0000000000..3a70a5a937 --- /dev/null +++ b/tags/tls/index.html @@ -0,0 +1,68 @@ +#tls | philip's notes

                                                                                                      #tls

                                                                                                      hkdf-sha256 →

                                                                                                      2022-11-18 · 7 min read

                                                                                                      tls exported keying material →

                                                                                                      2022-08-19 · 1 min read

                                                                                                      \ No newline at end of file diff --git a/tags/tracing/index.html b/tags/tracing/index.html new file mode 100644 index 0000000000..aa97661f95 --- /dev/null +++ b/tags/tracing/index.html @@ -0,0 +1,68 @@ +#tracing | philip's notes

                                                                                                      #tracing

                                                                                                      jaeger oss e2e tracing →

                                                                                                      2022-04-06 · 1 min read

                                                                                                      \ No newline at end of file

                                                                                                      bolero - fuzzing + property testing

                                                                                                      2022-02-20 · 1 min read

                                                                                                      Crate: https://crates.io/crates/bolero

                                                                                                      • Looks like what we were trying to do at Diem (integrate property testing and fuzzing).
                                                                                                      • Replaces proptest.
                                                                                                      • Hooks into fuzzing engines and supports mutation-based fuzzing.

                                                                                                      https://camshaft.github.io/bolero/introduction.html

                                                                                                      https://camshaft.github.io/bolero/tutorials/fibonacci.html#test-oracle

                                                                                                      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