From 4599fe0f9550c2553a213b5e1b6aa0a6f18f067f Mon Sep 17 00:00:00 2001
From: Rbanh <Rbanh15@gmail.com>
Date: Tue, 29 Aug 2023 02:07:30 -0400
Subject: [PATCH] first commit

---
 .editorconfig                                 | 100 +++++++++
 .gitignore                                    |  18 ++
 .sbproj                                       |  35 +++
 Maps/rbanhdevmap.vmap                         | Bin 0 -> 60960 bytes
 Maps/rbanhdevmap.vmap.meta                    |  28 +++
 README.md                                     |  11 +
 .../project_1/DesignTimeBuild/.dtbcache.v2    | Bin 0 -> 86946 bytes
 ...f8cc6325-60b7-47bb-9394-1a94f2951e42.vsidx | Bin 0 -> 69168 bytes
 code/.vs/project_1/FileContentIndex/read.lock |   0
 code/.vs/project_1/v17/.futdcache.v2          | Bin 0 -> 115 bytes
 code/.vs/project_1/v17/.suo                   | Bin 0 -> 6144 bytes
 code/Game.cs                                  |  59 +++++
 code/pawn/Pawn.cs                             | 194 +++++++++++++++++
 code/pawn/PawnAnimator.cs                     |  21 ++
 code/pawn/PawnController.cs                   | 174 +++++++++++++++
 code/ui/Hud.razor                             |  20 ++
 code/ui/Hud.razor.scss                        |  21 ++
 code/ui/mainmenu/ActiveLobby.razor            | 118 ++++++++++
 code/ui/mainmenu/FrontPage.razor              |  39 ++++
 code/ui/mainmenu/LoadingScreen.razor          |  30 +++
 code/ui/mainmenu/LoadingScreen.razor.scss     |  50 +++++
 code/ui/mainmenu/LobbyBrowser.razor           |  64 ++++++
 code/ui/mainmenu/MainMenu.razor               |  39 ++++
 code/ui/mainmenu/MainMenu.razor.scss          | 195 +++++++++++++++++
 code/ui/mainmenu/SavedGames.razor             |  42 ++++
 code/ui/mainmenu/SetupGame.razor              |  76 +++++++
 code/ui/mainmenu/SlimPackageCard.razor        |  30 +++
 code/weapon/Pistol.cs                         |  32 +++
 code/weapon/Weapon.cs                         | 205 ++++++++++++++++++
 code/weapon/WeaponViewModel.cs                |  22 ++
 untitled.prefab                               |   6 +
 31 files changed, 1629 insertions(+)
 create mode 100644 .editorconfig
 create mode 100644 .gitignore
 create mode 100644 .sbproj
 create mode 100644 Maps/rbanhdevmap.vmap
 create mode 100644 Maps/rbanhdevmap.vmap.meta
 create mode 100644 README.md
 create mode 100644 code/.vs/project_1/DesignTimeBuild/.dtbcache.v2
 create mode 100644 code/.vs/project_1/FileContentIndex/f8cc6325-60b7-47bb-9394-1a94f2951e42.vsidx
 create mode 100644 code/.vs/project_1/FileContentIndex/read.lock
 create mode 100644 code/.vs/project_1/v17/.futdcache.v2
 create mode 100644 code/.vs/project_1/v17/.suo
 create mode 100644 code/Game.cs
 create mode 100644 code/pawn/Pawn.cs
 create mode 100644 code/pawn/PawnAnimator.cs
 create mode 100644 code/pawn/PawnController.cs
 create mode 100644 code/ui/Hud.razor
 create mode 100644 code/ui/Hud.razor.scss
 create mode 100644 code/ui/mainmenu/ActiveLobby.razor
 create mode 100644 code/ui/mainmenu/FrontPage.razor
 create mode 100644 code/ui/mainmenu/LoadingScreen.razor
 create mode 100644 code/ui/mainmenu/LoadingScreen.razor.scss
 create mode 100644 code/ui/mainmenu/LobbyBrowser.razor
 create mode 100644 code/ui/mainmenu/MainMenu.razor
 create mode 100644 code/ui/mainmenu/MainMenu.razor.scss
 create mode 100644 code/ui/mainmenu/SavedGames.razor
 create mode 100644 code/ui/mainmenu/SetupGame.razor
 create mode 100644 code/ui/mainmenu/SlimPackageCard.razor
 create mode 100644 code/weapon/Pistol.cs
 create mode 100644 code/weapon/Weapon.cs
 create mode 100644 code/weapon/WeaponViewModel.cs
 create mode 100644 untitled.prefab

