From 2c3206ff94347cace84e1c296b0cbb1c3f2e5bd7 Mon Sep 17 00:00:00 2001 From: James Orson Date: Wed, 19 Jun 2024 08:39:38 -0700 Subject: [PATCH 01/10] 3: Add texture support From a90e54f69a3e6effd27980ee8f5f8cb0a73735f6 Mon Sep 17 00:00:00 2001 From: James Orson Date: Wed, 19 Jun 2024 08:43:11 -0700 Subject: [PATCH 02/10] 3: Rename branch --- issues/in-progress.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/issues/in-progress.md b/issues/in-progress.md index 0be7fea..a2d1589 100644 --- a/issues/in-progress.md +++ b/issues/in-progress.md @@ -6,7 +6,7 @@ Once completed, move the issue into [closed](./closed.md), and also close it wit ### [Issue Link](https://github.com/ExoKomodo/openwomb/issues/3) -### Branch - [3_sprites](https://github.com/exokomodo/openwomb/tree/3_sprites) +### [Branch](https://github.com/exokomodo/openwomb/tree/3_textures) ### Overview From 5907de2dd4fc05fae4c0dcdc9c8a469a44d24991 Mon Sep 17 00:00:00 2001 From: James Orson Date: Wed, 19 Jun 2024 08:46:48 -0700 Subject: [PATCH 03/10] 3: Fix paths --- issues/in-progress.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/issues/in-progress.md b/issues/in-progress.md index a2d1589..85fcd9f 100644 --- a/issues/in-progress.md +++ b/issues/in-progress.md @@ -20,10 +20,10 @@ This issue is to only implement the OpenGL way, as it provides a general-purpose ### Instructions 1. Read the [OpenGL tutorial for rendering textures to a quad](https://learnopengl.com/Getting-started/Textures). Now prepare for implementation. -1. Will require some changes to the [Primitives.ShadedObject.From function](./src/Womb/Graphics/Primitives.fs) -1. Will require some changes to the [Primitives.ShadedObject.UseMvpShader function](./src/Womb/Graphics/Primitives.fs) -1. Will require some changes to the [example shaders in the Playground example](./examples/Playground/Resources/Shaders/) +1. Will require some changes to the [Primitives.ShadedObject.From function](../src/Womb/Graphics/Primitives.fs) +1. Will require some changes to the [Primitives.ShadedObject.UseMvpShader function](../src/Womb/Graphics/Primitives.fs) +1. Will require some changes to the [example shaders in the Playground example](../examples/Playground/Resources/Shaders/) ### Acceptance Criteria -Be able to render an image to a shaded quad. To demonstrate this, modify the [Playground example](./examples/Playground) to render the [hello_world.bmp](./examples/Playground/Resources/Textures/hello_world.bmp). For proper completeness, demonstrate how we can color the texture in the shader as well. +Be able to render an image to a shaded quad. To demonstrate this, modify the [Playground example](../examples/Playground) to render the [hello_world.bmp](../examples/Playground/Resources/Textures/hello_world.bmp). For proper completeness, demonstrate how we can color the texture in the shader as well. From c6ec5d8e1981a7899a26ebdbc9779b0d50ce96f7 Mon Sep 17 00:00:00 2001 From: James Orson Date: Wed, 19 Jun 2024 09:14:12 -0700 Subject: [PATCH 04/10] 3: Fix up glGenTextures; Add glGenTexture --- src/Womb/Backends/OpenGL/Api/OpenGL1_1.fs | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/src/Womb/Backends/OpenGL/Api/OpenGL1_1.fs b/src/Womb/Backends/OpenGL/Api/OpenGL1_1.fs index 2b55fec..2132450 100644 --- a/src/Womb/Backends/OpenGL/Api/OpenGL1_1.fs +++ b/src/Womb/Backends/OpenGL/Api/OpenGL1_1.fs @@ -1,8 +1,11 @@ [] module Womb.Backends.OpenGL.Api.OpenGL1_1 +#nowarn "9" // Unverifiable IL due to fixed expression and NativePtr library usage + open Womb.Backends.OpenGL.Api.Common open Womb.Logging +open Microsoft.FSharp.NativeInterop type private DrawArrays = delegate of uint * int * int -> unit let mutable private _glDrawArrays = @@ -70,10 +73,18 @@ let mutable private _glDeleteTextures = DeleteTextures(fun _ _ -> warn (notLinked())) let glDeleteTextures n textures = _glDeleteTextures.Invoke(n, textures) -type private GenTextures = delegate of int * unativeint -> unit +type private GenTextures = delegate of int * nativeptr -> unit let mutable private _glGenTextures = GenTextures(fun _ _ -> warn (notLinked())) -let glGenTextures n textures = _glGenTextures.Invoke(n, textures) +let glGenTextures n = + let textures = Array.zeroCreate n + use ptr = fixed (&(textures.[0])) in + _glGenTextures.Invoke(n, ptr) + textures +let glGenTexture() = + let ptr = NativePtr.stackalloc 1 + _glGenTextures.Invoke(1, ptr) + NativePtr.get ptr 0 type private IsTexture = delegate of uint -> unit let mutable private _glIsTexture = From a4898f3e6d63c0331f368bb248738e33b0a24f46 Mon Sep 17 00:00:00 2001 From: James Orson Date: Wed, 19 Jun 2024 09:14:42 -0700 Subject: [PATCH 05/10] 3: If present, begin the binding of the texture. Add NOTE and TODO where appropriate. --- src/Womb/Graphics/Primitives.fs | 51 +++++++++++++++++++++++++++++---- 1 file changed, 46 insertions(+), 5 deletions(-) diff --git a/src/Womb/Graphics/Primitives.fs b/src/Womb/Graphics/Primitives.fs index 4b0aa2b..2991098 100644 --- a/src/Womb/Graphics/Primitives.fs +++ b/src/Womb/Graphics/Primitives.fs @@ -14,19 +14,49 @@ type ShadedObjectContext = VBO: uint; EBO: uint; Vertices: array; - Indices: array; } + Indices: array; + Texture: option; } static member Default () = { VAO = 0u VBO = 0u EBO = 0u Vertices = Array.empty - Indices = Array.empty } + Indices = Array.empty + Texture = None } - static member From (vertices) (indices) : ShadedObjectContext = + static member From (vertices) (indices) (textureOpt: option) : ShadedObjectContext = let vao = glGenVertexArray() let vbo = glGenBuffer() let ebo = glGenBuffer() + let textureId = + match textureOpt with + | Some _ -> + let id = glGenTexture() + glBindTexture GL_TEXTURE_2D id + + // TODO: Fix the type errors + // NOTE: Eventually we will add texturing options for the individual texture, but for now let's set some defaults + // NOTE: set the texture wrapping/filtering options (on the currently bound texture object) + // glTexParameteri GL_TEXTURE_2D GL_TEXTURE_WRAP_S GL_REPEAT + // glTexParameteri GL_TEXTURE_2D GL_TEXTURE_WRAP_T GL_REPEAT + // glTexParameteri GL_TEXTURE_2D GL_TEXTURE_MIN_FILTER GL_LINEAR_MIPMAP_LINEAR + // glTexParameteri GL_TEXTURE_2D GL_TEXTURE_MAG_FILTER GL_LINEAR + + // TODO: Generate the texture and mipmap + // NOTE: glTexImage2d explanation... + // The first argument specifies the texture target; setting this to GL_TEXTURE_2D means this operation will generate a texture on the currently bound texture object at the same target (so any textures bound to targets GL_TEXTURE_1D or GL_TEXTURE_3D will not be affected). + // The second argument specifies the mipmap level for which we want to create a texture for if you want to set each mipmap level manually, but we'll leave it at the base level which is 0. + // The third argument tells OpenGL in what kind of format we want to store the texture. Our image has only RGB values so we'll store the texture with RGB values as well. + // The 4th and 5th argument sets the width and height of the resulting texture. We stored those earlier when loading the image so we'll use the corresponding variables. + // The next argument should always be 0 (some legacy stuff). + // The 7th and 8th argument specify the format and datatype of the source image. We loaded the image with RGB values and stored them as chars (bytes) so we'll pass in the corresponding values. + // The last argument is the actual image data. + // glTexImage2D GL_TEXTURE_2D 0 GL_RGB width height 0 GL_RGB GL_UNSIGNED_BYTE data + glGenerateMipmap GL_TEXTURE_2D + // TODO: Free the image data from SDL + id + | None -> 0u glBindVertexArray vao @@ -46,6 +76,7 @@ type ShadedObjectContext = indices GL_STATIC_DRAW + // TODO: Adjust the stride parameter if a texture is present glVertexAttribPointer 0u 3u @@ -59,7 +90,8 @@ type ShadedObjectContext = VBO = vbo EBO = ebo Vertices = vertices - Indices = indices } + Indices = indices + Texture = None } static member UpdateIndices (indices) (context: ShadedObjectContext) : ShadedObjectContext = glBindBuffer @@ -85,6 +117,8 @@ type ShadedObjectContext = { context with Vertices = vertices } + // TODO: Allow for dynamic update of texture + static member Update (vertices) (indices) (context: ShadedObjectContext) : ShadedObjectContext = ShadedObjectContext.UpdateVertices vertices context |> ShadedObjectContext.UpdateIndices indices @@ -160,6 +194,8 @@ type ShadedObject = height ) + // TODO: Allow for dynamic update of texture + static member Update (vertices) (indices) (primitive: ShadedObject) : ShadedObject = match primitive with | Quad(context, shader, transform, width, height) -> Quad( @@ -185,6 +221,7 @@ type ShadedObject = let mvp = modelMatrix * viewMatrix * projectionMatrix glUniformMatrix4fv mvpUniform 1 mvp + // TODO: See if texture data or coords are best passed through uniforms. If so, modify this, otherwise, leave it be List.map ( fun uniformData -> @@ -287,7 +324,11 @@ type ShadedObject = ) ); ] @ uniforms ) - + + match context.Texture with + | Some texture -> + glBindTexture GL_TEXTURE_2D texture + | None -> () glBindVertexArray context.VAO glBindBuffer GL_ELEMENT_ARRAY_BUFFER From c7dac1e11dc9128843750faeaa6e96e853ad7bf9 Mon Sep 17 00:00:00 2001 From: James Orson Date: Wed, 19 Jun 2024 09:16:56 -0700 Subject: [PATCH 06/10] 3: Update issue --- issues/in-progress.md | 1 + 1 file changed, 1 insertion(+) diff --git a/issues/in-progress.md b/issues/in-progress.md index 85fcd9f..d83a1b8 100644 --- a/issues/in-progress.md +++ b/issues/in-progress.md @@ -20,6 +20,7 @@ This issue is to only implement the OpenGL way, as it provides a general-purpose ### Instructions 1. Read the [OpenGL tutorial for rendering textures to a quad](https://learnopengl.com/Getting-started/Textures). Now prepare for implementation. +1. Will require implementation of [glGenTextures in OpenGL1.1 API](../src/Womb/Backends/OpenGL/Api/OpenGL1_1.fs). Copy the pattern used with [glGenBuffers in OpenGL1.5 API](../src/Womb/Backends/OpenGL/Api/OpenGL1_5.fs), providing a helper for condition that `n=1`. 1. Will require some changes to the [Primitives.ShadedObject.From function](../src/Womb/Graphics/Primitives.fs) 1. Will require some changes to the [Primitives.ShadedObject.UseMvpShader function](../src/Womb/Graphics/Primitives.fs) 1. Will require some changes to the [example shaders in the Playground example](../examples/Playground/Resources/Shaders/) From e6f1e58eb0b0a37b3c6594eeda9dd026999e289d Mon Sep 17 00:00:00 2001 From: James Orson Date: Wed, 19 Jun 2024 09:26:26 -0700 Subject: [PATCH 07/10] 3: Add "None" texture for quad default for now --- src/Womb/Graphics/Primitives.fs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Womb/Graphics/Primitives.fs b/src/Womb/Graphics/Primitives.fs index 2991098..0ea6628 100644 --- a/src/Womb/Graphics/Primitives.fs +++ b/src/Womb/Graphics/Primitives.fs @@ -142,7 +142,7 @@ type ShadedObject = else None - static member CreateQuad vertexPaths fragmentPaths transform width height = + static member CreateQuad vertexPaths fragmentPaths transform width height texture = match ( Display.compileShader vertexPaths @@ -164,7 +164,7 @@ type ShadedObject = 1u; 2u; 3u; // second triangle vertex order as array indices |] Quad( - ShadedObjectContext.From vertices indices, + ShadedObjectContext.From vertices indices texture, shader, transform, width, From 0b95fe95bf65a48f3ad32b863b2e0a203aa1fb18 Mon Sep 17 00:00:00 2001 From: James Orson Date: Wed, 19 Jun 2024 09:26:36 -0700 Subject: [PATCH 08/10] 3: Pass in no texture for example to allow run and build --- examples/Playground/Program.fs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/Playground/Program.fs b/examples/Playground/Program.fs index a13e008..f04603f 100644 --- a/examples/Playground/Program.fs +++ b/examples/Playground/Program.fs @@ -32,7 +32,7 @@ let private initHandler (config:Config) = { Transform.Default() with Scale = (1.0f, 1.0f, 1.0f) Rotation = (0.0f, 0.0f, 0.0f) } - match Primitives.ShadedObject.CreateQuad vertexPaths fragmentPaths transform 1.8f 1.0f with + match Primitives.ShadedObject.CreateQuad vertexPaths fragmentPaths transform 1.8f 1.0f None with | Some primitive -> { config with State.Triangles = primitive } From 694ea9f10948d3183a9b352139511b197764e722 Mon Sep 17 00:00:00 2001 From: James Orson Date: Wed, 19 Jun 2024 11:13:15 -0700 Subject: [PATCH 09/10] 3: Add another test texture --- .../Playground/Resources/Textures/smiley.png | Bin 0 -> 135734 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 examples/Playground/Resources/Textures/smiley.png diff --git a/examples/Playground/Resources/Textures/smiley.png b/examples/Playground/Resources/Textures/smiley.png new file mode 100644 index 0000000000000000000000000000000000000000..65f9fc6acf4af6386f85e60cbbc0944fc535dc19 GIT binary patch literal 135734 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 z zhJ~wXe1qlzaz&DlP8-eYIB3SwRn&e!n~w-?Wd1t&0DQSQ>ogj*ph;6RJtv-jMtu1R z@%gWapZtvY=`YY%&(XzIQg}Q3)j4i4!#68@8`5i_X+iye|F6ondl&Sbiwy+ZF4in_;|xL+CX@iB-! zo&Sw78v14xx2jxQ;BsRd;f7DBUTYt8sgC}JzM%FHzUxt=Ea1OoAw-gKM zi6Z3AQ#iRT-ZgJ7u3ro zFMjs(b?YF+WCr3r;@tZ8co9}H@S>fwh%KMFDOX(KtDJ8>b|x~cmGjR6c>$M~71L!& z8!lKBZ__^bK2o1kM77aG?~UC_42I?dbh$u2{8va`p|74X|9}6dkOW0KJBO?D&ELPA z)BM>#wbx@YBmC;8v>*SB>VNZpq# z%8t>CbP4m<5AUeATNz&iy}CI>_oXN5&U#^br5g|PBV3&&+jSF6`n*gu$`-IuK$vK0LghsVqK|*Pz-3en{T?jg2fdqrdBQ0OIzo=SRl)gtV{($ zX1!VGuRFWxCa4NzGeIPK9O?G7j;@U@>T6b+ZXd+l(vo;{GvA#8LT_&!Z2diaK6~KZ z5nWN)nyymWDK@%4wAZ#2)pfkGOKx0kmQxP~EJqU-;{%qXG4)_To9Afid2fP{?BDft zQ}=o${Xl5iq#Xe79X`u&E~BVQ1_xtChX)J}CRCF#)p$%b9+6ii;(dBC6SEW}+6J2C zipA9xv$G3kmlw<~Js~QgX^s91AW>`-v1w_VmQ`q2(z2kXb}ix?ypK3y$ZCOHo&kij3i_w^0{*@nc{_qi?y#Fu$8Es)9 zR$V5*KB1Oe%ZL>;2HG|d+6BXd3E%kU*J)NOzVXA~QMw zk1a2MK#0n6I_1MZ|1o)4@Zq2T1us7MkZL$$wOX-UE^Wi{o?IMrZTR{8oGNC_t0g{% z;vkR}LSEXrb#)50hsAQp(jB91Ao@dGd0-AEoybsj8nifQ8}x%8*>%1;HFjXNcr7T1 z(+gHV|5L)nOR}H;8T{ElrMNn$`rZ%kBq$ig1?~LIrVmyNB(|GOl>XWnjF7<)sRmG% zP~_k<3z-sg%+p?ZzuQW<-U`##x5{|EC&}&)=(CW!U?9H9VVwklyP;?|`4ikU8Y#LT zg3D`Ktopj^u@)ZpfQu>;*nk36qR*1paLi&nVKExB91Lm7l8|LY?{FH|U`F;n%Oolc zfzY;q;Jm|So}#R%CL_itCmh_r$K>RQ!O`@aXP=f=Tm=7v~?LAO8#)AE1k?9w_LlFpsMSNDRnmj7%oTa%O7n^=#+$gFdc1 z+&9qpvQ52r3ohJXYI7Ub?wh0RtMuayi*bJ<^1sz4nBKsea4Q`ih=8CBsbfd#u#bp zn$>K<;iHGV`~BZ$adF8H|CfJ{`@j8LFkisIBxPvC%{{c``z&^lygK9l*WP7xc))74 z;O3$j6ba^ppdksg=dKfwo0EVChbX zaZd1uxatrIt2KwMZX+-7ioHT@fDiuyT`keo4845yMh8!rT@Yp$05re&Gx+hpz%OQu zf9r07g0j9KTzqB-Yj%lio2@Ao0bHKrMibm{j2n!QYKRo2`CoXS3WQ#^eP;-#*C&i_ z%0AJp*5m$2cHZzn)oaDYn{#7wOaK2(0Ez5W_`Kow-v|oyX0hhR;jzm#5F|v4u*q_w zI9yQX2S>~g4p~eltcD}%s-n#cBu$WM#~Q@Al}+CN-IDBoi>jg;j~E>uFg`ir=DTFkm1n*!^r`~urmEw41_jVb&Ws_YsRn`R1{T#FADP}K&br;S+!^rX_|&r zY+1$?bE#QmE0%dp$Qtr2kh_?ODq}TbgeH{KGN1`V+BhJ}fanTvIpPf%;BBwc5RE06 zUl|xUe`))`)hRl=Ko`@!pg>ivsAy{9Vvd#-IzA>GJ|G@HCOdg>_dr1`#z-}R;TQ%J z@GpVY&KE_rUJ>g$ZJhQXhA)jK7xt%*eNjsNT9yA=a&SLWAYY(8u}>tVzvi{kTR!L6 zSZ{BBx1}e#wq<;NMpF)`W>d1Ju_VQ^*k}q~_xnZg-qSV>tJ$0;te9V1a{AFHEH1A& zd-j5ZdneS(72{4YsJg!{YabLcDb zm~qi~mRC@_&6I~oY7YwdS%VKVye+!B81!% z@*ELZEDl&49I>1nuo#V54F=RjiHjjwAG1MoU18_k+IK>{!#hV_mJALjjE|3*oE&rX z=sw3!9&`BkA>-pi29pVc@tDDQgj7|^8V}|Sn9>DNrKxMOBFAT*yei2D1M;$>C`x88 z&skl}Sxpx-v1UPJ<{B1Kv&dI0ixpZlxU5Ap)*C{MLWqv0Em_HcIt*!bh*DYrlFt#B z+lJ9?A|crQzL=uZ3)2)_TI)dPSJzqxdnqZDcy$WrFNx=`(5rKr>BZdx1s5OuDem+` zo5yTcDMez3D$5Is`;Q5;OR{^9$?iY3H1A?yVnC5=o&($TzwU1z^x{N=a${;*|7)*- znjK4Jb}35TpQ5%67q*w6V>^uKP4xmIa&5szbl1Q=<#J!I`gI3^c7I2AZA7*OlwC#D zq+ix3G?KEuL!esK#60Kalef8e_<+-gPk8nC3G;(PCg*45%O%l!o2yOYzH7Us2yIg{ zyI3;0f5H!b_ycAaS3LdJ*ZKb6`=1l$bMC$U1m}dJ$Z6B)8aMRvRg;Zy=6Lse-=U}~ ze)#YIUEccMx0sw9^C$n!Kjzs_evYpSo=q85l76uuKK}q+&d{cQV^gKRk4AX;De^~u zKoeW0zxTKABq*4kpOP)7rYooyHet}ax5YUmD{y&(Vbtkdx{Aks!@G_Ae_|_Xz0%Qlw>kXjb zHTneIF-F>*$XJ5`cA|teCL77*bSS1T3YycD6?IinR|A@=qAn`hqM&I_Z={k0biwHT z00we>%1ZDa?>*&c!070ZgNOGxdhmeb#}7Gv>j~or_o*f$s4Njb>o)M8VA}<+@V`hg(%*PYvlLJN<7i3LCBeEqh)g3?}BGjuDSF)F~q^Nf)tKQyp+dVk@UM8@AWO3{C+*dhkzwMycS`a%o`sQENt^R!f*Yw8< z-45ZjwW4nTFM6v0L9V3+-`t>Nt7M7&peXG?*e01$yBrGdiCIp_bDE;0E(g?QNmCT~ zdWF{%yJYD~Xb4vHIggMTAjoryGG{OuGd?-u@WDNfpFCW%1l7qAc~O!jlQKdyO%I7W ziV3=;$pux#`;2NlB&$jW<1q)r5oKN=t{?=@<+7ojow4#lO{B>KZ5fC~K=O$8UKoi2 z(Gz1%(2^(xp#ubD2@JR`<%Gn219KC=UQFeEC>RxPKOGve7PtK7550xKVA%76}9r~(uQc)DUgHbQ8# zH7E#_C?zVnv4*&<(M=MQMTqu%+s3Mmwl7L%$Ufw-m{nq%hg} z>g`nIO*Imu5|f>0tAbZ(A}oTn4-QnxV<33Xq8QK$oZWxSU;O@GXE~m5{K>~0Kbz8y z#%Pui6Rp>cjD@CI+m=54_BQ}{_qV^xzwsachvqvF0;}_j^jzXvm?V4L$h5b8#V$Za z1IyJ4Rizq@nH(SE^PKPe?Z3&le(!hrvk!m9|K*SW3$t`C9mn5jSh3|$szvmKH2eovZE8+_z)S6p{gJ= zin{aa&~$&UTM7DlU>~{N?Qq}W$j*DC<)$x z0hBm0WUap1y^zuNgT_qBG=Ulkp*I-)`Zw={Ht7@MVnIUhK)~w z{-*2Xe?8yimWBSW+jF$Qr0rE;3gy0M!MN9BOL98U5Pr>DFR=?^rL zqv43cmyBMGXw!1^(U^gdcEBu8?xbJ(I@l$Kzt~z*?xv$*XlffZu4kJTm11s{ zTsx6>CUCkb3X$tmKW+``?X@;P0mUiEO~<{+jqKj;AHUD-^d_(*JKMOfS^7xS?VzdX zAo|Q&2i1_}Xl%X(<1yuOLDshTwza(>dC_!LzIaDgl~e~K#>dATJh;!{gZqq6ju{+I z$cF>SGt(Y)UMcDIh#JwTYZk>hTkm9@xd_J6<)vLGpAnp6DasWsXRJ7vC6|85BCCnR z20sqSz)r+Y4%ODsicmK~(`3n;ptRs4$x)0cNWl<2G^z$%qq!Pt+a$-%7ENd0o9^;a zHMJpXsF$>>I|vHSr&HVwp$#t2t*25{$Y6+TYBMVldS3Ov`OWL5Sk>QX|8>tI{nrgD z^_{m|v~jVf9MBXMA@@Y*h?(1e4U?)$QL53%dWpj!v94+BdXsB#>+jcVOhG?BS5nS; zjDfak$V7N`amM2Ok{1`Jh$yOp%b*yTOPdI+md5gF+^DWMx<=`_>&fdc&W8Wr_@IBm zt1W3$n6`H_I(asqk@eZEXm+iF;PL`D7~#f;xXFY{N*|j!zk>{=3P8^3^7uE?VAjL_iqxf&dDA;B@Tvw5?zKSXT!eFK>sjUFZLZI zF1=QR*%)6BJnE~!`(m29_nNj_Aw%+pi|_g*#1_rJwPE;P+rr-J{&jMjC7J1dFT^Ol zM6*3ltZO^$nj`gn-*?*wL7dr`M!NyP`?SIJ_Fn|hX`1AhM7KcpE9`QAVJ zuQ{qRX5%5gjkwTms73|#LR3fF)O_o2{x#nHt?zEp6(xFM{-Z%CCWf-U5r! z+{~N^-g(3c^=e7IRF1|6{DVLJXZ-hn^oOWxxg0JDbC46^_kSuK8Z=l}~of)MvIyeL<9|Np&1WSk32m5)_0GueZ2V zlUw5eHyT?D;h+NrL!_{H*uDy$bq~2Wq0u)HlWos}+m@)@aF$0b?KJi@1pPyBUp4(k ztloOWK(*kKz~AUW*`aSLQP?e8nH)-Q_O0uJ7I;$?>&klv(%ZUX6|%I12+B&M^C zmMET(7Z$5L7}_L4SrUC_(dwv)4T+}I_YRk3U(j+DLizm2jSDvs!S_rT}S26Ea(d*}G9ds2!c{gne7z_r;0#E_kyd?~NczOl`ic(X^CE z<1z~d%u+sr?<~CEY+rEV2&pBaK=B($O#RY9!O_tXr>Cczy0{#enM(|mU;7Te98kRf z9r7pd5)Y1HFkGuzyIuKO(1~iVXWX5fuGgyGFadk5NcDOZAJKKC9<~IC@@s*ItvO@a zumiHL?%f_bJg)!7wztrCg@WsYvAZ5Un!q8~sXg66oV%NV?&+&0Z~3U(KdV+DsL5(d zRb0~$e8%kXK5bbsJve51c*5-P9^;F1vU)}998ID{M@NT@i-LNwV0{0Cg9rC4uw=2c zKCW)A0f9Y6vKt|PN3|M#=*WtK5F^v&f(WgnLw$}+ zPOLQ+!WV;i-lCU%Q86h8cM=p-RYmB`r^F&}{a}RNdqnZzG5N!%WDlQ`-G7WfyoU@Y zsjuU<52gMD!VMav*J%m%9qQLo7nLng@VVQG;#W`xt>+Sc87}T+of+x_hjt@jwzL3&Cg9d4(H}D25ZJ!!bo!;eAGiQpA=r zNh`A~CmReHj7N+QCXA1cn4BCjJ~?7^a6ne(gwRqa@v)5rTH<2Ij&yr#XTjcvh^re& zBK2lD=W;sZ@@mfMritOLneTfBAl<}sq7M~Nw@cmo9G0E(drAG5+noZj%x^3JXAiHK0%#XzK8 zn%?C(E-%owrhNJ}vZH(CZ@*9e&|MkE80~X5}T)@BgZ|4Yh zh6ijOxvp)}0D*du3bck4370^DOWY#K2tD>hZ!wJ@#bDOFF0)Oe8rvWBMMsF7Af0du zewJ~#EX1|)yC3k=fdVI+AgA;$-ME@2+P!zsYyW4swdI8+Z>A?I>0U?Ux+N&O z>G^NOi#u*7J&@zDL%cr@*)=oQ#nRffQPzpFeK63q7trlInpQlLXGl@9s45mk$=qiY z2xW*2LL>*gcwAMH4M!YI4mmtL;_&d0gTn(xlQG432${##HH5fs1>-F=O%tOi;w)ZW zgcy_%BOxkv)3B;*E-%k{d3MUn^K)LDzvAOp&-m5ZM|^tqjI;VBb#{RpEh#gl7+G$a zBynL3#uBu(>5M{v-~{!Ks2-IprKKgE(HbaeuceaS@!2LAtr*z*F0*e4;myy|lp7?@ z5#tu!EsGwwL35E`W059?tHM}{um>zM%oxnudyzaQvXe4Jz^Nzu#P_#_vWwGF5~8% zr)gVMV6j~B^5Tr9vHu?*95Nb=I5`^g?B$H{p|G59G%2py05IqKEeUq~v9C1>Zw7#U zF4*~$_Sb%~S5X||&E|I+?&kEtd^RP|bK7XD%5qK)PsmU1lN~=GJGzHIJi(0*ED#k|KP2Hw@pb=saBzQCkG5KboJ;l=v%4F>gC~L2qp*QS5{q{lB4gS3*vNT)6 zwQoceA&94O8MV(?`HZC#mZ~g6plJgUD6*Watf)p~4h{}DoE$J2PZ$jb45|`J%PAlz zxo>b$aot$*`jK=4-bB2v4al-)Ro5&QHJ8&V&tJXbAhP_ZQEvwt^cfqVu+MOG`DDF z(P-`SHw4xiTHAlUXTewBOZ?J7!ECX_S3}DCkI@*I{LWt`KY2i0%$WSmf0z8>TTl&g zlVjXqOyj-HfUg&)OS7?Yr|V}kqy2MsBQES_)_YyxeppaiKy9iD98e>4+x3PUpfF{{W zJL{iy+Y(F#mcbGdXD!THVd+wpmabuAN-RW`T9rryJfRq(dB!itW6lpJEDjI&;U|Hz zp3^V@^@L^1{kNa;@S9&_es)1I9?-;=C`wq>8vuFBwU;C$RD~?_mU`$sKmPC+)NRAh zKKg+F>;LmVrOXR{`s}AXd-a?@{EI*0>pzVATmNQ8-9kQ6oU@nW{M25KWlHo#AuPLI zzC)!17O1b#yt3Uxy(y1cMST)HNoqvJXq!O5Y>?mkfnDvZm$>5Z!?H!4f8)(ShDXR- z-$I?RtR{C76x6E~z9?aQNIp3tJ2)b{{|JBoG5Ng*WJmYY7~&XL42WLPXg%b$a4@kl zx})pRH)tPh$vk!xB3+Pnw{8MSAiA}V_UHTU-2nR21-;M^!Po%_KogOsM%$2tcWU8p z&f?}(GsrgjxvoVRWz#Zs+cu`x+ah~<1X~h>9Tw4qg}U|Qy4FG4Zy~V9y-_!$St|~4 zegg``F;^vzkztHfVA&&uMW7FcLk5E(Wm%BrSIOgh6JpD)(H@=ESC6H-RMyDMaT@phiQllb_4sv7>E#cJd zEchD~X{!B=QrPb;yXOjayK*N+5@!v{Uc2ax%UF#Fp7M?cB30E89UYKA9#9?~QykwT zfBX*q>AR*Uxc3l$aAJlIdFHQzSbaqx7tW zQZGW9v_e_~0<0D``&zG%y57vHJ7a{%bEK%yBE?7N*?J0t*l#hq&1fI%0f5b#yuml& zbs(y5C*1*p4iv0YDYeIjbpR?xQ|7x2%}TPYWRVy6EJMAZ63JXk7F+NUmkWd3qnSs& z(4y3#W!2P_tCh7*RyECPMccMGad>e!XN-Y)6gk8>G)892C8rk`oLyY;>imLFU%ljm z=fC0?pMJncFF)q_#dBWGKV=%v@WaSRU{F9Y5L|LAk3rUepjnufpvyk%0?tIeO&_@& zBuk8z=?OHXX$O~7%hC35br}>RbZ`j66BwPq@CXKnke|Y8x}z=G(?xWiSfy~mYCgHeKnvUsp*$X>j$q^_P)(p|L_0Lfq5Z$ApsW&D$Wv5sw~e{2Do4ITP!QN}bh7Wd$Ih)YZ5oXTEAObi<03ZX zx}c68M?phC1-!S#yv1PjMs&8Bg1$YhJ)63%0rMWvi%6d3{Ob89%$5tDpMFMFX5`*; za8wXyGc-b;JK9Fqy+Z9kL2nc71A{gD?{dVgaN^nWnA_*AyVZk9ccm}wHO?z2M;njc zwtgM@v9HSu;$VVv!Z=azckOL(@(`IrB^l+x5#{kc^2cu@58ooc{}g|89~mDarI{5G zSi2Xl!@uHg{MqdX|83I-+MBhHY%1UlD3CX3Chqi^y0(E!3|?r>xvp)XSs{xVGQUFS zGqZbME$xv;udO&JZ2gx5s0PSjj1I<7b#~7tUX8vRk#V?a7Qdz!NIIOIz$3Xue{@aj z*wYWRJCC3{{tTMH52m;eSXHc9q%H=`%aT~+G`Y}b0i*$H8gg1{oHmSN!>C=6ua>yQ z0_HPGkiXR8-X^^7J-eWU(e;)!@;4WlGLkmeV= z>lqsxTb2y`5G@bU(Fu$nz~l_BE?|6)ga*{6Dy}O;?Oycd5FH(&qa)(*kaBc%_dtPs z^RH37+wkan3%o{#zxBIh_Z|?J3$pjWhZ`ReV=&5J+BG z*s)Mmx4ss$U|+LLCw|y5HIQD8{k)9?l)`5W)hPX+9*k-4AE8G_Jgc8U{WBiKd;Fk! z%2l}HuboVI`0iWegOa=`kT&9RNtm}=c$ttWMqB)u&zLXgJUe~CWH{pg^H2U;{^d`8 z#G{k@{OAAZzv9Oq{mgoj)r{2wzWqbT?|sv=m_jjBvMNw`xOioIaN8PA6M=dmw5zUt zpb4*K42BPJk~7Z_2(H3qBVzQ##;i)CPt8V2V!9YnT6DgIAhhrO5G@AC`KP#V{Y?lh z@zbBd^Pk;#+=$PNCajmp<8PpU^*@B=6*4%ulb}Ek@0016K~_?ZCzOZBWcMGz$s_#1 z5i%SjS-F{aUmrfYWmNP!A@S?75Bm1l`;t?yu|To|innGE9sOBbV?1T!UEC;AFOb<4 zOfQg&Gq`w(OfO+Rx5T`@Tb6SM90vm!jF4&s;{)X21P)JNbO3`fI>^DBi=ae7gI~7} zwQqPN?9WEvhRrN70HT}1AoSRRxKk`_ZMy5$tg{w}&uO!qI?K`AQ)j};2ZE~!VM!f5 zt7cAI%_tUA^63>!M}$E|C<g9^Isfp{uL8;q@WxZlq*VIkJyk2sCb-~Na zSG>A7=X`d->D4Kp&0g?o@fmYDL#r93Ga{-SLNzq|5D{YwLu(+QUFZfBEP$28_DB|R zzC}XHM~TiRB7&f;qHTmWqIHXl9TICT#3%_8wHTv=BLfDbdoVsl#;?%T0+v%m+r3Po z<^@_!V04I%4`FmjtnMIFFr6)MUTj{y6W2LIfH-gCiGK;cfnON`uh<<|0olM7ay3XZ z*M;4QKIP1`Q!k)d z(zI>r(JEtC(2{X~e8`h~4=DmXI69#?I$@a2sF%x)05$!SWjW4!yH?4i>~J|poNzcE zGa3v5$g`ZQt0iq{xSBOc16o@jZZLGj#)ul9fp2>jw>v@h8;jg-7Ct7Ab=_t&`hDYl zH&-V(6iH&J)G}Jlj3HRfZ@=?9g%dzMM`A!jb9aS?lZOl@1boP$z4^i$4AyUGFUZ~(QEog%`|Ln^--(HSBuy5CfXrux zKwmwFm(Sp{PvP=3#pfz4po5Wtg5emM9HaLiL$fk7H}OymtU$;*$4x<_ z-z4p6NCiqC3|xl=+aXFDHm)BF9e2RNc1xm1r|HK1(|YZSx}4T$gv>(@%RCZ%OK4Wq z!Le+ngvAxv)j2X8(3Sr>{7lU2wI$Vpd-;ZO>Wg6fGAF^2o5sh{smN2 z#Ni=2K0!vu$mobwKD>LNVDa_uQ4EGm8jFd{pS+73AE0dwMP&<7{945Jx@hDZX~TX} z*(N@HEBd&jhr?QkCp|MPxfMKY1M0r?XvaCA@W}Izk*hPy%Kk_Hg_-qy^mF*dzk=Zi zy}CqaSGECIvWO+%ef&$K8bA3t{OKPUe)=098I6b#zx!9A8loC$vz(}q5!cCJ+S|xF zkB0u=wcD@1o?N)0PU~nw!)7N*O8O&EUC%Kl#c`{&v}kZtkKdv2!1$Qd zT71Y-R}B8;f5#tQe8lDDCBOCT=NzA$pdm7;hRMYZT$)gsFBhmP%hie(XQvc-&gE>% zPe1-8RZ;Sz4}Q$YpFQKxfAv$c!%OZDgsRFod>jca9NdS+!opjcv8>TW5UCCDa$cs zmQxHWvTB$DkA_fIXqKCQU(~fZj;48Zu31^%KOZe;)c>W=L@&P>m5WO%^z;bD9K|ME$*?AZYVK_ntV;GL%-~^dp zrgXhv&(-IUpICxl&(&4eY^6~Zs{0dS*E^VQgQ-ruyd@e`HI|?+Fx;XY(`@CsUDizn zSev8Gazc?4s|=|ep^AjIp>_b~KpDTV3RA-J0=cSaOV1*MDS>Hdn9S!Cd0~b`O-tK0 zw4tSK19jUlTg*A1UUD|QFNbh#PW5?vQ5ah+j_@DoXSTE7P|9^vK ziC%n0sGHlhX@j`9!i`xbT?aIcG1i@37L6cMr1}7AG#ne}*85@|G zsA~O2iTf-6 z3wZWZ;_Ejt_{Lq>hU{7fDo!3of}Vd_I9y-@&jOLkw!( zBq8pIaieZY9F5+0I2?*2IGf84gNk-s!9jt}Ess3LhStrA;T#r@`XVrunzMGsWOc!K zIHAaMYe$5ZCbYC|OB({Kx@NkZaWTE%Y{;U!X>S)(5%H(P&%k` zV+YCs6oozI5RwCOlP>RabBRN6q(2AAKtyrX#Ds!_Ntz%SqD6(va$=UHiHMF}OiCCr z|8sR>_qodr6iiN#P_J1XNd7!U1=Dk+S=i4i1~5K`lech>zfQRS9(wc`9i8CsA}E;D zQ_f>Ut(GCh_`uY(Atv(%_iIfYd=WbQ%O%_sd@gdkdLB4_fWG|=SWJ;8@7aRSbL5i` z5<3w0s_fVB;_w6+A6h!xTi<};$STN#d+6Z^R&hOJEc(?*4js1Fy~#@>JsRFQXA=m^ zIdOIlQHj%*rl#i^tUMgvKC0ncAtkok;hdr6mA(aasQ3&<;BHBY0d!7h91SdkT}ecKIyq!D6C|GF-j zH8#Xp6JkwlSA=GXt~1Yd=g!*3tkS*X1bPFu#1_s!g?f&jehjZZgvBLHU)eXeE9ipH zUVel=|2e$)1zbFb{sx~FA^~L0R8ksc=^nj!quX8 zKXp$a+R4^_%m;ybS=4`AI z&c9nmW_^)H68lLsPm<_5$wdxXWi8b45IGzm%bbX#X(CHkb0t$;BQ&#?DGP?pC4>2x zK{cevG6aWeAjCiuf;k+vE%SQL)#8fjV#;(eV^&X@hf5Y*(fEcasa;s4uA{f@*#&C{ zs3xbvUb~=O+9+bEAvB7{4DTG0d0g(1>JS|sAPE#`V!0>^B+E7t-%iuDOuVP`*cj)~ ztU#&>IyNRzI)IrK$nX$m=jNU!f|NrT9ib;raSz`op1ebxJb+?CmEXaUL^nD@^I}cW zYnB^tlW9*BcXQC#t`Es>^?&R1fbLWY+cw>Arex4QC$OW%?@p0I;N=VC{3YCb2>;|C zp#S{8fxMvo;4dJw=qk}c@%6|(E@o!r#V*s`+8*c3F*i9d!(u4pK$*V)u=V&qJ{yX1OpFWB!SuyuxUgV+Dg z!oO+$W&IK7Hi4Oq*v&P+G~@lJ#&eTH2A}eU6kR z`FMao7?Le3axL(y8jXQkmP})$UDix>PSIRaEJ}*3#JeoDW{f#%)iec72-Klw85XR< zoLW}2`4Y*NRMJq$rW2Rt#tc**vH-eB8i`;XyQb3-^jZcnq|w5($Gfb+6$5l|hz<_W z!Nd%<%F0ZZ${dOm*PIDtlFl#bFd8a~rj`zZorTpHQL}s&Nn`1wW0+qUI84G*9UZ~p zL%8=AdhiIUW5|Zd+3K!o3i1*^9Gk0Q;-l6}K2^-uY5r6RNG}DkZ$yN<1`4)km$y?8 zh20tC>&yF%tApK-ItL}l>vPR8&2q3@JGEeS`m;x`6uho z`|tc7;yuB8;_rSRU3E8J=M5jPWg}?csO5$^Wxb)-8hRRnjix}izPN8gtO{*oW2IR+ zLW`20l9=}s(glHr}@rN`t+ zA5)5+Z2P=!EP1!CZZISwj(GeIWEoP7;qC8(M*QP%ngB5`O=#NG#3x@TzV#hr6;kYS z%m>Ws%R31Q7Mkp7#jW!+y4;9O;;HgxwYy$d9(I^Pdhx@3CD64tqkJxgVDGMwT&Jb$ zr8P^KUcl*d(-1uS06zT?ef24vy+r4i(9{X|%Io)o7}3=dC+ErYMArEkk`<79Guy~Y zbU3v3fh1*MUr)q_0q7O4V$n9#?GhKKNS)*78P0k0AV?>I9jZ!9W@&+lN{jjiEn1vw8Tf$994?Di zw0Dm*5aL=(J#AC#z75s^Y}3bL0t8V_7$|OlNCLCf1R39h;XPz@1mg(|hcHOMpvaNJ z+iQ~btgcCWv{QS&U94p0psElrkY{L7Ks7?f_mQRDCy1C?+Taiw9}^Gmq2oie8iOxc zws$ZkaaPw9WotR$`j@Mk{z?)DqZxP5Ha1$cm>M*l9K+}kF3vW|Jzq$aQQ6HgoTSB; z;O$DS?Dd(k6<@&whwM`%zUJ46q)j=d`EpU}rDHMk)X|xa1{jtghl0;w5sa?8?zXaB zAi5j|6QONQi{(Vgyp0iFo+(YOW+sTP5>+vU#kqZ7=aND+ zbkfwRt#D>wp&Ef3LX6DXa3?`QEe_}N9{t||%eXnjbr%*~KfP3C|MY>#&QoCuC4$s8-MpVRV2@j$wHPt9kM;acgfA zttQ0Eimh%6s|ky{2MTh`WFqRuJVSScKgzbLhTc*|_x)gEZv%;Py$oI}@JadKY%EQ$ zGhjDWC;i&H?@pKOE1M;Z2k@hR4*&2!L*Dx~;g9|a;pz;Tp8wiFD6EpGY<7kGm;Vnq z`wZq&Vbw&OhxyEy0FBTtgMB{r3SEjuZUbnRQ4gPjwrDmay!AeW8aeqI#rPpO zNBi`5*52y%(F0rv=;Q%|@jZOABCm$TtlG?%W5z8lX0D<^2;GEA*t`l760--b}Ua320-oToYi?fIxmXClbl4l2~NhATugk68b(0-5R--&8~6HQA=KnR<}k> zk=N=DxTy`{_9&C0+G(=tSc1bn4Mw=-01XSEL1Rm3)bNj*k4)!f*KG&RZQ{(km)rN&Lie(ClfPMJOui+uo6adB zwCZTo(TJnT96=o|5G13Oil`+~3QI!G522W##Q-gaP#wYO9y&aN^1y702S>=@5LXNk zpA&qB>?F~ICi%F?^C;dPr)X8z>e1cmf<179XHqS3@ht7ObyCY8F+uE!?+hJ&PTenBlL zWW9}w0o(|<5?n4R-$B-!OpH60OKOa|B-CG2vKB|VB=*&nRRLywsvFj{+u>HgEZyBp zYd=WdLivdqi{v9zC(y2t>Yi-|&h=VGwz1+g**H7P-4I*of~0?Ye3bNPlihn^?NQOo zVRyx*I_zwpLvm9QXXq^0-!{qbW=i6q@I#TaN$j1G=Al*g30pZHts+z;XezD?7Z;KSNJnz}ZWfUYMrn%h(Q9)3o(C z7){{lJ{&)Q=|f~OLz|JATAvfLija+nQi99TYyia}6k}ph(dHFWPK+(6CYwXL93kZp=ZnM=demn) z@$2jzD@Z$btlJHJFC@*vl@!o6hqgq*Fu7ccjXq=rNNzeS?HJ=g<-Yp8{!0f1nfRR! zq3$nNJ2yV}hIi^4e7@Uf+zws%<(zjZN$2zxa1VX{A$<4~f~Zl1U-}s<#KqjysGmK< z{l));e)LllroHpD=RNAL=N#WEU|`GERCWuM>lTvNshewt5k{SxYFKDwg!p4(Y*<{S z`@8|kG&#G*E$^4zx2CbLZw1;q_9h)t8gU&hd!*A0w3c07yD<`5num{R-#)>$bL!)- z(N;$`TYT>uM&tVuKY7b6Mn@-5O#q>pJhV+!1garXBUv$IR1T1k=IWid5mDC0)@$LV zM%lC~;&oB~QhAM0xb8s;x`{w`tl2n%g@S3_nBTyBYQW&?5~i2dPHgKh zuh>znH@29<)hSHR(5nk`OkB=kSzD~PZWz4nscGx&_4NZ=^+ab}bS(!&Hde{kKBw1d z$d2_=I~3dK@X^zT93KlL7C6mtlHoE(R)o$enCN<;PrX0E30nn*kk|rAgI^JRW6p!r z(7NP4oJCrn(@I6_N7TguO?gDfCxm=J%qv1UA(jWIugrcwtDu-bF(hUsniUpaRF2jm zM)(wPl$(XQq|`>25*xMCTqRJjxi&o)OzG!ncYjc33}HyZ3^v7sbUhulPz@2id!S$* z0&bme(1ptA7QMd{jlShFs=bB0zNUSOd3}n>7ERdw{5~BP*kL4J-%a0HkG+taOrQ?P z%NK^^KKTXu!C$~~hF+X~`J{&`I=3ppKl=dr(LaX|evCYN5B0yl_9ocHMsgElv8Sl& zUsqLGS7p+x1XOnpwrij7wp(vOA!Ia65PzT0T#?VxK@bxth)P+hjSK=l6Lw$RwfB9r z7HdD@O+;wxXq;ohX|aKr3-$OA2@9GBzfJq-d${SR)ZhCLXditW!6EON$WL5`>)b-! z21VA*rVs1VpI8BfASb^?ioxUQ0p%mkZra+e2 z>~8iCmbE5Bs!fr-js(^lT3x#>_r91=Hh^JG%EV1L*KR1V>UCaVpZ~$06~93gHx60*S_0iL1lz2D?rHn%^ddTKLUe@2)3zDDEpVYgG{;MZ^Bz|OJ0HEV24u2! zN9|d%Z9su;z@$srLv#;JD-gxlf>wsK{(z7j5Q+oZ!3pi?Az^S#EGNWr1j9q9j*#5i z04Cxbq6q**m!aOGkHzOU8Rl(*#ye{TXu37TIYKAa>^)EI6z~0;e@!)Y87bW)hfj~b z^KBr+w8u&WudKpd6dHy|?i@bLE&A7O24Q7u+)cI*d3JkXaX-WGIga-)m1v3S$qq;6 zQ$C#7xZMk#RZwEpn&V`r#q}Jy-jk{_> zdI_do)fQS{WrGxtF!i0tOm)-L$MNRIC4foy8{j*Gk7(H#w@v+3micAZf=77hGBTF6vk^?1>`E{^p_wyv( z1(NKWH{lGd_kfTlgIdW5z93{nn(Bmha6+h#h~*J+a-Vqcm^i#=CPLK&hDW&JA<{(| zr*Vk^J*tyPz5xTUht}5xZ)Z!+ydXvDI zilA@@nF1dbT`h_8E2EX06&g)I(T1=dX$vVaFcyU&Th&C*y426jdW2UJafobf7HjrF z_wT*BL*I&gk+9`-f_Zzj<<&Ez?Pjk~oghnjbg~W>OFa>@7L(&(hZoan7CWNZOg(a)+{x)H74=n~XPkskNO*na?DOffmJpD7NXc?3J~W2)M_-(?$sCL035uZ#SR9c~&Hqe`2F0}5yR@b1Nr z{S>-%#I^mtNhcX7L0iAsSz5bxS#~!Y2-#{$P$7htHnh0dg0_T|E3qCMPHSE})tJvv z@2ypnKCb;JYUzbmi0@Gl^hAttM{IblnR!bqL9TmMt#vD{^|w|_3pnaA1uUjt-6mit zD=`FD8>V0}H?S+o+dwvF&3eDn*KIJ{Y{45nZfP&t_^Ct5i4^OHl0gbk>)4+4OWEtx zbdwFDx*ktlzbxX>EJIyRC_Jqz2!2SL4ej4zLOZ%gJGe(29GZfEbPqjv2*YD2$4EJb z;Q?+iL9z#fgij%}Y9#C6dU<66j`C7bww*o1>_a#ZNWPm}f$O}ZrT z+xGk+iH!rqR;@MSH|bPP@1Uk&k~uEgK)alhIZv2f66@M1mS%;9hja0pUg+2MirqQnc*`~3`WiNj!Ta~BItp!_TIph|-OO~70e3lz4mlcTb ziUzlRSgYGqyfG4EDnL>u#dX6YyAkBJQ*x~*Vl#~2jR@C^^e{Iwn#eR%>!t5LDgD#uzTrjJl7r;H>~O{<06Q8 zhd7W_^^3E%fTr?a66+?qd9Es;UWr*w@FQYArl}5Tt7AfWL|cpq)gfVYpD?^lTy8LFnz7uJ`ctWN;|}BLX4$^F_7y!~AoyF*eXgHM;vr#w@>!d{Q_8;|_n{QFn>CZFfR z?0%0Wg$Z%HsFVHOhjnjXc325Oo%I?u6LexUzmAVg73>5@#MLuYBJT84h{4?6sxgFs z^Uml$)h#A~p3#+)E|OZ-puo$TC)%*bz31z<+o)SW6t?xVzQ3vI#$2m=3tLr|u0cT; zwpOTc7vJ1+N~o1~F^AO*zgnR6lBQmnkr|jfr^_~TWw~YCYBflac7>U_R6}D@y5r6D zN;r03jE;^C=84c#F6s?YXScP;`df{}VE*-O15IO2q#^ufJXyLY5+m9)NWC)Gu66|> zhnTS?G+cM~wD;}TxsrV|1VUf;q1T^BuN|z{Dh*u&+%+&zm!gNoM8bisEO+TlmV)9M zwm`vJL*gM;Ld+`K{D3gHPkZo~_TVvLc%L{pBn}J|=;+vzCG#AY?jM(%KESyQ=ZmyA z^ngd_OrDDK?oX91K#&-W1cX$!+lXDlXY5}Px6vE+N9rRRU>sFCa?m~|fQxCmDlyej zY#QONfr9x@{)qPSf{PD+g3k-W%TEc5DdIE2YKgWjc%y)b5hjO7QCeEy$s>Eetl+`h zrs5rp;QkYcEjl?t%b_joqT1Zn$px#6{B()ZxfZCRy8qC-(Yr*p7z)vVEEmXPMrcy+ zux;MR%J|oMt5ePT~ALDtx`OSSdCaxhEp&+e$r@$%(!w2m~>D|C59 zSj>ov8Evz&@FP82%`x)7^CID0CESCGk0BXz;%1$*J=v% zX0l+LO-pP+XiQts4cE(Wpit??Ba=m^HZ|I=EQBkz8^N{gOe}N#@ZOy$)O{_4+pd*v zT8P&c!P;5UR#H^+42aPYT0vS9)H>tXwOX(LqsS3!2>!4uwddW_UqrV@?l}P~GM5a=pFNy}B(hi+9t}aQ^Wxh^v<6vUi4;%{IN=%3y(`B{Wu zincDwQ1?V8_lkjjalSi5kkWtGMqr(aUgIsTg?_QnKj6DbQMG+Q$%ru{#0-g!kfv<9 zjttRq2PBR4nwwE#gSyb6tRM~#35SpEF?mQhd_p*Rmw56XI(dL5V-4v0f1Cm5J8cCMAQJ1D+JY2zF}3e8zbA@q+d8X_H%8VdjQ&vRmhGcvdDS@ZwiAR|}SBr-bDUznBu2bK1I2V|xh{^pk9| z9I1xLV1z3NP*%ub43i^da)?$27#L2_@uB5L6os`Jipm%SpQWTax3<3Pas{rd>2^-Y zJqO_SYnmWq*ZA#To4C^x`l^qlOUKk?N+5|R*EZekSv2yoyOusPld)=oRwEdU36p!ozYBRfkJIx$g?{rG(7m@|C&#peZq@B{+DEVjxMfjOvgE5 z+ciqX#%5HJVzAZ^xX~E#9*P0(-ea_0;Ujiqdik;#Vj(^trW7%3+F2 z72EiNIl*Yy+27LN)5gASYQMd(b6R0jFWro>CMOZ;Mxl^o#VeZ(dFP;wXxBbyZ8d9% zXer3w;fe|w z43MH)GY4*RZ1Lg)J0N6y1V{I5Ee?jJz#qo7&F|Vd&i5%B*Biu->-gUrK|$9!+`%03A+AYyF~AU$>5yVd+-%*nH?}Ryh~FW%Pt=wf03KbI_qD=f91O=s2V!fbU&hc8Js|B$(p<(Q(E-%)n?QSfe z8GDdtiT-oOFtmv>Ppp7sxos4AVbw!uEp@6Knushb%mBOZ4WJiVN1y(Zpjhmul+h$pIICQ<8Dqph? zYqJ}Bn7K{1j?Lw(;to4o&rX<`=j))H4j5=uBueja-Y_Ly*iqaWuArB5V7WEAC7_jE z(LpaUmA->#r=U$B!oF-HG+eVQ-S2BRl$^#yi{&<28Os52ctSjSN<4m>c>I)b?``z{ zJH+t=3nVHEq!=LO0GH)BQM^LdLKZi*hffEpUswE{r@&?+Lu7{%N*6|i+XuV!mMwGV zb8c(BZ>vGO)KI&WvKApK(1?vYI)%YqbTnLCogrQo?P=+S*RdW0ODSY>l~VwvfS=F9IIbnjF{^ugPfk~ld=Gaw%r znhybuMm2T)>+V47n_tDgw@bWkWT0{5OIV9PC$}-m+MLp=bgLdw9!=jZJh(Z~QunNMea&XD1q$@~`&*-px*v17^n(jvBHhU2 z-4q(uvn%B46h8adX1I&Y1cr;HjahNM4Q7Fa4)NxEhtF`;5E&gH!->5=91$lcxY;Ef zCbnR5WUhbp5{3tfSsR#WF)w>6GByZRcX#|9a{}%9-DzE@0T&yQtc)$JM(Hs$@$+*2 z)iry3X1}AXpt8^&EjISs-Cm`s)Qmm3LySG!*3Apzh~NkdvBvB@7QEP?hQ+N zkN3u|c@?r~o&lNmh9X7Rz(9HjwC@!&a!W0Qd zn*aruFP`C63v@A~eUod{^bXVId~@Mmz1UP*AN>qMi+uQVBsV(Izxc!s$&-h;c7-e# z=+~nm=Ec+kIPx3`imtsH9!1O@ZO0^c?pZIG8OyKMHfX}aFOw(VxTb9#xpI!A_Mv=|_RAxzHD z*(GxD%3MV!N9OoByFkZB=wOmseMhD{NLIk&y#?89dFskeGrqSYcPi1&oZqE^^lD&W zU@(T!7>4$c>AC48z6!1&FE_up8r$zKhiF!yE+ZmHOeE%7?3Vz7_L7fxZKivFZ+}8b zZqiilf`dLa5_Jn0#0Vh>(g_8su-%JCYFQ$P5!E=+YNUzBUcgcaTqCVee47>Ha zQY*n@x&ud7P~9<5uoezo`}1{2m7%xNWa87vVxAdg7+PdFHuH(fC?iA+IZIL=t0rnc zO$UUq9T5JxU)p``gSaWdecp3e`wHK-X5o4^(EVJ|JvUmvj}?1gAo3cj>(`+*gk8>c zd*kW&bgx!%l|!^$T4lJpLYf6``Vu|6hb&h{ktTVhIf3=}CApFDje7m4mN##de0eMn zuNOG>UxGdc>wrS!Ze|}i=XRp8zhL)F6PuA@tnZu5y!a`*k(+-(+F--Np8%NH6> zCd?KKs75&N@nvN~qBSTGqY&H1LM2v9n@(`f9M8Hik&w8hIuaV2Uy-hUm!F%F6-?pDyns8}7;lRFPMX!H6w$M7%3Gx0@ zI6A<6<9BdB{M*Po-$wuGKSVE1={vB089>05L$fx0@;?04zY9;k22Z|W2-_8ewm~$~ zVl(dDbMEHiwP&j*QTKZfXrBpSTaOVy+nx%p3xsJCUDztpZrTT(UZAcsq^W3TIn67( znEdrA%`HvkCT_$H7q|Dy*%~Uk}eUMsxCu0SSQ^18zA-$`Toz8AG_38EY^;GG;9VGw(@2 zUh@Kx+*)uQb4GH;3C=zcdKs%-vRb#kToOqaMPdp@>3~j#OL+-({iW5GTlZ96AZ0Rg z>R5_$XplI?g8kH<}1+=d;{-mNKnZuadkv}=*c9TU()-dmmsebymrl3yv*EzE0l zx_`Ip%UEuylaf)9yaxLB0lf5n!A*d~-B38_&imb?lshOi91I4;&~D=G zV$T(#D^X)I01-t)n*e}AV_4sO(%)RW4ZKMUyRGejNuB{Z7@Otj^uj#IXBVt_>vaMT zTY)RrXKr4%E9rV+TB=upg6hi~ByN2WxsBO05uDB`*wzYkS+y+LJv z3inN3H2bd8S7uN9h99HH>h!6^!a45ZTjm|zkfSvBIY*O1~cDjOjsO4 zduzI&s-jJu4*J&CdzPEvY%#S+;mHw?wiBzS9N#YDu4}Nn zE*?7-HQuEIdSH9c=n$D4A(JB*9oYU-@0nTM@niJfQ*<&S<{nJ};?kzcfwcpIfq*=X^ZL|x?~I06XAJbZL?U~0VRo;R za#P`W6D@FEk+>x;ehtC84IE?(G+3>s{3dpSFC7#tmrGohBg3&pWL86*&&;17DUCI> zXq&HR{9|Yk=h51kiBZQC?7kwM(%yUP5lWlXx5?B<)xJMQ6C5pO_W9M)HipjpCnPwjb^H08nrCbUE^*fVdXb)xV`x%wwXRi!z4&v7)DPnmN;j9 z*ieJENLV3DV;@vEqKDYC9=<8a@pGr({cHZV`wG|bZfXiviv@ms1P?OugCks7L7r2j zLGDGSWESDA@ zv^4J%2@N_tu)V>#w13bm6=lb!GPM%cjchx4v>Mu&<9kV|4}Mhe)=<ev|Rj?<1jQaC9GE4XkA#f`}(JE85u=;yumj3&MPcwni$1;6n-@brC{ zPtozAq3jqC*SAWI*YAS3G2qs`KpW8S{1BZSqfg#Lt}gH|Keb7OU;HS!seQpdZ1;}$ z_`mV*Bh8BV`+t}Ct-k{I-?rzxFp9Gcaa)zL1EM7M+XuZWq3@>CeM#F}6|HV1^{r!l zyUn24v=20?8l{O=r8tl_*&lb3jz-b1{|+2Ig4sFoKmI?X@BKECdE{H)LxYk@q^wto zCf3cqV1Lk86U8=>1}eu&8+2icR}}p zrG1r$?C~>?X#xSTl)i40$$#|6LowSVKk=5PLW0O`u>`Q?T9}d!q|Mp^4Tq zs9R$&Btx?yIygkif;jMS?>;$W9NZ zv+5LVtgv3$!d@=S+rMdui-#n$u(yGNh)By>$O4q7d3QK!vdolB4x1}MtPdU2}u zv9$_WH|-65&9d!=o;#oRa$u~+^uiqXe$A?G{p*wMv$W}NE4@8`pWW^k@RwcQuK#sw zOJ)VzG>a57n^nZ|Jv;%*Y<=fTTx=}~RcO_G!duhp2(4*z=2P2iVv97jjrWcYA-9=-@f~#Yo1fUt=Ox>9bL88M zPErnGat!yE)-qTvO7Z}Y zs2ek;ZRC6V&8>R#sj0Ux34H^j&Jr+Mq_BjL*c`LHUtcSCg8Bdl19iNwOC}+`13w9(HH%m*^XT zLD>ULHghbxmbctFP;l`5zroAFA+9>X$3S*?L|#?I5RD3Rj@Z<+iy7iP{`@6jxj^!Q z?8QguYH3!e&pxpJ{bEM@;$!nSzdA=(3%hWu<&MdB$_H3sVBp0k<{xl=YVK#tG{Zc- zgv(QS`4&=+*hU z>e#o5t#2WpOq-m?KmEGd{}d(s-oIlr$nSic*jV*oBU|k)(WZL4RJQ+panHx2?)dU@ z-5a@YSQ66))~4_C#u!MwGUvH>zlOAd_}Bg}`p$RZ@)i2_*WqAj*QAMQ&kcl~>4MC` zLFPeaLl{wrJ&cwZP4E_T#OXPj&4|v! za&`+aSfMJZzpe(X7c*-iG>Og+DL(*N3y@W^jZkGBYw0%DdtDo&l?^V>OY=!k3n?No z8f(L``4!Bs*2RLpDO2Dx(-9rshx>1#kKcpG@4>yN=)pbnVQ_wD5%j!`w=T*JOu;^f z*G`D|rfrAV15dKHMKtENZLPRbAS=+}1YC&>JbH2nkDd_I-=zo5Lgr-J(PW$2`v{?~nmoz{B zb7U|eo_$9BlRrg@lIG)|(_XwvbakDgv*KEir>ljr1OOlYBvsf$xOfGN8M0cK2=TK| zY_6poSr&RV+z~@wE7dmdwgH-ePL2sj_t666_x}#=8@~;+E3!{NL_$M&_DkBUbJI%1 zu#PX?`?}{FhqUZ>|7|42#fHE2AHl&r>kq1F47BM)oNnjv-!#Hx4|l#bAFe&m0_n9# zIs@)*5~1&D5PFK^t?7e~*Gd~^6eK9JTEbw0eE0Wo^Cj_b{jZ6?`?rzv&(Ozjp<_X7 zj2=#hbDN?^RV+p{b8wJ5T3{e>oJo3$+Iw1Z4da+U&Gmy``xe$IxhVGLGjGCBvZu!w zxAYVH7V`D+0#WVd+3T%zLgxeHFyDo{_*T934P0Vi1GBF?A8t1IGYLOdT4=axRb~5@LfAJpMC>*{62dBsRqz{6$iZo_Cl%aUlBqr?s6&pQt#uV(vSoCpEyrG4#yQVif1levs2w$mz^}bfe zURT=RP#5t_2L;WmXSljS$Slq?tcYbvObbPvBepeRwZMrdT$~bC%cLpz*ldw!mxND$ zWjFrCE8=ILAVonu`;0g}M|OmWd$-JTVE>K|;ND{!S9NSj^F9zckk1#8Q#0~wuvX!lr8b|leONUfXp5;^-NELX^jkKo0} z$l0ex5tfsrn(3yAM;Dm3KbJ7ms0Mf_lZFDrar;xeDA*Tn8MHKA>YZG*3ug!z;>y&%q}=4Lv* zAf6o)508mg7lhd*OfQhDGgw-Td2DPvx687KF%n}yVuM>;;_4YXpAu8(nyYIhwI^cR z7|lICF#nUHB9sHvdt8jTol$+)4J4q%JS97pLwuHR4kVu;S#GY3<$yRnv!bPGaG^$G zAVjq>OYd;GF(^@-1pu8q#y@!y3$dN&Wy` zPN^bm-!YH%(`p8L_Mo ze}KzMq=GoAh$j`fM3V!uPy!WZRF=EzZ3B37 zJ>^a8-%ge^0Cea{$@aO^ZpR|&4{VLbWrf};nxX=_mJTsF$Q8;p?Q`pj#HpS zjJUxV5y4eM2#pDAh9eUeF6VIa2q`M!)fqf|&-(Wt{uqDp3T<1$$3HjCL9?5b0>rV+U@txk#U@1A6?JP!7@6 z68ZQ46Qi#`{we$7a{+9N~xmE>cveIO54un|~Gu zt9ETOyiZdg*RoP~c&V^U`R&|gyQ<<{rl9RP8n!8SAh9MmYy>pe5V0OVuoXLghj8=` zELVhYeILDlpExiDy0qJ*e?)20avAuJHiu(xPa)swdhB~&_f-6f?C+My^`4);4rJZn zX%OE~Eztiuxj{3q>#NoR7k3mCoDNS2!vlO#+WIX@Q_?$UwU{azTbn)#0T(PAf#Db( zjM2%$d4mizmUigtDhUZgxc(Am3#($ihY*o^Wo^hV zSLEovx$2D$jbkb*I*(hGp6gfK7;}kp=ELDLL=WI_g)~h%6my%B8cbk%X8MA9W&bv- zP1JE`U!13}ACBSp5%Ta|tD^6}ZH3L`7_CNVvhcP&HLkrB`s0ZGrr4T_L-&spu3Hd# zgK3d&J|B8+NFnVDAq5#kK|*8K7>5)k!o&*1K}3fc91PIo1N7c8dVCK(yl3u{Ih|A2 zS~HX-JM+%9Fc+tlqv%vK*>s{tRh0moQ_;L?o-7mqqrI6{rzr2e=!}(j^ zB~B)^E<;gErW4zoed-xUwx@sAm+HY&1i?2o@x5dvl;(TV& z%z1&%u59|i`y^QG+W(13ShTSCMS6b*zxWYcomn*I#Va%`%^XOag(;0D+l%6cK&6gm zV$~2%o)DfswUYMU6Jsg<)gR)1^gr4G`Ky10e)KamuaM;w36150pFBb9CGw3QAn*Sc zgh2ek-!d^|+k!6=H6LJAZvtJec?js1?sB6}>G9rS5BDAPx_MC_6tq2MU+5W^)G2~2 zM6^kws%4YLNgd(f0Tekry$`?t9;|BXhaP3n96)X3O4{>Ljolo$!o)%0ts*$`*Z-`h zKLN$AW4(om>@y__y$RrW0~FY7B)a8GzNM$?gg;wkimd0-wMQuJ{)+zbzh*sl?WSd0 ze6+Zu(aBfUgt{6bS#A}z&%t>z=j{3@L}#gn>H{(6#1!zOzJ!5|9WpvVtFajpEvCq9 zie9}!M~B4AQ*?fXPA`dgj7a_;xltT_BiNYK=Y^WF&!b?RZGPZI)j+w)E$$62;nH5r0BsrTQM#glIQ`-z< z4lyKhXx?4lzuO*i%($mrV;@#LhkL_$GHqM>Bz#OC4Ck25_rbamdqf(`5XqT096 zCq1KejbbER#*DjczXFW;_zU`TU%wyt{nn3-rzp(QCao9j(sn(&SBfbZdvrvm`}?0E zI*wcF^{ZE}E{MZlogbp0Uwr5{bHcEBR?7L;ys}cp z8+JO4(Uuwa zl-sOdBQiFz2f56pWAK~jRgHsg*oVBbDt1;I(KWNYVRRR*vSe8S0&Z}^!U-*F88ZFf z&n9q`=jU2~JeYr%a=_e1zw+Z}tvbHGR;a+H3Po=+L3Tx(Ysj zjZlL0BpyH}+Xq;#yR9sP+%iZFc)vF^gTAJgx<4Yx(>oh;_f&cvtcY))!DC`fdOJ@N zy-l?g5cFmN9~Ba#V4L)6Gowu2N=gy3+3AWba1KA`V}|5!j|5@5yq%5#EK z0ohr%XgiOF)2Y0p5{Hp5uOCrnyj*#DsHSLUX94(}(>TOWhG9a#ibV}-3kTReq^5G1)_o#Z(YXMiI2X2=OpEge%K0b#z zX7h2h=53qSboR8ff16n7a_46gYdWj!AMz+{xnTh%CO=<;P&NGNOZrBK%5q1E6BN6) z4$fSxkJ0oET@9_k5`sI~Z*5n^vQd2j`OBGVt*s)=x%H}B+uck%6k5g~jP~TCD(3}3 zWvSjyYl4hyJZUbvIH_yYPn{m-x3Erk0%wsXfz67C+rzZHybDCx&lEn?yK8%S%PVq5 z`|OhW(yG1C%cqVRQ~U7x_G0CT-VLP1OZ84XCwY<0$zE^v{>wV>iQ`~Ihr>-@Xr1u~ z9oNy(Nzv2SwjFry-L~^^r-=yP`*BbP-OX8gRW|Xaz#*_+lT&(m&E=zBm7Kv;pzF(? zaR?&e5P}4?zWzxLV)GQ}S6nOgT3SAKU)BYNCH{^aj9<6S)p2~|ix^6}aAXjC{Fwd6 zPC-QWlkN*jB&}{a2QN^m?k3h}V}u+OLU|SAi9_B`js8I|t`II2%4j&P)0idwT)|jf z=iMU`Oe$4k01H>(wZC$^r@s*^*%yBFl4j@^E0Bb`arNhn1md{$C<2Fd3j`6y16_@> zvJ%ez11Q}=422R9a=hQQ^nyt-C9eC-AdPC`i?cS;@ka2vMhr__KegBeG=U%3Dt>ElJYaKMwf)WOG$kyZ^_mqoH6cGg09> zNzOmg@%NT2rS3{93>U@9k9L?gTh4JcTsht9vxX~12BgCLYdbXrOY46554rXvrRa%a ziS!yTASq5X4iFRFR5f-EEPOySq;6$62sL{TW@qVMVOL$mL_3~=XGx*@ zW@-pveT_S>oth^<`R>)_>Eig5fBIFKIsSdVv}mPeH9qFzU9t3?Vwii=)a7e>isEiM zc_R^z1i4)RRj8Y^Ui#3P8}Hd#pnv}?sK~-;xX&sm#|P#n?f=$O+00)5ifxWs+3ERD zt6f{QM?B;d@>kLpuzTrRt? zsPrPzUuv)^Rb5_+T@am8aBkdLym;8y5NVKD<|z()Cu= z@fhEw&&(>7QGg=vyuNDv!vZx!1oAjaIJe8$xDV8@E~+b3`W#@0(DG6{BsE2f9b8t` z-O31|ufo#&aqYB2nNBw4ja$~i7BsC{qDSv|k^G-~;1QeY;yoM2jgJ^b{a3R`gj z!*ZjqG`JiI8GZ{57BwquH8qS9O$MWB+@oa{|Btkq&Sdq^Lyar-* zk{>KQlts=^2?12SwFr9Ytl2OTkN@Sy(Q0FF`wuT$kZXUd#nS`-UcPe>GrR>|;#eb4 z)n=E>&jXpbJ26ym$~em@!+vAWYzn>a1Ka&u64fz<`S~gjo&k74Zin(JLs-hbHyoYT z%$IlMR{JI7$6f(SENeN8 zM8WPD$_fonb%RRg_d{6_^MmF*!Himrk^yG&oSGG^3&WE8^L3Ci#lRG^_;w=$0*QHf zz+W4T(|DF~6K{JO%cPmu&pxSI``94#Ht}4?VBNlZ*kHn)I1{2y-)5^A{{FwUwSEJv z#{NZtT|cR~f4jM6;t3%Kc9yc@Gq(<}xW!TA1EgjbORXCBcHKiEpZL3Op#OrWPPL@O zIGQ9h?!8sH5lR1wDrv81VE7{;!_mln_l)U6smxV0;Qp=a#L=2(WsKO763r$IVWJ#b z$@p?S3jZzUotf#;&&ecd=)$$R;fX1BB))NRW507*MZx*AjF$V<0&Ra6AJ!b?WMwit zaH?i^ath_wWgwpEVQN^(xB#pTZ<(Q&&U7Clep>z>!OcMUEgH2@ymu0{@e+7nd;Fyc zg)`AlQ0%wCJo#RJI|}+oS%_T`X|1M;2_-?IJ)uK&2d4b7;G}0{pvPufVr*ic<{DGr zmJU5W(4^Q86aE#B-_e_pS`bUECw_Gylr#42h^Gc^r@#no4XcfHx{uraWw-Sz0lJ=cy;5`#|c2V{^_&AamG7K4~Fj*Q971Ll1v_p ziI!c4mc^*{)QhRVntOs8N(#4z6UJ1frBS)6+3y(x${uEpw@; zbI=yJXgOi k|AVamU-HJO&3HbZQHg=0AGZsIc(}L>yJ}T)(euH70q(9OPyhe` literal 0 HcmV?d00001 From 5b0ca19242687845d2bed21a4bc529733fcd68b5 Mon Sep 17 00:00:00 2001 From: James Orson Date: Wed, 19 Jun 2024 11:15:00 -0700 Subject: [PATCH 10/10] 3: Get a texture loaded. The texture coordinate buffer is not completed yet. --- examples/Playground/Program.fs | 12 ++- .../Shaders/{ => Scanlines}/fragment.glsl | 0 .../Shaders/{ => Scanlines}/vertex.glsl | 2 +- .../Resources/Shaders/Texture/fragment.glsl | 19 +++++ .../Resources/Shaders/Texture/vertex.glsl | 12 +++ src/ThirdParty/SDL2/Image.cs | 6 +- src/ThirdParty/SDL2/SDL2Bindings.cs | 2 +- .../OpenGL/Api/Constants/OpenGL1_0.fs | 2 +- src/Womb/Graphics/Primitives.fs | 84 ++++++++++++------- src/Womb/Graphics/Types.fs | 33 ++++++++ 10 files changed, 134 insertions(+), 38 deletions(-) rename examples/Playground/Resources/Shaders/{ => Scanlines}/fragment.glsl (100%) rename examples/Playground/Resources/Shaders/{ => Scanlines}/vertex.glsl (83%) create mode 100644 examples/Playground/Resources/Shaders/Texture/fragment.glsl create mode 100644 examples/Playground/Resources/Shaders/Texture/vertex.glsl diff --git a/examples/Playground/Program.fs b/examples/Playground/Program.fs index f04603f..1ea0943 100644 --- a/examples/Playground/Program.fs +++ b/examples/Playground/Program.fs @@ -26,13 +26,19 @@ type GameState = Triangles = Primitives.ShadedObject.Default } let private initHandler (config:Config) = - let fragmentPaths = ["Resources/Shaders/fragment.glsl"] - let vertexPaths = ["Resources/Shaders/vertex.glsl"] + let fragmentPaths = ["Resources/Shaders/Texture/fragment.glsl"] + let vertexPaths = ["Resources/Shaders/Texture/vertex.glsl"] let transform = { Transform.Default() with Scale = (1.0f, 1.0f, 1.0f) Rotation = (0.0f, 0.0f, 0.0f) } - match Primitives.ShadedObject.CreateQuad vertexPaths fragmentPaths transform 1.8f 1.0f None with + match Primitives.ShadedObject.CreateQuad + vertexPaths + fragmentPaths + transform + 1.8f + 1.0f + (Types.Texture2D.FromPath "Resources/Textures/smiley.png" |> Some) with | Some primitive -> { config with State.Triangles = primitive } diff --git a/examples/Playground/Resources/Shaders/fragment.glsl b/examples/Playground/Resources/Shaders/Scanlines/fragment.glsl similarity index 100% rename from examples/Playground/Resources/Shaders/fragment.glsl rename to examples/Playground/Resources/Shaders/Scanlines/fragment.glsl diff --git a/examples/Playground/Resources/Shaders/vertex.glsl b/examples/Playground/Resources/Shaders/Scanlines/vertex.glsl similarity index 83% rename from examples/Playground/Resources/Shaders/vertex.glsl rename to examples/Playground/Resources/Shaders/Scanlines/vertex.glsl index 97a4a07..cce78fa 100644 --- a/examples/Playground/Resources/Shaders/vertex.glsl +++ b/examples/Playground/Resources/Shaders/Scanlines/vertex.glsl @@ -1,6 +1,6 @@ #version 330 core -layout (location = 0) in vec3 in_position; // the in_position variable has attribute position 0 +layout (location = 0) in vec3 in_position; // the in_position variable has attribute position 0\ void main() { diff --git a/examples/Playground/Resources/Shaders/Texture/fragment.glsl b/examples/Playground/Resources/Shaders/Texture/fragment.glsl new file mode 100644 index 0000000..8c52f16 --- /dev/null +++ b/examples/Playground/Resources/Shaders/Texture/fragment.glsl @@ -0,0 +1,19 @@ +#version 330 core + +in vec2 out_texture_coordinate; + +out vec4 out_frag_color; + +uniform vec2 in_viewport; +uniform sampler2D in_texture; + +void main() +{ + // out_frag_color = texture(in_texture, TexCoord) + out_frag_color = vec4( + 1.0f - out_texture_coordinate.x, + 1.0f - out_texture_coordinate.y, + 0.0f, + 1.0f + ); +} diff --git a/examples/Playground/Resources/Shaders/Texture/vertex.glsl b/examples/Playground/Resources/Shaders/Texture/vertex.glsl new file mode 100644 index 0000000..4cea338 --- /dev/null +++ b/examples/Playground/Resources/Shaders/Texture/vertex.glsl @@ -0,0 +1,12 @@ +#version 330 core + +layout (location = 0) in vec3 in_position; // the in_position variable has attribute position 0 +layout (location = 1) in vec2 in_tex_coordinate; // the in_tex_coordinate variable has attribute position 1 + +out vec2 out_texture_coordinate; + +void main() +{ + gl_Position = vec4(in_position.x, in_position.y, in_position.z, 1.0); + out_texture_coordinate = in_tex_coordinate; +} diff --git a/src/ThirdParty/SDL2/Image.cs b/src/ThirdParty/SDL2/Image.cs index bf22cf8..a497176 100644 --- a/src/ThirdParty/SDL2/Image.cs +++ b/src/ThirdParty/SDL2/Image.cs @@ -89,13 +89,13 @@ public static SDL.SDL_version IMG_Linked_Version() /* IntPtr refers to an SDL_Surface* */ [DllImport(nativeLibName, EntryPoint = "IMG_Load", CallingConvention = CallingConvention.Cdecl)] - private static extern unsafe IntPtr INTERNAL_IMG_Load( + private static extern unsafe SDL.SDL_Surface* INTERNAL_IMG_Load( byte* file ); - public static unsafe IntPtr IMG_Load(string file) + public static unsafe SDL.SDL_Surface* IMG_Load(string file) { byte* utf8File = SDL.Utf8EncodeHeap(file); - IntPtr handle = INTERNAL_IMG_Load( + SDL.SDL_Surface* handle = INTERNAL_IMG_Load( utf8File ); Marshal.FreeHGlobal((IntPtr)utf8File); diff --git a/src/ThirdParty/SDL2/SDL2Bindings.cs b/src/ThirdParty/SDL2/SDL2Bindings.cs index e5b8014..586f70c 100644 --- a/src/ThirdParty/SDL2/SDL2Bindings.cs +++ b/src/ThirdParty/SDL2/SDL2Bindings.cs @@ -4319,7 +4319,7 @@ uint color /* surface refers to an SDL_Surface* */ [DllImport(DllName, CallingConvention = CallingConvention.Cdecl)] - public static extern void SDL_FreeSurface(IntPtr surface); + public static extern unsafe void SDL_FreeSurface(SDL_Surface* surface); /* surface refers to an SDL_Surface* */ [DllImport(DllName, CallingConvention = CallingConvention.Cdecl)] diff --git a/src/Womb/Backends/OpenGL/Api/Constants/OpenGL1_0.fs b/src/Womb/Backends/OpenGL/Api/Constants/OpenGL1_0.fs index 04220f0..de21bfa 100644 --- a/src/Womb/Backends/OpenGL/Api/Constants/OpenGL1_0.fs +++ b/src/Womb/Backends/OpenGL/Api/Constants/OpenGL1_0.fs @@ -348,4 +348,4 @@ let GL_TEXTURE_WRAP_S = 0x2802u [] let GL_TEXTURE_WRAP_T = 0x2803u [] -let GL_REPEAT = 0x2901u \ No newline at end of file +let GL_REPEAT = 0x2901u diff --git a/src/Womb/Graphics/Primitives.fs b/src/Womb/Graphics/Primitives.fs index 0ea6628..07246ba 100644 --- a/src/Womb/Graphics/Primitives.fs +++ b/src/Womb/Graphics/Primitives.fs @@ -15,7 +15,7 @@ type ShadedObjectContext = EBO: uint; Vertices: array; Indices: array; - Texture: option; } + Texture: uint; } static member Default () = { VAO = 0u @@ -23,38 +23,39 @@ type ShadedObjectContext = EBO = 0u Vertices = Array.empty Indices = Array.empty - Texture = None } + Texture = 0u } - static member From (vertices) (indices) (textureOpt: option) : ShadedObjectContext = + static member From (vertices) (indices) (textureOpt: option) : ShadedObjectContext = let vao = glGenVertexArray() let vbo = glGenBuffer() let ebo = glGenBuffer() let textureId = match textureOpt with - | Some _ -> + | Some texture -> let id = glGenTexture() glBindTexture GL_TEXTURE_2D id - // TODO: Fix the type errors // NOTE: Eventually we will add texturing options for the individual texture, but for now let's set some defaults - // NOTE: set the texture wrapping/filtering options (on the currently bound texture object) - // glTexParameteri GL_TEXTURE_2D GL_TEXTURE_WRAP_S GL_REPEAT - // glTexParameteri GL_TEXTURE_2D GL_TEXTURE_WRAP_T GL_REPEAT - // glTexParameteri GL_TEXTURE_2D GL_TEXTURE_MIN_FILTER GL_LINEAR_MIPMAP_LINEAR - // glTexParameteri GL_TEXTURE_2D GL_TEXTURE_MAG_FILTER GL_LINEAR + glTexParameteri GL_TEXTURE_2D GL_TEXTURE_WRAP_S (int GL_REPEAT) + glTexParameteri GL_TEXTURE_2D GL_TEXTURE_WRAP_T (int GL_REPEAT) + glTexParameteri GL_TEXTURE_2D GL_TEXTURE_MIN_FILTER (int GL_LINEAR_MIPMAP_LINEAR) + glTexParameteri GL_TEXTURE_2D GL_TEXTURE_MAG_FILTER (int GL_LINEAR) - // TODO: Generate the texture and mipmap - // NOTE: glTexImage2d explanation... - // The first argument specifies the texture target; setting this to GL_TEXTURE_2D means this operation will generate a texture on the currently bound texture object at the same target (so any textures bound to targets GL_TEXTURE_1D or GL_TEXTURE_3D will not be affected). - // The second argument specifies the mipmap level for which we want to create a texture for if you want to set each mipmap level manually, but we'll leave it at the base level which is 0. - // The third argument tells OpenGL in what kind of format we want to store the texture. Our image has only RGB values so we'll store the texture with RGB values as well. - // The 4th and 5th argument sets the width and height of the resulting texture. We stored those earlier when loading the image so we'll use the corresponding variables. - // The next argument should always be 0 (some legacy stuff). - // The 7th and 8th argument specify the format and datatype of the source image. We loaded the image with RGB values and stored them as chars (bytes) so we'll pass in the corresponding values. - // The last argument is the actual image data. - // glTexImage2D GL_TEXTURE_2D 0 GL_RGB width height 0 GL_RGB GL_UNSIGNED_BYTE data + glTexImage2D + GL_TEXTURE_2D // specifies the dimensional behavior of a texture: 1D is a line, 2D is a normal flat texture, 3D is a volumetric texture, like when a model is cut open and you want to show the interior of the object: https://stackoverflow.com/a/7329678 + 0 // mipmap level to use (clamped to 0 for now) + (int GL_RGB) // format of output texture + texture.Width // width of resulting texture + texture.Height // height of resulting texture + 0 // always 0, for legacy reasons + GL_RGB // format of source image + GL_UNSIGNED_BYTE // datatype of source image + texture.Data // image data glGenerateMipmap GL_TEXTURE_2D - // TODO: Free the image data from SDL + + match texture.Surface with + | Some surface -> SDL2Bindings.SDL.SDL_FreeSurface(surface) + | None -> () id | None -> 0u @@ -76,7 +77,6 @@ type ShadedObjectContext = indices GL_STATIC_DRAW - // TODO: Adjust the stride parameter if a texture is present glVertexAttribPointer 0u 3u @@ -86,12 +86,25 @@ type ShadedObjectContext = 0 glEnableVertexAttribArray 0u + match textureId with + | 0u -> + // TODO: This is not binding properly. Create a new buffer just for texture coordinates and bind it + glVertexAttribPointer + 1u + 2u + GL_FLOAT + false + 2 + 4 + glEnableVertexAttribArray 1u + | _ -> () + { VAO = vao VBO = vbo EBO = ebo Vertices = vertices Indices = indices - Texture = None } + Texture = textureId } static member UpdateIndices (indices) (context: ShadedObjectContext) : ShadedObjectContext = glBindBuffer @@ -149,6 +162,7 @@ type ShadedObject = fragmentPaths ) with | Some shader -> + // TODO: Construct tex coords let vertices = [| // bottom left -width / 2.0f; -height / 2.0f; 0.0f; @@ -220,8 +234,7 @@ type ShadedObject = let mvp = modelMatrix * viewMatrix * projectionMatrix glUniformMatrix4fv mvpUniform 1 mvp - - // TODO: See if texture data or coords are best passed through uniforms. If so, modify this, otherwise, leave it be + List.map ( fun uniformData -> @@ -298,12 +311,24 @@ type ShadedObject = | 3 -> glUniform3ui location data[0] data[1] data[2] | 4 -> glUniform4ui location data[0] data[1] data[2] data[3] | len -> fail $"Unsupported UVectorUniform length {len} when trying to use shader" + | SamplerUniform(name, data) -> + let location = glGetUniformLocation shader.Id name + glUniform1i location data ) uniforms |> ignore static member Draw<'T> (config:Config<'T>) (viewMatrix:System.Numerics.Matrix4x4) (projectionMatrix:System.Numerics.Matrix4x4) (primitive:ShadedObject) (uniforms) = match primitive with | Quad(context, shader, transform, width, height) -> + let all_uniforms = + match context.Texture with + | 0u -> uniforms + | _ -> [ + SamplerUniform( + "in_texture", + 0 + ) + ] @ uniforms ShadedObject.UseMvpShader config shader @@ -323,12 +348,13 @@ type ShadedObject = config.DisplayConfig.Height |> single ) ); - ] @ uniforms ) + ] @ all_uniforms ) match context.Texture with - | Some texture -> - glBindTexture GL_TEXTURE_2D texture - | None -> () + | 0u -> () + | _ -> + glActiveTexture GL_TEXTURE0 + glBindTexture GL_TEXTURE_2D context.Texture glBindVertexArray context.VAO glBindBuffer GL_ELEMENT_ARRAY_BUFFER diff --git a/src/Womb/Graphics/Types.fs b/src/Womb/Graphics/Types.fs index 7486c67..8b3acff 100644 --- a/src/Womb/Graphics/Types.fs +++ b/src/Womb/Graphics/Types.fs @@ -1,7 +1,12 @@ module Womb.Graphics.Types +#nowarn "9" // unverifiable IL due to NativePtr library usage + +open Microsoft.FSharp.NativeInterop + open SDL2Bindings open Womb.Lib.Types +open Womb.Logging type DisplayConfig = { Width: uint; @@ -48,3 +53,31 @@ type Uniform = | UVector3Uniform of Name:string * Data:UVector3 | UVector4Uniform of Name:string * Data:UVector4 | UVectorUniform of Name:string * Data:array + | SamplerUniform of Name:string * Data:IVector1 + +type Texture2D = + { Surface: option>; + Width: int; + Height: int; + Data: voidptr; + Format: nativeint; } + + static member Default() = + { Surface = None + Width = 0 + Height = 0 + Data = 0n.ToPointer() + Format = 0n } + + static member FromPath path = + let surfacePtr = Image.IMG_Load(path) + if NativePtr.isNullPtr surfacePtr then + fail $"Failed to load surface from path - {path}" + Texture2D.Default() + else + let surface = NativePtr.get surfacePtr 0 + { Surface = Some surfacePtr + Width = surface.w + Height = surface.h + Data = surface.pixels.ToPointer() + Format = surface.format }