diff --git a/.gitignore b/.gitignore index a865b41..d1fd1d6 100644 --- a/.gitignore +++ b/.gitignore @@ -4,14 +4,7 @@ !flake.nix !flake.lock -!euler/ -!euler/** -euler/target/ - -!resume/ -!resume/** - !xiao-esp32c6/ !xiao-esp32c6/** -xiao-esp32c6/.embuild/ -xiao-esp32c6/target/ +xiao-esp32c6/.embuild +xiao-esp32c6/target diff --git a/euler/Cargo.lock b/euler/Cargo.lock deleted file mode 100644 index 338c190..0000000 --- a/euler/Cargo.lock +++ /dev/null @@ -1,7 +0,0 @@ -# This file is automatically @generated by Cargo. -# It is not intended for manual editing. -version = 4 - -[[package]] -name = "euler" -version = "0.1.0" diff --git a/euler/Cargo.toml b/euler/Cargo.toml deleted file mode 100644 index b5bad1f..0000000 --- a/euler/Cargo.toml +++ /dev/null @@ -1,6 +0,0 @@ -[package] -name = "euler" -version = "0.1.0" -edition = "2024" - -[dependencies] diff --git a/euler/src/lib.rs b/euler/src/lib.rs deleted file mode 100644 index 8b13789..0000000 --- a/euler/src/lib.rs +++ /dev/null @@ -1 +0,0 @@ - diff --git a/euler/src/main.rs b/euler/src/main.rs deleted file mode 100644 index f328e4d..0000000 --- a/euler/src/main.rs +++ /dev/null @@ -1 +0,0 @@ -fn main() {} diff --git a/flake.lock b/flake.lock index cbf88e2..627f077 100644 --- a/flake.lock +++ b/flake.lock @@ -6,8 +6,7 @@ "devenv" ], "flake-compat": [ - "devenv", - "flake-compat" + "devenv" ], "git-hooks": [ "devenv", @@ -19,11 +18,11 @@ ] }, "locked": { - "lastModified": 1760971495, - "narHash": "sha256-IwnNtbNVrlZIHh7h4Wz6VP0Furxg9Hh0ycighvL5cZc=", + "lastModified": 1752264895, + "narHash": "sha256-1zBPE/PNAkPNUsOWFET4J0cjlvziH8DOekesDmjND+w=", "owner": "cachix", "repo": "cachix", - "rev": "c5bfd933d1033672f51a863c47303fc0e093c2d2", + "rev": "47053aef762f452e816e44eb9a23fbc3827b241a", "type": "github" }, "original": { @@ -40,17 +39,14 @@ "flake-parts": "flake-parts", "git-hooks": "git-hooks", "nix": "nix", - "nixd": "nixd", - "nixpkgs": [ - "nixpkgs" - ] + "nixpkgs": "nixpkgs" }, "locked": { - "lastModified": 1771545453, - "narHash": "sha256-8Zg8fqyXdmhRhiUzNpD96eZ1Htjkfeo6573HmKp15Gs=", + "lastModified": 1758578119, + "narHash": "sha256-gQ4tWrxpG43cCTEnFqbdcKOB00l4s7VsRIJAxpRgSE0=", "owner": "cachix", "repo": "devenv", - "rev": "1419489f71dbb1736142428e2e81e3911e79945f", + "rev": "56782ef9e6fec7fc5cbbbd88f04ce114faac2e35", "type": "github" }, "original": { @@ -61,19 +57,15 @@ }, "espkgs": { "inputs": { - "flake-utils": [ - "flake-utils" - ], - "nixpkgs": [ - "nixpkgs" - ] + "flake-utils": "flake-utils", + "nixpkgs": "nixpkgs_2" }, "locked": { - "lastModified": 1767865407, - "narHash": "sha256-QWF1rZYd+HvNzLIeRS+OEBX7HF0EhWCGeLbMkgtbsIo=", + "lastModified": 1758247379, + "narHash": "sha256-u7LOGpRhY1MmelsdLF5BlZRtuwYD5GBfQzVOdNojhz8=", "owner": "mirrexagon", "repo": "nixpkgs-esp-dev", - "rev": "5287d6e1ca9e15ebd5113c41b9590c468e1e001b", + "rev": "f087ab9ecf5177d5bcf773b0c7467fa91b33dae7", "type": "github" }, "original": { @@ -84,17 +76,15 @@ }, "fenix": { "inputs": { - "nixpkgs": [ - "nixpkgs" - ], + "nixpkgs": "nixpkgs_3", "rust-analyzer-src": "rust-analyzer-src" }, "locked": { - "lastModified": 1771485140, - "narHash": "sha256-oFJv+Zp5AjQ9yDWlisGSD5OK20iz7v+hfedEdRg2/Aw=", + "lastModified": 1758695884, + "narHash": "sha256-rnHjtBRkcwRkrUZxg0RqN1qWTG+QC/gj4vn9uzEkBww=", "owner": "nix-community", "repo": "fenix", - "rev": "f95b0cc3fffa5057e9d207afb98dda5178253380", + "rev": "9cdb79384d02234fb2868eba6c7d390253ef6f83", "type": "github" }, "original": { @@ -106,11 +96,11 @@ "flake-compat": { "flake": false, "locked": { - "lastModified": 1761588595, - "narHash": "sha256-XKUZz9zewJNUj46b4AJdiRZJAvSZ0Dqj2BNfXvFlJC4=", + "lastModified": 1747046372, + "narHash": "sha256-CIVLLkVgvHYbgI2UpXvIIBJ12HWgX+fjA8Xf8PUmqCY=", "owner": "edolstra", "repo": "flake-compat", - "rev": "f387cd2afec9419c8ee37694406ca490c3f34ee5", + "rev": "9100a0f413b0c601e0533d1d94ffd501ce2e7885", "type": "github" }, "original": { @@ -143,11 +133,11 @@ ] }, "locked": { - "lastModified": 1760948891, - "narHash": "sha256-TmWcdiUUaWk8J4lpjzu4gCGxWY6/Ok7mOK4fIFfBuU4=", + "lastModified": 1756770412, + "narHash": "sha256-+uWLQZccFHwqpGqr2Yt5VsW/PbeJVTn9Dk6SHWhNRPw=", "owner": "hercules-ci", "repo": "flake-parts", - "rev": "864599284fc7c0ba6357ed89ed5e2cd5040f0c04", + "rev": "4524271976b625a4a605beefd893f270620fd751", "type": "github" }, "original": { @@ -156,21 +146,6 @@ "type": "github" } }, - "flake-root": { - "locked": { - "lastModified": 1723604017, - "narHash": "sha256-rBtQ8gg+Dn4Sx/s+pvjdq3CB2wQNzx9XGFq/JVGCB6k=", - "owner": "srid", - "repo": "flake-root", - "rev": "b759a56851e10cb13f6b8e5698af7b59c44be26e", - "type": "github" - }, - "original": { - "owner": "srid", - "repo": "flake-root", - "type": "github" - } - }, "flake-utils": { "inputs": { "systems": "systems" @@ -189,6 +164,24 @@ "type": "github" } }, + "flake-utils_2": { + "inputs": { + "systems": "systems_2" + }, + "locked": { + "lastModified": 1731533236, + "narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "11707dc2f618dd54ca8739b309ec4fc024de578b", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, "git-hooks": { "inputs": { "flake-compat": [ @@ -202,11 +195,11 @@ ] }, "locked": { - "lastModified": 1760663237, - "narHash": "sha256-BflA6U4AM1bzuRMR8QqzPXqh8sWVCNDzOdsxXEguJIc=", + "lastModified": 1758108966, + "narHash": "sha256-ytw7ROXaWZ7OfwHrQ9xvjpUWeGVm86pwnEd1QhzawIo=", "owner": "cachix", "repo": "git-hooks.nix", - "rev": "ca5b894d3e3e151ffc1db040b6ce4dcc75d31c37", + "rev": "54df955a695a84cd47d4a43e08e1feaf90b1fd9b", "type": "github" }, "original": { @@ -263,54 +256,94 @@ ] }, "locked": { - "lastModified": 1771532737, - "narHash": "sha256-H26FQmOyvIGnedfAioparJQD8Oe+/byD6OpUpnI/hkE=", + "lastModified": 1755029779, + "narHash": "sha256-3+GHIYGg4U9XKUN4rg473frIVNn8YD06bjwxKS1IPrU=", "owner": "cachix", "repo": "nix", - "rev": "7eb6c427c7a86fdc3ebf9e6cbf2a84e80e8974fd", + "rev": "b0972b0eee6726081d10b1199f54de6d2917f861", "type": "github" }, "original": { "owner": "cachix", - "ref": "devenv-2.32", + "ref": "devenv-2.30.4", "repo": "nix", "type": "github" } }, - "nixd": { - "inputs": { - "flake-parts": [ - "devenv", - "flake-parts" - ], - "flake-root": "flake-root", - "nixpkgs": [ - "devenv", - "nixpkgs" - ], - "treefmt-nix": "treefmt-nix" - }, - "locked": { - "lastModified": 1763964548, - "narHash": "sha256-JTRoaEWvPsVIMFJWeS4G2isPo15wqXY/otsiHPN0zww=", - "owner": "nix-community", - "repo": "nixd", - "rev": "d4bf15e56540422e2acc7bc26b20b0a0934e3f5e", - "type": "github" - }, - "original": { - "owner": "nix-community", - "repo": "nixd", - "type": "github" - } - }, "nixpkgs": { "locked": { - "lastModified": 1771369470, - "narHash": "sha256-0NBlEBKkN3lufyvFegY4TYv5mCNHbi5OmBDrzihbBMQ=", + "lastModified": 1755783167, + "narHash": "sha256-gj7qvMNz7YvhjYxNq4I370cAYIZEw2PbVs5BSwaLrD4=", + "owner": "cachix", + "repo": "devenv-nixpkgs", + "rev": "4a880fb247d24fbca57269af672e8f78935b0328", + "type": "github" + }, + "original": { + "owner": "cachix", + "ref": "rolling", + "repo": "devenv-nixpkgs", + "type": "github" + } + }, + "nixpkgs-python": { + "inputs": { + "flake-compat": "flake-compat_2", + "nixpkgs": "nixpkgs_5" + }, + "locked": { + "lastModified": 1755249745, + "narHash": "sha256-lDIbUfJ8xK62ekG+qojTlA1raHpKdScBTx8IFlQYx9U=", + "owner": "cachix", + "repo": "nixpkgs-python", + "rev": "b6632af2db9f47c79dac8f4466388c7b1b6c3071", + "type": "github" + }, + "original": { + "owner": "cachix", + "repo": "nixpkgs-python", + "type": "github" + } + }, + "nixpkgs_2": { + "locked": { + "lastModified": 1758070117, + "narHash": "sha256-uLwwHFCZnT1c3N3biVe/0hCkag2GSrf9+M56+Okf+WY=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "0182a361324364ae3f436a63005877674cf45efb", + "rev": "e9b7f2ff62b35f711568b1f0866243c7c302028d", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-25.05", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_3": { + "locked": { + "lastModified": 1758427187, + "narHash": "sha256-pHpxZ/IyCwoTQPtFIAG2QaxuSm8jWzrzBGjwQZIttJc=", + "owner": "nixos", + "repo": "nixpkgs", + "rev": "554be6495561ff07b6c724047bdd7e0716aa7b46", + "type": "github" + }, + "original": { + "owner": "nixos", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_4": { + "locked": { + "lastModified": 1758427187, + "narHash": "sha256-pHpxZ/IyCwoTQPtFIAG2QaxuSm8jWzrzBGjwQZIttJc=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "554be6495561ff07b6c724047bdd7e0716aa7b46", "type": "github" }, "original": { @@ -320,24 +353,35 @@ "type": "github" } }, - "nixpkgs-python": { - "inputs": { - "flake-compat": "flake-compat_2", - "nixpkgs": [ - "nixpkgs" - ] - }, + "nixpkgs_5": { "locked": { - "lastModified": 1771493264, - "narHash": "sha256-M5hvivITtG0wnuCRsIXf8d6MYEs5bIF8eTY2TCNRZj4=", - "owner": "cachix", - "repo": "nixpkgs-python", - "rev": "7d828f3a6acb63582c6a642e3b0ce0e2ecb03749", + "lastModified": 1753345091, + "narHash": "sha256-CdX2Rtvp5I8HGu9swBmYuq+ILwRxpXdJwlpg8jvN4tU=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "3ff0e34b1383648053bba8ed03f201d3466f90c9", "type": "github" }, "original": { - "owner": "cachix", - "repo": "nixpkgs-python", + "owner": "NixOS", + "ref": "nixos-25.05", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_6": { + "locked": { + "lastModified": 1744536153, + "narHash": "sha256-awS2zRgF4uTwrOKwwiJcByDzDOdo3Q1rPZbiHQg/N38=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "18dd725c29603f582cf1900e0d25f9f1063dbf11", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixpkgs-unstable", + "repo": "nixpkgs", "type": "github" } }, @@ -346,8 +390,8 @@ "devenv": "devenv", "espkgs": "espkgs", "fenix": "fenix", - "flake-utils": "flake-utils", - "nixpkgs": "nixpkgs", + "flake-utils": "flake-utils_2", + "nixpkgs": "nixpkgs_4", "nixpkgs-python": "nixpkgs-python", "rust-overlay": "rust-overlay" } @@ -355,11 +399,11 @@ "rust-analyzer-src": { "flake": false, "locked": { - "lastModified": 1771444642, - "narHash": "sha256-ztRHVn93XOfYZNnGYyNadFdR8gp3Xi2JKDKwBzb0ApI=", + "lastModified": 1758620797, + "narHash": "sha256-Ly4rHgrixFMBnkbMursVt74mxnntnE6yVdF5QellJ+A=", "owner": "rust-lang", "repo": "rust-analyzer", - "rev": "70f44024cc9d92c56df79832d81775cb99dc2e21", + "rev": "905641f3520230ad6ef421bcf5da9c6b49f2479b", "type": "github" }, "original": { @@ -371,16 +415,14 @@ }, "rust-overlay": { "inputs": { - "nixpkgs": [ - "nixpkgs" - ] + "nixpkgs": "nixpkgs_6" }, "locked": { - "lastModified": 1771470520, - "narHash": "sha256-PvytHcaYN5cPUll7FB70mXv1rRsIBRmu47fFfq3haxA=", + "lastModified": 1758681214, + "narHash": "sha256-8cW731vev6kfr58cILO2ZsjHwaPhm88dQ8Q6nTSjP9I=", "owner": "oxalica", "repo": "rust-overlay", - "rev": "a1d4cc1f264c45d3745af0d2ca5e59d460e58777", + "rev": "b12ed88d8d33d4f3cbc842bf29fad93bb1437299", "type": "github" }, "original": { @@ -404,25 +446,18 @@ "type": "github" } }, - "treefmt-nix": { - "inputs": { - "nixpkgs": [ - "devenv", - "nixd", - "nixpkgs" - ] - }, + "systems_2": { "locked": { - "lastModified": 1734704479, - "narHash": "sha256-MMi74+WckoyEWBRcg/oaGRvXC9BVVxDZNRMpL+72wBI=", - "owner": "numtide", - "repo": "treefmt-nix", - "rev": "65712f5af67234dad91a5a4baee986a8b62dbf8f", + "lastModified": 1681028828, + "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", + "owner": "nix-systems", + "repo": "default", + "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", "type": "github" }, "original": { - "owner": "numtide", - "repo": "treefmt-nix", + "owner": "nix-systems", + "repo": "default", "type": "github" } } diff --git a/flake.nix b/flake.nix index 8166da4..65cd1fb 100644 --- a/flake.nix +++ b/flake.nix @@ -1,30 +1,12 @@ { inputs = { - devenv = { - inputs.nixpkgs.follows = "nixpkgs"; - url = "github:cachix/devenv"; - }; - espkgs = { - inputs = { - flake-utils.follows = "flake-utils"; - nixpkgs.follows = "nixpkgs"; - }; - url = "github:mirrexagon/nixpkgs-esp-dev"; - }; - fenix = { - inputs.nixpkgs.follows = "nixpkgs"; - url = "github:nix-community/fenix"; - }; + devenv.url = "github:cachix/devenv"; + espkgs.url = "github:mirrexagon/nixpkgs-esp-dev"; + fenix.url = "github:nix-community/fenix"; flake-utils.url = "github:numtide/flake-utils"; nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable"; - nixpkgs-python = { - inputs.nixpkgs.follows = "nixpkgs"; - url = "github:cachix/nixpkgs-python"; - }; - rust-overlay = { - inputs.nixpkgs.follows = "nixpkgs"; - url = "github:oxalica/rust-overlay"; - }; + nixpkgs-python.url = "github:cachix/nixpkgs-python"; + rust-overlay.url = "github:oxalica/rust-overlay"; }; outputs = inputs @ { @@ -39,10 +21,8 @@ pkgs = import nixpkgs { inherit system; config.allowUnfree = true; - overlays = [ - (_: _: espkgs.packages.${system}) - ]; }; + espPkgs = espkgs.packages.${system}; in { packages = { devenv-up = self.devShells.${system}.default.config.procfileScript; @@ -80,7 +60,7 @@ }; packages = with pkgs; [ espflash - # esp-idf-full + espPkgs.esp-idf-full ldproxy opencode sops diff --git a/resume/resume.pdf b/resume/resume.pdf deleted file mode 100644 index 3b450a4..0000000 --- a/resume/resume.pdf +++ /dev/null @@ -1,1843 +0,0 @@ -%PDF-1.7 -% - -1 0 obj -<< - /Type /Pages - /Count 1 - /Kids [118 0 R] ->> -endobj - -2 0 obj -<< - /Type /StructTreeRoot - /RoleMap << - /Datetime /Span - /Terms /Part - /Title /P - /Strong /Span - /Em /Span - >> - /K [4 0 R] - /ParentTree << - /Nums [0 93 0 R 1 92 0 R 2 3 0 R] - >> - /ParentTreeNextKey 3 ->> -endobj - -3 0 obj -[91 0 R 91 0 R 93 0 R 91 0 R 91 0 R 91 0 R 91 0 R 92 0 R 90 0 R 89 0 R 87 0 R 83 0 R 83 0 R 84 0 R 83 0 R 82 0 R 80 0 R 77 0 R 77 0 R 76 0 R 75 0 R 73 0 R 70 0 R 69 0 R 68 0 R 68 0 R 68 0 R 66 0 R 65 0 R 65 0 R 65 0 R 63 0 R 62 0 R 62 0 R 62 0 R 60 0 R 59 0 R 59 0 R 57 0 R 56 0 R 56 0 R 54 0 R 53 0 R 53 0 R 53 0 R 51 0 R 50 0 R 50 0 R 47 0 R 45 0 R 42 0 R 41 0 R 40 0 R 40 0 R 38 0 R 37 0 R 37 0 R 34 0 R 32 0 R 29 0 R 28 0 R 27 0 R 25 0 R 24 0 R 24 0 R 21 0 R 20 0 R 18 0 R 15 0 R 14 0 R 13 0 R 13 0 R 13 0 R 11 0 R 10 0 R 10 0 R 7 0 R 5 0 R 6 0 R 5 0 R] -endobj - -4 0 obj -<< - /Type /StructElem - /S /Document - /P 2 0 R - /K [91 0 R 90 0 R 85 0 R 83 0 R 78 0 R 77 0 R 76 0 R 71 0 R 70 0 R 48 0 R 43 0 R 42 0 R 35 0 R 30 0 R 29 0 R 22 0 R 21 0 R 16 0 R 15 0 R 8 0 R 5 0 R] ->> -endobj - -5 0 obj -<< - /Type /StructElem - /S /P - /P 4 0 R - /K [7 0 R 77 6 0 R 79] - /Pg 118 0 R ->> -endobj - -6 0 obj -<< - /Type /StructElem - /S /Strong - /P 5 0 R - /K [78] - /Pg 118 0 R ->> -endobj - -7 0 obj -<< - /Type /StructElem - /S /Strong - /P 5 0 R - /K [76] - /Pg 118 0 R ->> -endobj - -8 0 obj -<< - /Type /StructElem - /S /L - /P 4 0 R - /A [<< - /O /List - /ListNumbering /Circle - >>] - /K [12 0 R 9 0 R] ->> -endobj - -9 0 obj -<< - /Type /StructElem - /S /LI - /P 8 0 R - /K [11 0 R 10 0 R] ->> -endobj - -10 0 obj -<< - /Type /StructElem - /S /LBody - /P 9 0 R - /K [74 75] - /Pg 118 0 R ->> -endobj - -11 0 obj -<< - /Type /StructElem - /S /Lbl - /P 9 0 R - /K [73] - /Pg 118 0 R ->> -endobj - -12 0 obj -<< - /Type /StructElem - /S /LI - /P 8 0 R - /K [14 0 R 13 0 R] ->> -endobj - -13 0 obj -<< - /Type /StructElem - /S /LBody - /P 12 0 R - /K [70 71 72] - /Pg 118 0 R ->> -endobj - -14 0 obj -<< - /Type /StructElem - /S /Lbl - /P 12 0 R - /K [69] - /Pg 118 0 R ->> -endobj - -15 0 obj -<< - /Type /StructElem - /S /P - /P 4 0 R - /K [68] - /Pg 118 0 R ->> -endobj - -16 0 obj -<< - /Type /StructElem - /S /Div - /P 4 0 R - /K [19 0 R 17 0 R] ->> -endobj - -17 0 obj -<< - /Type /StructElem - /S /Div - /P 16 0 R - /K [18 0 R] ->> -endobj - -18 0 obj -<< - /Type /StructElem - /S /Span - /P 17 0 R - /A [<< - /O /Layout - /Placement /Block - >>] - /K [67] - /Pg 118 0 R ->> -endobj - -19 0 obj -<< - /Type /StructElem - /S /Div - /P 16 0 R - /K [20 0 R] ->> -endobj - -20 0 obj -<< - /Type /StructElem - /S /Span - /P 19 0 R - /A [<< - /O /Layout - /Placement /Block - >>] - /K [66] - /Pg 118 0 R ->> -endobj - -21 0 obj -<< - /Type /StructElem - /S /P - /P 4 0 R - /K [65] - /Pg 118 0 R ->> -endobj - -22 0 obj -<< - /Type /StructElem - /S /L - /P 4 0 R - /A [<< - /O /List - /ListNumbering /Circle - >>] - /K [26 0 R 23 0 R] ->> -endobj - -23 0 obj -<< - /Type /StructElem - /S /LI - /P 22 0 R - /K [25 0 R 24 0 R] ->> -endobj - -24 0 obj -<< - /Type /StructElem - /S /LBody - /P 23 0 R - /K [63 64] - /Pg 118 0 R ->> -endobj - -25 0 obj -<< - /Type /StructElem - /S /Lbl - /P 23 0 R - /K [62] - /Pg 118 0 R ->> -endobj - -26 0 obj -<< - /Type /StructElem - /S /LI - /P 22 0 R - /K [28 0 R 27 0 R] ->> -endobj - -27 0 obj -<< - /Type /StructElem - /S /LBody - /P 26 0 R - /K [61] - /Pg 118 0 R ->> -endobj - -28 0 obj -<< - /Type /StructElem - /S /Lbl - /P 26 0 R - /K [60] - /Pg 118 0 R ->> -endobj - -29 0 obj -<< - /Type /StructElem - /S /P - /P 4 0 R - /K [59] - /Pg 118 0 R ->> -endobj - -30 0 obj -<< - /Type /StructElem - /S /Div - /P 4 0 R - /K [33 0 R 31 0 R] ->> -endobj - -31 0 obj -<< - /Type /StructElem - /S /Div - /P 30 0 R - /K [32 0 R] ->> -endobj - -32 0 obj -<< - /Type /StructElem - /S /Span - /P 31 0 R - /A [<< - /O /Layout - /Placement /Block - >>] - /K [58] - /Pg 118 0 R ->> -endobj - -33 0 obj -<< - /Type /StructElem - /S /Div - /P 30 0 R - /K [34 0 R] ->> -endobj - -34 0 obj -<< - /Type /StructElem - /S /Span - /P 33 0 R - /A [<< - /O /Layout - /Placement /Block - >>] - /K [57] - /Pg 118 0 R ->> -endobj - -35 0 obj -<< - /Type /StructElem - /S /L - /P 4 0 R - /A [<< - /O /List - /ListNumbering /Circle - >>] - /K [39 0 R 36 0 R] ->> -endobj - -36 0 obj -<< - /Type /StructElem - /S /LI - /P 35 0 R - /K [38 0 R 37 0 R] ->> -endobj - -37 0 obj -<< - /Type /StructElem - /S /LBody - /P 36 0 R - /K [55 56] - /Pg 118 0 R ->> -endobj - -38 0 obj -<< - /Type /StructElem - /S /Lbl - /P 36 0 R - /K [54] - /Pg 118 0 R ->> -endobj - -39 0 obj -<< - /Type /StructElem - /S /LI - /P 35 0 R - /K [41 0 R 40 0 R] ->> -endobj - -40 0 obj -<< - /Type /StructElem - /S /LBody - /P 39 0 R - /K [52 53] - /Pg 118 0 R ->> -endobj - -41 0 obj -<< - /Type /StructElem - /S /Lbl - /P 39 0 R - /K [51] - /Pg 118 0 R ->> -endobj - -42 0 obj -<< - /Type /StructElem - /S /P - /P 4 0 R - /K [50] - /Pg 118 0 R ->> -endobj - -43 0 obj -<< - /Type /StructElem - /S /Div - /P 4 0 R - /K [46 0 R 44 0 R] ->> -endobj - -44 0 obj -<< - /Type /StructElem - /S /Div - /P 43 0 R - /K [45 0 R] ->> -endobj - -45 0 obj -<< - /Type /StructElem - /S /Span - /P 44 0 R - /A [<< - /O /Layout - /Placement /Block - >>] - /K [49] - /Pg 118 0 R ->> -endobj - -46 0 obj -<< - /Type /StructElem - /S /Div - /P 43 0 R - /K [47 0 R] ->> -endobj - -47 0 obj -<< - /Type /StructElem - /S /Span - /P 46 0 R - /A [<< - /O /Layout - /Placement /Block - >>] - /K [48] - /Pg 118 0 R ->> -endobj - -48 0 obj -<< - /Type /StructElem - /S /L - /P 4 0 R - /A [<< - /O /List - /ListNumbering /Circle - >>] - /K [67 0 R 64 0 R 61 0 R 58 0 R 55 0 R 52 0 R 49 0 R] ->> -endobj - -49 0 obj -<< - /Type /StructElem - /S /LI - /P 48 0 R - /K [51 0 R 50 0 R] ->> -endobj - -50 0 obj -<< - /Type /StructElem - /S /LBody - /P 49 0 R - /K [46 47] - /Pg 118 0 R ->> -endobj - -51 0 obj -<< - /Type /StructElem - /S /Lbl - /P 49 0 R - /K [45] - /Pg 118 0 R ->> -endobj - -52 0 obj -<< - /Type /StructElem - /S /LI - /P 48 0 R - /K [54 0 R 53 0 R] ->> -endobj - -53 0 obj -<< - /Type /StructElem - /S /LBody - /P 52 0 R - /K [42 43 44] - /Pg 118 0 R ->> -endobj - -54 0 obj -<< - /Type /StructElem - /S /Lbl - /P 52 0 R - /K [41] - /Pg 118 0 R ->> -endobj - -55 0 obj -<< - /Type /StructElem - /S /LI - /P 48 0 R - /K [57 0 R 56 0 R] ->> -endobj - -56 0 obj -<< - /Type /StructElem - /S /LBody - /P 55 0 R - /K [39 40] - /Pg 118 0 R ->> -endobj - -57 0 obj -<< - /Type /StructElem - /S /Lbl - /P 55 0 R - /K [38] - /Pg 118 0 R ->> -endobj - -58 0 obj -<< - /Type /StructElem - /S /LI - /P 48 0 R - /K [60 0 R 59 0 R] ->> -endobj - -59 0 obj -<< - /Type /StructElem - /S /LBody - /P 58 0 R - /K [36 37] - /Pg 118 0 R ->> -endobj - -60 0 obj -<< - /Type /StructElem - /S /Lbl - /P 58 0 R - /K [35] - /Pg 118 0 R ->> -endobj - -61 0 obj -<< - /Type /StructElem - /S /LI - /P 48 0 R - /K [63 0 R 62 0 R] ->> -endobj - -62 0 obj -<< - /Type /StructElem - /S /LBody - /P 61 0 R - /K [32 33 34] - /Pg 118 0 R ->> -endobj - -63 0 obj -<< - /Type /StructElem - /S /Lbl - /P 61 0 R - /K [31] - /Pg 118 0 R ->> -endobj - -64 0 obj -<< - /Type /StructElem - /S /LI - /P 48 0 R - /K [66 0 R 65 0 R] ->> -endobj - -65 0 obj -<< - /Type /StructElem - /S /LBody - /P 64 0 R - /K [28 29 30] - /Pg 118 0 R ->> -endobj - -66 0 obj -<< - /Type /StructElem - /S /Lbl - /P 64 0 R - /K [27] - /Pg 118 0 R ->> -endobj - -67 0 obj -<< - /Type /StructElem - /S /LI - /P 48 0 R - /K [69 0 R 68 0 R] ->> -endobj - -68 0 obj -<< - /Type /StructElem - /S /LBody - /P 67 0 R - /K [24 25 26] - /Pg 118 0 R ->> -endobj - -69 0 obj -<< - /Type /StructElem - /S /Lbl - /P 67 0 R - /K [23] - /Pg 118 0 R ->> -endobj - -70 0 obj -<< - /Type /StructElem - /S /P - /P 4 0 R - /K [22] - /Pg 118 0 R ->> -endobj - -71 0 obj -<< - /Type /StructElem - /S /Div - /P 4 0 R - /K [74 0 R 72 0 R] ->> -endobj - -72 0 obj -<< - /Type /StructElem - /S /Div - /P 71 0 R - /K [73 0 R] ->> -endobj - -73 0 obj -<< - /Type /StructElem - /S /Span - /P 72 0 R - /A [<< - /O /Layout - /Placement /Block - >>] - /K [21] - /Pg 118 0 R ->> -endobj - -74 0 obj -<< - /Type /StructElem - /S /Div - /P 71 0 R - /K [75 0 R] ->> -endobj - -75 0 obj -<< - /Type /StructElem - /S /Span - /P 74 0 R - /A [<< - /O /Layout - /Placement /Block - >>] - /K [20] - /Pg 118 0 R ->> -endobj - -76 0 obj -<< - /Type /StructElem - /S /P - /P 4 0 R - /K [19] - /Pg 118 0 R ->> -endobj - -77 0 obj -<< - /Type /StructElem - /S /P - /P 4 0 R - /K [17 18] - /Pg 118 0 R ->> -endobj - -78 0 obj -<< - /Type /StructElem - /S /Div - /P 4 0 R - /K [81 0 R 79 0 R] ->> -endobj - -79 0 obj -<< - /Type /StructElem - /S /Div - /P 78 0 R - /K [80 0 R] ->> -endobj - -80 0 obj -<< - /Type /StructElem - /S /Span - /P 79 0 R - /A [<< - /O /Layout - /Placement /Block - >>] - /K [16] - /Pg 118 0 R ->> -endobj - -81 0 obj -<< - /Type /StructElem - /S /Div - /P 78 0 R - /K [82 0 R] ->> -endobj - -82 0 obj -<< - /Type /StructElem - /S /Span - /P 81 0 R - /A [<< - /O /Layout - /Placement /Block - >>] - /K [15] - /Pg 118 0 R ->> -endobj - -83 0 obj -<< - /Type /StructElem - /S /P - /P 4 0 R - /K [11 12 84 0 R 14] - /Pg 118 0 R ->> -endobj - -84 0 obj -<< - /Type /StructElem - /S /Em - /P 83 0 R - /K [13] - /Pg 118 0 R ->> -endobj - -85 0 obj -<< - /Type /StructElem - /S /Div - /P 4 0 R - /K [88 0 R 86 0 R] ->> -endobj - -86 0 obj -<< - /Type /StructElem - /S /Div - /P 85 0 R - /K [87 0 R] ->> -endobj - -87 0 obj -<< - /Type /StructElem - /S /Span - /P 86 0 R - /A [<< - /O /Layout - /Placement /Block - >>] - /K [10] - /Pg 118 0 R ->> -endobj - -88 0 obj -<< - /Type /StructElem - /S /Div - /P 85 0 R - /K [89 0 R] ->> -endobj - -89 0 obj -<< - /Type /StructElem - /S /Span - /P 88 0 R - /A [<< - /O /Layout - /Placement /Block - >>] - /K [9] - /Pg 118 0 R ->> -endobj - -90 0 obj -<< - /Type /StructElem - /S /P - /P 4 0 R - /K [8] - /Pg 118 0 R ->> -endobj - -91 0 obj -<< - /Type /StructElem - /S /P - /P 4 0 R - /K [0 1 93 0 R 3 4 5 6 92 0 R] - /Pg 118 0 R ->> -endobj - -92 0 obj -<< - /Type /StructElem - /S /Link - /P 91 0 R - /K [7 << - /Type /OBJR - /Pg 118 0 R - /Obj 117 0 R - >>] - /Pg 118 0 R ->> -endobj - -93 0 obj -<< - /Type /StructElem - /S /Link - /P 91 0 R - /K [2 << - /Type /OBJR - /Pg 118 0 R - /Obj 116 0 R - >>] - /Pg 118 0 R ->> -endobj - -94 0 obj -<< - /Type /Font - /Subtype /Type0 - /BaseFont /WJMVHF+NewCM10-Bold-Identity-H - /Encoding /Identity-H - /DescendantFonts [95 0 R] - /ToUnicode 98 0 R ->> -endobj - -95 0 obj -<< - /Type /Font - /Subtype /CIDFontType0 - /BaseFont /WJMVHF+NewCM10-Bold - /CIDSystemInfo << - /Registry (Adobe) - /Ordering (Identity) - /Supplement 0 - >> - /FontDescriptor 97 0 R - /DW 0 - /W [0 0 280 1 1 639 2 2 319 3 3 510.99997 4 4 639 5 5 527 6 6 639 7 7 575 8 8 383 9 9 786 10 10 559 11 11 756 12 12 711 13 13 717 14 14 669 15 15 702 16 16 638 17 17 360 18 18 689 19 19 733 20 20 885 21 21 607 22 22 474 23 23 454 24 24 447 25 25 607 26 26 575 27 27 351 28 28 831 29 30 319 31 31 818 32 32 607 33 33 702 34 34 635 35 35 604 36 36 699 37 37 958 38 38 882 39 39 639 40 40 863 41 41 383 42 42 351 43 43 516 44 44 733 45 45 864 46 46 319 47 47 869 48 48 831 49 49 607 50 50 639 51 51 692 52 52 800 53 53 894 54 54 436] ->> -endobj - -96 0 obj -<< - /Length 13 - /Filter /FlateDecode ->> -stream -x -endstream -endobj - -97 0 obj -<< - /Type /FontDescriptor - /FontName /WJMVHF+NewCM10-Bold - /Flags 131076 - /FontBBox [-56 -201 935 705] - /ItalicAngle 0 - /Ascent 806 - /Descent -194 - /CapHeight 686 - /StemV 168.6 - /CIDSet 96 0 R - /FontFile3 99 0 R ->> -endobj - -98 0 obj -<< - /Length 1362 - /Type /CMap - /WMode 0 ->> -stream -%!PS-Adobe-3.0 Resource-CMap -%%DocumentNeededResources: procset CIDInit -%%IncludeResource: procset CIDInit -%%BeginResource: CMap Custom -%%Title: (Custom Adobe Identity 0) -%%Version: 1 -%%EndComments -/CIDInit /ProcSet findresource begin -12 dict begin -begincmap -/CIDSystemInfo 3 dict dup begin - /Registry (Adobe) def - /Ordering (Identity) def - /Supplement 0 def -end def -/CMapName /Custom def -/CMapVersion 1 def -/CMapType 0 def -/WMode 0 def -1 begincodespacerange -<0000> -endcodespacerange -54 beginbfchar -<0001> <0053> -<0002> <0069> -<0003> <0063> -<0004> <0068> -<0005> <0065> -<0006> <006E> -<0007> <0067> -<0008> <0020> -<0009> <0050> -<000A> <0061> -<000B> <0045> -<000C> <0064> -<000D> <0075> -<000E> <0063> -<000F> <0061> -<0010> <0074> -<0011> <0069> -<0012> <006F> -<0013> <006E> -<0014> <0055> -<0015> <0076> -<0016> <0072> -<0017> <0073> -<0018> <0074> -<0019> <0079> -<001A> <006F> -<001B> <0066> -<001C> <0043> -<001D> <006C> -<001E> <002C> -<001F> <0042> -<0020> <006B> -<0021> <0078> -<0022> <0070> -<0023> <0065> -<0024> <0072> -<0025> <006D> -<0026> <0044> -<0027> <0075> -<0028> <0052> -<0029> <002D> -<002A> <006A> -<002B> <0073> -<002C> <0068> -<002D> <0051> -<002E> <003A> -<002F> <0041> -<0030> <0077> -<0031> <0071> -<0032> <0064> -<0033> <004C> -<0034> <0054> -<0035> <0026> -<0036> <0049> -endbfchar -endcmap -CMapName currentdict /CMap defineresource pop -end -end -%%EndResource -%%EOF -endstream -endobj - -99 0 obj -<< - /Length 5674 - /Filter /FlateDecode - /Subtype /CIDFontType0C ->> -stream -xX TWF)'B(n\BhDA7eQv]d Q&h3Ϙh_; Yfy>]u/-R1pBTYd_]X&?+;A~N) Vv.n9pBfo Bٍڍ}ۍUJV]/dJ? K&:MwK]8- -  sr '0<0l{@`STHhS`Sn0?`?PmpwZwδi;#$8}˞@$Dc"]ECR fsV&`n} _LAn)+18|.T -xI' ~"LˡݚրzooVUT;Ze{bCq`?bhHKwtDX|}L!ȶҖ{ZG/%/T|LA] -juRVwe(-<ך ab,5]j;e{_z?{]WJ#!vIk-ippk4Eѐ&Ă!-5.c}* t>%9,*DN 3g3LY"NoP)&&SKiq5 -3a - ذ[ -iR !.m& -.568otԳ|}gwoopUSp/㟔QzO!m)]t σd{M8ՅHw3Z#l>HnCL[mL]#ANCYa p#'sMĐfHTZs\8^X|TAS4^b?̀kpa?LNר#q -8FVjƹ6j.Iq$6_N 9B,-*zSm@ENH1;T e GD'`֪lr4Wj5bb̅"v IL\ZIḙ6h@XLqu.LrajQ(1)q"܀J}&N| .T5l6*N" $ zO!MQ@tWN8XpkL5XDY6O -Xd 30H'ģk `4>T-vSt@@!T#w& <į+|(057XVyUy5>jT0KCG0jA'8: %: sUmGk/B34Vye7J "f_QRJy6Q#KgagUu:SAV吒c,!?Ƀ{d%gꊁ)9SIV5 M\!/['V8й~FR,$xFsH~=l=AP7!JtG䙨3&r -GFU/ dZW)-yFB P .2Ud i%By<~@C-%vL^h>C!XrJ A9T5ci'QA_ TykU%ܕ26'D4[Р'L\]?o :6x{MTPUSjtvjlCW:s/@' FTU#sU.Hp|M_Dݝ~Mޗp -@GoޒXk@cِA Fiiq`x!tJTTq.H$md՜nqǿM-7o0AOv~D+8"nqST먶A )ːS\0Þ_$iFc -;*܃Z -)ْQ^6h`Hpfi%\\ ٓ,5* J* 5̴n"2>M~>_ƹu@jfUPhSu'[JZJ#p':v3ٙ׀H^}(B9[EL::dOYpbgʳnd'=IA˝0f:lxnf78VLM'6aeC&Tz8c,_njp.5Kc*C9@O} -IqyN'6N6qBRAoHקD9qTh[i2zN0y_ w0#QK3Qaɉ3 +1gU6S;Cgn2v>DݲضLW |f Liѱ}(nib ~X-:A?`:Ɠ> $@TD:fV؉,Oo$85KvDHt= -){r2ݔ{m@&CpN>H{=snFc)_p -b .?*P#D!p =":& - ȁZ^h:}յ=n -QѨ?[u\ΕLB#[ UPt*6c%ZP[Ȣ|/'.i>Ϩ,0{٘Sbr]Y_-}Ȩ\<ǫz.K'nz -KX܂wtIT1c5@8>c]K7g-D]lpY^khAV0|-}׈;+#݈qx:ny 6n>uğyPSfsD1!M FZ!7]ݫ 9qmJOZw,/`yd-x=T8+6 hX +a@Ÿj _$Ol%,2[c3ke>^P \^ĩi<ـZЅ*PKXY B6CDQܖ%nB$3 aRbޝ/~${x{/ynLƦXezswxga}f1PȁеOu;8$ppW^D5TBcce:)%gaȲqB<'2}e`m=~Gح @'N^Q - &9_ Vxx9սpnGuи2 *NMnO^ )5yUŵb%J\ILjKm{j IʞwIaDHON!I'/eqipRO$C:RDM2 -V dQc`S=0 m"˨AO5hMY=oSƬsh/r[@}Rј۷^O^tdf8 #'|yӼc{`~FE͢% ퟼DV%?52ƹL@׆n63tTL.h/gdތ4Hߵu{vOKv"믳ן7Gw o*n4m:˶tL yʡr`Bv@8C'=T"T` * &m|?ĺ$zF t91}|Vb6=WYےEɒ /Dbꏳ Jd#s{:kٳTE6,voret(aDC'Oޔ=N)k :xѴL\TfZ>)ko>~șfOZM9zbYD$BL} V2 |--pFJ4ha ϶b -Jj ޗp_[FljU2t鱮U{ޤ˷- ?g'JtsUʋ3XNtoW%}S}d{SV5[&3DW=b -endstream -endobj - -100 0 obj -<< - /Type /Font - /Subtype /Type0 - /BaseFont /BTVQXX+NewCM10-Regular-Identity-H - /Encoding /Identity-H - /DescendantFonts [101 0 R] - /ToUnicode 104 0 R ->> -endobj - -101 0 obj -<< - /Type /Font - /Subtype /CIDFontType0 - /BaseFont /BTVQXX+NewCM10-Regular - /CIDSystemInfo << - /Registry (Adobe) - /Ordering (Identity) - /Supplement 0 - >> - /FontDescriptor 103 0 R - /DW 0 - /W [0 0 500 1 1 333 2 2 394 3 3 278 4 4 444 5 5 556 6 6 444 7 7 556 8 12 500 13 13 778 14 14 833 15 15 500 16 17 278 18 18 500 19 19 278 20 20 778 21 21 389 22 22 500 23 23 389 24 24 500 25 25 333 26 26 500 27 27 625 28 28 528 29 29 556 30 30 361 31 32 500 33 33 722 34 35 278 36 36 528 37 37 556 38 38 528 39 39 750 40 40 722 41 41 556 42 42 750 43 43 389 44 44 764 45 45 785 46 46 392 47 48 556 49 49 778 50 50 681 51 51 778 52 52 736 53 53 708 54 54 778 55 55 528 56 56 444 57 57 750 58 58 528 59 59 306 60 60 917 61 61 722 62 62 778 63 63 500 64 64 778 65 65 833 66 66 778 67 67 681 68 68 1028 69 69 500 70 70 514 71 71 500 72 72 833 73 73 583 74 74 556 75 76 778 77 77 750 78 78 500] ->> -endobj - -102 0 obj -<< - /Length 13 - /Filter /FlateDecode ->> -stream -x -6 -endstream -endobj - -103 0 obj -<< - /Type /FontDescriptor - /FontName /BTVQXX+NewCM10-Regular - /Flags 131076 - /FontBBox [0 -250 1008.99994 750] - /ItalicAngle 0 - /Ascent 806 - /Descent -194 - /CapHeight 683 - /StemV 95.4 - /CIDSet 102 0 R - /FontFile3 105 0 R ->> -endobj - -104 0 obj -<< - /Length 1714 - /Type /CMap - /WMode 0 ->> -stream -%!PS-Adobe-3.0 Resource-CMap -%%DocumentNeededResources: procset CIDInit -%%IncludeResource: procset CIDInit -%%BeginResource: CMap Custom -%%Title: (Custom Adobe Identity 0) -%%Version: 1 -%%EndComments -/CIDInit /ProcSet findresource begin -12 dict begin -begincmap -/CIDSystemInfo 3 dict dup begin - /Registry (Adobe) def - /Ordering (Identity) def - /Supplement 0 def -end def -/CMapName /Custom def -/CMapVersion 1 def -/CMapType 0 def -/WMode 0 def -1 begincodespacerange -<0000> -endcodespacerange -78 beginbfchar -<0001> <0020> -<0002> <0073> -<0003> <0069> -<0004> <0063> -<0005> <0068> -<0006> <0065> -<0007> <006E> -<0008> <0067> -<0009> <0030> -<000A> <0031> -<000B> <0032> -<000C> <0039> -<000D> <0040> -<000E> <006D> -<000F> <0061> -<0010> <006C> -<0011> <002E> -<0012> <006F> -<0013> <007C> -<0014> <002B> -<0015> <0028> -<0016> <0035> -<0017> <0029> -<0018> <0033> -<0019> <002D> -<001A> <0036> -<001B> <004C> -<001C> <006B> -<001D> <0064> -<001E> <0049> -<001F> <2013> -<0020> <0034> -<0021> <0054> -<0022> <003A> -<0023> <002C> -<0024> <0076> -<0025> <0062> -<0026> <0079> -<0027> <0041> -<0028> <0043> -<0029> <0075> -<002A> <0048> -<002B> <0074> -<002C> <0044> -<002D> <0047> -<002E> <0072> -<002F> <0053> -<0030> <0070> -<0031> <00B7> -<0032> <0050> -<0033> <2022> -<0034> <0052> -<0035> <0042> -<0036> <0051> -<0037> <0071> -<0038> <007A> -<0039> <004E> -<003A> <0078> -<003B> <0066> -<003C> <004D> -<003D> <0077> -<003E> <00D7> -<003F> <00A0> -<0040> <003E> -<0041> <0025> -<0042> <004B> -<0043> <0045> -<0044> <0057> -<0045> <002F> -<0046> <004A> -<0047> <0038> -<0048> <006600660069> -<0049> <00660066> -<004A> <00660069> -<004B> <003C> -<004C> <004F> -<004D> <0056> -<004E> <0037> -endbfchar -endcmap -CMapName currentdict /CMap defineresource pop -end -end -%%EndResource -%%EOF -endstream -endobj - -105 0 obj -<< - /Length 7805 - /Filter /FlateDecode - /Subtype /CIDFontType0C ->> -stream -xzT>2;mU1bKFl1hňH*X²һEp@@XApcIDĒw?{{=>NP]>cF-J/I zi>{i?2 b^S#{ɓ^?*fT(Tjq xF1c'7f3B|B89. q  u q p 8orǹ|=B<Grt p 2zt)0kg`@hhF!~:/^>jт,vy)4"30qG_]7;{˼*މ9V~y`z@bl2Mfs^z-tŒ֫Naggg, $e;;)rF^ps'l73xEfº=P޳e^e>Paױ?d>Mt]cI==^z};ޟG}} Wܣp {y篾0/nv th:Gf:o}<8kȤ!!]:4K xY<@*jxc4Sg5KjáI؁y8;6wkLLyp -j+ovf?S| -$OI:` ? PGZe@h?JF?@PYY/4N}iQ6}i3DFY/]#3]~2\v@YaBYl>O+u"-B8lһm&չոYs۰a /C w -d?\6euʥMa"TC*,il4ҥ.SV{N.9Id{^l]QsAF C(].2s*-W!`9k^{en1o!U7&hZkVECf)%WI{Ʌn mv4 ނc?J U_Jɤ\f<ݻ;^_[3pNh<^=?Ͳ.05Rx!\A(D_v!^#b*xǖi8ZA: -X/CXOUk@@pUCo_8V%'nۑ@|x1(9 ~NՔ9zK3Xv6VDVx cx -L&Exknet:H"*empwǤ xG+e?',7o u@}Yhl*;E|Y3dRa;0!3v!(-oJ/}Ň7+}! gзZxlk76 ASNN'خe+WD3OFg+n>Vc|UHy@@HH@@yHUUyy٤1M)VFPGFbw}I}nHKp d_>6d/M$B;<4 B-9ǿ`ېYikCBxnd,;4f̰- 5;mm[7h'\GO¨SJlB t{92g8Cr2)őzIоԁʨ tȆ;Fu -?9] w\pcѵ!7vO|eֈ*Zռvּ: ??Ў@lm ƐDH0&!2`_u~kt܀MWtmh.$ 7zӘoB@7QK|JEJBg-ZʪಶoɄ3: #7{ut["CCvFY g6Dӗ(O$sՠ&^BaDϡU?pH'D"KDx6ٸuUaѴd>%F#f@wB2ͰܕfJѽ-IE*5̸݉Mǭ6rm-cr81dgoi2b =sl@xtlB"P}6.),w(G>`jrH=9Bn`gaXBN:N=Xp'Ax9;;ȱC wA1H(ؚO't2c |=ɇ^wB`0\X Jd/4{Gm۶3N(lśF#$ĴבԴwv4ZTKJ)MʋlhJ1c9):2fR{fy -@*H* Lď=A ЏGT%LQ?oml9 i'@OL21c - F*. B1r -N|Yn[Gf2LԴ7u} ViP%w !)IjJ2)J*_p!ߛEF}˾nެɇ -\/504 '`e92L9tlw o<"sU\0)t?G1Z'§2\6QZ6j[ p.E+~}ٙᛝ8DCdF8de9+Z}.W^QcUpCyl_y\F_±tͯ\MSQDgA˖UUekspI2%Y`Q@Ѣ4sy[Invv#j'R׭ b%,l>0 6k 2o34޿gނ2Bմ?{ę;x5F J\#U-@OylzۏbeX5ϋ<~i_ӗ88^hC -XU8u Ji7F^:u©S/.~ -"Ѯuj=k>r:4ޘ k!%[9yam{5=U}I_|.,2)tdBhZ^a!7zn vިP42sUPVK -JAd:L> "ZAt@M7!w]pkT{}x6 T wn]Ck'R@+Wu͕rY5y@uA VA|9tK9Tes8_QVNk!G'ă1_ -!xOµac_a]H|.(L7H: -"ԦWe?[ ? -A#bAӴ'|jsaJYQBn'_ܽ'LOoꄃU5 `uYک+шN߼R*+tRzab*7 %G߽Wh>Uqbs|#!1ѾAZ|YQ'7R6&**Ji:x#l%^LV!%@@Ncq=v*xL"P,`J.^)MT;ʘ@@tX*ds m*U e"HG1ʱt`w¡]i'd2z=&+d =) D\"-Y*B_ę{Wu -k[qJs\aq)1Qq1Iz޴i?0`t((*1.Djg``)Hoxș<<R/[tIJlVESZKbWL]^!>~Gpzl4w5d|L[Rb{{޳f;o$PvuzST;Ç (&Ừ -J5>}dXPq_(U>CimHB;P$o5@(:mĢݘlKfjAc{o@e7| TzQ_b(jlwڔH=$Ő14k8V3ɹF3] P"8C@Ȯ”4}F@^&I6RkMq!אKЁ¤E[zĜO~i=fQLQWkv>??&/.еZ&;;?/:G~LL\k#:::?:;ZEGDegGf6 e(7!MF:Z0ɐM!iD"YJMLtbA#;sA$ONZfʦh޲:8w e6|N|ND}yf;mшa@ϙHOh|8vgsR|-bz*1;Vc,ˎφl0fҮgҳH'm7xdܚ/# -pڭ*|AN.k9X;^ 1㏛j0C -KOh~q&yN0Bx2?v1=!*.NXZQZʤg@,[USu*3M'vUkm8f);-`:B_x}%w{9ojlX!ħɫpZ^H58WLZKOTj1L/uCѯ!_펼Оd+Dސ'tDfSS!>z;pNB)z;T1Ntb˳Rr= hg,<sFjRNH$tdNDS=!=۰ѐg#7I$yɇ R-,&-@%~kRЈ75G ƃձ![ӱe <:EGswWj9ZMf^v-W>Ԕ fC%lc>>6ESsi3CGSDiT>?rZq'Ǽ:eMsbmۗLpdЏF滶_9Ye7}?g6N;ًM\X5[(3VM0\/|u`iLe!X#X[KUWo'O.=y==yrnݓ'?X.dTn;'솺)@"[+b -w^4S#wֺ2v_MgRZP뢫Ʊ3b6khٳ[ke~KJ|67(t+2[ rMH bM:Z@vއ",MI.iA@^dko4̊C542f+K(K}aohx2B~XB+ׁLhT!ƱܯkIƘߵ1<9DCNbZl:鰢IMHbIG gtI I I9ID%or + rlY.oz  q$Ǎ|ї'I_1_Cư7EEq:e{@'*KA($2F]$31Nv'w(xwtdD`' H_1>41Ly:\s*yjHK.&nc):~ ;P{:K_J50ƃ@2KɒM)Q?U i -endstream -endobj - -106 0 obj -<< - /Type /Font - /Subtype /Type0 - /BaseFont /QPKTUA+NewCM10-Italic-Identity-H - /Encoding /Identity-H - /DescendantFonts [107 0 R] - /ToUnicode 110 0 R ->> -endobj - -107 0 obj -<< - /Type /Font - /Subtype /CIDFontType0 - /BaseFont /QPKTUA+NewCM10-Italic - /CIDSystemInfo << - /Registry (Adobe) - /Ordering (Identity) - /Supplement 0 - >> - /FontDescriptor 109 0 R - /DW 0 - /W [0 0 280 1 1 897 2 2 307 3 3 562 4 4 358 5 5 307 6 6 562 7 7 678 8 8 256 9 10 460 11 11 332 12 12 422 13 13 510.99997 14 14 460 15 15 510.99997 16 16 716 17 17 510.99997 18 18 818 19 19 510.99997 20 20 537 21 21 409 22 22 307 23 23 774 24 24 678 25 25 743 26 26 307 27 31 510.99997 32 32 464 33 33 460 34 34 729 35 35 627 36 36 307 37 37 767 38 38 486 39 39 767 40 40 409 41 41 704 42 42 716 43 43 510.99997 44 44 613 45 45 755 46 46 664 47 47 386 48 48 743 49 50 460 51 51 767 52 52 743 53 53 510.99997] ->> -endobj - -108 0 obj -<< - /Length 13 - /Filter /FlateDecode ->> -stream -x -endstream -endobj - -109 0 obj -<< - /Type /FontDescriptor - /FontName /QPKTUA+NewCM10-Italic - /Flags 131140 - /FontBBox [-25 -250 1002 750] - /ItalicAngle -14.036209 - /Ascent 806 - /Descent -194 - /CapHeight 683 - /StemV 95.4 - /CIDSet 108 0 R - /FontFile3 111 0 R ->> -endobj - -110 0 obj -<< - /Length 1352 - /Type /CMap - /WMode 0 ->> -stream -%!PS-Adobe-3.0 Resource-CMap -%%DocumentNeededResources: procset CIDInit -%%IncludeResource: procset CIDInit -%%BeginResource: CMap Custom -%%Title: (Custom Adobe Identity 0) -%%Version: 1 -%%EndComments -/CIDInit /ProcSet findresource begin -12 dict begin -begincmap -/CIDSystemInfo 3 dict dup begin - /Registry (Adobe) def - /Ordering (Identity) def - /Supplement 0 def -end def -/CMapName /Custom def -/CMapVersion 1 def -/CMapType 0 def -/WMode 0 def -1 begincodespacerange -<0000> -endcodespacerange -53 beginbfchar -<0001> <004D> -<0002> <002E> -<0003> <0053> -<0004> <0020> -<0005> <0069> -<0006> <006E> -<0007> <0045> -<0008> <006C> -<0009> <0065> -<000A> <0063> -<000B> <0074> -<000C> <0072> -<000D> <0061> -<000E> <0067> -<000F> <0064> -<0010> <0043> -<0011> <006F> -<0012> <006D> -<0013> <0070> -<0014> <0075> -<0015> <0073> -<0016> <002C> -<0017> <0047> -<0018> <0050> -<0019> <0041> -<001A> <003A> -<001B> <0033> -<001C> <0039> -<001D> <0034> -<001E> <002F> -<001F> <0030> -<0020> <0078> -<0021> <0062> -<0022> <0052> -<0023> <004C> -<0024> <0066> -<0025> <0051> -<0026> <0079> -<0027> <004F> -<0028> <007A> -<0029> <0042> -<002A> <0054> -<002B> <0068> -<002C> <00660066> -<002D> <0044> -<002E> <0077> -<002F> <0049> -<0030> <0055> -<0031> <006B> -<0032> <0076> -<0033> <00B7> -<0034> <0056> -<0035> <0032> -endbfchar -endcmap -CMapName currentdict /CMap defineresource pop -end -end -%%EndResource -%%EOF -endstream -endobj - -111 0 obj -<< - /Length 6569 - /Filter /FlateDecode - /Subtype /CIDFontType0C ->> -stream -xy tU~cE:QZBRqDtqE ( BtoӦi&i'I{5(eG,+H?3ޯuf~'-::s;>L x7N,Xң羐*!"vOtc|Low9ufVPoMgYAAGU!- 7 j$d%(M-\"͐愯HHOM͙>%5' #['MHMI _a3/'Js IL O\#y2Iʐ<6G}>r/4byԴyAA7g=(K=4R 8e}F4{ȍg5kBBO1J- ^PPP@n1@f-`ZhS.n]}r' 327WO]4 -8s}|z{xI#ot-tkF}FZh0}qY#'6%M(8p̖JWgx)C.rTR/J(*qDwamaS žt$MW&wOlw=g/ˮ23X|P&ws{A:#ho3ȓx5Dݛde% -6=S׏f@ -^N2F,zxQpԑ8cl0״Un{%xi+7]_j(E>ښJ}&TOi7&-z0T]ˉRVrp4Xbحnr3К5RƠt.j)%LlxУ0edyA51NAM4rLeR0[jI#`:䃌'QX@4b}1nAEP-fsa6;icX?=Sm|yʠhYlT*vBfO]?Kg`"s4Ҥ2AFTnTh"nƸ1 -PWz-M5ݕ'`%.Z壙>GOӲ>>rUhx4"=L&z"mϽBuO݇8 N_5>.= \S(:wqOb(?x'] 2И*\Np^6 {Fp=='uUqd1{-}}{czWq7sBn6wߜ#/nruwQcotv7#LW}@@C]SArSsJX`CCMl${l!zKƤˡ :yD&sZw>|DEY{J6H$SLv8,NrV1f.*6^2HPFJ\ZeH0 vQzXa -Ȏ0v2+<C+5js.Y4}+Q:N锳V:6̼n{$obu"!+"k AtooݰSWwLɵ:pv:^_{io Eӵq {;yWI aHL^ٻs8nZCQ"椢UG:ޥH2yXko@J*s3W$-Qw ϧfI|vTҨnգc+/ͦU[J zbj& :]$STgVz[(  bmє@A\S4A=FUzFLze"ƓoF0>v?Ǩi8wpnוK!{:hqTxr&@5~Ǥlpt 'c|dRR&]}bR^IQ3} wN?"DA[S6"AP-ǁNZ%\nV -+4`pIX0crȡT4L>Ũ2 -̥4 ?: %:Μl.UCP*[(cTJȔ^XE=I5)2!g&rf|v_Š(a/4IZnuA |W;}4YQ>K -Q?LOrf/LwS2Ѫ#p*S%]]퇟~e¥r5{R\T|5b1 -KDEfMn|gUZUY|O%JC!"A^kυ?{B~}  [@frralnNt7NЀw]ّ[g2(i#aSnTjjR ɯ gvED瘝"+ pjn(e8W)F_;u׷ _ ~<|VZ)鼥"@P/z}~2Yќc6 ,}35HI"A #JLZG$B$۸[e5w˂Ak2QU^t9Ԣ*r$7{=kܨCHz}x 1SR4Jߗ2\n8a;ץx~i'|6.^ pet&'R<% xKzAe(HSѻtOw0t’'a"6|iI}3/l[M|47C\퓴q@T T %$oFۿq<& ۰!])w9}8IG8,9G R&Anjz&V&Yn>Nvqu@T8[ !x]O8lfG%b}XνPe|vXpg\cds3$0r -TnTi%u._Z 5dVUUr;ꉯ-.Hޙ+A!g(5itЅsN4+eZuuSS}H54ћ|l[ι{叭2 e6HΨ͍ؔTT?O ]t\(sj{pz&(oHdn V^cXؗ*VlYgG8MwTrʥg8t7 sDCZ(M"qE]cUþQdEnwrJ#(-oH\uHUի>0[fۂj *tS_]ŧ_5?":ylQ>a/5-BhՉdW WYb!YϣKj6]N3rPNh\p n9SV}+{aE9aZ,fy7 -A׊5u˳)M)U?"pǼu?a?ˋz`9,dXurlp:NK jp -%d5FnJTb^3&:ܥkwsW %%-~:g2c2T zNNw-;8ݛ Fcom"6]MfNIՎʎ}BXe#mD[}׉;!y@)0Ek%Qz.G %[dݢKG1z*Q,)Z)S'ވW64bfnd㈼Ot#G|M{kΪrokFT!OEuanLoo \H֕BzpBwgT`4OO5R.r_^=?l"v||hV0xcT7Kl[fPڵ۳#^2(./J6A>p{ks^$6Ө!/s2Faʇw*D8#G*~oD2Lm! 5`E#8oSt6^iЫAKpxJ䠲qv]Aw#8X@ɑGW KL9>hjV䗢P0:a v@ .nh+c &=tl3Am4T.K|,@>JZ,XF ?QX߅Ou|O}ߟz8q#Κ F<.4,0Bo 70'[5\W@P:0đKQ]acTFȄhtm$[[̨] -GN%-KfB"Zk E &65" 2jqt+[v"k*Ѡ acQ{1_*]M*GYJy+nParY[=?-mDb BzzY$.<>[O)SB?o{\G%A!fNȠri6m"%p; 6 LArIDI7$")mitRRK69:>Xdjxa3{j 63V4{ #@`h/tco; ѻ^wO|z".a -d )/Ov&ҠBhA- GwBB>}inΓ\{̮wАIЛvey Dtjz] -wg.'欉Ό͉xB캱b8[k{A:ZT\Ssup -endstream -endobj - -112 0 obj -[/ICCBased 114 0 R] -endobj - -113 0 obj -[/ICCBased 115 0 R] -endobj - -114 0 obj -<< - /Length 258 - /N 1 - /Range [0 1] - /Filter /FlateDecode ->> -stream -xuJPFOUvDD@`]\ -FMkIRB|&إnऋ(HrTų9` ըa&ʺ:l -3Ŭ*ުnh)&C|>b纝黓AvCƫ+ y') -̵8+/> -stream -x}Kq?UX 94%MQKSN#ԦQvBˡhFk ! -ՠZP~xx^ޗQx"^P c!H0 - 0l+ߣy7;׫;Q?V._tF3LEK)y z80eIPkT/%[p:8+%d"G `d_{ٹ֖gzm\8rSif1\CU` S] @o _ -endstream -endobj - -116 0 obj -<< - /Type /Annot - /Subtype /Link - /Rect [222.57129 790.6908 321.0483 801.16925] - /Border [0 0 0] - /A << - /Type /Action - /S /URI - /URI (mailto:sicheng0129@gmail.com) - >> - /F 4 - /StructParent 0 - /Contents (Email sicheng0129@gmail.com) ->> -endobj - -117 0 obj -<< - /Type /Annot - /Subtype /Link - /Rect [431.5068 790.6908 468.3288 801.16925] - /Border [0 0 0] - /A << - /Type /Action - /S /URI - /URI (https://www.linkedin.com/in/sicheng-pan-0129/) - >> - /F 4 - /StructParent 1 - /Contents (https://www.linkedin.com/in/sicheng-pan-0129/) ->> -endobj - -118 0 obj -<< - /Type /Page - /Resources << - /ProcSet [/PDF /Text /ImageC /ImageB] - /ColorSpace << - /c0 112 0 R - /c1 113 0 R - >> - /Font << - /f0 94 0 R - /f1 100 0 R - /f2 106 0 R - >> - >> - /MediaBox [0 0 595.2756 841.8898] - /StructParents 2 - /Tabs /S - /Parent 1 0 R - /Contents 119 0 R - /Annots [116 0 R 117 0 R] ->> -endobj - -119 0 obj -<< - /Length 5111 - /Filter /FlateDecode ->> -stream -x˒ܶ>_Aye+eٱb*e*˕TȪ阮$Ht grЎfGw7OOݧ~ݗ_k:ZuJ{1X. Z_wOo;v囝޼=}';e7Ǐ7G)RSϟf%a|Fvt?y3{vvo^^yS>EO+#d}Tp7/@).(wX ee;rqw}USwI+*?.({"=GNEYUFKϝlP#iGB}-VT}xwt5L1 G)_#)A[{a%R U!Ex$V_R!D|22Jm5E.Ġm:MI6"<{[:ۋ߬F06l)i -џPp`K<\$}_#+ ND\z>-y4цK!GUxaw!P횐D PaB [<EöRM&ﮍu.U4z;t2u|ϐꉋ~E,mŊ|TeS,B4whD,Q;:8p(,*@YL䮡xN#bNФƆ\h/EPUVX MC徻ơ%Q| S*/J-DC)"D(JfF1:Wiy f|Ki3XBd+H^[щ(|%edUXR 3:3<߻ʐ)8rBM٘iN0?;CTD*SWl3c=%sU.#_Oș%R+Pi xi c@7t0RmftDc( )!~ C1)z :,|Q)rקRB"5aMXaįKJ!YlYrvyͱ 1x"3(.jrd3 nPBbP% n*Xb@`uOpiV_YNXymI6d2\g8%F"Tf? 4%.*]SH}*J-Hg駓rjIVO&ɆAakV DsyJD4 [KXrkJL㴄zƄLtX/gu8_|l5}ifa<kTkΈ%N/l6A8탹;n~&4bBJ +]Ybǹq -^U<v$j, ?erL]u#e60uru%Q<_xO9ݮJ(8zYz&!%QHij[WueT)`.:VX@`d@ϾN,d34UH0<69{!&sQ>G\$ZQR~[;>ѩFOPW83>YgWɾ:v -7%"w68v\w;HMhC7@G*AaMz.4q޷ 1yjgF/BhcrI_{E~U~ -=7Bw@STk*87;KɁ -sI(Mc$_fe&Cx1 ejLJIl6@Lq`THU@Ux8pĀi75]FM)izWyA )CX0KYXͨ&xVbJQK5ŕ~oTfSⰺoLI~ےpX:F|cBHL[p` xТB`^.5Q^nYRf^6F.Alj*3QRGDg ?3ŮIBhB%TpJʸcy'|;u9'r|PFDjASi)]H@Q ETB(b@"T#Do/2J=H2!aAh@6]HʒQf\-VF -!;m)GٚO'$=i6|mqMOV'aؓ_'8ysN*A}NbV6]ćl!>d-]dVuIlA]*WöµD?(GD 9X`e!IےOKr;1s 9ٹ{ h&gп`GR9'B]Ⅼh[-}Kn} ɶSߚ BoXN=}XrZbhLK]%Z̔j?`ƂS(ϪDNiS'#+ 7c&P)ov[Y~,_\(e`$obJd@]^ kTvW&:ZxĢ2պl{1:pH.cKKm/iӤ*_JpgyOzG^nʞm@6y/eLmT¹Ŋ)q'XO.hI6:'z㕞mݞ]⮄=sҘ(O F;b9b {pVev(͏ҜVL-L@,mpK=2Wj{w)P;FH?lLJ8Cz-+;u/T|Ivlc -7t@-pTjj5ebQ\;qv}nWnoX ['FJnN B`<#L\f2mEUJ}&mE5=Q1ڈ jI^X'xVed՝S6 ?dyض)+¶gV򰘋L5gGwha`/)$@Sr%9kYyQJ8`/Y[fX} -KTU1TU]%`tcX,Q Y3eА$hԜ)"wc[پ<,Լ"A]Y;&VU愋; NH2N*da+ įxx98]7+90q@ #:'h bMѽxCjﻤ^C/_OD -/(bujWfm?nSvm};S;p{(yJs'3Rt ,<(Sd4ĥ39{FT0X뚶7!=,P|0u8On)pZϲa˓,?Iig~7wڮ.yl4.N - EGƷ!BlA$ -endstream -endobj - -120 0 obj -<< - /Creator (Typst 0.14.2) - /ModDate (D:19800101000000Z) - /CreationDate (D:19800101000000Z) ->> -endobj - -121 0 obj -<< - /Length 996 - /Type /Metadata - /Subtype /XML ->> -stream -Typst 0.14.2en1980-01-01T00:00:00+00:001980-01-01T00:00:00+00:001application/pdfBX712Mn9f9YD4N+X0oU5PA==BX712Mn9f9YD4N+X0oU5PA==proof1.7 -endstream -endobj - -122 0 obj -<< - /Type /Catalog - /Pages 1 0 R - /Metadata 121 0 R - /Lang (en) - /StructTreeRoot 2 0 R - /MarkInfo << - /Marked true - /Suspects false - >> - /ViewerPreferences << - /Direction /L2R - >> ->> -endobj - -xref -0 123 -0000000000 65535 f -0000000016 00000 n -0000000082 00000 n -0000000326 00000 n -0000000900 00000 n -0000001120 00000 n -0000001220 00000 n -0000001310 00000 n -0000001400 00000 n -0000001536 00000 n -0000001619 00000 n -0000001712 00000 n -0000001800 00000 n -0000001884 00000 n -0000001981 00000 n -0000002070 00000 n -0000002156 00000 n -0000002241 00000 n -0000002320 00000 n -0000002462 00000 n -0000002541 00000 n -0000002683 00000 n -0000002769 00000 n -0000002907 00000 n -0000002992 00000 n -0000003086 00000 n -0000003175 00000 n -0000003260 00000 n -0000003351 00000 n -0000003440 00000 n -0000003526 00000 n -0000003611 00000 n -0000003690 00000 n -0000003832 00000 n -0000003911 00000 n -0000004053 00000 n -0000004191 00000 n -0000004276 00000 n -0000004370 00000 n -0000004459 00000 n -0000004544 00000 n -0000004638 00000 n -0000004727 00000 n -0000004813 00000 n -0000004898 00000 n -0000004977 00000 n -0000005119 00000 n -0000005198 00000 n -0000005340 00000 n -0000005513 00000 n -0000005598 00000 n -0000005692 00000 n -0000005781 00000 n -0000005866 00000 n -0000005963 00000 n -0000006052 00000 n -0000006137 00000 n -0000006231 00000 n -0000006320 00000 n -0000006405 00000 n -0000006499 00000 n -0000006588 00000 n -0000006673 00000 n -0000006770 00000 n -0000006859 00000 n -0000006944 00000 n -0000007041 00000 n -0000007130 00000 n -0000007215 00000 n -0000007312 00000 n -0000007401 00000 n -0000007487 00000 n -0000007572 00000 n -0000007651 00000 n -0000007793 00000 n -0000007872 00000 n -0000008014 00000 n -0000008100 00000 n -0000008189 00000 n -0000008274 00000 n -0000008353 00000 n -0000008495 00000 n -0000008574 00000 n -0000008716 00000 n -0000008815 00000 n -0000008903 00000 n -0000008988 00000 n -0000009067 00000 n -0000009209 00000 n -0000009288 00000 n -0000009429 00000 n -0000009514 00000 n -0000009623 00000 n -0000009769 00000 n -0000009915 00000 n -0000010086 00000 n -0000010837 00000 n -0000010927 00000 n -0000011170 00000 n -0000012613 00000 n -0000018392 00000 n -0000018569 00000 n -0000019483 00000 n -0000019574 00000 n -0000019827 00000 n -0000021623 00000 n -0000029534 00000 n -0000029710 00000 n -0000030442 00000 n -0000030533 00000 n -0000030790 00000 n -0000032224 00000 n -0000038899 00000 n -0000038937 00000 n -0000038975 00000 n -0000039334 00000 n -0000039757 00000 n -0000040029 00000 n -0000040335 00000 n -0000040701 00000 n -0000045892 00000 n -0000046009 00000 n -0000047095 00000 n -trailer -<< - /Size 123 - /Root 122 0 R - /Info 120 0 R - /ID [(BX712Mn9f9YD4N+X0oU5PA==) (BX712Mn9f9YD4N+X0oU5PA==)] ->> -startxref -47314 -%%EOF \ No newline at end of file diff --git a/resume/resume.typ b/resume/resume.typ deleted file mode 100644 index b20e2a3..0000000 --- a/resume/resume.typ +++ /dev/null @@ -1,108 +0,0 @@ -// Page setup -#set page(margin: (x: 0.7in, y: 0.55in)) -#set text(font: "New Computer Modern", size: 10.5pt) -#set par(justify: true, leading: 0.42em, spacing: 0.42em) -#show link: set text(fill: rgb("#333333")) -#set list(indent: 0pt, body-indent: 0.4em, marker: [•], spacing: 5pt) - -// Section header -#let section(title) = { - v(7pt) - text(size: 11pt, weight: "bold", smallcaps(title)) - v(-2pt) - line(length: 100%, stroke: 0.4pt) - v(2pt) -} - -// Unified entry: primary header + date, secondary header, then body -#let entry(primary, date, secondary, body) = { - grid( - columns: (1fr, auto), - text(weight: "bold", primary), - align(end, text(date)), - ) - v(-1pt) - text(style: "italic", secondary) - linebreak() - body -} - -// === HEADER === -#align(center)[ - #text(size: 14pt, weight: "bold")[Sicheng Pan] #h(6pt) - #text(size: 9.5pt)[ - #link("mailto:sicheng0129@gmail.com")[sicheng0129\@gmail.com] #h(4pt) | #h(4pt) - +1 (510) 301-0622 #h(4pt) | #h(4pt) - #link("https://www.linkedin.com/in/sicheng-pan-0129/")[LinkedIn] - ] -] - -// === EDUCATION === -#section("Education") - -#entry( - [University of California, Berkeley], [2023 -- 2024], - [M.S. in Electrical Engineering and Computer Sciences, GPA: 3.94/4.0], - [Thesis: _Extensible Rule Language for Query Optimizer_, advised by Alvin Cheung], -) - -#v(5pt) - -#entry( - [University of California, Berkeley], [2019 -- 2023], - [B.A. in Computer Science and Statistics, GPA: 4.0/4.0], - [Highest Distinction in General Scholarship · Honors in Computer Science], -) - -// === EXPERIENCE === -#section("Experience") - -#entry( - [Chroma], [Aug 2024 -- Present], - [Member of Technical Staff, Data Plane], -)[ - - Integrated 4-bit RaBitQ quantization into the SPANN index, reducing compaction time from 20 min to 2 min per 1M vectors (1536-dim) with 5× lower memory usage, enabling collections to scale from 5M to 50M with ~40ms query latency and >90% recall\@10. - - Designed and implemented a hybrid search API supporting composable KNN expressions (e.g., reciprocal rank fusion), sparse vector indexing (BM25, SPLADE) via Block-Max WAND, achieving sub-100ms latency at 1M scale. Shipped end-to-end across engine, API, Python/JS/Rust clients, and docs. - - Co-led rewrite of the distributed frontend from Python to Rust (tokio/axum), owning the read path (query plan serialization, executors). Throughput increased from 800 to 6,000+ RPS on 16 cores with latency spikes eliminated. Also shipped as the new Rust-based local client. - - Designed a serializable query plan and pushed query orchestration from the frontend to the query server, reducing network round trips from 3 to 1 per query and eliminating large intermediate data transfers. - - Implemented instant collection forking with copy-on-write semantics, enabling users to checkpoint datasets and share sample collections without incurring storage copy. - - Built regex query support via two-stage approach: extracting required literals from regex patterns to narrow candidates via the trigram index, then brute-force matching survivors, achieving sub-100ms latency at 1M scale. - - Implemented efficient limit/offset pagination, negation filters using roaring bitmaps, CMEK encryption (GCP), and group-by deduplication for chunked-document search results. -] - -#v(5pt) - -#entry( - [Duolingo], [Summer 2022], - [Software Engineer Intern, Data Infrastructure and Experimentation Team], -)[ - - Implemented approximate query pipeline on BigQuery for the analytics dashboard, saving >50% query time at \<1% uncertainty. - - Implemented caching mechanism for common queries based on historical frequencies (AWS, Jenkins), saving >80% time for analysts. -] - -#v(5pt) - -#entry( - [R-Polars Project], [Summer 2023], - [Contributor, Google Summer of Code], -)[ - - Exported Polars features to R including streaming I/O in Apache Parquet and Arrow formats. - - Refactored error handling with recoverable errors from Rust and implemented background query pipeline via multi-threading, saving >50% user wait time. -] - -// === RESEARCH === -#section("Research") - -#entry( - [QED: A Powerful Query Equivalence Decider for SQL], [2021 -- 2024], - [UC Berkeley EECS, advised by Alvin Cheung · Published at VLDB 2024], -)[ - - Co-developed QED, a SQL query equivalence prover in Rust using a novel formalism (Q-expressions) under bag semantics with a complete checking algorithm for a general query fragment parameterized by first-order theories. - - Verified 299/444 query rewrite pairs from Apache Calcite and 979/1287 from CockroachDB, more than 2× the coverage of prior state-of-the-art. -] - -// === SKILLS === -#v(4pt) -#line(length: 100%, stroke: 0.4pt) -*Languages:* Rust, Python, SQL, R, Nix \ -*Tools & Infrastructure:* Linux, Git, gRPC/Protobuf, tokio, axum, AWS, GCP, Kubernetes, Docker