diff --git a/.editorconfig b/.editorconfig
new file mode 100644
index 0000000..fb22870
--- /dev/null
+++ b/.editorconfig
@@ -0,0 +1,100 @@
+# Remove the line below if you want to inherit .editorconfig settings from higher directories
+root = true
+
+# C# files
+[*.cs]
+indent_style = tab
+indent_size = tab
+tab_size = 4
+
+# New line preferences
+end_of_line = crlf
+insert_final_newline = true
+
+
+#### C# Coding Conventions ####
+
+# Expression-bodied members
+csharp_style_expression_bodied_accessors = true:silent
+csharp_style_expression_bodied_constructors = false:silent
+csharp_style_expression_bodied_indexers = true:silent
+csharp_style_expression_bodied_lambdas = true:silent
+csharp_style_expression_bodied_local_functions = false:silent
+csharp_style_expression_bodied_methods = false:silent
+csharp_style_expression_bodied_operators = false:silent
+csharp_style_expression_bodied_properties = true:silent
+
+# Pattern matching preferences
+csharp_style_pattern_matching_over_as_with_null_check = true:suggestion
+csharp_style_pattern_matching_over_is_with_cast_check = true:suggestion
+csharp_style_prefer_not_pattern = true:suggestion
+csharp_style_prefer_pattern_matching = true:silent
+csharp_style_prefer_switch_expression = true:suggestion
+
+# Null-checking preferences
+csharp_style_conditional_delegate_call = true:suggestion
+
+# Code-block preferences
+csharp_prefer_braces = true:silent
+
+# Expression-level preferences
+csharp_prefer_simple_default_expression = true:suggestion
+csharp_style_deconstructed_variable_declaration = true:suggestion
+csharp_style_implicit_object_creation_when_type_is_apparent = true:suggestion
+csharp_style_inlined_variable_declaration = true:suggestion
+csharp_style_pattern_local_over_anonymous_function = true:suggestion
+csharp_style_prefer_index_operator = true:suggestion
+csharp_style_prefer_range_operator = true:suggestion
+csharp_style_throw_expression = true:suggestion
+csharp_style_unused_value_assignment_preference = discard_variable:suggestion
+csharp_style_unused_value_expression_statement_preference = discard_variable:silent
+
+# 'using' directive preferences
+csharp_using_directive_placement = outside_namespace:silent
+
+#### C# Formatting Rules ####
+
+# New line preferences
+csharp_new_line_before_catch = true
+csharp_new_line_before_else = true
+csharp_new_line_before_finally = true
+csharp_new_line_before_members_in_anonymous_types = true
+csharp_new_line_before_members_in_object_initializers = true
+csharp_new_line_before_open_brace = all
+csharp_new_line_between_query_expression_clauses = true
+
+# Indentation preferences
+csharp_indent_block_contents = true
+csharp_indent_braces = false
+csharp_indent_case_contents = true
+csharp_indent_case_contents_when_block = true
+csharp_indent_labels = no_change
+csharp_indent_switch_labels = true
+
+# Space preferences
+csharp_space_after_cast = false
+csharp_space_after_colon_in_inheritance_clause = true
+csharp_space_after_comma = true
+csharp_space_after_dot = false
+csharp_space_after_keywords_in_control_flow_statements = true
+csharp_space_after_semicolon_in_for_statement = true
+csharp_space_around_binary_operators = before_and_after
+csharp_space_around_declaration_statements = false
+csharp_space_before_colon_in_inheritance_clause = true
+csharp_space_before_comma = false
+csharp_space_before_dot = false
+csharp_space_before_open_square_brackets = false
+csharp_space_before_semicolon_in_for_statement = false
+csharp_space_between_empty_square_brackets = false
+csharp_space_between_method_call_empty_parameter_list_parentheses = false
+csharp_space_between_method_call_name_and_opening_parenthesis = false
+csharp_space_between_method_call_parameter_list_parentheses = true
+csharp_space_between_method_declaration_empty_parameter_list_parentheses = false
+csharp_space_between_method_declaration_name_and_open_parenthesis = false
+csharp_space_between_method_declaration_parameter_list_parentheses = true
+csharp_space_between_parentheses = control_flow_statements
+csharp_space_between_square_brackets = false
+
+# Wrapping preferences
+csharp_preserve_single_line_blocks = true
+csharp_preserve_single_line_statements = true
\ No newline at end of file
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..34ee852
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,18 @@
+
+# This file describes files and paths that should not be tracked by Git version control
+# https://git-scm.com/docs/gitignore
+
+# Auto-generated code editor files
+.vs/*
+.vscode/*
+*.csproj
+obj/*
+Properties/*
+code/obj/*
+code/Properties/*
+
+# Auto-generated asset related files
+*.generated.*
+*.*_c
+*.los
+*.vpk
\ No newline at end of file
diff --git a/.sbproj b/.sbproj
new file mode 100644
index 0000000..e00e64a
--- /dev/null
+++ b/.sbproj
@@ -0,0 +1,35 @@
+{
+  "Title": "Project 1",
+  "Type": "game",
+  "Org": "local",
+  "Ident": "project_1",
+  "Tags": null,
+  "Schema": 1,
+  "HasAssets": true,
+  "AssetsPath": "",
+  "Resources": null,
+  "MenuResources": null,
+  "HasCode": true,
+  "CodePath": "/code/",
+  "PackageReferences": [],
+  "EditorReferences": null,
+  "Metadata": {
+    "MaxPlayers": 16,
+    "MinPlayers": 1,
+    "GameNetworkType": "Multiplayer",
+    "MapSelect": "Unrestricted",
+    "MapList": [
+      "facepunch.square"
+    ],
+    "RankType": "None",
+    "PerMapRanking": false,
+    "LeaderboardType": "None",
+    "GameCategory": "TechDemos",
+    "ProjectTemplate": null,
+    "CsProjName": "",
+    "HttpAllowList": null,
+    "SavedGames": true,
+    "MapDependentSaves": false,
+    "SaveFormatVersion": 1001
+  }
+}
\ No newline at end of file
diff --git a/Maps/rbanhdevmap.vmap b/Maps/rbanhdevmap.vmap
new file mode 100644
index 0000000000000000000000000000000000000000..e9488ce8a5c607cbab4ce971da7c5126f31ab419
GIT binary patch
literal 60960
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
GVE<oLOvp0;

literal 0
HcmV?d00001

diff --git a/Maps/rbanhdevmap.vmap.meta b/Maps/rbanhdevmap.vmap.meta
new file mode 100644
index 0000000..083bcdf
--- /dev/null
+++ b/Maps/rbanhdevmap.vmap.meta
@@ -0,0 +1,28 @@
+{
+  "publish": {
+    "Allowed": true,
+    "Enabled": false,
+    "ProjectConfig": {
+      "Title": "rbanhdevmap",
+      "Type": "map",
+      "Org": "local",
+      "Ident": "rbanhdevmap",
+      "Tags": null,
+      "Schema": 0,
+      "HasAssets": false,
+      "AssetsPath": null,
+      "Resources": null,
+      "MenuResources": null,
+      "HasCode": false,
+      "CodePath": null,
+      "PackageReferences": [],
+      "EditorReferences": [
+        "sboxmp.stalker_dolg#35122",
+        "kittito.usfishmongertw#9784"
+      ],
+      "Metadata": {
+        "SingleAssetSource": "maps/rbanhdevmap.vmap"
+      }
+    }
+  }
+}
\ No newline at end of file
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..25cf273
--- /dev/null
+++ b/README.md
@@ -0,0 +1,11 @@
+# Shooter Template
+Designed as a minimal starting point for your projects in s&box.
+
+## Features
+- First person pawn
+- Simple pawn controller
+- Simple weapon system
+
+## Controls
+- Regular movement with WASD
+- Shoot weapon with LMB
\ No newline at end of file
diff --git a/code/.vs/project_1/DesignTimeBuild/.dtbcache.v2 b/code/.vs/project_1/DesignTimeBuild/.dtbcache.v2
new file mode 100644
index 0000000000000000000000000000000000000000..f6f3c986a3d4843fb2a268c85c3eced6c92609d9
GIT binary patch
literal 86946
zcmdUY2b>$l_5ZF8aKm6Q#ee~0N(i=f&Gy*`PUft0IdD0A=K=`Kp0szjwi+wx&PNFZ
zLP7#bfP{pQ-a~rtz4zXG?`0-VAqh$T@6GPau0|_a5wpktXMgtewENZ0d*6N2-ptOF
zIt;@&ZqOd9PTV+9m|2z@-hHES=Eka%%ciW%q@5}jDwb0y4_j`<v2ue}#WIfGY~{+f
zapJIBJYZ)ko1Mah?Ur1pP%%hv-}<%dR<F0m`+C;*c4t=i^meW5S<_>6jb+FBvTL(z
zR<G$@*S&sxZ1p<3Z{6xOnarBiwl%i4JJa3M+tX(mC-Y=SW(t`}w^(qlx7}1RYa8Zz
z<MdQ9mxJ^M3RZ3g&X))6vNKT_b@H~cWlMj0q+(n7ZO)i$xijf9ez8iWaynDY=Zl4O
zd8~LSJ?0eBd8=Se*xB@mRmj4*<QBVNyH=&>CbPMm@q|o&y5troTr0n9+{xMHbhcP2
z*p+lSdobOX>`L}_^`%F$2g~X0PR1>ki{q8#j!mOUIF+tg?u1<_r<2Jvq~Ylpf}tH;
z_p(z?rbZ?$x0Kvr2j=kfkE*y;+nAmuE$WiL-E5R{$;zlkr;4tf94M8NyX<k!O?Ovd
zc&Eo(XQtd4Ff~-D*lw|uywsYqMl!Bbsw6KR8OoQ6Zl(4y+&n94_|6igz|5>DFjB0#
z8QVAADHga39Eu_7kr~Jk`Q)g52pBIzLXj!Q!Fo95UG_vZXStgWm0Y`A27Aj&?mKUn
zT`uOP>|t;=$fSdI$u4B=LdLPfnf)TaAV?KUGo!_w)k>*a8FXAI8j9}B5ZD<i7#`PJ
z!H}FPr;GeXnESC*+uzL}#&N@-s_jnMJM3w@Trn2bUVbFEFJ;HVx5KZ4t!W!ojBP4R
zI0c*Qe4;4YLg!MC;LcNap~7!`g1oUjwXyyCZn5&7zKg_d<(aMR-xbOttRzHcIz`-D
zIsXWl_B|SF3(0io+#_*`L-}0TCGhL{e(7M3R7+S++SyTF&1{Am%APK|2M2PFRW=qv
z9hHId7^=MPWS6lJE2U*vKriE8!&kd&ufo^hYESKN`PcB(n&0*$mEZP+@7$AwufcD7
zYwygzhOgG#xfkwy3|w6UKbp%;K?%>Sm1j`GGf*k}7?dvX%Lcz7$&L(O22b90p%AGl
zL(cVayGx@*Xw=xLNjr0JsDLF&(5etE4#{<JE92y#Rs*U<RcLe!fLoj?3Mj}pu9fpk
zvpvvc!7|S{Ayv$mpluOKX<lccm?;*<oe5)ZXSGna#_d(cyiRC<We(ceRmS;necEyh
z{oQ?C-7Dcw&&uvK>$&8A?dj@TXUy*$ujX<kt1?*zxlk-uvN>mLg|WEPcHN@u+UP<3
zP=w`66=O~(zhj?~g1S1>-%^(Ago3iuD=0gIk`Vp$1&PkAJq|@s|H#0O!HqljT|6*2
zxO2zFgPS()-s1lSqArG`Z+{nlq;~GwG%!4j;+p+k`*-fzzXeW=ZrX)s*4CYYUnv;>
z2HlM>bVvW9r_nEZ_BZ@RPxP&N8{Mk6=2pfD-V=c8ELY4}SUef00E6h7uAPPEwpEzu
zw+pLwj~K^yPC65l=sHlpO<618w*`2r)>zK&&pKuNG{!plPtmLUm$&rf(pEML&X*pu
z$~Lr#vv#^Tb|B3g{%N>ZdLx`)<~NA2uwQN*45#r3+a#ERmsi6LVy_L%6RXCZ*dC``
zwQ^vklS%U2%9Ab4X0o$m=w7GL+mjr2oxD?VrtGr!Fw1cp>Lm*;Jf~c7XS_r+@g$lr
zLrn+enwQ9UJc)p}mMhRjwA`$h&dyLet>w5QG}CtIxuI-|ZP#)?*#;ZYa=Tr%%`rVB
zhFV*>ke18!6;gf*(78=P00etYJo7rSrna#<4%LC5VGqTcl;1$%T`;gPQ-xZ{YveCC
z^0SsQ=X843k{inBs}-z1y@xq_4DTowcq<;N9&Yl?teHGgvNI62gD{$3irpA<(h$oj
zfG2H-21YJ9P$(2Dys_gu^)2RXCXd0&Iu&B7@%;h=TlOIW_|u+Uqc>rFfQ`BAKpBFl
zp2OWRo3yJ<k0;D#;-fPqj9E|F&{O6S-Q`9x=Jc`GR)q+%A97f3#9K>%br2)-%dnUl
zKhm2az{`C&-Z}v@Dm2P5PCpw(GfxixjM$Y;hbnf#3q^86<0X`*%+rat)*E!J3GDql
z85n7R28?TED)Dv%e2)ny%=?z!^NhC$s7X{>?nSu0^lyr_2neUY8R9yApl7HsUi6ZW
zsdF2_`LJ7rIM=K+A;VUWR3KnK3SQ<H7q`b-&xe!7A&tGR1EoDre;af^aX`-_KBiu8
z1o5NAV$P>M-qu}>?Z|l8&u7okkZc(D^=P(Y&0f5`jJHl5bggM=O(j-qL{e%i>AHAR
zohev(=zi>~7Ai1a?mf0btVwPzx_Jv~oq=+J52eN3u@vdS@Q7z#y!miTt~iDrE3e&`
zvT_jGwM6GV-X>>l(mZ=yAM2y6O;Bwz#oLq_+KDYgF<_kB=oTwE$9ur>cIA|WInD9*
zqm&e}DdE>NJn?wr6-we)IwefsBRU(acR|YBzIYpHkV=Tqfebd2c+<F;^OBD@&(<c-
z?Txp5s!edvg`t3;K^kvyQJb_{(Zya|gdX!=s{%u)eti&cy$(hXLBAY^lCvW)4+Ung
zcy2Wnci!1<=V98*b{P1#vuOIPH2%TbVW$LXMP#G{aa-)A%=1v}j=a0z&lmJ)9;v_-
zi@f(_;|&#Ta|+ja>A11-$<qnX$l|=lTNv^*VMeJ1^Ev&}H{QCOCwO_)c4va{|75JR
zdhX&qKs(lycG&*lRJ{2Pli6CSlsuE-^$(dApQ^|mGTuxe60D6L#82pU%klj`-pUE>
z+X3^%_^haE5UGy0Ny$^SD>z9Fn;zI5lri%7xgC}r`gqG0v{G&3#Bbf@RWX<tZ!aFL
z+ht!@g}JYO!y^9lMr;_5b}IfPlK6A}2+Z$wGWKv0-eB;Gw|Iv;kkgSOOzabs#$TH5
zwZ~F9M-K7F+x0;EAi=G+mBqI=_)8ly<HzqlkTitB5BcsBZ+F8tRXoiw$MKgsV5mr#
z*O4)oI@P@G;(*d@)W;&NJ$zEXpJu$da_1OM`}Za;a1-P0TZAS?4LW6*vYVL<d2PJY
znnG!FOXH0_hf>=Fa}quOiFZU$O>$^k?K?Khjd+7iYWmw?LT_c-#=oBV@s>*A<dyO5
zct?mr32(P6Ru;$gxrfb~y=qG=-iU3;UYvNMM#kf9x?p1-Umq(&0}X3hkLkD#4$}0b
z?fi90Kk?Zz*c<Tm41Qv~W6fg3%ztOY^&5-j<Zk|!hNr`=kCG1Fr1q4jM7%?!f(M?R
z<L#}Aq}1#bb2a4;jc$cW-!h6CZ$nua>c18%U5j)4q}lN)HSN%=xm=CA9vwA&YU<(!
zv*UR{3cSt^uZs9B&v@JN!VR_+gJL}9lGOM09ip8*8<n)5CU`lYksJyJ%~J7Mo3b}w
z0Ok$(&p6(h(c&4`>JY>?9~BB_xv>=K0Q>TO1T@}Qq>L#=3|PfmugH{BIm^lW&KC3I
z4$^dIN)=qqqBJ>^9LP-+A+9zll!&*f7_CD}%o%%B5-<D17x8vSqAlk|Y|QThM5nx|
z0PlOsX!y;sjz&dmuoKpC7%BT1{Za9KwWzxz-eyfS4g1z~txv(53C_3!?*NOD`gp^3
zQWNff@iw1iTEI3e+EKFnCmwIr8j&izjG8S@`(^DcWp=KH4HE=pPK&n<=l2%8fF*>2
zy-r}fEmc3wnpx)Yc9HmsHL?K1C6tC?YK{M7;~h7tO`2z)ctgUq397x{c(ZOz+GQNR
z@%$;KMF9MHjXc$$5j+d76tM)+EEJ5RlQ3<FSHY=Ct5C4Ts{%2zD^ukr#yb-&FmWfm
ze3#?X(L5K5InziZN3HU~auQ#$8qXD{y|m+P+6Oj!X>*$6t?bk!)ly=1$*!Hl6>ohP
zvYbD1?*Y%2Q+ufo!&^SH>{#%&h96vycjO#i=z)MXUpULJU1P3r!s%^;HF11m;~n|j
zW96#$Xtg9}w#Pd)Pu8OG7DJc}PR-k0adL9nOuVB3H4W@|Nt6Mic>771%xulM#k9OJ
zyYN6(ye}(anzg}4UR%Z6gvLbo4Hh#HW)@Sc;>`*?!F;YZ$@qzdWCgdPw2rrF$L$=3
zb>6(%DBe;1ATi}x#xw)oFI;dD3(vecu(TX3P`m<`M&m+%36`<r>!2OiIS#Kpz<YQT
zh5j|&J+SCqu>>zT!g?pGjHS3xU4O93S*d1W&kHaNRtta=FauCo0QC4yZ&}}dSa1qg
z7B&|0W%EEcTv2b8v7obB8DHluiO2PW5rw={fY*?n3@VHZyFr5(ml){p?lvyz6iWkV
z_;P>!%QwTy#TURr#LJ*pjWdwSuy%1~RT)opr;~QpfwxIK>~dqf`s*m`#DbC8?IV00
z=S}<;@U9cAQ&Dq21A<_xHjS20YGL_faVuD34wsLHMdmO?Z$)5O@;GNt*}46F`(c$p
ztD39SXtLb6Tx!zVLWC_W<@~h3y8ebsL$zR+hGm_X8@D|Q%E08r0kICXmyzyiMT=Qo
z>3O+v=dA1GuW}f%?DKL1RxS{J+}LTfGUUC#ug*_{(f?TWs0+YEs}c9Z39Atin(<lj
z)@EN0B|0o(39A|w!K<;{@2@)Pt<`MOwXQF^#;S;`d04w1+8)*P0Q798>}|!du^At}
zq8WTMtUX`BNTUz#YzD@0dkFf%g66he@PCkO{sT}0-ejJJO2o%s)C>==i4?Yj6+U)l
zGwg^pWoK~_zp{^RYA39KQ!Vi&|2z)6o8CI-<o&g5Q@AXm_mesN=b5r`Y{{A~q=(^8
z626@zzYP=|c=H3EA)Gx$o`w1d7C42u;r#rfX;`@!R_PyxdK0?XfD~u;@(Xz8G#}%g
z+2h#LUhEq#ogY~b@;CH%m*LTrlM{G{bpZ?)6;2gh8&>#R>95zaVG7sxA1IgY{8(;g
zpaPNnu_}(zz%S1Yei<|)1eCv53!o+8mcfetkt;^F4Q=e|f?EGve>q~miic@~bt@A0
z7z3@XDj8a;TwSx(I5vF7xU{t!)-4Phz6ltQ1{-2!_K2mBL(3RHu2J)$wGz`f2A@E8
zml3%-Gd5<zt23V(^-Q2sW3;vccjKjuBX5k$vp<p><L}S%-2mniM!A4=6X95qplco(
z$9%Eh0$(;eaw%Tp=yATg$4IcgwYOKr%4H&-;6sA{E0?999anYj4F$VeftNW~E*q|n
z<($lAHZ043&@OBk>*^g}Gu}7e-JM<2W%XKy2HiV7-9wv7_*-e<lV5nlE^8WJg2tEK
zZZan0pekx1VdI*BE%kc9TQ@AH-X?JxEU70>)fC%^Mka2~Fp(=F=?XE$d1}kWH0a-)
zDb!!X<EUQ_8@j!93pX2A2TZBg1G?JJkQxlBXG>L-`_*_He&wYUUUb^HN+nEO)j^jA
zBO1{q)Z}FC(MMKzv25cq@hu=@b<1T^U!S!mvu17g`rg%c*ShtF1|<a<LM?9m75a>a
zx+1)Yx3MF1BA@{Fv1qMW&Sd(=x_igRGufVOHoK<V(4eZIAfy>*VUyUn#M{Ir&=z%t
z<H)ryZW_?WjxwFK33Fuz<vCnkwq0HR_dRF=UF0g~DWM8>JKELcf8Vu6YQlRvSO*LV
zMWB`D?>N)0I{*82H&UG-@mjC(I@awf^uO<pBNg&{^vKYDeHq!mYwddM#%SH?z~J`l
zL=9?-OkJlRe@JQVyo6ScH!k-R_0P4zNL?|fL1BfFu)+tm(-FLL&X>Opt!{5z>$4LL
zX@jh~K8^-+6tbdq<*syXtlVKH-d#_a4wf`1-h?Go{6MVK)a)f-?5`&&DG@s8(qK#z
zx}>Vyr!+XQ=-fomQo9#IWPS`FI;hiNP7~?^T{(BTSe;JU&B3rD_zhunu&2SGChUcj
z<@CWeWYN2?wiZ7O$F?LjH5)Pv)b2=OWRD2bL81n;>PT#ARyl4Sah9dZ<zzIM3N+xe
z<(_A6_t<#vx;1O9Z139DcJCTPgL%#QRCMOPsUfgbS1i^%M69&-MRFK$)_$v2gZj-m
zL-jR0nC2Ws>~3N-@H+*ngF_AGHRn*#nfqNK?z~+4YLt<QbivRPXF8bFU{rG^6{D_;
zo5Z?(XN>V^9&3O)sMKIub1G{z<}NuF1Dnb&I>uf}U+7A}SId=0UH?pj@^yTLROAF{
z=rGrngL2m&*~5n+bleFjAf^4<L4(5eq=;>bbc9Lk=<s$XGImHeaYID3?j34STVq5w
zq#1V#4P9P^1#G5-_Dzy~_0V}8&Y?kZ#W_L>a%wd6(W0oqWa{>Kl3h-&L>(j`tbHfa
zU``Zab-HryG<a+jci5a0nF|xv!HWh}qj-rY+7sSrhfh`#duYjMPb4DXsr}Mef3zo3
zRqj3-hBQ_8ky~)V+jux{o2PS?UmS)t;a7DKrojl+u_BGo(AH{3mQ2%|jOjg}DBcuc
z8x+>X_%)c;j6y|YZdyruGcxR4I1R|3u_QLWFvNZ;O>k{+S=YqWU|16_qYTq9kE4lW
z!n8%PtDJFlgg^S%bx^0lkS5fH4bf0ZH=(R{N4%iTA@e~w89;Opr@@>i#09$YoO>wN
zoQtahG}zM5$Va$e1H2AaH5l52)dq@t<$k;ri|q=HsCt=iW~hU{c<W`k=c1uul%h#q
z<{L|fs$?<j60Su;7#+lEFsPZ|)$SXqb2?*G_6)X)jI2G7I+&xcgSL2U4_{H9Jx8@?
zPwd4EdGrNTwBHBSprGPGsGx>8k($whtv6+0%iklj9U9ab=Nc4NXb>BCA{`Ujy+GVu
ziC?EhzVg`$E(avF-`~_=Mgx)pJ$bIl>gTI|V^iY_L00WG9ZYF3KxL{{NlufcohGq4
zs@ROx*yD2)zR(6ib=^n}sw)JAHRSAQ2uCVqkVwMcI#$L}L+5pHqe1Zo+z7=rG#eCZ
zYPWu^+2&SGKWTtzgR;7wv<8C|${HxkJxjyTP*eJ_$`IpPHG1fvN`vxEsY2!R+6$%{
z8j`iESs7z~A=L<^gEkE&HKk24NkeE?aWUA6GkSw$8K;g!w8Nb`Sf;@kg}X>qdEV48
zf2BEb=-*=cO|2R_sM4T*bE;5%4YMkmbA+KsKTl$MVyZ|jU7>xJ1LoTA$Y?OCIdh6p
z8Uks}NepeRE#ra;gFYmnul2UQnnyL5)11DrIeWF&4?qlh+BV<ohIY2YiP|aDpk_TM
zsHTR%f4%R7{IhQHdO4y2JT=1UU`&Hy^^7%AIHtB(Ek*daL|d%piVnK;x5a8y<OFGG
z8aMT|nl0mHTfbHhiP1rt27{XVm{gY2r=i`~ls+Z$A)2za`~@H#1Zps;DS?5uoIwq(
zzorcC#XS+d<@CZ$*-)wBBXn@5!I-Apg^ke=ZmTD52xi;Co&wnsSZN2>EyD6mL=C~|
zl*>9O(_ltDWs08M3@46Og||WbcD_zEx)fjZ*0@HtGm>=x9h_+}rJl1oO*v~C8h-U&
zHtdvusrqJ!c&!pVEdrv0ISuC2GZ&#N=kDq_JkCoD^X0C<%lJth{Af_Q5kIK1hPtKR
zn|2rSu*ltno%K8z_Rg@aJbwV8>M|0fgE0*z)iV~UEjLNS<VS@;v0Sm7r->(YFrz_L
zg&C=;tvzS)TW>m4a_urMvg(!NSNb_jy{Lm74JJgfqne<h4-w@r;U)WJ2Z+-ouIS)M
zgYr=v2^D#U(hyRMBIxp}?atuh!aNZX5#$WXOFAghpneoZQb(@-Rob(gS5)(x5Br(S
zJJkj!b)$zG)KxeMsk=`*7dvdeowu>wCj!0)EVLf+RKrsm6jfLdifU*iC|L&YjC&7o
zhY;-=aWWvI_4uVqh6a@*$dD>)D5x4SBK9?srL3SOiC5a-rY^f^P`(j2Qh5!vT?2x)
z!CJ3&!SCRU3R`d_F6y93g9#025?XTa*WjrUOu^c}d}kEdX+VbXqz+~@s2stJR9QoW
zAc7HG+mkP(TE&&1IrSpYf!x$yZiA(|NeCLuh+wH!Pi}^WK5i6Wc4fNg9#po{mP1dR
zvpR?l-ZYpK#ao@OG3LHue>2CL+=nN1@Doq&lPYUyU`BY85(F0QWAvink`8t>s2|}y
zfsQeH&E-`m!*3sM5aCH3yu{-*Qe_Pj_#(V!mwjE;E?2zHxtM#1J|iyZU`B)L5gsEn
z<PTIs5)tgk9c(eu7G_6W`2Uw3p&@5SLqjW)9e2vf*uzEGoQEe9ZY#pJOY&kHEY&rs
zHJA|LLt!ns2^yw?Mln^)9E25bc?x3PKFnkz-uX88scQ>qP&|sCkm4FTH4)Un9(k#p
z<L^RN(<75t+MuV-eKaT^L620CKUodq<k19eg*|F*H&|_wrzT!@LO%jMR7@MB)%lbL
zgQ7`OmGumYB@6`Az{{nFW_S|eB3xW(gQz<1(op+E6BVegVH`Z#x%@IH8OnuX)lA>D
zY7uSlRp(e5jEUx}R#pDYH8fY76NhbsaBCYJOJljNLH*`bq52w{t|~{cv!v@}yedz&
zw*8ZV3$-4LRi{sCP+8?Atg?pYMk7Y{z+Qqyw{|#ehe+GM7%<d+fL4PEjTj1>prPTR
zFtu|Gw_Eh~kV5YiEvC?U9sFoeT;V6AATN3}3}h?RgjSUwbjl^1h!s>3Vr;$<NC#;e
zOj1Z|q%CJq!;<ff8ARU_E7b>D=wL~M+KpL4wKcr%*qE11dB^L|iT5=Fa*}vW2SXYR
zXv~l_K*QQON1$nFTkQssa&<|Cvt$^kgFp?Y9f82G#ym4>m}`CnHn%wwla*;3|MC>Y
zJ1r`iA)F2_H5hgTE<*})!!$I2n^1WOhVOzYH=;EkCQ%}E(5JzeCiF>FIdK{ml4wla
zcDrI_ap^|hCidqJglH4jb&#gPkjA75MdSB1C2SwzYXL$BZL#`VpeiR$!wYVWeGM1y
zRbD|AZ|#LVt`?<(Kn+GU_PbhjIf)v2A$25{i&YoaJ%cd{jEnJPMCcjEpTie*P^Q6z
zI?8IbjLqGGWISm*pVsS97Pwmjln(CVaJL5P#_n$3(q|3a&AX_BvN+u>WI{!IxOG>x
zP;v4$f9oAy+;IKDm2z@-p=^zN(>5JZt2W2#;8BBtYPM~zH1~|^?9u9N6Px169yk)O
zK3E5_8cb}J*szHjR*X_>690K(b5HEf<~y+to-`=jfG1Q~!{nz1bSTXdF^5ZJ@8Gfy
zk~EmnfTTcAo<lT592)So)hcAgdulRd;=7iAO$SpN3~0bq*Z>V<ehp|EDpYK@Sdz5@
zI<XkU6uzZkbkL^3pa!%l%5pE8j;;7tQ@hlfvPLqlQ}RM3Ii&(<4A()b1~XeERWbAC
zS>xAtNp*H+<p@02|4awp8q98y?|S{YUu!6)8y5?%1K}!vtWd3Oz>odQZSYt(P_My^
z#yp12&@gP<fUj*u+36Ld&Z6}6F15i^-2lA?^&9XMQeQ(yrvXQDI2G#{85;1bWN}dk
zPZ~^Uz?0CD=ROTluLev(ZR}V%=Xy&{*_R<apRO82z*+kv_Zp08z*&u|oHz|#m6nL}
z7NmssjW?{X_Qq-z3%~)L?GN*7FtH^%1Fbo;8n(`CiCOu+lh_ed6n3?ow)y5(UBRcp
ztd`i6W@&hQE%B(twwrrs0RF$^p@G)iLp6jRTVi%!-g^&B##5sT&Lp68aH+wlmi$u~
zrQuZ}g+w_qz42lt(GVT<X)s5jFIrdbfEqgNjkrtYEGO^PH6r3574fd=U`vAmjo1nq
zpuYqRsBmXWmEweJl_qDB1G$N!>r^Iv-b4v_B(M%5HJI3t$R;LgC@dN}U^v-S!P`nq
zlz`Ec0!jy$8jNa*OJS6T^jaga?7gdh1QN@o|5GITMrmmCw?rcL_e2LK(hGHvr@@$(
zJP?i1u(Neb#BC~Midpeat=PCblEI{a>Y!4Cc`Z>XbmsN4t38GoP1MekT^K2Qjl&5)
zY}gd3gHa8}wZv%HI1SZXOHQgZ@SE4*0aypE8cb}7)<A3SsyED%tL|IVwLWFL6=&SZ
zz+#nN%d*teXVstRU|EB?EwQZX&bij`MoA+t#*$pT1S3j-fUnj=Y4NYYBedg;Xo!|K
zVg&rWka0?uS2~KIzf4_T4p?eGLZ-otMqVZL<a}ue9vzvly-p!poc404h>6wnmh@pd
z_|st4k@*XorJ;e<h)2$p4GUU|woYAZF^tf`o(5wYu@_dAJD`T)h&tl<Yy95JSny^e
zPezQWKnND!@s}3^x>_#Mdb`KQd)KX5Yh`=auC{yE7#d8dqpMa+Zi0pZu4tyhJK2iy
zIiDy0QX4GQg{d{DAI(x&eGM}w6pnCTRoQ=ld4gGc7*?6}$}%w(qyZ*it^JBXgFy;w
z4V2|BreVo}ru1Q>LTr>!qlXTvG$`McDpX#>yM#>%QYL_j*CT7V3hivAgEkE&HKk24
zNkhw~8G~h9Sc3bqXrR?_$1k_R+APe<sMnL5agFxw6i-MF=8gD0CV5r|I~tUZ@+qmb
zhEg%giFVl&)tu$3t0&hK^YxfE2&=0cH5e2{SiQ2`r((#1ld#-655}b?twO=hc@?D0
zgLRkNAZ<4CV4a?E<w2Pc)+#a&inDF7Q|D4K<UyexCq={d6KWom_un~XyE(p{hR44s
zqapx0sM27Hn)@O&<)&z;Z5y&SYLyR`lY{U!=y<L;&6AT22&qpkNC$fwOlrtpt+w1G
z4I{iqU=XvU7@{7nB~Axl8VooBUub}a2*?p=QW|z5u%j^c$Xcs)WxfWpjzFGbmIm)W
z0*^Ht5j4uM0;IzMHJEe+4u!Tn!)geRG-i-zPo9j3@Pz!2U(~^v1``@H7MP%+9y$V3
z!^NT(z80HPsca!Y2V)vcIRazS6b<ERW7gp1Q18{_hzbF(>EKF(0gbtm254CDPo>GV
z;4Rq<PQ&(^`(mxa(a?o}pq2xyW9q_b8dO&a3Tenoj~Kc{;Uu;dGs?J8n4=`W95B^#
zxUjBz)L=$4rUElGEElDC(;h2VwMVNZf3qC1%2jYW;0HaaH`%pvS*n_=R9$;R!LC+Z
z3kt5`>R8UnTxQRV77yBm4R!ozP+Q?A(2x6(hW%C)UPL@gYzzb6YnkY3g^9ZEp$0`2
zCWN9Iin9m`aF><c6({FZyme7Ud5o!st_9SzpNTXW5J62yN$x2cUbR+f3JtT0cf;$(
zR9i2F)scG*3ahk)6xQI63LRoTxX3s))7e|6L9L85D5}sP6xBbQ1Mkdt8^a!<n9U(h
z23e(jGBl_hL55UWL%Tb|DZDj!LhFi%t^+a?z8Emna$!<e&T23rf}yaMyfhitK1_gQ
z)V{EUPIQ$YimSUCaMivyX)q#!t9m0ej1)$=)xN=E2G+#&Hx>}XoJf?s5|GrsLupVx
zf+VRT_a+TBU=%_5Tn$B{3g;9B*L0Ai!GI`|0wrV2bU=r2S-<ZY&U7_bbx;*grmInt
zlcixiBFd+Rt;!_7zZgW}-h^j$kfTBAC_j=)YgkgTAt|+4`sz@@y^p6auj?R6gCPxx
zl8W-@tYJf8L7Cq;-e{G*mA-a_P6VX1T%XlV4AY>hASI+3XW=}5YmMEd(ISla*r`c7
zb8u(1QmR%4?Xojb7=^%(vBXCWTbY9}YYA3qv|YOZ>kt|+lPQ;jCCmBdcT;vYRm_*1
z9Dk)gK!xtKdrN<Mqyk%NZ*#_6%biKXev4KfhUm)aOfjD?7SiRh;-R#a%|b9JJqC=z
z`K+BTjvYu3+GEv;v}=#2k?Cdr9k?0RBff3TEi>hkTRZ@^m1fYOoL#YvQ#V$fTm>eH
z;R@{@LtETpwPdW{3?^LwS}*f2mcgjZsxqGHR<+0b!teKYbG19*r^Y;a&NzynUHQM<
z(0FXiX&W=C{xs+aF9qh8ZH8s)%IWP+#x0hM<CSIJa%0OzD%Gr0O!sv4^rXS`e6;`_
z<@ELuG(MY7Rb6=QmGnlZkhb#KwX1_0;L>;S_>w+k53C1(J0VsqcLKKmF?Q)s+BjQk
zADy@{S0;aItpg7hrwch)Or&g_=3f}8PQYxuik;mH+Y)-0<^UxQ?73{r9m;~yz=N@P
zs5}Jj;AEUiZf4LPcM5jaI2qk!wCHCV$A!mRbZ3l{Ic4~!FRTa1GsMn9ZpN5D${E3u
z(^!BD+2^bo+;-7e2otKOAO{YV%ShOQQJ4u)87S{ALlSd*&q9HNjHQ?;52KC1Z*maM
z;6Kbm*a~vx0?2WEeI$4U#)6T-%cKSKH&^kw@Dxv#In>h~Q-&MN7>jng&V*C2azhn6
zKT@(Y#vK278uOq4**=KQW1O%lKW1nB#g=gS)3PxaFQ915-Rcx7+(<~}x+<`e^$gz(
z&S&G^kH&(ba&WWxFfX}SnBaOH=dW`h(wyUm=Zu9zg-ouR6%;MpbSV7w_(8{-C=|;T
zC$r6-vUA4qs5-vZA#XI0bD-oX8%ObUkkxT+iKiOOi^c+uYkgA9DRG0jf*7M?#I6`e
zT?T;%W1%#O({ijR3OBpOys=1fj9=kN7$@SB6UFUz%ROkj#<AkQo?8r+A@b-w6XW>J
z_#nJ5{Oa7z)m)BCb9NPrl|je#XfL1>&6A^!#)4fomcvsvBIdy#-!DPGOcgSxci~j-
z#b~)#Fv*)QQ7!~GSgc&(T&nOukDeo!W+hoDdIj$S!~53(A8X-H9~|r8!0+qfPd^+N
z!(qbrOZ?9b@OdVDe;j;19u5M>02~|PNWn1($0j&7!?6X9t#Ay%aVZ>^!GY;)gJU}!
zJK(@Hcfv6Y$K`O~{dd7J0>>yEsLyUV_P}urq`MbB@!tF3z<XT*htT;-kgtLx4aaG|
zj;LQ)H~j6@a9jh2&~HD;t?H=i1V1&dg+FMA1;--zJ_er|I4~{bFAIka$2c4la7@DC
zz;OT${M|t~a&Y9~D8PYy7vU5C{o`E2pvG;~qzT$VkD^D@V;(w*&bimTpUxdPOy?e^
z^WbA1olh6Q=K}aV7Cw(XOc%n(!o&19_&Dw`Jsv)eKTH?F$D+gZgnP}q>4|uc#T)5K
z@SBtADV}gDUE&F+(bGNQ47$`4&ZK8~!r640C!9l<d&0T&ynD?D==mvn0ewu0UPvFC
zq8HH>DY}xbO3@_kOwlgdouWOoH$_*|H7UB5_NC}Lx*iqj$3GX}Yu-aI8KfKN<M8X_
z?=>I(2_=LM5W11j6rqEJZX$Fup<4*uO6U-wmlApzq1y=EPUsFocM>{G=;eg&B6Nh%
zQ9^eUx`)ucgzh8s3PP_W^eRHrgkDYPHH7Xb^jbnKLdOWr5Sk^_CUl(82|_0cbqGB`
z=s`krgysn?5LzU(MCf&dx`dVqtq@uzbc)bvLJtu-L+JH{-azP$gx*Bx69~PT&|3(7
zBB8eudK;lnBJ_4bpG@de2)%>QrxN-!LhmH>E<&G9=rag?CZTr|dJm!Z68bDcpH1j}
zgg%GR=Ms89q0b}q0YaZo=nDvaA)zlK^u>g}gwU4~`Z7XaPUtHLeI=o<BJ|aSzJ|~T
z34JZ0uOsyJgua2$Hxl|LLf=g2TL^tCp>HGf?S#IA(03C0E<)c;=z9o#FQM-v^!<c>
zfY1*T`XNF;Oz1}l{V1UyBlP2heuB_X68b4ZKTYUo2>mRfpCk11gnoh0FB1ACLcdJt
zR|x$op<g5P>x6!T&~Fm@EkeId=ywSHE}`Ee^!tSVfY2Wj`XfSrOz2Mt{VAb8BlPEl
z{({h768bAbe@*Cb2>mUgza#Ybg#LlhKN9*ULMfq)&_5G;n9#ov`d32#M(E!OeTdM1
z5c*F-|3&D-g#Me*{}B3L!VHrz6OIHN9dH~4$I);c1IHXV=E5-#j`?sbfa6#=7Q%5H
z9LK}42#yorI1!G;aGV6k$#9$k$Ek2Ef#WndPKV<RIF`b3CLCwMaW)*w;5f$w&t}Wb
zO^5kEcCJb1v-3>v8~lY!Qa;SiM>M@;^I>`kyTClm9)su$;pBaE@fJis*5n@-c^@mh
zkCooXD!|>%lJNK8*RW1=>tWUf_h#KD>w#PKhSTZvzp&L3w#H;@RoH3)>yxl`CR?w<
z`UI?B!Y(%1B`U06z&1$O<4pE=6}CaZh=dK8Y@-Sz0+y1nL6dD#VJRO*muy9z*=Cb%
zQ809g_XOza9%QS@hE&MuK4hr}xzuErsgR{U<SY-e&1BnE$XPyQnFrZnvYjeqnFnFR
z(yGf%wo5_5RUbAYVWTG7t-?kGY>$NPHQ7EDwnxCOkgzLFc9jadLcr1zcD2c_QDJET
z+b?0)n#@vR`vq)F!ZIeys<1Huvn6cYWD_dP7O+VPb4+$Xg-r_BK?%#5EU&^23RpqH
ziY6<mu!4YHCt<G1$|~$S0jo$@)nrpDtRi635_ZUBGb(Iaz^<3D8%%bi3cFswZj!Jk
znCxa1c9VeJB4JN7*{v$<76H3W!k%QZ+f~?Y0`_DHdy2{KP+?CNu%}Ac(@b`!3VW)6
z-6dg9H`y~(*j)nlObNT&WcR4BXA0Q8680>UJzIs{D`59Y*mF$wTorbofZZ=)&okKr
zD(rp%d%lFdz+^8}Vb2$^7fINQP4*HM_96j$sf4}EWG`1?FBPy?NZ2b)_9_+j3IThy
zguTXO52~<N3)pKV>~$u4y$XA+fW1M&-e|HnsjxQ)*qbHnEhc-b3VXAFy-mX2ZnAf%
zu(t`=J0<L0CVRIEd#8ZCN5bA~viGU5_XybgCF}zx`=APYzkq#6!ai)WkEpN@3D`#^
z>|-YTxC;BIfPF&3K54Q~sjyE7*rz4zGba123j4HxeNMtYZ?Z3_u+ItD7bWaVCi}7q
z`=Wq-MZ&&nvahMIuL#)JCF~m}`=$!}x`2I4!oF>?@2IeE3D|cf?0Y8rz6$%Ufc-$i
zerU2Esjwdi*pDUbCno!;3j48u{Y=7sZn9sfu%8LoFD2|(Ci}Gt`=x;WM#6q;vfrt&
z-w4?6CF~C-`=bi`y@35m!l=oZ3j33Q{aL~eo9r(t?9T%BR|)%@$^Ndw{wiP(N!UM3
z_D>b|kbwP5!X7r+zg5`31nfT&_Ft1338hu~9|1EHqVbwYunrYwCj7?FQ4)4^f*qs6
zjuNmr5;ix%=Bcnb0yba579`lQDr~-hEtIh166|;twot$pN!SSqcA^SfBw&jr?4$%c
zS%obYuu~-L)C60i!cGye(<JQl1Uo~8ohD#QCG5-uJ4=Nv6|l1<Y*~Vxqr%P>u;mhV
zZi1bs!j=oz`4V<Pf;~osoiAV)O4wr)>>?F*p@6NBu$2k6N`<Wuu%v`_CRmpWOA1)G
zg!Lp?uL|oHu+<W_Cc)OKu+;+ACt>RnY`qHW6R>^>yEwrvQDOZ8wn4%kmtc=qVH*UD
zNZ3GvZB$`Iz)})6m|&Y!SW3V)OW2kK+p5Ag3)ql^U7BE*sjwjd+a_V#6KsbH+a_Q;
zC2TmsE>~eY1#FjujU?Ep3fm=MyCrN-g6&mdy9I2Ygk6zfSE{gm0(O;zr4#IG6?T<?
zT_a)p6YN?Qc8!2p5;m4#85L#;SXRR91RGajSpl1nu*n2-RM>=o9gwht36@h~2LvoH
zVTA-Ms<6C(l_c!C1annbNx;eyR!Oj`3M&iPl!Q$u*dY}*C15iWc71}~pu%PZ>_!Q@
zDZ!qg!fq6>n<ea)1bd<iyIH_)m9X0q>`5x@Rsp+R!k(O9Pf=mF3)meJ_S6J>nhLu^
z!0wc=yAtf_D(p@HdxnHPGr{gwVb2h-dnD}M1bdbWyGOvDEn)X1*mG3avjyzA5_W%r
zJx_%_SHK>Su;(Y(3sl$x0`@`)dr^YDScSb%z+NI@FHNwQsj!y_*vlpC6$$oA74~ug
zdzFN}I>BC}!d@j{4@%f;6YO;=>_Gv0y@b6X!QQCCUN2y8lCU=?*jrTCn*{8w685$P
zd%FsItAM>j!rqx+?^0p!5U_Vk*n1M}y(;Y80`@)$dw+s`K!v?ez&<EpA4;$ftFR9W
z*heJnqY3sg74{JU`?!RCBEdeX!agowpOUaoC)j6H*rx>Svl8~X1pB-S`>cR{LBhV6
zU|&*UUl6b_OW0Qu?5is5%L4W_3Hy42eM5zPO~Ae>Vc$xyZ>z9x3fOlf?7Io}Jr(vH
z0sFp${UE`9sKUN4U_X+uA1ByPRM?LM?57g;vjqFO3j3*m{X)WinP9(CVZRWtUrX3;
z6707s?AHSJI|=)Jg8e~-{Z7FCC}Dp}Fsj1-C}2#&{+wWkRTvYnzew0$6YOs)>@NcL
zcL{qa!TzDb{w`qul(2s#*uyI9p91!83Hwii{a1zkTfmGC(d98aSfWGe85tdZm#0I*
zj_P1XtFR6MJ4V9hbg;Q9>=*%?Ct>qD*a8(cPr#0qu!SA$I2CrRfE_Pki#pf|D(rXx
zJ5j<Gcd(OG*ogvmvV@(|!A@0SCkxmT2|KNWovy-`2-q1CwzPwtslv_>u(KrW><+d}
zg`Fi}=SbM{4tA~zJ4e9I>%ak-^ZDNk;P1l^vd44`u?suk1IB$|jArOC{5cGxFd(c3
zp$~;V5c*N*2VnyW8$ci^z@P_9p#Z}gbjc7Lhw16?ar$Ap6h4+7rf0#&S%>K|_*ixr
z#t8rmg9U5^1sD!sdr*LYKf3}22<fvl3J|ns`%!?fJR3s+0`JU50Yd9+5(NmJvx6u=
zc$^hbfB-nV4h0BtvkD3o5T;R>2H|=Xt_R^J6mA0H78D?u%x*&g!o}>#C_q4%JrxBA
z`LerEfS@jWCJGR?W%r^0fmwDR3J`i__oD#8RrY)oAbiSRgaQOe*-KG?5GZ>E3J~OE
zuSNmFnC!JEK%kPn0R;#}vNxju!AABr6d;_)-iZPP4B2~7fRG@2KMD}^V;@2R!g}nZ
zC_vzjeF6mt&9P6T0Kqr*ITRqg#=eLG1kl)5P=F8_`#K5`1Y_Sq0m5ADyC^^)i~Rrv
z2vxBkqX5Au_A?Y9+{Au~0tA%UZ%}}c5&Jy~5ENp6LIJ`)?9V7bV2Aw`1qj`+hfsjv
z4Eq-f5Po6*K>-3R%uIk_LOFC43P*u32ZcEx%tv892n$hI2*M&17J;xBg~cG8g2E{v
zoQA?_AS^{;DF|nya5f0bQCJSb`6!$Z!i6YY2*L^!R)CO1Aqhe^3f&;AMqxDweJJ#S
z(2qht2pdq?00Kb)I<qW=0(4i|W)z@9%7##YE+^ZD0(2_bP86Wq$abLs9YeMo1?c**
zeJDWZj$MTUbl=!DC_o2|StwW_WKqb1FoD7Z2nSF&074#xJP0KeN+6U`D1$JC!W0NI
zD9nIxBMLWya5D-wgK#Sf&~ae5qX1n4b_WX3_-A*b0L^>$3>2UN&+b71n&|A=C_p2e
zJr@ONX0r!SfQB@CAqvn`W-mbj8pG`6C_r<Uy$S_r(6R?nfF>(@Jqpk$Wp6?Onw{*e
zC_uxKy#obkI<j}80F6WTJ`|w&$3BPxH1OC*P=F>J`#1{FNMoNu0h(d#vnW7Ai+uqF
zXiBj!qX3O1_B9lsImEt+0yKEocTj*P4f{R{&}d;lLIIj3?58L|!-M?-1!!8ZU!wqx
z2lhJ@pn1UlhypYK7()T7c=i_*pb}?)M**s7_D>X`B4+<a0jgSNbbtVrDeFK1s!MhZ
z3Q!@kc_=`Y$Bsn-Dm8XI3Q%pa6H$PQiJgoBR6T473Q)PQGf;r)gPnx}R1oYO6rc)V
zkA)Kd9(Ga3r7*!}F?`aK;SXEU!B%##RUItZ!8!p2r@A^=cL(d~V7(n|HLonzblhv)
IeakKX4;>9U7XSbN

literal 0
HcmV?d00001

diff --git a/code/.vs/project_1/FileContentIndex/f8cc6325-60b7-47bb-9394-1a94f2951e42.vsidx b/code/.vs/project_1/FileContentIndex/f8cc6325-60b7-47bb-9394-1a94f2951e42.vsidx
new file mode 100644
index 0000000000000000000000000000000000000000..1868686a1fc306c2a46da4347fa0909dda5bb580
GIT binary patch
literal 69168
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

literal 0
HcmV?d00001

diff --git a/code/.vs/project_1/FileContentIndex/read.lock b/code/.vs/project_1/FileContentIndex/read.lock
new file mode 100644
index 0000000..e69de29
diff --git a/code/.vs/project_1/v17/.futdcache.v2 b/code/.vs/project_1/v17/.futdcache.v2
new file mode 100644
index 0000000000000000000000000000000000000000..279c2511b54e7971002bffaa8b6de6b89f4447d4
GIT binary patch
literal 115
zcmZQ%U|=wEvx*5;OUkcM2q?<WN=+^)jwvol)-47J8O9{%r=-RdKqTS~^^%K0Y$l*K
wUg!M0w9NF<qQsKS{5)2d)TGjMj)0uRlC=DyTsFtNO6P#kJD;ZV0+pfw08)Y>;Q#;t

literal 0
HcmV?d00001

diff --git a/code/.vs/project_1/v17/.suo b/code/.vs/project_1/v17/.suo
new file mode 100644
index 0000000000000000000000000000000000000000..dce9f7f6aa0af4e29ffbbfc17be1960ec78fab35
GIT binary patch
literal 6144
zcmeHLO=uHQ5S}!)+EUOW77-7@L-1gt3AReWC`!{5E3GXpLRVz7i8VFtLN?J@<4M%B
zC$IG;2vQO8qPFN!QL(3Zs;GFdH^GbA_|0ZtyGhgLuLub{VRzn}nZB7fZ)V<XKfLc)
zy#IL5XDR?c*=af3N-ZY3%`~PRr1O}zoXuvL#bXRDs3Q*yk&0h}9MnToz;U|9M_D#>
zQuE50H<$RUnT3Ow_kGIP+8{UIloK9=MwKS0585wc)I+HftK_pgsmW$`cRsiHjP)aY
zbr_%|b{(TA^z$=L!<fr>A~Z@K>ZT)juMhhT{hTLk$NG}_oIA#Jm=yeSUbq4a!q6Kh
zH>^-$726iYXbO~mU>W>Vz)4UN`U-wS{}#;3)o+LFHbehb;J;=E8e`6Bei#_H8tdx>
z>(wwG_^<gNa_RZ6$KK}U|4RMgLovd7L&Pz^iTSVVuh;w+fy}j=>wr1$nI~$1kh5@O
zd4PL1PDOF<90y`-oqc1Sb+O%4(tpULq3bw_{zOLqq0lA7$_Ye|d0mi70>_mQIzvM=
zg6^}h-*Hd?olgwikS0WnVki0^5yNapQK14N_ewE?HinKf3{44iRdG5GOZu@p-Y0j&
zIS$iQ?3cU3TsOA5;8COh;-0Ep{d`yKU0tH)5$hFD>0-inBInKd&-XO<eS#-+Sh#UK
zVCBEa^6K-S`^jqaznt$+?*>VY@6U?sFWY<9SaT>qK9W#=ofJZmOQGzEPx1&#UIL|1
z(#xSjE?^<$0abxKf38Z@i_$oWksCCPzCL}Ww4^dWp831}C`)f=g1ZMEed!x~{%vG-
z>FT{V{j9k#fedRZM_j)c=HBgk(0%&FTy9qWo9}_`y0{G+Aqx1UVP{B9IR@kEL_|qw
zl9o_h8k0PdqJ|?<uRIxXD_Z*cAp=~D3tobEBkk=z;O$BW<d_yIW)<H9tiK&kGAad=
zVRu}fR^xWsSxkHlZ8o{|b1s<iR=a=w{F1oVBnsl+3SpcfU+>fUb(mgM`W9|RAHKdd
y{=H-L!V|@J?C{6iFWcwa&K>_fcJ>!rQ{ze2Z2uaMScFPEVC8>(=f6~A{r(3qK8$q$

literal 0
HcmV?d00001

diff --git a/code/Game.cs b/code/Game.cs
new file mode 100644
index 0000000..b35b98d
--- /dev/null
+++ b/code/Game.cs
@@ -0,0 +1,59 @@
+
+using Sandbox;
+using System;
+using System.Linq;
+
+//
+// You don't need to put things in a namespace, but it doesn't hurt.
+//
+namespace MyGame;
+
+/// <summary>
+/// This is your game class. This is an entity that is created serverside when
+/// the game starts, and is replicated to the client. 
+/// 
+/// You can use this to create things like HUDs and declare which player class
+/// to use for spawned players.
+/// </summary>
+public partial class MyGame : Sandbox.GameManager
+{
+	/// <summary>
+	/// Called when the game is created (on both the server and client)
+	/// </summary>
+	public MyGame()
+	{
+		if ( Game.IsClient )
+		{
+			Game.RootPanel = new Hud();
+		}
+	}
+
+	/// <summary>
+	/// A client has joined the server. Make them a pawn to play with
+	/// </summary>
+	public override void ClientJoined( IClient client )
+	{
+		base.ClientJoined( client );
+
+		// Create a pawn for this client to play with
+		var pawn = new Pawn();
+		client.Pawn = pawn;
+		pawn.Respawn();
+		pawn.DressFromClient( client );
+
+		// Get all of the spawnpoints
+		var spawnpoints = Entity.All.OfType<SpawnPoint>();
+
+		// chose a random one
+		var randomSpawnPoint = spawnpoints.OrderBy( x => Guid.NewGuid() ).FirstOrDefault();
+
+		// if it exists, place the pawn there
+		if ( randomSpawnPoint != null )
+		{
+			var tx = randomSpawnPoint.Transform;
+			tx.Position = tx.Position + Vector3.Up * 50.0f; // raise it up
+			pawn.Transform = tx;
+		}
+	}
+}
+
diff --git a/code/pawn/Pawn.cs b/code/pawn/Pawn.cs
new file mode 100644
index 0000000..9d7b89d
--- /dev/null
+++ b/code/pawn/Pawn.cs
@@ -0,0 +1,194 @@
+using Sandbox;
+using System.ComponentModel;
+
+namespace MyGame;
+
+public partial class Pawn : AnimatedEntity
+{
+	[Net, Predicted]
+	public Weapon ActiveWeapon { get; set; }
+
+	[ClientInput]
+	public Vector3 InputDirection { get; set; }
+	
+	[ClientInput]
+	public Angles ViewAngles { get; set; }
+
+	/// <summary>
+	/// Position a player should be looking from in world space.
+	/// </summary>
+	[Browsable( false )]
+	public Vector3 EyePosition
+	{
+		get => Transform.PointToWorld( EyeLocalPosition );
+		set => EyeLocalPosition = Transform.PointToLocal( value );
+	}
+
+	/// <summary>
+	/// Position a player should be looking from in local to the entity coordinates.
+	/// </summary>
+	[Net, Predicted, Browsable( false )]
+	public Vector3 EyeLocalPosition { get; set; }
+
+	/// <summary>
+	/// Rotation of the entity's "eyes", i.e. rotation for the camera when this entity is used as the view entity.
+	/// </summary>
+	[Browsable( false )]
+	public Rotation EyeRotation
+	{
+		get => Transform.RotationToWorld( EyeLocalRotation );
+		set => EyeLocalRotation = Transform.RotationToLocal( value );
+	}
+
+	/// <summary>
+	/// Rotation of the entity's "eyes", i.e. rotation for the camera when this entity is used as the view entity. In local to the entity coordinates.
+	/// </summary>
+	[Net, Predicted, Browsable( false )]
+	public Rotation EyeLocalRotation { get; set; }
+
+	public BBox Hull
+	{
+		get => new
+		(
+			new Vector3( -16, -16, 0 ),
+			new Vector3( 16, 16, 64 )
+		);
+	}
+
+	[BindComponent] public PawnController Controller { get; }
+	[BindComponent] public PawnAnimator Animator { get; }
+
+	public override Ray AimRay => new Ray( EyePosition, EyeRotation.Forward );
+
+	/// <summary>
+	/// Called when the entity is first created 
+	/// </summary>
+	public override void Spawn()
+	{
+		SetModel( "models/citizen/citizen.vmdl" );
+
+		EnableDrawing = true;
+		EnableHideInFirstPerson = true;
+		EnableShadowInFirstPerson = true;
+	}
+
+	public void SetActiveWeapon( Weapon weapon )
+	{
+		ActiveWeapon?.OnHolster();
+		ActiveWeapon = weapon;
+		ActiveWeapon.OnEquip( this );
+	}
+
+	public void Respawn()
+	{
+		Components.Create<PawnController>();
+		Components.Create<PawnAnimator>();
+
+		SetActiveWeapon( new Pistol() );
+	}
+
+	public void DressFromClient( IClient cl )
+	{
+		var c = new ClothingContainer();
+		c.LoadFromClient( cl );
+		c.DressEntity( this );
+	}
+
+	public override void Simulate( IClient cl )
+	{
+		SimulateRotation();
+		Controller?.Simulate( cl );
+		Animator?.Simulate();
+		ActiveWeapon?.Simulate( cl );
+		EyeLocalPosition = Vector3.Up * (64f * Scale);
+	}
+
+	public override void BuildInput()
+	{
+		InputDirection = Input.AnalogMove;
+
+		if ( Input.StopProcessing )
+			return;
+
+		var look = Input.AnalogLook;
+
+		if ( ViewAngles.pitch > 90f || ViewAngles.pitch < -90f )
+		{
+			look = look.WithYaw( look.yaw * -1f );
+		}
+
+		var viewAngles = ViewAngles;
+		viewAngles += look;
+		viewAngles.pitch = viewAngles.pitch.Clamp( -89f, 89f );
+		viewAngles.roll = 0f;
+		ViewAngles = viewAngles.Normal;
+	}
+
+	bool IsThirdPerson { get; set; } = false;
+
+	public override void FrameSimulate( IClient cl )
+	{
+		SimulateRotation();
+
+		Camera.Rotation = ViewAngles.ToRotation();
+		Camera.FieldOfView = Screen.CreateVerticalFieldOfView( Game.Preferences.FieldOfView );
+
+		if ( Input.Pressed( "view" ) )
+		{
+			IsThirdPerson = !IsThirdPerson;
+		}
+
+		if ( IsThirdPerson )
+		{
+			Vector3 targetPos;
+			var pos = Position + Vector3.Up * 64;
+			var rot = Camera.Rotation * Rotation.FromAxis( Vector3.Up, -16 );
+
+			float distance = 80.0f * Scale;
+			targetPos = pos + rot.Right * ((CollisionBounds.Mins.x + 50) * Scale);
+			targetPos += rot.Forward * -distance;
+
+			var tr = Trace.Ray( pos, targetPos )
+				.WithAnyTags( "solid" )
+				.Ignore( this )
+				.Radius( 8 )
+				.Run();
+			
+			Camera.FirstPersonViewer = null;
+			Camera.Position = tr.EndPosition;
+		}
+		else
+		{
+			Camera.FirstPersonViewer = this;
+			Camera.Position = EyePosition;
+		}
+	}
+
+	public TraceResult TraceBBox( Vector3 start, Vector3 end, float liftFeet = 0.0f )
+	{
+		return TraceBBox( start, end, Hull.Mins, Hull.Maxs, liftFeet );
+	}
+
+	public TraceResult TraceBBox( Vector3 start, Vector3 end, Vector3 mins, Vector3 maxs, float liftFeet = 0.0f )
+	{
+		if ( liftFeet > 0 )
+		{
+			start += Vector3.Up * liftFeet;
+			maxs = maxs.WithZ( maxs.z - liftFeet );
+		}
+
+		var tr = Trace.Ray( start, end )
+					.Size( mins, maxs )
+					.WithAnyTags( "solid", "playerclip", "passbullets" )
+					.Ignore( this )
+					.Run();
+
+		return tr;
+	}
+
+	protected void SimulateRotation()
+	{
+		EyeRotation = ViewAngles.ToRotation();
+		Rotation = ViewAngles.WithPitch( 0f ).ToRotation();
+	}
+}
diff --git a/code/pawn/PawnAnimator.cs b/code/pawn/PawnAnimator.cs
new file mode 100644
index 0000000..d8ed4ff
--- /dev/null
+++ b/code/pawn/PawnAnimator.cs
@@ -0,0 +1,21 @@
+using Sandbox;
+using System;
+
+namespace MyGame;
+
+public class PawnAnimator : EntityComponent<Pawn>, ISingletonComponent
+{
+	public void Simulate()
+	{
+		var helper = new CitizenAnimationHelper( Entity );
+		helper.WithVelocity( Entity.Velocity );
+		helper.WithLookAt( Entity.EyePosition + Entity.EyeRotation.Forward * 100 );
+		helper.HoldType = CitizenAnimationHelper.HoldTypes.None;
+		helper.IsGrounded = Entity.GroundEntity.IsValid();
+
+		if ( Entity.Controller.HasEvent( "jump" ) )
+		{
+			helper.TriggerJump();
+		}
+	}
+}
diff --git a/code/pawn/PawnController.cs b/code/pawn/PawnController.cs
new file mode 100644
index 0000000..73bd01b
--- /dev/null
+++ b/code/pawn/PawnController.cs
@@ -0,0 +1,174 @@
+using Sandbox;
+using System;
+using System.Collections.Generic;
+
+namespace MyGame;
+
+public class PawnController : EntityComponent<Pawn>
+{
+	public int StepSize => 24;
+	public int GroundAngle => 45;
+	public int JumpSpeed => 300;
+	public float Gravity => 800f;
+
+	HashSet<string> ControllerEvents = new( StringComparer.OrdinalIgnoreCase );
+
+	bool Grounded => Entity.GroundEntity.IsValid();
+
+	public void Simulate( IClient cl )
+	{
+		ControllerEvents.Clear();
+
+		var movement = Entity.InputDirection.Normal;
+		var angles = Entity.ViewAngles.WithPitch( 0 );
+		var moveVector = Rotation.From( angles ) * movement * 320f;
+		var groundEntity = CheckForGround();
+
+		if ( groundEntity.IsValid() )
+		{
+			if ( !Grounded )
+			{
+				Entity.Velocity = Entity.Velocity.WithZ( 0 );
+				AddEvent( "grounded" );
+			}
+
+			Entity.Velocity = Accelerate( Entity.Velocity, moveVector.Normal, moveVector.Length, 200.0f * ( Input.Down( "run" ) ? 2.5f : 1f ), 7.5f );
+			Entity.Velocity = ApplyFriction( Entity.Velocity, 4.0f );
+		}
+		else
+		{
+			Entity.Velocity = Accelerate( Entity.Velocity, moveVector.Normal, moveVector.Length, 100, 20f );
+			Entity.Velocity += Vector3.Down * Gravity * Time.Delta;
+		}
+
+		if ( Input.Pressed( "jump" ) )
+		{
+			DoJump();
+		}
+
+		var mh = new MoveHelper( Entity.Position, Entity.Velocity );
+		mh.Trace = mh.Trace.Size( Entity.Hull ).Ignore( Entity );
+
+		if ( mh.TryMoveWithStep( Time.Delta, StepSize ) > 0 )
+		{
+			if ( Grounded )
+			{
+				mh.Position = StayOnGround( mh.Position );
+			}
+			Entity.Position = mh.Position;
+			Entity.Velocity = mh.Velocity;
+		}
+
+		Entity.GroundEntity = groundEntity;
+	}
+
+	void DoJump()
+	{
+		if ( Grounded )
+		{
+			Entity.Velocity = ApplyJump( Entity.Velocity, "jump" );
+		}
+	}
+
+	Entity CheckForGround()
+	{
+		if ( Entity.Velocity.z > 100f )
+			return null;
+
+		var trace = Entity.TraceBBox( Entity.Position, Entity.Position + Vector3.Down, 2f );
+
+		if ( !trace.Hit )
+			return null;
+
+		if ( trace.Normal.Angle( Vector3.Up ) > GroundAngle )
+			return null;
+
+		return trace.Entity;
+	}
+
+	Vector3 ApplyFriction( Vector3 input, float frictionAmount )
+	{
+		float StopSpeed = 100.0f;
+
+		var speed = input.Length;
+		if ( speed < 0.1f ) return input;
+
+		// Bleed off some speed, but if we have less than the bleed
+		// threshold, bleed the threshold amount.
+		float control = (speed < StopSpeed) ? StopSpeed : speed;
+
+		// Add the amount to the drop amount.
+		var drop = control * Time.Delta * frictionAmount;
+
+		// scale the velocity
+		float newspeed = speed - drop;
+		if ( newspeed < 0 ) newspeed = 0;
+		if ( newspeed == speed ) return input;
+
+		newspeed /= speed;
+		input *= newspeed;
+
+		return input;
+	}
+
+	Vector3 Accelerate( Vector3 input, Vector3 wishdir, float wishspeed, float speedLimit, float acceleration )
+	{
+		if ( speedLimit > 0 && wishspeed > speedLimit )
+			wishspeed = speedLimit;
+
+		var currentspeed = input.Dot( wishdir );
+		var addspeed = wishspeed - currentspeed;
+
+		if ( addspeed <= 0 )
+			return input;
+
+		var accelspeed = acceleration * Time.Delta * wishspeed;
+
+		if ( accelspeed > addspeed )
+			accelspeed = addspeed;
+
+		input += wishdir * accelspeed;
+
+		return input;
+	}
+
+	Vector3 ApplyJump( Vector3 input, string jumpType )
+	{
+		AddEvent( jumpType );
+
+		return input + Vector3.Up * JumpSpeed;
+	}
+
+	Vector3 StayOnGround( Vector3 position )
+	{
+		var start = position + Vector3.Up * 2;
+		var end = position + Vector3.Down * StepSize;
+
+		// See how far up we can go without getting stuck
+		var trace = Entity.TraceBBox( position, start );
+		start = trace.EndPosition;
+
+		// Now trace down from a known safe position
+		trace = Entity.TraceBBox( start, end );
+
+		if ( trace.Fraction <= 0 ) return position;
+		if ( trace.Fraction >= 1 ) return position;
+		if ( trace.StartedSolid ) return position;
+		if ( Vector3.GetAngle( Vector3.Up, trace.Normal ) > GroundAngle ) return position;
+
+		return trace.EndPosition;
+	}
+
+	public bool HasEvent( string eventName )
+	{
+		return ControllerEvents.Contains( eventName );
+	}
+
+	void AddEvent( string eventName )
+	{
+		if ( HasEvent( eventName ) )
+			return;
+
+		ControllerEvents.Add( eventName );
+	}
+}
diff --git a/code/ui/Hud.razor b/code/ui/Hud.razor
new file mode 100644
index 0000000..211327f
--- /dev/null
+++ b/code/ui/Hud.razor
@@ -0,0 +1,20 @@
+@using Sandbox;
+@using Sandbox.UI;
+
+@namespace MyGame
+@inherits RootPanel
+@attribute [StyleSheet]
+
+<root>
+    <ChatBox/>
+    <VoiceList/>
+
+    <div class="header">
+        <label>Shooter Game</label>
+        <label class="subtitle">A template to kick start the production of your own games.</label>
+    </div>
+</root>
+
+@code
+{
+}
\ No newline at end of file
diff --git a/code/ui/Hud.razor.scss b/code/ui/Hud.razor.scss
new file mode 100644
index 0000000..62f8300
--- /dev/null
+++ b/code/ui/Hud.razor.scss
@@ -0,0 +1,21 @@
+Hud
+{
+    .header
+    {
+        left: 128px;
+        top: 128px;
+        flex-direction: column;
+
+        label
+        {
+            font-family: Roboto;
+            color: white;
+            font-size: 32px;
+
+            &.subtitle
+            {
+                font-size: 16px;
+            }
+        }
+    }
+}
diff --git a/code/ui/mainmenu/ActiveLobby.razor b/code/ui/mainmenu/ActiveLobby.razor
new file mode 100644
index 0000000..5807256
--- /dev/null
+++ b/code/ui/mainmenu/ActiveLobby.razor
@@ -0,0 +1,118 @@
+@using Sandbox;
+@using System;
+@using System.Linq;
+@using System.Threading.Tasks;
+@using Sandbox.Menu;
+@using Sandbox.UI;
+
+<root>
+    <label class="game-title">
+        @Game.Menu.Package.Title
+    </label>
+
+    @if ( Lobby == null ) 
+    {
+        <div class="controls">
+            <a class="button">Loading...</a>
+
+            <a class="button" href="/lobby/list">Return</a>
+        </div>
+    }
+    else
+    {
+
+        <div class="controls">
+            <div class="col">
+                <label>Members (@Lobby.MemberCount/@Lobby.MaxMembers)</label>
+
+                <div class="span">
+                    @foreach (var member in Lobby.Members)
+                    {
+                        <img class="avatar" src="avatar:@member.Id" tooltip="@member.Name" />
+                    }
+                </div>
+            </div>
+
+           @if ( Lobby.Owner.IsMe )
+            {
+                <div class="span">
+                    @if ( MaxPlayersSupported > 1 )
+                    {
+                        <FormGroup class="form-group">
+                            <Label>Maximum Players</Label>
+                            <Control>
+                                <SliderControl ShowRange=@true Min=@(1f) Max=@MaxPlayersSupported Value:bind=@Game.Menu.Lobby.MaxMembers />
+                            </Control>
+                        </FormGroup>
+                    }
+
+                    <FormGroup class="form-group">
+                        <Label>Map</Label>
+                        <Control>
+                            <SlimPackageCard OnLaunch=@OnMapClicked Package=@MapPackage />
+                        </Control>
+                    </FormGroup>
+                </div>
+            }
+
+           <div class="spacer" />
+
+
+            <a class="button" @onclick=@LeaveLobby>Leave Lobby</a>
+
+            <a class="button" @onclick=@Start>Start</a>
+
+            <a class="button" href="/lobby/list">Return</a>
+        </div>
+    }
+</root>
+
+@code
+{
+    Friend Owner => Lobby.Owner;
+    ILobby Lobby => Game.Menu.Lobby;
+
+    int MaxPlayersSupported { get; set; } = 1;
+    Package MapPackage { get; set; }
+
+    void OnMapClicked()
+    {
+        Game.Overlay.ShowPackageSelector( "type:map sort:popular", OnMapSelected );
+        StateHasChanged();
+    }
+
+    void OnMapSelected( Package map )
+    {
+        MapPackage = map;
+        Game.Menu.Lobby.Map = map.FullIdent;
+
+        StateHasChanged();
+    }
+
+    public void LeaveLobby()
+    {
+        Lobby?.Leave();
+
+        this.Navigate( "/lobby/list" );
+    }
+
+    async Task Start()
+    {
+        await Game.Menu.StartServerAsync( Game.Menu.Lobby.MaxMembers, $"{Game.Menu.Lobby.Owner.Name}'s game", Game.Menu.Lobby.Map );
+    }
+
+    async void FetchPackage()
+    {
+        MapPackage = await Package.FetchAsync( Game.Menu.Lobby?.Map ?? "facepunch.square", true );
+    }
+
+    protected override void OnAfterTreeRender( bool firstTime )
+    {
+       FetchPackage();
+    }
+
+    protected override void OnParametersSet()
+    {
+        MaxPlayersSupported = Game.Menu.Package.GetMeta<int>( "MaxPlayers", 1 );
+    }
+}
\ No newline at end of file
diff --git a/code/ui/mainmenu/FrontPage.razor b/code/ui/mainmenu/FrontPage.razor
new file mode 100644
index 0000000..30237db
--- /dev/null
+++ b/code/ui/mainmenu/FrontPage.razor
@@ -0,0 +1,39 @@
+@using Sandbox;
+@using System.Linq;
+@using System.Threading.Tasks;
+@using Sandbox.Menu;
+@using Sandbox.UI;
+
+<root>
+    <div class="game-title">
+        @Game.Menu.Package.Title
+    </div>
+
+    <div class="controls">
+        @if (Game.InGame)
+        {
+            <a class="button" onclick=@LeaveGame>Leave</a>
+        }
+        else
+        {
+            <a class="button" href="/setup">Play</a>
+
+            <a class="button" href="/lobby/list">Lobbies</a>
+
+            @if ( Game.Menu.Package.SupportsSavedGames && Game.Menu.SavedGames.Any())
+            {
+                <a class="button" href="/setup/save">Load Save</a>
+            }
+        }
+
+        <a class="button" @onclick=@Game.Menu.Close>Quit</a>
+    </div>
+</root>
+
+@code
+{
+    void LeaveGame()
+    {
+        Game.Menu.LeaveServer( "Leaving" );
+    }
+}
\ No newline at end of file
diff --git a/code/ui/mainmenu/LoadingScreen.razor b/code/ui/mainmenu/LoadingScreen.razor
new file mode 100644
index 0000000..2a66ced
--- /dev/null
+++ b/code/ui/mainmenu/LoadingScreen.razor
@@ -0,0 +1,30 @@
+@using Sandbox;
+@using Sandbox.UI;
+@using System.Linq;
+@using System.Threading.Tasks;
+@using Sandbox.Menu;
+
+@inherits RootPanel
+@implements Sandbox.Menu.ILoadingScreenPanel
+@attribute [StyleSheet]
+
+<root style="flex-direction: column;">
+    <div class="background" />
+
+    <div style="flex-grow: 1;" />
+
+    <div class="controls" style="flex-direction: row; justify-content: center;">
+        <a class="button">@( Progress.Title ?? "Loading..." )</a>
+    </div>
+</root>
+
+@code
+{
+    public LoadingProgress Progress;
+
+    public void OnLoadingProgress( LoadingProgress progress )
+    {
+        Progress = progress;
+        StateHasChanged();
+    }
+}
diff --git a/code/ui/mainmenu/LoadingScreen.razor.scss b/code/ui/mainmenu/LoadingScreen.razor.scss
new file mode 100644
index 0000000..6c5893a
--- /dev/null
+++ b/code/ui/mainmenu/LoadingScreen.razor.scss
@@ -0,0 +1,50 @@
+
+LoadingScreen
+{
+    background-color: #262934;
+    padding: 128px 128px;
+    opacity: 1;
+    flex-direction: column;
+    font-size: 25px;
+    width: 100%;
+    height: 100%;
+    position: absolute;
+    transition: all 0.3s ease-out;
+    color: rgba( white, 0.8 );
+
+    .background
+    {
+        position: absolute;
+        width: 100%;
+        height: 100%;
+        background-image: url( https://files.facepunch.com/tony/1b1311b1/boxes.webm );
+        opacity: 0.2;
+        background-size: contain;
+        filter: blur( 20px );
+        mask: linear-gradient( 45deg, white, white, black );
+        mask-scope: filter;
+    }
+
+    &:intro
+    {
+        opacity: 0;
+        transform: scaleX( 1.1 );
+    }
+
+    .game-title
+    {
+        font-family: Roboto;
+        font-weight: 700;
+        font-size: 70px;
+        color: rgba( white, 1 );
+    }
+
+    .controls
+    {
+        flex-direction: column;
+        gap: 50px;
+        align-items: flex-start;
+        font-family: Roboto;
+        text-transform: uppercase;
+    }
+}
diff --git a/code/ui/mainmenu/LobbyBrowser.razor b/code/ui/mainmenu/LobbyBrowser.razor
new file mode 100644
index 0000000..e778e23
--- /dev/null
+++ b/code/ui/mainmenu/LobbyBrowser.razor
@@ -0,0 +1,64 @@
+@using Sandbox;
+@using System;
+@using System.Linq;
+@using System.Threading.Tasks;
+@using Sandbox.Menu;
+@using Sandbox.UI;
+
+<root>
+    <label class="game-title">
+        @Game.Menu.Package.Title
+    </label>
+
+    <div class="controls">
+        <div class="span">
+            <label>Showing @Game.Menu.Lobbies.Count() @(Game.Menu.Lobbies.Count() == 1 ? "lobby" : "lobbies")</label>
+            <i class="with-click" tooltip="Refresh lobbies" @onclick=@Refresh>refresh</i>
+        </div>
+
+        <div class="scroll">
+            @foreach ( var lobby in Game.Menu.Lobbies )
+            {
+                <a class="button" @onclick=@( () => JoinLobby( lobby ) ) >@(lobby.Owner.Name)'s lobby (@lobby.MemberCount/@lobby.MaxMembers)</a>
+            }
+        </div>
+
+        <div class="spacer" />
+
+        <a class="button" @onclick=@CreateLobbyAsync>Create Lobby</a>
+        <a class="button" href="/">Return</a>
+    </div>
+</root>
+
+@code
+{
+    public async void CreateLobbyAsync()
+    {
+        await Game.Menu.CreateLobbyAsync( 64, "game", true );
+        Game.Menu.Lobby.Map = "facepunch.square";
+        this.Navigate( "/lobby/active" );
+    }
+
+    public async void JoinLobby( ILobby lobby )
+    {
+        if ( lobby == null ) return;
+
+        // don't exist in two lobbies at once
+        Game.Menu.Lobby?.Leave();
+
+        await lobby.JoinAsync();
+        this.Navigate( "/lobby/active" );
+    }
+
+    public async void Refresh()
+    {
+        await Game.Menu.QueryLobbiesAsync( null, 1 );
+
+        StateHasChanged();
+    }
+
+    protected override int BuildHash()
+    {
+        return HashCode.Combine( Game.Menu.Lobbies.Count() );
+    }
+}
\ No newline at end of file
diff --git a/code/ui/mainmenu/MainMenu.razor b/code/ui/mainmenu/MainMenu.razor
new file mode 100644
index 0000000..247e7bc
--- /dev/null
+++ b/code/ui/mainmenu/MainMenu.razor
@@ -0,0 +1,39 @@
+@using System;
+@using Sandbox;
+@using Sandbox.UI;
+
+@inherits Sandbox.UI.NavHostPanel
+@implements Sandbox.Menu.IGameMenuPanel
+@attribute [StyleSheet]
+
+<root style="flex-direction: column;">
+    <div class="background" />
+    <div class="navigator-canvas" slot="navigator-canvas" />
+</root>
+
+@code
+{
+    public MainMenu()
+    {
+        DefaultUrl = "/";
+
+        AddDestination( "/", typeof( FrontPage ) );
+        AddDestination( "/setup", typeof( SetupGame ) );
+
+        AddDestination( "/lobby/list", typeof( LobbyBrowser ) );
+        AddDestination( "/lobby/active", typeof( ActiveLobby ) );
+
+        BindClass( "ingame", () => Game.InGame );
+    }
+
+    [GameEvent.Menu.ServerJoined]
+    public void OnServerJoined() => Navigate( "/" );
+
+    [GameEvent.Menu.ServerLeave]
+    public void OnServerLeave() => Navigate ("/" );
+
+    protected override int BuildHash()
+    {
+        return HashCode.Combine( Game.InGame, Game.Menu.Lobby, Game.Menu.Lobby?.Map );
+    }
+}
diff --git a/code/ui/mainmenu/MainMenu.razor.scss b/code/ui/mainmenu/MainMenu.razor.scss
new file mode 100644
index 0000000..745df88
--- /dev/null
+++ b/code/ui/mainmenu/MainMenu.razor.scss
@@ -0,0 +1,195 @@
+
+MainMenu
+{
+    background-color: #262934;
+    padding: 128px 128px;
+    opacity: 1;
+    flex-direction: column;
+    font-size: 25px;
+    width: 100%;
+    height: 100%;
+    position: absolute;
+    transition: all 0.3s ease-out;
+    color: rgba( white, 0.8 );
+
+    .background
+    {
+        position: absolute;
+        width: 100%;
+        height: 100%;
+        background-image: url( https://files.facepunch.com/tony/1b1311b1/boxes.webm );
+        opacity: 0.2;
+        background-size: cover;
+        filter: blur( 20px );
+        mask: linear-gradient( 45deg, white, white, black );
+        mask-scope: filter;
+        background-repeat: no-repeat;
+    }
+
+    &:intro
+    {
+        opacity: 0;
+        transform: scaleX( 1.1 );
+    }
+
+    &.ingame
+    {
+        background-color: #262934ee;
+        backdrop-filter: blur(10px);
+
+        .background
+        {
+            opacity: 0;
+        }
+    }
+
+    .scroll
+    {
+        flex-direction: column;
+        max-height: 386px;
+        overflow: scroll;
+        gap: 50px;
+    }
+
+    .spacer
+    {
+        height: 1px;
+        background-image: linear-gradient( to right, rgba( white, 0.4 ), rgba( white, 0 ) );
+        width: 512px;
+        margin: 16px 0px;
+    }
+
+    .game-title
+    {
+        font-family: Roboto Condensed;
+        font-weight: 700;
+        font-size: 70px;
+        color: rgba( white, 1 );
+        padding-bottom: 64px;
+    }
+
+    .col
+    {
+        flex-direction: column;
+        gap: 16px;
+    }
+
+    .controls
+    {
+        flex-direction: column;
+        gap: 50px;
+        align-items: flex-start;
+        text-transform: uppercase;
+
+        a, .button
+        {
+            font-family: Roboto;
+
+            &:hover
+            {
+                color: rgba( white, 1 );
+                font-weight: 900;
+                sound-in: ui.button.over;
+                cursor: pointer;
+            }
+
+            &:active
+            {
+                sound-in: ui.button.press;
+            }
+        }
+
+        .span
+        {
+            gap: 128px;
+        }
+    }
+
+    .navigator-canvas
+    {
+        flex-direction: column;
+        height: 100%;
+        flex-grow: 1;
+        flex-shrink: 0;
+    }
+
+    .navigator-body
+    {
+        position: absolute;
+        left: 0;
+        right: 0;
+        bottom: 0;
+        top: 0;
+        flex-direction: column;
+        justify-content: center;
+        transition: opacity 0.15s ease-out;
+
+        &.hidden
+        {
+            opacity: 0;
+        }
+    }
+}
+
+FormGroup
+{
+    flex-direction: column;
+    min-width: 300px;
+    gap:16px;
+}
+
+SlimPackageCard
+{
+    flex-direction: row;
+    gap: 12px;
+    align-items: center;
+
+    > i
+    {
+        &:hover
+        {
+            cursor: pointer;
+            color: white;
+            transform: scale( 1.1 );
+            sound-in: ui.button.over;
+        }
+
+        &:active
+        {
+            sound-in: ui.button.press;
+        }
+    }
+}
+
+i
+{
+    font-family: Material Icons;
+    text-transform: lowercase;
+
+    &.with-click
+    {
+        &:hover
+        {
+            cursor: pointer;
+            color: white;
+            transform: scale( 1.1 );
+            sound-in: ui.button.over;
+        }
+
+        &:active
+        {
+            sound-in: ui.button.press;
+        }
+    }
+}
+
+.avatar
+{
+    width: 64px;
+    height: 64px;
+
+    &:hover
+    {
+        border: 1px solid white;
+    }
+}
\ No newline at end of file
diff --git a/code/ui/mainmenu/SavedGames.razor b/code/ui/mainmenu/SavedGames.razor
new file mode 100644
index 0000000..a7c0d1e
--- /dev/null
+++ b/code/ui/mainmenu/SavedGames.razor
@@ -0,0 +1,42 @@
+@using Sandbox;
+@using System;
+@using System.Linq;
+@using Sandbox.UI;
+
+<root>
+    <label class="game-title">
+        @Game.Menu.Package.Title
+    </label>
+
+    <div class="controls">
+        @foreach ( var save in Game.Menu.SavedGames.OrderByDescending( x => x.Time ) )
+        {
+            <a class="button" @onclick=@(() => LoadSavedGame( save ))>@save.Name - @save.Time</a>
+        }
+
+        <div class="spacer" />
+
+        <a class="button" href="/">Return</a>
+    </div>
+</root>
+
+@code
+{
+    async void LoadSavedGame( SavedGame save )
+    {
+        if ( save != null )
+        {
+            Game.Menu.Lobby.SavedGame = save.Name;
+
+            if ( !string.IsNullOrEmpty( save.Map ) )
+                Game.Menu.Lobby.Map = save.Map;
+
+            await Game.Menu.StartServerAsync( Game.Menu.Lobby.MaxMembers, Game.Menu.Lobby.Title, Game.Menu.Lobby.Map ?? "facepunch.square" );
+         }
+    }
+   
+    protected override int BuildHash()
+    {
+        return HashCode.Combine( Game.Menu.Lobby, Game.Menu.Lobby?.Map );
+    }
+}
\ No newline at end of file
diff --git a/code/ui/mainmenu/SetupGame.razor b/code/ui/mainmenu/SetupGame.razor
new file mode 100644
index 0000000..4d4de0e
--- /dev/null
+++ b/code/ui/mainmenu/SetupGame.razor
@@ -0,0 +1,76 @@
+@using Sandbox;
+@using System;
+@using System.Linq;
+@using System.Threading.Tasks;
+@using Sandbox.Menu;
+@using Sandbox.UI;
+
+<root>
+    <label class="game-title">
+        @Game.Menu.Package.Title
+    </label>
+
+    <div class="controls">
+        <div class="span">
+            @if ( MaxPlayersSupported > 1 )
+            {
+                <FormGroup class="form-group">
+                    <Label>Maximum Players</Label>
+                    <Control>
+                        <SliderControl ShowRange=@true Min=@(1f) Max=@MaxPlayersSupported Value:bind=@Game.Menu.Lobby.MaxMembers />
+                    </Control>
+                </FormGroup>
+            }
+
+            <FormGroup class="form-group">
+                <Label>Map</Label>
+                <Control>
+                    <SlimPackageCard OnLaunch=@OnMapClicked Package=@MapPackage />
+                </Control>
+            </FormGroup>
+        </div>
+
+        <div class="spacer" />
+
+        <a class="button" onclick=@Play>Start</a>
+        <a class="button" href="/">Return</a>
+    </div>
+</root>
+
+@code
+{
+    int MaxPlayersSupported { get; set; } = 1;
+    int MaxPlayers { get; set; } = 1;
+    Package MapPackage { get; set; }
+
+    void OnMapClicked()
+    {
+        Game.Overlay.ShowPackageSelector( "type:map sort:popular", OnMapSelected );
+        StateHasChanged();
+    }
+
+    void OnMapSelected( Package map )
+    {
+        MapPackage = map;
+        StateHasChanged();
+    }
+
+    protected override async Task OnParametersSetAsync()
+    {
+        MaxPlayersSupported = Game.Menu.Package.GetMeta<int>( "MaxPlayers", 1 );
+        MaxPlayers = MaxPlayersSupported;
+
+        MapPackage = await Package.FetchAsync( "facepunch.square", false );
+        StateHasChanged();
+    }
+
+    async Task Play()
+    {
+        await Game.Menu.StartServerAsync( MaxPlayers, $"My game", MapPackage.FullIdent );
+    }
+
+    protected override int BuildHash()
+    {
+        return HashCode.Combine( MaxPlayers, MapPackage );
+    }
+}
\ No newline at end of file
diff --git a/code/ui/mainmenu/SlimPackageCard.razor b/code/ui/mainmenu/SlimPackageCard.razor
new file mode 100644
index 0000000..0a0d37a
--- /dev/null
+++ b/code/ui/mainmenu/SlimPackageCard.razor
@@ -0,0 +1,30 @@
+@using System;
+@using Sandbox;
+
+<root>
+    @if ( Package == null )
+    {
+        <div class="button" @onclick=@OnCardClicked>Select Package</div>
+    }
+    else
+    {
+        <div class="button" @onclick=@OnCardClicked>@Package.Title</div>
+        <i tooltip="See information about this package" @onclick=@( () => Game.Overlay.ShowPackageModal( Package.FullIdent ) )>info</i>
+    }
+</root>
+
+@code
+{
+    public Package Package { get; set; }
+    public System.Action OnLaunch { get; set; }
+
+    void OnCardClicked()
+    {
+        OnLaunch?.Invoke();
+    }
+
+    protected override int BuildHash()
+    {
+        return HashCode.Combine( Package );
+    }
+}
diff --git a/code/weapon/Pistol.cs b/code/weapon/Pistol.cs
new file mode 100644
index 0000000..eca7827
--- /dev/null
+++ b/code/weapon/Pistol.cs
@@ -0,0 +1,32 @@
+using Sandbox;
+
+namespace MyGame;
+
+public partial class Pistol : Weapon
+{
+	public override string ModelPath => "weapons/rust_pistol/rust_pistol.vmdl";
+	public override string ViewModelPath => "weapons/rust_pistol/v_rust_pistol.vmdl";
+
+	[ClientRpc]
+	protected virtual void ShootEffects()
+	{
+		Game.AssertClient();
+
+		Particles.Create( "particles/pistol_muzzleflash.vpcf", EffectEntity, "muzzle" );
+
+		Pawn.SetAnimParameter( "b_attack", true );
+		ViewModelEntity?.SetAnimParameter( "fire", true );
+	}
+
+	public override void PrimaryAttack()
+	{
+		ShootEffects();
+		Pawn.PlaySound( "rust_pistol.shoot" );
+		ShootBullet( 0.1f, 100, 20, 1 );
+	}
+
+	protected override void Animate()
+	{
+		Pawn.SetAnimParameter( "holdtype", (int)CitizenAnimationHelper.HoldTypes.Pistol );
+	}
+}
diff --git a/code/weapon/Weapon.cs b/code/weapon/Weapon.cs
new file mode 100644
index 0000000..bca09ff
--- /dev/null
+++ b/code/weapon/Weapon.cs
@@ -0,0 +1,205 @@
+using Sandbox;
+using System.Collections.Generic;
+
+namespace MyGame;
+
+public partial class Weapon : AnimatedEntity
+{
+	/// <summary>
+	/// The View Model's entity, only accessible clientside.
+	/// </summary>
+	public WeaponViewModel ViewModelEntity { get; protected set; }
+
+	/// <summary>
+	/// An accessor to grab our Pawn.
+	/// </summary>
+	public Pawn Pawn => Owner as Pawn;
+
+	/// <summary>
+	/// This'll decide which entity to fire effects from. If we're in first person, the View Model, otherwise, this.
+	/// </summary>
+	public AnimatedEntity EffectEntity => Camera.FirstPersonViewer == Owner ? ViewModelEntity : this;
+
+	public virtual string ViewModelPath => null;
+	public virtual string ModelPath => null;
+
+	/// <summary>
+	/// How often you can shoot this gun.
+	/// </summary>
+	public virtual float PrimaryRate => 5.0f;
+
+	/// <summary>
+	/// How long since we last shot this gun.
+	/// </summary>
+	[Net, Predicted] public TimeSince TimeSincePrimaryAttack { get; set; }
+
+	public override void Spawn()
+	{
+		EnableHideInFirstPerson = true;
+		EnableShadowInFirstPerson = true;
+		EnableDrawing = false;
+
+		if ( ModelPath != null )
+		{
+			SetModel( ModelPath );
+		}
+	}
+
+	/// <summary>
+	/// Called when <see cref="Pawn.SetActiveWeapon(Weapon)"/> is called for this weapon.
+	/// </summary>
+	/// <param name="pawn"></param>
+	public void OnEquip( Pawn pawn )
+	{
+		Owner = pawn;
+		SetParent( pawn, true );
+		EnableDrawing = true;
+		CreateViewModel( To.Single( pawn ) );
+	}
+
+	/// <summary>
+	/// Called when the weapon is either removed from the player, or holstered.
+	/// </summary>
+	public void OnHolster()
+	{
+		EnableDrawing = false;
+		DestroyViewModel( To.Single( Owner ) );
+	}
+
+	/// <summary>
+	/// Called from <see cref="Pawn.Simulate(IClient)"/>.
+	/// </summary>
+	/// <param name="player"></param>
+	public override void Simulate( IClient player )
+	{
+		Animate();
+
+		if ( CanPrimaryAttack() )
+		{
+			using ( LagCompensation() )
+			{
+				TimeSincePrimaryAttack = 0;
+				PrimaryAttack();
+			}
+		}
+	}
+
+	/// <summary>
+	/// Called every <see cref="Simulate(IClient)"/> to see if we can shoot our gun.
+	/// </summary>
+	/// <returns></returns>
+	public virtual bool CanPrimaryAttack()
+	{
+		if ( !Owner.IsValid() || !Input.Down( "attack1" ) ) return false;
+
+		var rate = PrimaryRate;
+		if ( rate <= 0 ) return true;
+
+		return TimeSincePrimaryAttack > (1 / rate);
+	}
+
+	/// <summary>
+	/// Called when your gun shoots.
+	/// </summary>
+	public virtual void PrimaryAttack()
+	{
+	}
+
+	/// <summary>
+	/// Useful for setting anim parameters based off the current weapon.
+	/// </summary>
+	protected virtual void Animate()
+	{
+	}
+
+	/// <summary>
+	/// Does a trace from start to end, does bullet impact effects. Coded as an IEnumerable so you can return multiple
+	/// hits, like if you're going through layers or ricocheting or something.
+	/// </summary>
+	public virtual IEnumerable<TraceResult> TraceBullet( Vector3 start, Vector3 end, float radius = 2.0f )
+	{
+		bool underWater = Trace.TestPoint( start, "water" );
+
+		var trace = Trace.Ray( start, end )
+				.UseHitboxes()
+				.WithAnyTags( "solid", "player", "npc" )
+				.Ignore( this )
+				.Size( radius );
+
+		//
+		// If we're not underwater then we can hit water
+		//
+		if ( !underWater )
+			trace = trace.WithAnyTags( "water" );
+
+		var tr = trace.Run();
+
+		if ( tr.Hit )
+			yield return tr;
+	}
+
+	/// <summary>
+	/// Shoot a single bullet
+	/// </summary>
+	public virtual void ShootBullet( Vector3 pos, Vector3 dir, float spread, float force, float damage, float bulletSize )
+	{
+		var forward = dir;
+		forward += (Vector3.Random + Vector3.Random + Vector3.Random + Vector3.Random) * spread * 0.25f;
+		forward = forward.Normal;
+
+		//
+		// ShootBullet is coded in a way where we can have bullets pass through shit
+		// or bounce off shit, in which case it'll return multiple results
+		//
+		foreach ( var tr in TraceBullet( pos, pos + forward * 5000, bulletSize ) )
+		{
+			tr.Surface.DoBulletImpact( tr );
+
+			if ( !Game.IsServer ) continue;
+			if ( !tr.Entity.IsValid() ) continue;
+
+			//
+			// We turn predictiuon off for this, so any exploding effects don't get culled etc
+			//
+			using ( Prediction.Off() )
+			{
+				var damageInfo = DamageInfo.FromBullet( tr.EndPosition, forward * 100 * force, damage )
+					.UsingTraceResult( tr )
+					.WithAttacker( Owner )
+					.WithWeapon( this );
+
+				tr.Entity.TakeDamage( damageInfo );
+			}
+		}
+	}
+
+	/// <summary>
+	/// Shoot a single bullet from owners view point
+	/// </summary>
+	public virtual void ShootBullet( float spread, float force, float damage, float bulletSize )
+	{
+		Game.SetRandomSeed( Time.Tick );
+
+		var ray = Owner.AimRay;
+		ShootBullet( ray.Position, ray.Forward, spread, force, damage, bulletSize );
+	}
+
+	[ClientRpc]
+	public void CreateViewModel()
+	{
+		if ( ViewModelPath == null ) return;
+
+		var vm = new WeaponViewModel( this );
+		vm.Model = Model.Load( ViewModelPath );
+		ViewModelEntity = vm;
+	}
+
+	[ClientRpc]
+	public void DestroyViewModel()
+	{
+		if ( ViewModelEntity.IsValid() )
+		{
+			ViewModelEntity.Delete();
+		}
+	}
+}
diff --git a/code/weapon/WeaponViewModel.cs b/code/weapon/WeaponViewModel.cs
new file mode 100644
index 0000000..7294980
--- /dev/null
+++ b/code/weapon/WeaponViewModel.cs
@@ -0,0 +1,22 @@
+using Sandbox;
+
+namespace MyGame;
+
+public partial class WeaponViewModel : BaseViewModel
+{
+	protected Weapon Weapon { get; init; }
+
+	public WeaponViewModel( Weapon weapon )
+	{
+		Weapon = weapon;
+		EnableShadowCasting = false;
+		EnableViewmodelRendering = true;
+	}
+
+	public override void PlaceViewmodel()
+	{
+		base.PlaceViewmodel();
+
+		Camera.Main.SetViewModelCamera( 80f, 1, 500 );
+	}
+}
diff --git a/untitled.prefab b/untitled.prefab
new file mode 100644
index 0000000..66d4db8
--- /dev/null
+++ b/untitled.prefab
@@ -0,0 +1,6 @@
+{
+  "SchemaVersion": 1,
+  "Name": null,
+  "Description": null,
+  "Root": null
+}
\ No newline at end of file