From dcfb42fc4d2349d747da7abe2cfff178513fb040 Mon Sep 17 00:00:00 2001 From: TMHSDigital <154358121+TMHSDigital@users.noreply.github.com> Date: Tue, 15 Sep 2026 18:09:29 -0400 Subject: [PATCH] fix: rebuild four weak showcase props and collapse the README grid Cauldron, torch, anvil, and crate heroes were unreadable (lathe-grid pot, tiled plaque, box-stack anvil, lid crop with wiped metal). Collapse the README showcase so 24 full-bleed thumbs are not a scroll trap. Signed-off-by: TMHSDigital <154358121+TMHSDigital@users.noreply.github.com> Co-authored-by: Cursor --- README.md | 55 +++--- docs/gallery/anvil/index.html | 123 ++++++------ docs/gallery/assets/anvil-hero.webp | Bin 17448 -> 8758 bytes docs/gallery/assets/iron-cauldron-hero.webp | Bin 13246 -> 10582 bytes docs/gallery/assets/shipping-crate-hero.webp | Bin 21798 -> 12172 bytes docs/gallery/assets/wall-torch-hero.webp | Bin 23882 -> 10668 bytes docs/gallery/index.html | 12 +- docs/gallery/iron-cauldron/index.html | 121 ++++++------ docs/gallery/shipping-crate/index.html | 88 ++++++--- docs/gallery/wall-torch/index.html | 193 +++++++++---------- showcase/anvil/README.md | 24 +-- showcase/anvil/anvil.py | 117 ++++++----- showcase/anvil/preview.webp | Bin 14556 -> 8232 bytes showcase/gallery.json | 10 +- showcase/iron-cauldron/README.md | 23 ++- showcase/iron-cauldron/iron_cauldron.py | 115 +++++------ showcase/iron-cauldron/preview.webp | Bin 11358 -> 9662 bytes showcase/shipping-crate/README.md | 20 +- showcase/shipping-crate/preview.webp | Bin 19000 -> 11272 bytes showcase/shipping-crate/shipping_crate.py | 80 +++++--- showcase/wall-torch/README.md | 18 +- showcase/wall-torch/preview.webp | Bin 19552 -> 9804 bytes showcase/wall-torch/wall_torch.py | 177 +++++++++-------- 23 files changed, 640 insertions(+), 536 deletions(-) diff --git a/README.md b/README.md index ef3bc93..ec3d200 100644 --- a/README.md +++ b/README.md @@ -75,30 +75,35 @@ blender --background --python examples/bmesh-gear/bmesh_gear.py -- Budget-conformance props. Not examples. Conventions: [`showcase/README.md`](showcase/README.md). -Shipping crate: a wooden slat crate with iron corner brackets on a dark studio floor, warm wedge on the back wall -Stone well: a round brick well with a shingled pyramid roof on posts, rope and bucket, on a dark studio floor -Wooden barrel: a staved barrel with iron hoops on a dark studio floor, warm wedge on the back wall -Campfire: a two-course stone fire ring with a tripod of logs on a dark studio floor, warm wedge on the back wall -Market stall: a timber frame with post feet, slatted counter, rafters, and a striped awning on a dark studio floor, warm wedge on the back wall -Street lantern: an iron post with brass collars, a braced arm, and a muntined amber cage on a dark studio floor -Treasure chest: a slatted wooden chest with iron bands, corner brackets, and an open lid on a dark studio floor -Terrain scatter: a Geometry Nodes dirt hill tile with bevelled masonry rocks on a dark studio floor -Fence kit: a timber post-and-rail section with pyramidal caps, iron shoes and straps on a dark studio floor -Watchtower: a timber lookout with X-braces, hatch ladder, plank platform, and a coursed shake roof on a dark studio floor -Cart: a two-wheel wooden cart with spoked wheels, slatted bed, and shafts on a dark studio floor -Park bench: a wrought-iron bench with scrolled legs and wooden slats on a dark studio floor -Wheelbarrow: a staved wooden tray with iron straps, a spoked wheel, rear legs, and handles on a dark studio floor -Anvil: a London-pattern anvil on a hooped timber stump on a dark studio floor -Water trough: a watertight wooden trough with plank ends, contained water, and trestle legs on a dark studio floor -Hitching post: a square timber post with a pyramidal cap, cross-arm, iron bands, and two hitching rings on a dark studio floor -Grindstone: a stone wheel on a timber A-frame with an iron axle, hubs, crank, and tray on a dark studio floor -Hand pump: a cast-iron village pump on a wooden plinth with a spout and handle on a dark studio floor -Signpost: a timber post with two painted fingerboards, iron straps, and a pyramidal cap on a dark studio floor -Chopping block: a hooped timber stump with an embedded axe on a dark studio floor -Wooden bucket: a coopered bucket with overlapping staves, iron hoops, and a rope bail on a dark studio floor -Wall torch: a coursed stone plaque with an iron sconce, wooden haft, and flame on a dark studio floor -Tavern stool: a round wooden seat on turned splayed legs with stretchers and iron ferrules on a dark studio floor -Iron cauldron: a bulged iron pot hanging from a timber tripod on a dark studio floor +
+24 showcase pieces — click to expand the preview grid + +

+ Shipping crate: a wooden slat crate with iron corner brackets on a dark studio floor, warm wedge on the back wall + Stone well: a round brick well with a shingled pyramid roof on posts, rope and bucket, on a dark studio floor + Wooden barrel: a staved barrel with iron hoops on a dark studio floor, warm wedge on the back wall + Campfire: a two-course stone fire ring with a tripod of logs on a dark studio floor, warm wedge on the back wall + Market stall: a timber frame with post feet, slatted counter, rafters, and a striped awning on a dark studio floor, warm wedge on the back wall + Street lantern: an iron post with brass collars, a braced arm, and a muntined amber cage on a dark studio floor + Treasure chest: a slatted wooden chest with iron bands, corner brackets, and an open lid on a dark studio floor + Terrain scatter: a Geometry Nodes dirt hill tile with bevelled masonry rocks on a dark studio floor + Fence kit: a timber post-and-rail section with pyramidal caps, iron shoes and straps on a dark studio floor + Watchtower: a timber lookout with X-braces, hatch ladder, plank platform, and a coursed shake roof on a dark studio floor + Cart: a two-wheel wooden cart with spoked wheels, slatted bed, and shafts on a dark studio floor + Park bench: a wrought-iron bench with scrolled legs and wooden slats on a dark studio floor + Wheelbarrow: a staved wooden tray with iron straps, a spoked wheel, rear legs, and handles on a dark studio floor + Anvil: a London-pattern anvil on a hooped timber stump on a dark studio floor + Water trough: a watertight wooden trough with plank ends, contained water, and trestle legs on a dark studio floor + Hitching post: a square timber post with a pyramidal cap, cross-arm, iron bands, and two hitching rings on a dark studio floor + Grindstone: a stone wheel on a timber A-frame with an iron axle, hubs, crank, and tray on a dark studio floor + Hand pump: a cast-iron village pump on a wooden plinth with a spout and handle on a dark studio floor + Signpost: a timber post with two painted fingerboards, iron straps, and a pyramidal cap on a dark studio floor + Chopping block: a hooped timber stump with an embedded axe on a dark studio floor + Wooden bucket: a coopered bucket with overlapping staves, iron hoops, and a rope bail on a dark studio floor + Wall torch: a dressed stone plaque with an iron sconce, wooden haft, and flame on a dark studio floor + Tavern stool: a round wooden seat on turned splayed legs with stretchers and iron ferrules on a dark studio floor + Iron cauldron: a bulged iron pot hanging from a timber tripod on a dark studio floor +

[`shipping-crate`](showcase/shipping-crate/) — procedural crate through UVs, bake, LOD, collider, and Unity glTF, asserting recomputed budgets. Falsifier `--skip-decimate` exits 9. @@ -148,6 +153,8 @@ Budget-conformance props. Not examples. Conventions: [`showcase/README.md`](show [`iron-cauldron`](showcase/iron-cauldron/) — procedural hanging iron cauldron on a timber tripod through the same pipeline. Falsifier `--skip-decimate` exits 9. +
+ ## Examples Runnable, smoke-gated demos live in [`examples/`](examples/) — each is executed headless on diff --git a/docs/gallery/anvil/index.html b/docs/gallery/anvil/index.html index da9f14a..8f1f41d 100644 --- a/docs/gallery/anvil/index.html +++ b/docs/gallery/anvil/index.html @@ -253,7 +253,7 @@

anvil

anvil render

Rendered headless by the example itself — click to zoom.

-
witnesses Recomputed: 1696 tris, two materials with 274 metal faces, UVs in 0..1 with zero AABB overlap, outer AABB 0.746×0.410×0.682 m, LOD ratios in band (5.2 COLLAPSE more aggressive on LOD2), convex collider 162 tris, non-empty glTF. --skip-decimate exits 9 on the LOD1 ratio budget.
+
witnesses Recomputed: 6616 tris, two materials with 2616 metal faces, UVs in 0..1 with zero AABB overlap, outer AABB 0.772×0.419×0.662 m, LOD ratios in band, convex collider 190 tris, non-empty glTF. --skip-decimate exits 9 on the LOD1 ratio budget.
blender --background --python showcase/anvil/anvil.py --
@@ -264,8 +264,8 @@

anvil

Composes skills mesh-editing-and-bmesh, bake-high-to-low, depsgraph-and-evaluated-data, engine-export-presets, and snippets bake_normal_high_to_low.py, setup_bake_target_image.py, lod_chain.py / decimate_to_budget.py, convex_hull_collider.py, export_preset_unity.py (helpers copied, not imported as a package).

Budgets

Declared as named constants; every gate recomputes from the mesh, materials, UVs, evaluated LOD, collider, or export file.

-

| Axis | Declared | Measured (4.5.11 / 5.1.2 / 5.2.1) | | --- | --- | --- | | Base triangles | 1620–1780 | 1696 / 1696 / 1696 | | LOD1 ratio | 0.32–0.62 of base | 0.5000 / 0.5000 / 0.5000 | | LOD2 ratio | 0.10–0.35 of base | 0.2193 / 0.2193 / 0.2182 | | Materials | exactly 2 distinct, ≥24 metal faces | 2 slots, 274 metal | | UVs | in 0..1, AABB overlap ≤ 1e-5 | in range, overlap 0 | | Outer AABB | (0.746, 0.410, 0.682) m ± 0.01 | (0.7460, 0.4095, 0.6820), zmin 0 | | Collider tris | ≤ 180 | 162 | | Export | written, size > 0 | 130852 / 130852 / 130840 bytes |

-

DECIMATE COLLAPSE triangle counts are not identical across series — 5.2.1 is more aggressive on LOD2. The gate is a ratio band, not an exact count. Bake pixels are stochastic; the gate is has_data plus operator FINISHED, not byte-identity. Construction uses no RNG. Export byte counts differ by 4 B on 5.2.1 (glTF serializer), not a gated axis.

+

| Axis | Declared | Measured (4.5.11 / 5.1.2 / 5.2.1) | | --- | --- | --- | | Base triangles | 6450–6800 | 6616 / 6616 / 6616 | | LOD1 ratio | 0.32–0.62 of base | 0.5000 / 0.5000 / 0.5000 | | LOD2 ratio | 0.10–0.35 of base | 0.2198 / 0.2198 / 0.2198 | | Materials | exactly 2 distinct, ≥24 metal faces | 2 slots, 628 wood, 2616 metal | | UVs | in 0..1, AABB overlap ≤ 1e-5 | in range, overlap 0 | | Outer AABB | (0.772, 0.419, 0.662) m ± 0.01 | (0.7720, 0.4183, 0.6618), zmin 0 | | Collider tris | ≤ 220 | 190 | | Export | written, size > 0 | 474984 / 474984 / 474972 bytes |

+

DECIMATE COLLAPSE triangle counts are not identical across series in general — the gate is a ratio band, not an exact count. On this mesh LOD ratios matched across 4.5.11 / 5.1.2 / 5.2.1. Bake pixels are stochastic; the gate is has_data plus operator FINISHED, not byte-identity. Construction uses no RNG. Export byte counts differ by 12 B on 5.2.1 (glTF serializer), not a gated axis.

--skip-decimate skips the LOD DECIMATE stage so LOD1 ratio is 1.0 and exit 9 fires. That is the named budget the falsifier violates.

Run

blender --background --python anvil.py --
@@ -319,23 +319,18 @@ 

Source

sys.dont_write_bytecode = True import gallery_framing # noqa: E402 -STUMP_R = 0.195 -STUMP_H = 0.34 -FACE_L = 0.40 -FACE_W = 0.125 -FACE_T = 0.048 -BODY_H = 0.18 -WAIST_L = 0.22 -WAIST_W = 0.088 -FOOT_L = 0.32 -FOOT_W = 0.15 -HORN_L = 0.28 -HEEL_L = 0.11 +STUMP_R = 0.20 +STUMP_H = 0.33 +FACE_L = 0.42 +FACE_W = 0.118 +FACE_T = 0.046 +HORN_L = 0.30 +HEEL_L = 0.12 BBOX_TOL = 0.01 -OUTER_SIZE = (0.746, 0.410, 0.682) -BASE_TRIS_MIN = 1620 -BASE_TRIS_MAX = 1780 +OUTER_SIZE = (0.772, 0.419, 0.662) +BASE_TRIS_MIN = 6450 +BASE_TRIS_MAX = 6800 LOD1_RATIO_MIN = 0.32 LOD1_RATIO_MAX = 0.62 LOD2_RATIO_MIN = 0.10 @@ -345,7 +340,7 @@

Source

MATERIAL_COUNT = 2 UV_EPS = 1e-4 UV_OVERLAP_MAX = 1e-5 -COLLIDER_TRIS_MAX = 180 +COLLIDER_TRIS_MAX = 220 BAKE_RES = 256 CAGE_EXTRUSION = 0.08 METAL_FACES_MIN = 24 @@ -548,7 +543,7 @@

Source

STUMP_R + 0.010, STUMP_R - 0.018, STUMP_H, - 20, + 24, WOOD_IDX, ) ) @@ -558,7 +553,7 @@

Source

(0.0, 0.0, STUMP_H + 0.010), STUMP_R - 0.022, 0.020, - 20, + 24, WOOD_IDX, ) ) @@ -586,36 +581,36 @@

Source

metal.extend( add_box( bm, - (0.0, 0.0, z0 + 0.024), - (0.38, 0.168, 0.048), + (0.0, 0.0, z0 + 0.028), + (0.44, 0.20, 0.056), METAL_IDX, ) ) metal.extend( add_box( bm, - (0.0, 0.0, z0 + 0.066), - (0.30, 0.132, 0.038), + (0.0, 0.0, z0 + 0.078), + (0.30, 0.130, 0.046), METAL_IDX, ) ) metal.extend( add_box( bm, - (0.0, 0.0, z0 + 0.148), - (0.176, 0.070, 0.130), + (0.0, 0.0, z0 + 0.155), + (0.150, 0.058, 0.112), METAL_IDX, ) ) metal.extend( add_box( bm, - (0.0, 0.0, z0 + 0.248), - (0.34, 0.112, 0.052), + (0.0, 0.0, z0 + 0.236), + (0.36, 0.108, 0.050), METAL_IDX, ) ) - face_z = z0 + 0.248 + 0.026 + FACE_T / 2.0 + face_z = z0 + 0.236 + 0.025 + FACE_T / 2.0 metal.extend( add_box( bm, @@ -625,15 +620,15 @@

Source

) ) - horn_z = face_z - 0.012 + horn_z = face_z - 0.006 metal.extend( add_cone( bm, - (FACE_L / 2.0 + HORN_L / 2.0 - 0.028, 0.0, horn_z), - 0.056, - 0.014, + (FACE_L / 2.0 + HORN_L / 2.0 - 0.050, 0.0, horn_z), + FACE_W * 0.46, + 0.012, HORN_L, - 16, + 20, METAL_IDX, euler=(0.0, math.pi / 2.0, 0.0), ) @@ -641,34 +636,34 @@

Source

metal.extend( add_box( bm, - (FACE_L / 2.0 - 0.018, 0.0, horn_z - 0.018), - (0.10, FACE_W * 0.90, 0.048), + (FACE_L / 2.0 - 0.010, 0.0, horn_z - 0.014), + (0.12, FACE_W * 0.88, 0.040), METAL_IDX, ) ) metal.extend( add_box( bm, - (-FACE_L / 2.0 - HEEL_L / 2.0 + 0.016, 0.0, face_z - 0.006), - (HEEL_L, FACE_W * 0.90, FACE_T * 0.78), + (-FACE_L / 2.0 - HEEL_L / 2.0 + 0.018, 0.0, face_z - 0.004), + (HEEL_L, FACE_W * 0.92, FACE_T * 0.82), METAL_IDX, ) ) metal.extend( add_box( bm, - (FACE_L * 0.18, 0.0, face_z + FACE_T / 2.0 - 0.005), - (0.032, 0.032, 0.012), + (-FACE_L * 0.22, 0.0, face_z + FACE_T / 2.0 - 0.005), + (0.028, 0.028, 0.012), METAL_IDX, ) ) metal.extend( add_cyl( bm, - (FACE_L * 0.30, 0.0, face_z + FACE_T / 2.0 - 0.004), - 0.009, + (FACE_L * 0.22, 0.0, face_z + FACE_T / 2.0 - 0.004), + 0.008, 0.012, - 10, + 12, METAL_IDX, ) ) @@ -686,15 +681,35 @@

Source

if v.co.z < 0.0: v.co.z = 0.0 + if bevel_offset > 0.0: + metal_edges = list( + {e for v in metal for e in v.link_edges if v.is_valid} + ) + if metal_edges: + ret = bmesh.ops.bevel( + bm, + geom=metal_edges, + offset=max(bevel_offset, 0.012), + segments=bevel_segments, + profile=0.5, + affect="EDGES", + clamp_overlap=True, + ) + for f in ret.get("faces") or []: + f.material_index = METAL_IDX + pack_uvs(bm) bmesh.ops.recalc_face_normals(bm, faces=list(bm.faces)) for face in bm.faces: - face.smooth = False + face.smooth = True + for edge in bm.edges: + edge.smooth = True + if edge.is_manifold and len(edge.link_faces) == 2: + if edge.calc_face_angle() > math.radians(38.0): + edge.smooth = False me = bpy.data.meshes.new(name) bm.to_mesh(me) me.update() - for poly in me.polygons: - poly.use_smooth = False finally: bm.free() out = bpy.data.objects.new(name, me) @@ -843,10 +858,10 @@

Source

def check(skip_decimate): bpy.ops.wm.read_factory_settings(use_empty=True) - low = build_anvil_mesh("AnvilLow", bevel_offset=0.005, bevel_segments=2) - high = build_anvil_mesh("AnvilHigh", bevel_offset=0.005, bevel_segments=4) + low = build_anvil_mesh("AnvilLow", bevel_offset=0.010, bevel_segments=2) + high = build_anvil_mesh("AnvilHigh", bevel_offset=0.010, bevel_segments=4) wood = principled("AnvilStump", (0.34, 0.18, 0.07, 1.0), 0.0, 0.62) - metal = principled("AnvilSteel", (0.44, 0.45, 0.47, 1.0), 1.0, 0.30) + metal = principled("AnvilSteel", (0.16, 0.15, 0.14, 1.0), 0.90, 0.34) assign_slots(low, wood, metal) assign_slots(high, wood, metal) @@ -995,8 +1010,8 @@

Source

ob.hide_render = True ob.hide_viewport = True - low.rotation_euler.z = math.radians(-8.0) - low.rotation_euler.x = math.radians(0.0) + low.rotation_euler.z = math.radians(-42.0) + low.rotation_euler.x = math.radians(2.0) floor_me = bpy.data.meshes.new("Floor") bm = bmesh.new() @@ -1042,10 +1057,10 @@

Source

cam_data = bpy.data.cameras.new("Cam") cam_data.lens = 50.0 cam = bpy.data.objects.new("Cam", cam_data) - cam.location = (0.70, -2.20, 1.08) + cam.location = (1.32, -1.90, 1.04) scene.collection.objects.link(cam) aim = bpy.data.objects.new("Aim", None) - aim.location = (0.0, 0.0, 0.40) + aim.location = (0.0, 0.0, 0.44) scene.collection.objects.link(aim) con = cam.constraints.new("TRACK_TO") con.target = aim diff --git a/docs/gallery/assets/anvil-hero.webp b/docs/gallery/assets/anvil-hero.webp index 3caed7758cc75360d1863d6bfce8dad5c0c9862d..d9cfb049946c7edbf08d4f35f04001a0a85746ab 100644 GIT binary patch literal 8758 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

TrJZn3ReYO9k!gDr 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 diff --git a/docs/gallery/assets/iron-cauldron-hero.webp b/docs/gallery/assets/iron-cauldron-hero.webp index 6873e35897b68f4d7726a25ed3bdddda8f8b07c9..c17a5b852fc2b819183e1e8627b17b8b88d9f890 100644 GIT binary patch literal 10582 zcmV-cDXG>{Nk&FaDF6UhMM6+kP&gn$DF6VlwgH_1DgXu00zOeFl18JXuA?EeNIB37 z32AQs;k~P)paKmChuIA#c3SEG`t&jvP>x44?l|)TK%uw#Kiv98!LK--V*X#A*NlG~ z=p)rf`M*(L>mU8Se|j1J*U)$9$D%XVSE7ddZg2iG(raq_srWDaoAeTae^~m`#$)9K zbo}#J&vU;k=mYtOranhML-hszk_<|)d4)>n1O4Byp#%!w^150Jo*+-WdkZ|dp1p$S zh!hzG&k!gw3!WfQWFQuzUHX*s3Y6KU?d0O7O+e_Kz0agKc7AmX{8m zMo+}C{Af@M!!-t^*q3-Wd^VJ19Oc#Pcm`m_F{~qB>;tUZ!}F5V+8R5jQb9O8!lgEb ziE&L|M|3gb4DAolMpx0y?!&eoWBUkvJ*`y~38uJO4qcU4Ms>lt^RDH1)f zdG{47m=$Lw*gLkRb7(}}?Ss3q(&C!jjv6C^8E7SRP;O-63P$X#>#Q%dVi=ITWh{H& znsPG6+)a7PZO@+V28pxhXZBsa&cXv-e;vIXqtXC*;x0 z?Vx4sF6w;O135f69k*-wSw`*nAe4@MPk z;i6sl!vzuMfi##L<~jJSTo*a{zYLTYMX>mGt!C7vL6$RD!Xe(oRX2NyVkgIf_l~u_ z&J_BGXX;bTAvg5#{alR+1ZlD!YB$dhS$=P*l6ucBtrxQl8g{d(9LI~tI`SG4;;iPu zI6mtFl84YFD3c62cVRqSTt9L&`N;4V(*;6Ty`%f)8S%DKfiR?Z2hf@4Fxf%VFG|<( zhl#r0x)iEG|HDFYO9UqbUP@mdGV$1Zd{lt2mA6cD9R@;RV|S&Z`GT8u0>5lxr{MnD zU5&K)D2fER7;a=eq_e*Y8VjoILh3SxGukYCJdY=m1dK@kARZp39?p4$Ou8f<9;MHt zN|23TQ28eS@G7d0?TkD64e#5|DFNl_-SI_5MmDVS&!qKc>bN~`HRg7EbRiLYCqv#q0 z1o70(_-LH)NHj*d`D3=~RU#x2Ntrb8b+bkl%{mT?>rJmB2KxGfNJoR?8$&Z)6i@F! z7c3*gwO8JP3AHzK8$A<;4la^g01#!T&iyj}kZD5tG8#O(@DcKfC`&+PAH@vTn=68#anIW`NA9?^k0fc&{8iPF3)`@|mi3KIqV4P=S2nz3)LCLbKv%1PBx9w!_+4Bl5hJgw}!YGr1W~GG_*ldEs z9hm^kE2I6GGqh>}+vj)o$O~d^O2WD!^ExX!Z(WYyggKksJ}F-lC(>_QJm$Xz%HtU2 zIzf16Q7a6e6PjXdu2pd&YN>0`PLIxpm2n+7-6sV;<(g*trl`Ki&KyFR*hFFO7*I9| z-CgoKW$EP0mFGQGDx55ce#M5hH_j$3R+StyCv^>?Yu0i73bS3(7sSSPaGYrQ`4|?X zRRY24C&ofy^oPfbJN&~alY*ab!2uCO77=DTRJIWSfJf5`ElM)C)ip);c6o^MtZtLR zyFej<0X>PM+Qu3lbvvjhqcd=T!{p5mQ~jccj(#UoDr@EOkDhF8I9pQR#V{}*s#3y8 zWbR3PO~DB)qTpDLeXkC44DnjxmUF`J(**V1C4T2uaOUD_y^4W-$@w}BOJZQyRFH8+k6cu{Y8H`St+v*R3Ebw@(0Qa22!t9keJAmL-=)S8@ zGVV?cYztFmz|j6Gim}4{loT9V}(;O z@b$Z&?5u&zE?ys^CqH*eiRtkGgoEgPTz%VEZkdBOmd~nct1xd{BE7QyroWOUb-R`f z!XW^1Esw_9#09dd%Yj^jqucUn5LuuSeLoa%U%dE!QijDiVC~VTRcAL zK!EBN7^2O@DV1g{dGB<+9I3^1m!Hq{lI1s0w)9J+AWlIGj))X!n#t-yD8ZgA@ABVT z>F1e+$$DSu5Y*M9;3B2KOLO$DtllYpLms4cO1J%0iTa^2Vc5-#e-xGu;_ccZKcNXPpt7_kY8PDjzIbhr$ zHRbE7O!&Fl3|Z~8zB2;kGQ|yE5W>B(Fy(y)!_virOnExl;DbPNY2t7@D+XIDHC3FG zfXxx<=WBO4!Go9g6g7p>(J7H@cowLzH02jZ;EumaCT|b6Y-oWoiVu9d z$PsUbnKNuCa{StymHu#?7bpCCHlB)qnDW_I0r`Gfk3?`NycV;>=Ko3 z1ut|Yzldi)0Iyf?=;S-znwBkbwxGytvPkHw27*ijFsKM{=J49wZln7oSwg&wo^WRQ z$f4GYxRL`IQDqJAQ1U!~&B7Xjf1n+||A@T>XitzR7${qyH$H*9i%GTZ&v^us6DWe0 zc~N*Q@lgFe{(maR1qu01_N527$S_s_bH11ky?s%+ocQw@$97OWl0D=(Y%b6zZO zVGgRHS!;vO@x@-~o@e{I5hlfLnBgl;>d!S(+ihcXk>F8HxMbL@CL5lPnM}~a<$KFx z*s=@&FF-wl|Js@m9-~jGAZ)KJlV>D1^-vGQe=i!$DWAuiR`s1^Dqp{tt%=Xz7fKwM z8OM4np9E9pq}XdCuz^N)qFL0$eA{fcD?@E`oX1(|#t9{bA2-QL`myQI=GMTdb9Sep zN=~U0D0X%JCE#1b&qWWo*3D=oRAd`0@=+=;_cT>c1(e_&OU_Dz;wzzuz0Dq{78xcO zY9Gz8o*=ESvEjkYqyEK0Ucubeult4C=1H~^KQ@ez4KhXSh?afGG`$ChS-_r*Tquzn zSCjF$(YpuBa8c=r%$SL5PapDrn(xYGJ0as`SKazlRvF=r&a`cV?c`3c8O1-fT3xl+ z?z&1Jjj+v{3&5zRTz?B&S);tqcCIO(K3cFJRC%HUJD=y8I`C9Pb8`P1H_lQ1 z-1TMD4G$mgIP0DqV@H|A!@Ur6C6KD+un*( zi9rH?Kkm>p(&~&5{2-dOqZ5whQw(p;020i!TD8UpHZVPGZIRiU-D<6g4scIjsn8en zw>R3(W0XNF4*qNg)CMa3NWqfH82QN~zLwKKguWucb?3!dkfsxg&(LheT=$~oHYljK z;&vg1w-;s=j1f7#$E{_ZgtSYjOLM$K4Z&PaFX1q=2WaXfnpCFnE&A&uDX4((5VCy2 zqiT1Qqyxb$sV5+ps$54_f~ATA$Cz zB%P;KkWyJ7_baJ1ilsJW2mr20tfwM&^cBtU1x-#Ma)Mp`_@-O9XVJhsa=9lDIWHOZEy0 z}W^RlT2%Sn~2ZgOWXbNEJ7AO0t1Dgxrg8-lBv?3jH^Ulih#*O#ifkMd`GJd z5EFMu2BAA7hUgcKEBv6iwSFQoWuotykH2Kc*k9~`<$4V!)IPTNKlo^keAy-EH0)ax zpAqpO_7+Z(Q53u1TK(ryc;&UKM&jJ*>g-r-U~*};af-nEYIW_X`_f7Y;?aswe#jAR z*K`Q&U9}>jzBKlLWIY&qb&$bN9%POO&^V^8lSyU9vBF-n&>qJDjcC$oM(eWU?DpIp zYyEaP;GQVC%Ukq~gCUnpxk?drf~9-8qND_EHZB3<=Hb5cMH)`@SRKdT>IJ+LT~beZgZ>z#l3|zU zVnt7HVF#TyO;?+au=6k`DWlZAPY?od%_gG$Ur3L`4YUivA?Sv;gLQ{m!2Y>9SD~5f z6sOk}K|7aJqDAPA9s6Fg{sODB`C2qZ9`YO7kAp7uCYFSkMY!mdTke;b3H3I6mS%4w zz|kq(p>+0D7qNOySH)@i@dyF&|M*oshodGw0t2mbxi%GM;kVKe{OX$wT@V4AG4Wnj znrwnGbf=&!(?WG?pmS$sZG*$ZF?{rz(j{1xv1~BTY_3cg=?-~mQmKNJD9Cjcf%d%L zk{Ur;R#ol{gT19G)0~5%T3+c400fT}uBZ?I1sUy*9Ay00+92bLUD2NvJ+z3XL3bWB zCER1EH{Bvt<=}AAjilcXvZ0HTb&n)FD4L|inEx?TYtq|_FSA#Aq>%3P*pvjbll=Vqn;#@#5i;0T?A>e@Qd!hPG`I>MH=fY5wBp=wQjkOpPF_mYRXQy zgoLnp%l|E{(HN1o2l-`yJJQyf2>l;Kx2*3EZKn^c+zwC_O`Mjzu#GwMMDp>r7`t0d zG>vd-c*M+R)@|_&@2$PXIkkV`h#WRnTT_k=r&KcJYWz|5C=~@L6f%Yopj|;y<>~EbFqx=!geJ;mZ-`R%YPICy@(n`XSs$G$Gn1gFV;y@RQXL{0 zl@PtPJDWpp-YNRF5%>}f7Q;dD3JP8@bWL8}khP;NC-pAJZBe=D&O5&i?fLv1s(g7v zvrxIP|B0{-VULqvqCj!E&3bJ>Rud~a7fA2VQ(S!abSkJ=s|it7r&Pr#H3B48A?pAs zjHDJRa2O{k@kWdJ^Q*;yS~o`s)!kcg z7zASOK3d6#TfSm4%Fo8q0f6h3q+}4aF9J-Dx{+Z^$nb0D{n4yE`iK_jTHOO+fw{AN#ml@j#Bsa}uQK z$4%Lk3RJV*7GeKY`O2U=0072XmbZcY4KtK?3g?dJARRyVBwO>OyS}*sVnr=Olb@7V z2g-?|bI2>}RUAjRCfAySp8tZ($kR$Ard$5&2;HJ@9Tui|C#mL*kLI5W)if|Z2aim7 zdEcz@I?6bW8Lbs^jM%Z@!BE!b8M1a<4)?acwC5MQ$}XEktAFaLPFc{92W4d(#T7{W z!9NMP;~YZChs$K4tGj4#Rd6rs>lEgCpLrlyr%Z@oD!4&yXV){APEZUUD`0`Sa~vj2 zKo)5biomVf{N7=;dGZg6zNL|P7}C>2Z+nKSR9Wp<2aOIs18 z5++Iy9GexE?OHF5##K-z^Q!Pz?(|VR8&2=C#?9X4)1gC`<>H8>5!&z!ZTg1RTn{yR zo3mvA@YG~W=tlrf|B%vZJWlC(^Fcj+6Gv^h_Un)(jPBs2BFpe%AFdy*=lpqjK7KLS zYmhufUqyGGhKPAZ=!z-uy7)`mNy`K=kzqH<9i}8`MtB(O1d3d3K`XLzbM;X3!gJ1Ab)NdTvhTJq4Te7{CBW`id&4- zWx&>lmxqwsof3#Dml#?sMLMtCL#SQZH9LAikcsT&vj`b;+4a8(G4IW=sG7Wqd;VXC zQKn1QfCH4O{CoP**BIRt5c3;11HGhyb41{4?Dfv)!(fK~cO17ZPoH%>{#t2-unDbv z{V5itnJ#qg#6srxRFY6#ud!5n-W^m2NODH#CG~rgTsJbE;c^BnRubx;08DjXZe{&5 zbr$3vI#f<8X7ErF>#@G|h+t97~*4e`>VDY#e8ls46t_1%2P-f!)6nJfG@8Ge=n zJ4>$C=~L&>3xkVT*e&E4i3*MrT8th7Qc&wxpQx_4w z#v1_(i{!hEq$?$S|3*B;83=g)k+P<`L=6;WT~OK3o4p7AzIR}uqvN2`6==zSO>`D} zP0j~-n|mPcr}~+4nv5##*wOHq}-{Ur9pg+2nMz#*{=`tyHLtx#H5yM+RUxIgG8r^?~az zt>+>vY|1-c?ScCes{IES3)-^Nzy>}k`IW~k8aNh0fTF)5XtYjuMIG~%b?&`r6o~J) zgDrliO5T)8HD+2)4(_D?Knk7Km#@i1udXpH@Zp3IvQXWVM2c$uwqHYbnbfUmVH*hOluA!tn%u9N82^P)WJ9TaXpC zwZg1}HkRTL0hWzW4VcF@PIbQGY$AB1Hy+t0L{of(&Kf0n1AY_5d4tBz&VsNSO&7i`)R!1h)=tTI|r5mx;qC|_=L#qAaTAtp{)Ehk^SB>?zJfc`M%$r}v9-Zx5f6Wdw23mDQK z%IBgyP%?D{8s`=y;-H1-Sz@1HB6z3?nQmqnqQ#oH7}El)-Jf^!7;;{IWOs8P)a0v6 zK?%ubs(KOC8FA3)4SgM$^lk8bhMxKhGgJWxNi8k|o!_2y<9h!&tTTb4pac33Tbd}< z64x$kVxf>+aZ}qsM|%K9GtL&Mkz{H;kVF&IL&%Zu;0CWy=Ig9;?}EUiI06d378aTM z74o%5M7Ng0YjH(ZBrXhmt?H|BMH5lEx27RV`q{_vXIVdD=PTt7d1XY?cpn*DgRi0k zlG{MyoriFy!Tf|?UDYT54=oyL`2hZo0I5Qs0Q{bMh~MODI5*Swl`E?rK0v(@L7P!S z&%H4*ye!ein{9mCf|#eO5B4~4kSiC{p;1TIaH7zqt_hnXHzbzW#Z|4u51dkkDJ@FN zK_{04{R?%Wy8?G{8CZY%_v+Qc)NVU7aH(FfL?!XOUh4!;?%TJ1Ia6yR4g3=X@{x@J zTt-qJ87xwi2T1;htR3JV&^RCq9~|ZfMBr1g3IMG+F5d$?J6#;4yf7}vRa87|KRJg+ zZJ%(9pD){|Jnma@b}w%4kRcsKqBoVq8J+qE+K z76CZYyi=yN|G|IZzQA?Ov`TdqsqLAFPTYjJjaENw5~#74NLVVUeop7AAoKM`WjSTkVo4o8EWB+|#TmQ^cX@9)zzx-V(&!IdLDYCFIF(ZOQ*?y{^wNdR$?mhlj~yO zD{#f*SGofIlBGQdFD6ThJb`e4vS?w@9X7C)N3Z|8DAI;aL$3vcGYD32!?<KWHFaWaVQsL-f247JjMviz3EKtF6v22*~zZYn8?>+kg9cHI2QY3+u_ihzi!?;Ol4(7#21*ZEH1GQ^2D zK?ZbvV{;(dJ{2+L|LY6>nkr)wnu$%@{Y289dVw`VlviOzL4!H-y5D=nD|L664D6qg|PY49S7eX>FO1t*f>{sw#5tdc1a(IOz609-LjR+)dvr z?GX;-XG^N4x+MeluR+gmXB=OVTYqvN(3PkF0090J=}NwzwUjz=dSgf+Z}s!e$K(e2 z&pwsQ=8dFE42-cKcdv;{HKvAf;9s*+8e5^R8LlrNkdXl~thMz;%7*UGBt1$41xe}` z`ih{#G7SmMN7en<#_B$ghu>J=%_pL!O;)Co;-8DXM&swv4mFwaow@AuK`S{FysC1n_tu$H=l`lU~ca!HJAA#jw6 zM}k0ktTCl<8>lr`GLJBrhT2gA%w-1y{FLsOh4DxVTrxfebl z-JQ3K@ay_SAL(eA#uqa%M7Y!PHX~-G$D=Lnfi0+##a;X<^6uSthDG&)9!(86VmFF~#4D}E@U!rqM8P-U%l$Qom#8jJpoSr}6r@`oUua>-2Ft<07oAR(d z6>bHV{L@$QK<~ys$^k$OxBv+D&Ezh;dv2zkA~B@RxkU9<0GS;?>Kt6zJv@Yi4ABir z?JEUR#L$0rblLDv&K8z{k&PwQ%5TqWpSj00b2cpbUUm8P7BSL1%2X)Ns1K-)2)0F{ zl$=K=R50rU1PR$iRFUo#@ z1_00g00Ud=sNeA8%8@0|25w49r!5yj=BVzxn=TO)?AL*xJL0iNKBALG-jJL!L7YD8 zd7RPe4MFkHdft1kJmE-om~=L*!?i*(gwSK&2OL+`PO>?PI$Q`0j zR~S8fV7_A008_vGYu@{*lKS6R;qokQ(K8V kS_uMY%4!*602~=;xF7&I;ZJ}Eui1wH0OFoNPGbN70EvM^%K!iX literal 13246 zcmV;vGeOK!Nk&GtGXMZrMM6+kP&go}GXMZ^y#bv8DgXu00zOeDkw&ATq9`FSC}98! z32AQs%(<`thHoHGP$)_J+PAb17T}H!?tGb%5;NpKhyO>X_9XeQUu_yjjcc|A0g6{#BT~ z6CNq(*T&QCo}i!4{USUFeasH;;RZl*OTTO$VN$toW+v)aIAgLkJ!m;D*`BFf;i6P~ zhv-I?gassXhKqOXx6A41k?cq*&K7@Fna6vQDn-HO<+S|4W<4GnJqA3?-&0=^2cKUNEzEY-6kW5bomd_i zP2H1wIp`n2jBN2{eM%tn`D=tz+2YSLeNB8sCdzB;+$>v%jXUT-=t!oZ3gFRfgB}~$ zh&=khp64M$CyLf|MMp#-FLO84?0WhA&#VC_i{oZm3_-3Mt2zAN@Q-v>XvXW^o4u(!f{o^5cHu*gvLR2%z8w0jtCP+Ys*#-r?$ zG(XybM@JF)?k`ROP5YcG# z7Q2+I1Qw4Mb2wY|9+#`j<()o*E6i7d(a2BSdp9jiLwEcb*030MP(7lrckP1?L;uF@ zDzn)5H>^&&$}Y?=LDw+vLVr6G2r@Xv=nY0j86&|Xy8`=-8Y>8?WUqic9O7e$ZYjWMEvCRG zM(xN689Q#<00jpz_8A7Kf;2>)hZBZeecTNu8FG+XWwNsl!ZA^lcIA61B;!NT<}PQy z4sqy6G?$}~W;ycD4IYa8^&V_vYfA1(n7VHTRUS;Ex)lOB9mPuF*;R0=i~D}1MCn2Z zYbUANhnO9$%uaJK1#klJe%jfDdjMioomrVN4DHe2uz@7zMNT%$&_2h8iv&)ZkJrUQ zNpViN>L5tzPfIQWa_Y~Df))5+8<`w^-7=*@IQhG!M{}bxhFl=Jt{0bgP87Eq!h-aA zdgh2@NyGg<8-6%F+B`N1oZiO%#GG_K*GR@EArr$UpF!8--#pbR|#@&M1?O6aq)?=~)a6>HK!Q^MzWP!zMznGql0I(AMMr{en73R*PXB!n&aU zns$?XE!=p#9?EDi100@mqQM$G4lK;VRU|m)jS=8RXpB?~2MQ0gXzKf;W;k0mYmYI2|G^N(f3iDU+EAKVmz(vssB1 zU|dY7H2d;!&`v!a5vFlcc5@=A5MkIwKUWAC1oFXiT)$1xZ2L%ASyBs6WRKabI+tZl znW_Itd$@ke17CmHcnR}t1pdsA*47@NqWl8WXlUo#w1``x`hMJs4md{h5Zle$;=e*P zgW9LuMF?X3X4m7?VlM&bObhq6VCOoN7W zjo$yq-&bi$(#URdpNNxEBfv%M>%ulxBTauYc_5mP&V|t$fq1U1iv{q`Klx?Zm5T59 zp%5PFRBS!Bu?t(HEg7-ED_^201J#&6%9@*;-0e zJbc~IzkhdUhDw+c(r_ETsGR=bcDFZKyO!3cZnW@Vv^B9Ra}*4xUG^b-p@D%1wgDEC z7*hc+Cu5^Y0qLb}%Bfq}(%-<>>EoGfr+m|^|*ivzWh?2yIR-s8pyxCc`>s9De z0$EY}8E&Lhz^^^)!7&GpJ$@2zv*XOJ_DEoV6!ChO`C$8DQjNDxNxMYm>&=x`$*aD? zh7BY^_86q*U}U%DI5HEL%9riUrkT9akGlOxCjwfkdB)TzZVxU3D?g(!tdTqcEo2U- zBL>`l0rf;bzR+xi+)cNRuuC5p{=$uw`9i#C^-ZfbVXp(aax>I;9RrD%Hh~ZI^LHQF z0TpB0O1#!^F>|F1)UJ8VWS&=#AmCN7DeM?GID6B2AE=__8F68)(*QN^u+b zDWZH$@+*W+{b^;kB9Ge`c2G^lCou$*>#y4~`y;?j?5%{17iZ<%VlVm={}{T#?|bfB zYU9BWN)2I4L6Rx=pj(m>UpqO-Bjc#~2EKZmq`)>Lk7g;pl~Yz}J4_a}wAQp`bahfg zuz7_dUSru({qkGLwBu^vvV>AkVZOgpwGD%o=xK4=N)BX{|a%L zKdw)>di)PS?5vq=?tDhi51UN#!8h(lk>Rna7Bh|MhVGKY@_ee1djBN7$;T>Qd6bVx z<7N}(sGD_*o-fdFQHZc!ADHh$jb)kLe+e3~SUEX9P|KWAQYnc0s9fJ-6(u9a3Mwt% zrCWQW2t=TEC1r&;tK@cRa)}blTB@c&Z_`I6M_UvD=2O5KoZiK{Li7-s zq=eh1Jz6wM{1_N$m_k1M{4f|AWFQ1Cge(#Ga5Ak!r<}qVW>;6i%sAdkdBhWpiK+_I z%0=@lJXxLoxl_vHttsUv%&E*NeyE#j( zwYiDkyS^#~{xvz^t=^j~s<#bvnJbp-tBJd{l`&vj zMOgdZH}phc|9V?T9DM5;7a^}T0-imi+C8h?fzyYHZqrMcXGgdls5;6udB3eQ zM?Ll9`q8;+hNOyQ^Mo(cxfM_$895S^E8X4-aUU##&L;JS{#khV4i+xlUogcgN9yp1 zYJ`i-y^VzD+&pJpQVUGqEo7+|8^5cBn5B|Wd-ZQb{7KES`2&cGqkdqKiP=90Mfq?e z1g1<{Ld(aMxAw81gVj)t@asWQnxT4`iPU7Me(!G-@qPm|3^NLq$pJ}qgk((>i&FvR zER{~J;C8;S-bj3X^3=(V+vQZfW!NO%ja96GZ^F2aAL`m?%xv!EW)ei^_9gLA{bfe% z5+Zx<63);E1fr%LOR}+e@cMAhk^0)vNz6ZX2~4UcL9KO0@ypqhpw0pkXTMX3BFl7Q zDCHX>!cO!-9P8l#mU|$kub}`}!HA3S{Y`o01or@%ZAWcM^K`XT_E3aR?_}d}hBtk@ z&C(YsxYh*AoRE?zkAncA;5Hol3Ob>tN#=ew@OcLS&XN~ZROTr;htqRn9v`h_@i)U{ zz9sLc&Du(E&Sn8L+L2yVY`VKI@TYD0nQ@YyZR>=gOEf>NK; zbPmdx8cf!@qj@LE!#e7L+2Q%6z`P;fkGp}V1T~Y?;he*JGnjtt5^hjDJyHu#VTved z@X}Hg~`P{`uyu$$?~uhQV$LQGZk?Wo448&zjq3n+;>%P2 zxw#D22+$0F=CTl~W5`xYefkjzg*?o)@tg*l#`1(}vo9o~R&2gSo${d-4urmr{Cs;l zxy+^_N;0n!=)l zb$uE~i&8C|Srq;?0IZT{O;Qx?ZQCQf84eq5020`*K+W1PFNSqdi6c)c=OalN)WJd^ zz(8&c-cSN!20M$DX;q1}!s=-+hJNOW?2BP=OcIut&}5s7p$H!S^wkI<@KGB_O)2#}h0_+eQ?X@CxeLX7lGP0@q7WLfYXA{l z6-R3{|3?6`*NEl0w6RmW@UybpjID!5=z7bOWCv?gJ=jS(mQ#Fgq!|pmn4mt&qP+G@ z7*)%{h2^MB6k(>~KHLlUfw2&NuYnW^ouZ-iG#1VOgm={#WHeVr zoVA<$F4vs%YFH{lf(_3@kq&_zv2xm=nxpw%j(7Ub>?ix3#kRg@zYp7W7z7y5}ZuE*vr%D zx)i7!Nv1`Bkws*V11E$+*b+pc5WbNDtzlq~I#gm?!LI{5Ac9n;to z>AX@3Mmwx+5~H4<(*g!s=O6)ZSBbU)T~q|!Rj4Ot391nE5E6WMBkUNr!-n#rnH)!2 zeBmn^ppxpw9OBD19WOUer7q+^TCqI@Op;rEgrM5P0Vw(a0ihFC5db%jJ`%X+)+wrNjfMJh)lQEr{c+_O7!67~;xLV_)*W6=hR{N{8DWK1$%y#( z6yCq0F!clE1TwvcqJnZ@Wxxg7RrSpZNM`!5CvCMk;^vY`j76p@>G%YWmc~6Gx6L`= z>qx&aM!A%S+img)h^TPLH4Ak?-;}mg9KemBYVt)vye{7+{@4cWgd>xkW?TeGjBe^? z7X5;P5)*0O$bls|6=**v`$4Pz5V(yctPpPk^gDbjH3o&F!=G#~?hVSYonw4?jSk@) z@nbmN)>%!!j1v7v_b?3LQD~?>Zez^|lh2<7-+}3LEqPs${?DnEl-J973#r5r^fM_h zI61heZP`(8t4A@T0XxCOxetfAHQp|SG>R&=YEtGA}X((3H2=l?Ce5$ z`%|pWGDwV~zsLBfL7$WTwi$m(vyz@skWDSX0x4V`tTl5}od5z2@IJn#O&9SqN-rGS z<(pK80@DcwI?)|iw)0(jpvx9u-Z?$eGmj%W3L{d*^Fx~WB2j}1k^rsgMMGgfP7K9w zR3eTw_PAY}7B!zh%K%loiI!9KL=F9mQs+k(3d^MHN&uahZAdBwZvP7q@U3E0b9)rQ zURe&Ur=9I~vol=}Z=~$1Ywy4_6HHd~q4s~?d`XU>zvQ;C6W8hi_?YKEviaHL@YzgA z7ey6W4t{LUgstlXqRx$VI?tLSQ7{&mT%-0d>ExMc2_e(@jb-zaiTupcfD_uvQcGzG zI0nGa3fFbEC0gXVcO@+P;TfgPmUw+b;J++on%kqJ;1@!5G!AUfN`ie*xP44ZxVJ&j zMKL`03!?yo<{0K#9{EQ3^+g?dRd9a`tmPc)jFhv?CVV@dF87-&*XA}7@mjJL81m4% z=a@~a09*XQ=aD3}S&I_(dJUzk^DcPdu(|$G-`pR0ZuobKmqcRL({` z0zqxT?iABuJKHiJer>neKm#tr(l~amTm6T1ek$exZA0r1X&E0-W8zgtCG`N%e$RJ}$QhCC&SL$=j zW~jXo#n6omAp=}|x^|weK?_B6=Xa9UAOS*<2u^nhkdAqv#iSv-FBHo!7N98NMpX<&E&+{S3+W6Rg)FqQT#Pb$O1gNmUkHo zoq7*kS>@&=@9cFWGKhRsG$jZ|$nWh3j-M!4|%9yrIS$0EHdFiUURwPJY zbpCT^bF+E(cv1q&^t|5ng4gdk8SZ59AK)6|W+$_x&epua9;6tms*EzIN*Eln)iHCg zR1uakbo$3%qDKK)DC#YAI`WlNoWBbPKL43^A~+R(<;UT`gCD zeqCPgW$7-P`=11#`0fA@1G6uX)>{2yAW)32%F$kdV(S?*HOPy4On(|1>m2jNsg3i?9c$}2IT^>2fV zAX|DkI}uhKn!n;6L=*{asoF7IN_x3WxE@2tc~-Y&U>?8ZB67V^$$tCALG*n-=^HA` zgNbd7<^B)3C)TzeLSbgG=(N}6hRI36+-N2<4*1=@HUQm23mr$AU6?#rQ*5MF4ng&5=oBQh+l zj&&Z?=11*casawZ)+a}%sk`V4sTtAlN$2=VB-rn*7q2wJ!z>5p^wiZ#oZ2lF zcdSVnLfIMD5Bs_Lm{rDw(J1lpP#WY*b)kbN7<5{G_2WDSx{48?(O=A{n`(N-0ZVg# zLdB;@NT4<{4^RMDaX`6Gv!)n2r3SiW-s7Wkf9A*Dxv)p!64wnS+@ydrgw@uAsuaYg z_z*d%Ym<+NX?b(bZf^b(!wNxSxQF>UYE3mUp!xmeBf~Cd`q41NIBXxlxf$SKCoAH! zqrT^(P02m29QhB3W^+#u$~BvjC)?Ht34?IuiF6H1&g|~Bi&V_rHw=v``n&0*S1NcU zI^vl*_xSHfhl(H^kC2Ddxwd9poIye64_8T(k)0MfdkYR9@Qtzdt74OCee0lHzmK^= zCohLN7qfh=-f_^I#vy;+{~?Wq%#}Y{^#AsUd42+1;RErvM380!FxfuAUK2(rTVNjF6kI<%tlz5S=uxW-?TuXDpAy!Yz`~sk7YTw zvJ?dakIN2`_C1&4#Fx^?D;KT|8FC z%Wr-^=Ps6X zQrMRbZuhUG7h?qzk3dOU_bR$2&UgVq0*eYZKy0m<>X13SM8oLioaKH z`jix~&f4X_93s29dm#9QAGlU(+QQJUDcAyy`G`gusVE3Gfdp`D!iBY zswdX9^a^__*hI6YF^(IR+tcXpK)1DeBNx}I!5`bnuC+6SXO#|nW(!`a#aSd(5-!R_ zzvs%bT=+U3nf`>mR%35ZX4zVE;(b#tFZPPE#h3CyDh+AQiMQ348y>kyO9-X4 z;WIAXiiu>AU0>`>d1~}=VsW>ccemjfb@+I8oI-!Ivi4+_MrZJBK-WX2lEqk(2Lb3? z*fLaa@u(eUIxU=C5iLpSOdn`l6>)|M$A4pxsbJ*IP5!WDAz}*U_L0ykZJ2lr`xLD&xc~!h3>QuKMpkWEQ9`0QhR-X7^8%1E;<3X{$pFS?b`HG^ zb6%%PpQPKygF8iL=) zk|+ks5ESlUMfy0PGmiXwUWUM{&~r#cFkNTPeb1a@yCChZ^MG%ytRZ)A-xL~Q?f@Goh4o{A*oOMMZGCDWgs82vrdW5zD}B@His7EB?po39XoS zY5H5+KwcCCj~SI#3v*-TJ;;RWjbsGtc`1F*FwjZTEsTh>2139!{lTwi4xU zUyuXn(yY+92Lm~<2$MrMeR#BRDyN)ef~h_L0}p0rz}A0vTY^bA0!}F^t9kXeiD=#x z=>&RG98{nOB(G`(qQ2y#v&r=&_tQAV#=nT6npMNqYv7tC5)s;gn{`YEttY!VN-1qM zw^e-gT?@rS?L?bDnXk4K{^r?BEMLIoct@mh(t_@OkX8m&#wWj&+Sw}H-LFc4InwGU zET|N?P)lj!SfvEpGwdAZXA6WPj(rq|LtqicN_bKUkV9hgH2rZg&HbG_;x z+rFM)E4gIBB}sqaVJ#AX_Xx#`E`3_lK_f=885By z1M8>0Wcuamf7hS-1L_H;TYvuTp07l*ew8nHG<&^*d&K7*aTixA`8DFQBwPEfQ$^;y zrUz}`_qM)LuzJA_X-O&y1rJkt2LbIX<7e8mgCnS@Tnt(;R~(SMjYkJO5V#Uvv)L=q zb=jjz+rz(74affCnXkiEH{IBj;Qy^wGz#fJLe05E=B*kX;h?5ESAOvDT8SCden>M* z(QQl217#k%6aQzK!2Y4M8A|0h$y4@E#rPH4W#+nSQC^UvyS4s^o-M3@RW(?4Smnia zm}pqpa(~@gx1om({?ohWyL4s|RcEMdq4a$=^yRL+Y>sbaI^#bw^IUJ^XWmgZ5p{5? zrJwF|pes2JC4m$g?d+B|yZ+u}W;aIe;V$x?dG8xP6ytB)yX=sVHq51G$V`e?3?L9O z(h!lGU&Y`XDtv6WG_W)Z<_OUH8Q|BTACcK1VioCCFHsItHKUF^EsBcjcu5{ab1O!P z{EiXsqQMGjdJZvtxB(7}(| zn4M-1oWge|c9uyt>Ez;&NBUy{J?H#EZcrL4KjjHYz3S!WK#55SAaeg~_I9hAXP~VQ znDj!keLFnTQf3PPBn7aWFpBn?eVm)Xk7irZ#6gNpR;jC`rD5dDGc8!zarygXL}Yc4 zcig4wFmfe49YcLgJPbZpSL`#(z~5zLV``b$b&)e5tGyt{=-<*!e!g$2+U|y{cH{qD zXduYjNtRqL(a+I{ZqV#L7G>GhE~HuurDrmn9|dzi({);u6$Ms1Bl&lXPXUp&kuPp9(0m4@qZz*s8SeRL8g2uNGB z#9W_etPLfjDS@0hSXji!`KKXzTd$HjYbn}{k`m!>yRQ{w@3=~1US>gL)T5hV#C%wp zK=s^nVDOUa4L#}=_f6JHj$T6TTvn87%fu^XG}{Dz!I0HCa*aMR@sfh*7SYcq<{i}x zcVdz9_6%%mYI2mHWPOs2Bg0YFulWr4n@$_nC+Vm$ew{5x<>&6Gf=0{H-&KDU{#(iq zwE^4~?LpM@Ydy?vxD5pBqRH%8Xv0({;ngD`X%nfRW{cTq^Ml-ol>7KU%rbH+Ne*j0nIg zc$JZ&&s^Ou3?w#oZDwj50>dUfs(G@mZSlWjWoqhJqHGcs46*nOZi-_GGT3(I*?@>VdlCf1Z8P3%QzK831Q4iSrR2f1bJpUd|54Kne z?U#6#&6Y}+$8St@^-5~^{Gv5Xvfx8sPmVCkJ|E+kD2Y$z#TeE2@GI{gIYC~f54duO zbSwm zz0DU!tH{s$ql2J(4W6@EKGbiQGo;4;U8?g3tHz}>X$+`QRk!MS9rgf@za|eNi*m?( zf!%Yc7hVJ#l_X%?Tc5hZBgBvQ$59rOa%7#y4d<`W>F!`$Z(lPtb7(MpDf>-84d?xs zY(<3?Qu5}nA!TQX7J`Q~o1^IA37pVTz^$BD`}LtBk0jJkjqZ_668XssISbx)8xVc} z?6i`~m}z{tKs97(D}^33)#&KERV3a|P^+)M*}$E8n?9z;v1`UDy=vY>r~_}1IzW08 z8>KdhM2~oiK#QR)5`0|yY-?6~zGn)Xcm2XPpnty8LBKprUnQksO04~pAg!67n5d^n zJnIp5u$49xfid9ZE?j^KeE+eIt(4IldOjU(4C)*LYR?9%TUyX`4j$}-4R4}m346N# zuMDk%E_@QD({Nq@ca$b4?YlC)PrEm_lR{A&*+24+FPx+iqez@OTfRWb>3^^^U*$6R z+3X{5M`o`@a3V2reWT#44~oP5o6^8%ImhO$i2%K3wthb)RGf46pHJ^>mvr>h63ZpX zbjqULJVOrky@VNK&>fzTSl*Z*HRt+(x=RiuonvNR%x=S+wQf0iHEXzwhk@Us&39gi zxPI(NzXZR=tIE6iCe7aCk;rv&H$XaAj)@!2NF7C!YY4?a6kiYZz8 zsw|HChaoWLRJY81Nhc@df5-RdhaI+DB&uXnNw|0} z&0oykLB^-@?m5=;b#Ov>!4=_|%%p6gl%k?81n8?wR6CriQf>F;S+vP6#yuQzRj653 zCHC{{8BP0dgB1OSs8NYYGY#t-Lx0HJia7-8uA4O=#hm{exLs90^U3f76nLM6B$i9C z-4AcuGg1R_esbc*QesTUF6T2~V;}w&OKF~hYv$3Xr}F0`KE*v{>oth)@XCIhYHO%j zi=*4wN#XSPTzok(su@$r65g4|Qy&<^0JY5}r364m?7bAWvbA*RH_N}B*|&4T^5+qp zE@DOl@HiQr@e)_0-9|H3z#0dtkpfsu_q4FH^~dj!!TtFsH6=sZGR9N$eYewVHSQB> zP$0SH-@_UB5XALRX|Wh5#!%QfhU4gU6Z$0pL36)v#<%taO9DR*0pv?|v1FmzKO4?q zerI8<;z}h5M`-gf1pDYy;|9~>JB0ahx9Xs>&!p{23s3-rv=!B;ZtXpS#6tovL4_^E ztKG|^?7pLjg47^f;d_lSE}lz2ES}UY<>A1&0}~#XTB?w(KJajb4}5P$-u9L~!b9hs zTK^!NFz72c8gI8B8R71!EhQ2uI0!ryUi8EK%tlfALc~QJ$s?b(?jG^Jx*x1!TkZT~ z5Ish77z_pqv{zVNeOFS!GBzU}m{$~8tb5{N2;2w?4VHvjnk4^{?PRZCu>|YV;yXj7&3=R*@Z*I9Tbv~m7J5757pvv;m!`;!Ragyhq#k5 zt{US(lKsd3*#g=p>t9rmjbIFQ-xrz_o2Z`h$T}Vbei_f?YpySSFlldJvFGykA8C{& zA<0Y;M8|GB{tHZxE=iU7d`+4h_iR~iN6c2*W@tS!DG3zJa2(ZFDz`S+*+usI61V$` zo^wNfllUi&u$d`YQLqaYIaXKD34~Hu+>KC*MAtsU`Xg}T_JRcRTem8`m^yMdt0!^Z(v6DG!Xs(76Mqo!=K-1gsHQk}{p!o2J>9#J)8{wT$by;m zY=94NVBG(vbZ5muv6MPw2#g$EFTEdM7qYI-en&SXuNIQMScryJy;DSPZrB!l0GCrI z1Mh2HCjvN6k3FTPNbQ0FhQ;;L^((?+MTdqnwBg%t#@Pz3%yS?cIQb-z{W#Z$x|)zU zeD^aH#Rm#FHTe0-gY?cm=1GAn0=y%mt{AneTD_TBp?#+SdQ%_O`)=2H!_551c$6ADM%XGJ70`^@b*{_gX@lq{(3>A_Z4q#xcds06~F~M zYRj7UktXkO&yaYu26VHlTxa7AmFkIkv-OhIlUoqNJCaRDQ;Y8w@~4y$r+1RIA)J#$B@j8Tm&s;qr6cnd4ywEU zqaGigDN%_1vnSfi==w^2y)6TSj{>v+lW{5B>|sD7Naw@6n#4Mepi*6^v4^dah{jj} zvIj!DPqd68mjZ*|kUfD?-F5fz^u6xYrT&9E&wC6Hf`=BeOQOmXRt^2{uJ)y+aCTbgFV+7lFQhuec_;FvZp|2c@9A zG3IHKR>yEqgtMu9eiqs;Bq#8#Z=d2M8CeruzdV8C)HQ3VqegW@Wphy^;WmN9E|9;R zGUM?XxCm~)KnjoxXW|Nv(x`W->G!u%7;xJ`NWGmw)6q&GAsksl=xnyr-Q`|68VfE# z#73S~`A91kv8l#~LfXjLSM&xjS;)O*x|Brwh#p;-fe;t~u8PXfIf3~``A2|)>I{uuV8dkRcl2QR=fFI%)Atn>+E0Xw*lpl)4OI5wG*EtgC^efExwbfL z#sRLsL>HNvX+a97k>XfPo*}LDS|?_6(EEYRH%{9Vv?9-vac9U}2k%%RGwm1>+LCC7 z3>EN|i9Ji4M1%j)*yIAZTll&*Rp?ks~dkdyGq~g%<+yV$$ ze;dcQX+}sAq%XzW~bY;~r{A?E9Mo15%UOg~?1^-lC>%24YEAEpN?PB&DYS=)KIOI;b4ALt&RgFx9vuX~gk~6eVHy|psPBJnJiX15s1BVnMwnYZ@( z*--;lAy!8uJOKxS9)Um=C=4zcDpR>UP}Qj;34FrnE0EBpn+>#w3}BiE>pFEorXXp2 zA=vI*mYTBS9EZ9cMDEo@4sR;{BpO+KCE00`1KV%Q#oW$K<=-AjpDi^OToxyg7>LU!YP4|B;`|jaYbr-o-h`y*6Jap8{Hpe!;{QD1^oy z)cXe!mMpo3$M7wmjxZbG)>-AiCS5?;+eRST_fb|PN1gHWQS-~#CQ~bg5Wr(+6io=k z3+?J?+tAD_zA(;3zXCNE5tCDcKC*xP$+m1L(o^UF0muO_hvM8l00%mU=Y^E19T#L{ zTK0-Ts~>=OH&Xkn5izYil9JvbMk)*(Hn2v|92(0nh{KBmE%2;GPw6}$P@n^>00O%Y wW^DT_k~y))a>}#-09>ItgC7AGIIVAh00003z!CB!0002%kZ=rY0D@ou08V?Fl>h($ diff --git a/docs/gallery/assets/shipping-crate-hero.webp b/docs/gallery/assets/shipping-crate-hero.webp index fc9eebb5c9f84b0f6e6e1f910e03f548533c8132..588b8d668f697b1812e98b1a261529fd03c96ff5 100644 GIT binary patch literal 12172 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 O`2c_bO~ZXtFaQAL3v&?w literal 21798 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 Z>i9q(G5HG}@EVQ}1YyopKxbyC-~b>J4^{vG diff --git a/docs/gallery/assets/wall-torch-hero.webp b/docs/gallery/assets/wall-torch-hero.webp index 21046e4c5a68140cc68712a82ef3956403076106..cb700f3c167fc2cca9667117c426135243cd0103 100644 GIT binary patch literal 10668 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 S$_B2$6rWR;%v^lX0000YxzqCi literal 23882 zcmV(-K-|AlNk&FOT>t=AMM6+kP&gnqT>tj5l^M&e>$++V5m*N+z$b@`tDeg41J zAJlL8|MEYL-xMFfJ#c+y|C#@~_7MIx{ma&q)+76#Pse6GD*3bfZwvoE>$SYyrhUgy zA7%fxc#Hdg(2@Es1^2Tsd>H;CnP{U5^r>Glc!hyDlt*D#;mzwY}6bg%S> z3!uH3BYQGN_GFFh$s5^{H?t%x%#ppNjp^1|!z6EJX?~|KhCLQxbB2HK5nCJ7^|{jP z!OC=k5z+e+*mEIT*LyN5_Fqec>e>zyG~h}dp43#7D4BpNIik-pIpb)x_#){IMbdza zr36~=zyR++jxs61zEh9mM{GRwpV9^73Bg5?7`t|YVy{z|zAYB7J0cLBC&jy&Z?k$i zb|mHO$;;msm%$UB?`bx@1Y=W=qY|3W_aXxCi(`fpxH-onSzfILwuBbZrka7gucK75&2i^EZJI3jaEFVcKlPOMp#f-G0W zitX4`p*UcE8IwGm8`D=zVdPXZtr2_ba`tM|y=IQD73nuTR;d$_dJzD6z@NTyG)K}J zipyHa-8!$(k^mj+UX8cAXI-=nW0G_N!4NdcFOrZ&?-(%TntQmWVN^N307Sp819%?9Y=&ZW82@Q+v1d#S zh?NlsvDFh;7tQs7@td+-j?)}=tzh%-(b63JfTI$;L+#D>flBW{!ykN)5}X@I<84lD zUziZIBRU%(7?}*pdWW|=kN|oL6SpqGdybiNe}*+nDp;FoEM>VqPla)Xi)Jf$RI68O zi8_LVDvJ^pg9lF<7a5>uM4y>*@y6isfVn5lM;;Hz4eVb2kt$Odi3&3=6#2iysnh~c z+!l~n1$XJvfTks=fE|4(axTuACH|A99l3T3(t!VsoyYG(Y))zs8>Cp$t~|#q)dY?T z;mH`hDD10GI||iWfx`f-PmQB!8=4=(c8tT(CdD!^qWMj32W;@->6RV2cRQ$Rcc4p4 zo6L%3YqmoPwCO-o4&AjZzAooFB{9QHgR2mm`5A*_0zi>N=jp%e`$ACrD@CrE^IVMx zbXxcX)sKr7#-4CEXfI8Wjyv}fxxf|M<^LKDJ27t%>pQhQf~qHX)TO0Pg7op|Qhn4X zcQDsvc8Zig(7vIRDXSRmg(@ND0#Hd06KJQEi)BYv7471<+15cau^U-Emdj6=JO$~0 z`5F~pUbLA{MLjUVOWc5{NWHL-P2bA`R$fXt$>AU=hi+Yl$OcsCY(s(G9!V5UCSw=G z@W1%yBJ08J49pmJF*X+4My8dfS=!*HDby1j;<9G|890KFGUGio6cmx9!I$k%n8@!z zKeAKWO?%-Xyy2t$#A>mEK>0>8sty{OD>E}{N)=RYgipY<1u*T)uwIk}fmToy!p&1U z*GWsGLm+c2*>^8XkTiFk%G^M}qAyKGeFs*%_5;5@r~hCX^UoS8Wo^b`g{mFH3l_?# zi#t+pd_-J96w7rkp15mF!bfQ+<|4YD}j& zSWbi1=!u{4m9#UE%?&Xfo`3mU)SDo(y9YDwj;6B8iqhqV4&pYkjonZQ)Cs$6k#P7~ zTN8*FHfm21Wu$Syif$`P1C4NA`k8cqrg$&Xhb0eyHc$~(&6(A!Dj-6BnZoVDa~%C* z7T9(aNH46XE>X!5`Dj}!6m3LmqYk+7lPgN|A=IB$QAxr1=5=3t%8V{yq5*HT!esLi z7K@R=7fJedZ)Qk2GUXJWR9qQfDThXq<_!#%&V1MaD3g!T^AWwQV31tStcVoD7_)8l zX6m39o7kbcTYzs2t-Xh+$Sibo5(h}hR~hY`b}2I5(x*)2`=D)NvBhNp)Y}h^-k@`= zYAPBTXPv9yWhkKzN+$Z{nq)zn{?QQvTjonD%(6D%QubO|yewU>b8F9pNiuWHP*=H2 z*RhP!{U;#8F&E4|)9m2u=%{LQw=Rt$lw+i*+@@hl)@%Q2=;-paiH^>CZ6~xBxI1nz z7sk58E+BDBAIz4Dq-dBu+-&7sf6}JSdoQPIv+$NZAhHP^sEjh~5gK&UiRCWQIh0}s z^cYIKsCrN#1zY@6-hyjb6X+(2lZ*@!oLoGTyDGjr7}>`}1E_Wu1JHN34~WdKUm7ev z1k|V5@#w~NmJl2!__tXEYtc!f6Qu-N`y|@jpd%LuQ38j=y9SJo2Xjy$S$U{f7{(^wB=JpN*h$+F3an^nlQ5TA$3}K0g z8M;iz2tY8x+nLaKh8VsxYQp4Zb5Qsm*glclbx(oRqfVs^vyE(2&J?rz9lQfUsR%#P z(fM*}2wu|LEiKi#5UVmq_GXvm%1T)Vm&hHvL3%F(E+5l%AEn5!6~VBm$+SYep9JS~ zCpTIt{3|2=RSiAzRyv?K&^r&eN`mA#5tsgkU{MUSB2$Rjs`1zfNwY*dyA%|e$s5g* zUz*Z&6kH;IxI%QGBNwCmzPngPs?3*q7551r)cNpOiZINF{~iUt7s`)wnHWei84koT z`P3*ov(A_IugBnH&_EBruqXVJh@oOKc%VTRnOl{hf64qRi}x@>rY(V+O$Pc>-^R)U zE=L1}DH<85i{Dg|Wz-Cz8j{pSQafs%qN>8lda;%o*DYw7Gk+)vx^M}9#HqP}MdkS0 ztNPlij#-u*rnG8;!QE1N2~=RmU9lSR^xt&K?k{?E ztIcpB1Utv>79l#xvA>H0VgZ&$8xZ4V^wit^c!}Y;ReEgkvLAi+T&(|=?z$O*|BSQa z@oBZ?mD!@eIUG+#`|T`zl$1jpdiP#am%gVj@+iF)s5l{-2+*4{Z*gryo2t7td} zJ9dV|IG}l|p9U5iPC)ge#yQ5?ULBq%imZAFJ8py`ppuBfwFbogt&csGz@HuVIW@7jlZ zK-KMkOs#d~Rj5>@v+1Puu^Shmz~(Yz}UCXuA7s6o!h{wCB-%J9j-`vPyk9!#+}DZJ9(KdVY1h3fTO9kP@xoX6Q5G_^Wj$q$qYO1`rYD z>44o&Yef}-T)0}l!VhLpg)$4onN^@b3uyyHv-*yhl${{FOH zcr~pqAvd-6=Nt5ks|xqlk}W=b>tT$shd{`5ADa-I1s6G`RJq;-HvL=0!D!@~O_1km zn+QSHE|gM&m&qs>d*Q zaARnglXBdI3T8@eyu{y?+R@LfeJBXU!V{$Y1^CktOJ1~K1zLxWPm5i(^xXT6dU)7m zXzNI&4(qaRbQM85t>R+wAaloxC22HbEU+xOWt>0GUd)x@yAX3Tr1LHw#U>xCwj|wu zoN}gvAQL$VZE;x8HP-;TKiRJz36@BGsPGEuLQ%cOykR!E|D^#rTfL)^9syf~IH0jV zM<}4SYk{I)2vFek924Wi+$gMWPHu8OQsa4cjp)&yK9dL}MhQu>{Iv!rGK$K+JK9Y> zx>hzcE!^|o>HLSH!1U3~V{Abq!XdvD3|kbQ4sA2V?2mG&SH?H-VCYq=F2`M#jhyt$ z6X;j{Ad_0InYHkM)%Dw@5+eH!s#L%sI*>lv;Diu3uL`c1cIQ#s4TunX%&U7{q$)}) znf)(TGj`#RfhieVW%F&etH2*BA63UQrXYqegPQeght;0RHww>p`F^ z2rjry65!ltWD(vq=U?50d;T3uWB{`xO=Q@f5HEZ=-yA(CpV)f(=FG+a{031LIr)O$VFNmYPFWfp7Q2`}(e2nwt z{ki5L+obm&s%CYy$RI7HOI}f967?7G+CGGa@D4d>qQM@NDzNo~WN;lJPzf!Ith4dj z3@FGZUZDf95gIlA`mKUFrVazX@%jrsODV6O>VTt{G@<0)D)l+Wo`>tSy{mh9 z2ZAjGD=d~rvsPcZ#YN4mC&br>@8*wqgihu2>-p;PkVBbRJpt8nW z!d3Ss5kX6rNu67(@wsOa^#(K*@Ej_bOHScS=ams%wkgkFN?ea*n;K%^Vt3cfr0`9f z$A_0QZ%^j<2el&cYA}d(30=s>*BxUnQed+$SNCq~soMBmOhiZwB>GD!W-~0g^Bc6% z;aUb5N)cD%8L9sRwi3gD8|AWd_bHYR;ynw=frJ}4>$b5{{0f&zG>vKSO60zIKvaT6 z;vX06`=rq50pgr70TBiv+ar9X4~8t*Huc)F08r&Qk3KHd=2UU_Hu`4l1mT%M-EY=g zPP~kf>!nn_p}|M_0IXkCydJgLFO-$Lur`cHiY+_w@x%?g#3GD@8od&d_sxKOf9LFI zskL5VNn8iux9#Gp$!q5Xgp6z0G8vo=r6U>iR{gMeXeb+eDN`A}%~Lc*=g4Z*ObhZM z`bGciqHnI}Tztz|@r9$90Jr-?w8;igf{Fdd|KdbknKyx0-#&ASHL0d|!L0R|tTS{k zr^nSG@5u@KW+FdEWVtk1L)^pF;U9MJGZ7^4kwKPPN?}$^4<#_`Wu} zz@0YOCFac&H?DbfHCIMx;QR*n!Q3=OI<mJl40(8`^?d6zV81o!%0H1-~0z#z0DHOuclEe@^s>jc;P6kn};h6aGz zDU+WhHY>B_!td#NLB3)qb!;9+GFw~%%%3F=2$3Z&Z+eR%>;x;juDVmU8ENfQgfFnV zSZlc9Yc=&^xuL%(V-l?eHGcc>5WQ*D@=yZn;LhwR&x)P0>eC^DXcanx={e&}YdGZi zN?YK=vBySDFcU`5k$P_G39gF8Iz>AHIpJlSd24A84fls;QOBSBGRR5>(jPDK;YNP% zPvIe7_B56Ac#-wo=z`Y3~~0s%}RE+&dXD|eH+5zjO6aI#c{?Zw~#q$pIr&Hw|I zf9_b>%XJ+6XZZ=civFYs*q$TUE|Sl98+Jc55+nAFy_e0KYrl&KWbpQL_u-QRsi#ux zZ7zm(n5lVZkstE|-9_x#PvvK=YU>{VVW4bIQ9B~Sr&x;Ax$*l>l$H&4h2Muj%Cm#j zFHK-nWIKNsG(0B!oqdZJ%+??pF5C713cG+e;J?TfyhP;vskg~0(FP+pzG;B>-)LA* zt72l$yO~tKmcp`7hn4|6r&o{>Q^gUS1t^vZUTy;m1U}p2gM6cRbx?Z)XMV? zDeF#AOCC)D)v6_9@F=>F<9FXCa-XV8hC=&%4orP(HO_SeG8Q7Y%DXQ=%sbaE9~VVO zc1^a`Awh`q7=xMXhB6j`@$l#J1~ENYM4>^W@V(vn_ee@o>pANqk`1yi_P{<4f3h1& z%E+BWtO4cSnTU(#zZvGNtUKB>Ht%ApN(fV^Ei*QEC#H)Q=La-}tB~wl4mluZv2_=h z7t74mY?hL@>{B9$V(QR-8O1^JK*}b^W`3}+K15@&S!W_~7W2lR7gYbi9SSB@D8(m_ zAaDXb^0?CliXM&Xf$O}*F(s)I8e=0oKho-E&xb>D3)PC|ma)$1HORkD zcOd-yWM;SZTeLck&kO5`%0zMWs_;O8TJeeQT=)uiH4nPAV$AAqzg%~|Iyn78&pFlM z%$ugGYEg7}`ZCdnLbU@{a0Xv7 zO0mTn*((WIPLKz`N;Vv^I2c_m#z(v}vwUv=9NJIozq~$3dj*%R zkwdyJOIXB}(Z1!J#Nvcz9{9H)sC~*VORcWumpdm2PfeoF|Ix1>Ag}z3pV&|s@=(yO_7TW+%XHV-l-t-59E!%jbzLpc1yW*`e98b}nSb z4B6x(#b8fD1T{~-6A)8-G>;Enz-CNcIc+LoYStrz|3-c0 z)d}Uh061LB4ma(O*Df{jkJkdL>ecjsf zn{zU12`iqe4)+|6t}MqqHh-~^UTHg2hS(VwqFq-ZFSM}*f@u+%8X*=7Se5XU<)Siy zyC_^Z#_Ifo4&xUiGNEsly+PsG=_L;({>w*Sk$m+F7myJ0%K(}v8MI)nCvQ)-0xJ{% zU3;ob{k2OMioP6jocnt4n!91zEn2~jHcZ+)#%H>v#9u7_C*#5BxBaGV$%%8WhEum% zE2Lx2!DrL~Eq+=%BJt^LtC{-Ebkdm=gsC11IF4w|!X5?R;%XwU&~I(_Qb39&VI(C|Qlc{@1q zH!X%fB5Vb@^+j8*1U+atL&5MzYMp_jx`}QZOzw^^6!{ln@iH(5Uun?tvFf0pKr0eA zBC9-kcx}CqyE8jf29o%?vTYDWspJq#))EOzl|$D7Cmo403k&jN{wWic9K%oW z`lPtQ*=N&zrq(+wGCFT@dUwauZ-HGw_=n06hY1nHH;kQplRKr$WY@VwLqoy9p%k3~ zYRm(%OT-6fN&gw zZeJcCuRoTyen?Zni|I~`FA36z;~tX&{nIsGHCq3^bRo@$%ub~{zXPeeQlUaf==Cw^ zPv1T{<>4NQdbz*}!*cC*zv@SjXH`F4l&{6(znshg_>wrnoDvZOVJd$uFY3pm{n!Fl z?i!@-0KpSvc>}4D@6P>|Nk~SpPdwU*HJ~lBrTjKHy0x3y{3=XF=QK_NHxVj*bp5+<=hZB5o0v#F#YnU=%pK7zj$U9@6u$BK+Kw;1NM}-Xu#1bG#KR?NMR$GW&{8o!joz4 z@;a=!cpcJq`)4(Fvek6bsc4qAT#v-Ua{2`RKt&?et|t6TP=+Eo*&Hm5^&_T9@p{A< zSX<R0h-a@)uwOwNQRRih+C#ev&8jj~lP$8d{PHoPY)^XIa5ROxW zf<@P(U`*H;d(p1h1679my!0_90VOAc*1MWFu&r#^^NqMVEYi&d4q>u)*gEm%jD+`7Dy z;nH0J3Qg|OooTDtuK;`!O|zYo_P@{kvaZ@JXknY$;bZSunm_TG z!iVhpJDbn%(i6CvAAwp9a(&cT-wd?|k5Df=ZL#?{(7ah@wva&Ax!kCI4hL0|rws0e zZ`qx8;F(ed@%{v(qG>E$HlLRB|A4k14XTx8vyAp_><;4Fa^xR(TJDuR zq%Z$zh2$i|?=pZuWswm8(y5lgG=de)=Fen~PJUkDmViF#B&WihHAH1faNOTRKvH~1 z4(OirtjopVCcSXEuIffNVycPf^U*jsG|+s%{xNBH(QuN1DDx`iPfm=8-H01t8qp#- znW{g~_);n%F#6&`d6qYC-6b_P1N#h`m)BOMt-*2Vg={Ju!_fNgILLs3fRZ;pTb$2K zG@#rjHq{T@@rjVu?cNiGXDJn+ZQqzIq2E#-5Hm1SwJiqKGow)}?4N(azK&$#k)Z+IeZ!%>)Z#+zb)w2%$gZu-*mVs= zO-hMoBz$o6ui2tC4;cUfKF!)lPyhfOZ~y=ShQVDXd>p_s3tl&!zInB=se_p`=AtET zIB$*Fmes{Nn!{uwuI&!@fSbT%ez5E;w^TS}oZ+uCBxaTTuVLa6kMloiqjuUuUN5-nItMoNB(Z-8<83a5qvCIB%mU-v!2>)}Pr{=x?#5ODK81U~s-`PlBb zQl#kV3uiAq7aJ>g`|Mloi=;^JJ|HJlMhF=TExK_ly zVK`+u?yupoM6=Brc92t%F4EbG8mWa^~jRqrwBiEF+mONCx8gnf?SvK^UppaK|k?1Ad}PU9r#H^8=X*+vv+tG34Mb zbwk`Kr;Vd|1a_|FCR9#uU%P+9NF~~F$p--MMxhoMCEnLZcLMcQ6zIZ4k$_*&2^Yop zMHKrw!x}1g#p|(PG+L|1C0Jg==aj$+x`!UJ27lS+=-1%_Cw+n39xc{l?5TRrsx3Um z8_X-qLC6<3RQ?z?9$p$E-S2ee(r!@daJ^Z&q@amSRRLSpr9{%_r){dKy(BkjWrc+i z2ND@6!MP3(B-ShpKHHAo!lyA$(M_MJ=aVbB!TK6X!DNxWnqpTn`GRqh&6%`nqIhip zyq732fL=5~)91?|h5)dAWFsAz3zX^ei*I}r$#i>h9=XT2`mt5|&=GotOX~JZK3$kq^s4G4mx`aUA`4?Bt)oyCmK_|->c1MwTZu%>ZPMTe^tRUau%V~ zXNCg})PqbArIzf$Z4A&u)kb(A*6eiJrZD+Fc>8E?`p3eZw+PDqnjUGoG4hjFaos%8 zu4Zy)56adYbp@kSapjm#4N}c%767(*=Q^?Ps|tJeA$J6HTq1OgCsL&;i`y^7DIpD* zw4SMJ8Y?u4|2h}( zr+wR{)sB2&5E!o{<^y5?0C)%XQWc{jkOE8sgF$|#H~vll0e2aqhQ?rP?JB$>^2rIu z|G#cO`KRCvsG);27wK>PaY3j~qW|r3Sa6LMu}v0jH%MvT17)~uy&)r4tYt~J>xGQU z!EWa9;Z6k!>4s||ild&jyAj=?@lyI{_>4xZKiVhUW1sRmU`-#QZ>En)Nue`^&`nDj z#9$zLyx;)JMq4&gd3da{!DJjLn7EXQir~7u=lf9jWpLp@n4GpR$`kdZ5F+t`&L92z zN$<6M?{zR0W0*e9{5FVJAFa@H4mA!;&jeolZi!SQ^JmATba`AzuFkSo)j7j>F2_pF z?U>jz5)owa6WfS%AbZxQiC1GycV$h43_33p5uXVr92#ziY4_o@&5|F%T)qco`n<8~ zeLCd*F^K%2k)}jO^4|#XETd^V9=S&#(sr5z$7)h^YL zJQ?H+wR?IjhBa(?|5@}V!jj|}WW{AhIGvb5xW1K=UXZnnY5x5AC}MX zURQ}B4<|;USQJ1B2!jQ1ca0+hqfk-8a$z)HC#`%Di8VQj$WX2NWpihG;4kgS#5CLX zKAWbKZVQ2JX5l{H|8HVPMp#!zC$_RZ=!t2;Omk)$pA$gzm?M0K)5vcHz1zH_+VfEJ z!asQ08a3c~z+|ZMT^2W6PIP$w9i3zL{`u(Sh!b4zDY$p^Mu$weogu3L%ed0LY*D#1 zR`;-Oxv5gqY&d>_^i}z2*LojQ#s#db zK+~ZZ#vqA_SAkycaTm0$b(U?}aOse}N-{S&l{l)Fia6+zM*%!s1#PIZu%T4xp_Y09 zN{_h5=--#~Lf?I%uxfk@mbkwas?^|mc>kd?E4h0RN?+4=W3jOY_3BiqUU_f;tf-jG z?VO>2pRuCC0TV%q4V=tP-&8+}Unn-D*eL55mefK`ChG?W!FQa%n+eYC1MQC)qVU~; zejumt;syH=qdUt*tS+7Tr@-&l=)4}o&{~@ulhW#UTkP5&h!23d&I0l*gEz7emtc?J zyTD}U*vc+?5{<>z4AC<6pdNz{B;Dgecof1y9@_k9f|D{J)j)-G8(n2F<}xZ~!UYO9 z;?*6pSw5nT1G({sas$YS>NJBGMO4M@rYki`K#I(5_ayvokqM2;wjshNxZ1Ys2THDE2mQ1VQe+p+NW+`eop_qJu&kr3S^ zp-wg_Ej%&4MBP=uk8(Y@wd02dNAC?6<|N@Q zX-p6-p-L)upLY1EISNcaPX7@Y`^xH`QmD{?rDX;s`G-U#h5Z(_U$(KB zzfj|{@n+C#CxCj3e=$Q91kWXSE0}oUEUZy<+StR= zKg{>6L8Q$nB4Dyk@DZ(66wYz&*LLHJL*422E4i}dRoR|>wYrHF9?}?CI{s9L*3ny4%14?3J6Q6+$y&jtN1zOx?T3=Xo`naAB)HM4 zCd*VS>fCT*jysYp{0a5F&*&ZbD{FmHAwOf1%57k7@#Dmpo0F5-TX14}MYN@D5(!4J zC$|NP9J?!lO!99jH5R^z3Z^sr@90_if)0m(009$idLW3JiVz6;NK``akNT%PKNH)F z6$#|-Lj>}h{yg|Ri=s~WsrbDv^rf)V3ay+6qSN`3Ai6S@9I;!-%SIHZ1ujfq6!{a! zHBkF0rJ0o-X>H8P_`$7O#Ku*;>*Q-NF)a>?@OIB8*mJ4lf$qv^lB_;}Y_5xaj##qN z2FcRIkWBEyg8oRRpU94q|9(WkGYob^&rCta%-@_jj3N%zKunp~FTCLs7$ak;mWdW! z(gH3@tOp*NYsI>52Ht~rsl-ec^9rv< zUmFF9Pco~svxcd$3)n(B9s8;tmtX6)e+Zcr<>7H($yY+r(68C3R4$aLpvs`yUr+PI zYvnqVe;jqFN5Qz7#e6!N4lMEiM=pO3PLU96i6V!p84kc|Q}2sa#{#SJSk>yt7Db3E zZO%*@DR)jW;h~g${^0ZCM8tyc2bde{I`uOL!{4^+aLt$?{aM9PORXL06#q6#>EeXU<2(+bdz!g`@tHsj%E_eN1z7R2BEa!yY^Q5&jLm#Ux)$@+t`6l z#C$F*zBw$HeXv07OQ?G6g3N-3i$m)~sdmb6U-e}J2GT~A;JPnI2|NeK;rys?I&r)Z zEycSE?0XY@EBA-Q-VMTWD8$YDf++s#t274h1$T(?gqj&b(0`xq#HoYNCEZ^brGnvr z$KTpM9wHxnw5Yo&GaT%KXh~_h3lCZ2=Ocaf&2Wg6wLBW^hf-w#t7n_IQuqi+R*?>= zZM&7WB$J9_=#INpm=)m0F?(-u_)7~4kiHRO|H{y|Ht6R%@13HU+EhOOl?#yv1BIkL zP@6+_9bVo`2?e;O(hEjG+7=parpD}E)xymPqJ-w61V^Ne+)GGn!N95xYc5FGMT;B& zCE5&3ATbOz6oSoWXsGn&0!H#kN7+{{ci2bZ)AbC_p7Bo_2xnbfp|bsJ58FiQ48#Cn zbaGnu-eWCAsg2Vr--e6)sw_e_2k|cj4Ow>Y2t%0gitN#ET1ylivMi%ssxa{uAMSy! z4gfMc;W!%}-;5eMTyj$VkB+i~=FnFJcEjnO*2O-JU^-+}s-*Wv0BVn5~1NRH>* zX47Xf5~IOxOgumcAFh!}IIm3E#1@3qQ{K+y89;k%yOJ_Ului9O`+BW%t5T^7vXy>3 z1O?`o+h#;fm%%vE|IRR( zsI^^H8AN7n) zs4ynHI`YPE3vQ6@y8W5gtDMrkRxM(egy#aX?Syk+eM=h!X<)`?T42;s)d&by`2doB ztmaio{R54&iJ1?7G6vIIbIgWH?4M$SR%vs{Oz^ye$aLkVL)Cp=8(@Y5nC`>4Z7IVV z+d2_(m5O$eapj2i=5veRTr%`!25@O)2+*NMJVj%@MR<0*38A+Xs=~EbtYBo-*#MWl zW=IfNYsuF1ePY(V;J|u?Nb)@F1e}lq$qEZy=*PdJrdL`984FSl6w<8bsV8jYNlud; zb@I=Ik2lqNY_GKE0-3wXC<>EeW4T7G+f1Pk?IQkJ+CK4>ncoUWp+h`rBaIYEhJ6=b<0t;*^ zbmOVG`BA=i++PUyV|nv3-HOG5h!M{yA)Wgg=QYF!0!(GNT5v8`18x}&NU5e8J4z=5 z%H`OmrO+|oOyee5zh-K)-=`!hO5=~Tk6!}b5UB+gvr+?Q)>-~3ebs9^{mRX6dq6{f z&dh2IWcL!muod02dDW%OatZwIO{YB#xQbONe?7>v$zi{!G!s^X8{*5@F3Z|h5r4(%*;|WORG-jkdC}H9Py$SS~ zg6iH)sWu5)W%dLG5?~^)K@EdoQwE=Y=>7?x!PyxB(Ra@AC1YLRE`!UxM;R;+bDmRp z!;QzHGI@;7g2@yPMR~HxWCGBmPDbN**&F+5Xd!v=`l`Gsx5<>1mE)D&)_=hVU|HgX8&Z> zSupdJa_*r}R{qUS0IoipA$Q3}-Meo3H%+_5tTNkRPEzm!P?xV4?F6TIGh-yn*!VMP_aiLM?|dd8F)F z9~gL(n~&v|6e+lk@sXhigP#b|t^`K)gM+X3WcE1AJq$J+0r|M^IX1puJxl*pepgSt zfyb{64v!KjDugOi`d7f|(W3}99F?JiJQ#j9)JS%Qj^K{(Jz!tQ6WGgE3e1@SSVLc+ zdD63Ac`4rtlkOR)v>N?9%$hgbQI3R;CBH-yVY@5efpu*Wa}t87yf4a2(jPVPjc0EG z*L^91f}*p?3{~=p*%3922XugZ|6ckmv-dy$1d=4Jp2e&lUu3Q;#1ded;LM%Ekm@x`WM5f4KMd-F2k%JYUb+VX?gx}oE zAvw@Mve6mKV-u_wBiaqJUqrM3<1vksRA1Cl79PGDmMvht)37+~gp&NsD}1UVy(Qzy zENB?0(Scz+$JU-Xs*qjWba$_dgKJGLWTRrUmOqSSYRY_$-Dno|; zx!briUf{JubMXj&EnU*h0>?Bv!Ca^71$NFP6p3QVIQt6>DGcw(v!L?16B?ObKw00L zF`Ff>t=36a@R|=bBKJ4VUP&A`c6mHohhX*NiPWKj+cvqmQaVN zu5s@`(C%Xo>K-Q`o?TDaTRgG84M|Ap!k=~qE|{G#aX_*pOXz?{U8Jd~5h}XLo|je_ zj;cC^St|aOZ&;l=X<~g zyl20T*0ZHMjDA#+)P%yLQ<91SE$#I*PRfOcAdxS*N>>=M6l=0U=fHFGO9&33{9 zBmmxB`kR+e@|XuTYpxj)fe$`cL&hTxd7}c*mB6u;t0;pn9UL&Fn6vC-HYP%D&TTzK z74&Lj$Z-08OaHA5Dwgkk@}DO1qXB`2s%Tz?^R8MGvX$%zm}1rGomlQJwS(obkf!-N zSnCaH9bJyb$O$0s(H)wJS{<`zS~IR|mDBhSmY#5LIB zpHb?>$cxYXdB0DtIAF;#qClw#0AZ49fS0}a;&um*gK{ofgz7H8pB{KQ_8;>l<1pkz zp5ijs#@Q>+g_hfdXT7=JBqU?-epX4PxnaMM-3IXSxWh4XbQ=FTRqS0}HO%iV7bek* zc_T?GsM=`HQwzf|Q6GKF*io|5e`FnPz&6M$+F6Ca{*Z-WAl-`^N~dkv^ilZU{Ea~N znUe0)Fl1wTs;@=YKB;gl#r=0-vGfB+B(5T|=g zcaN)Z?2it_8@In)8j%?Mks^64BK}~#2`FSM* z*Yz!l^eD>O7E2s&RB&QuRZD~Wh`;W~Rpngt7BQP~X3q=7oMV7HC2jrNAOQg<9oXW* znV;iqN=`d-p^P9BZ9d`FL>tkvo+)Sr1;$NS1k%ImTicJwZV0at=`Szk%U2v$V+>NV zAwv9+gW3?61h;b*JQ>uIp#yIp=KHfx>C=oA`nzbX{8J5V$DWUQ z`1$qIPjxl(B$rbqGMT z8APsW7(m=Y+zyh}Z&+#Jh)^- zZhkN3n*tX+T&|gC_MwZN1sr2w`MgRu;`Ix95$1MtVs5qtsAfY02Sf^^fEz=MNWFtf zk&SNCZ+2r#B=*a^&M`+RtUR(V82m4pai$}giY;*F!wVHqT}&ZNPyxDMGSC~gku!SK zTr6*Yrb};5KR3tPffZ&v&|Cx@e;lxUacHc+fLi-UGm_8v|FlqY3q#2MW-+*Im6>%z zraK1zY=qwkes0)cJ$pXJ(jP!PvERn(ZWW0OY`kFXNgoK&T%`L{#RZSu2AzqPKQ|LL9^#0LX;sq>o z=t|nP@cw@1H*)tM7df|_{%rFnh@jcLA}j)@-IdTt;2}Y@nfKO-r3tP~?D@W`!NFC%5cc6t z!iO_K3ib(Y}w*09kF}N2gSY>XoH%iU7o+$aNg^@r=5X@LPHGteW{1pzvh>4 zk2PNqL%v08AfBFxtdQ?BDSBpmfpeE&6A5e)<8imU zi@x=Vu))+Is=!IcxY|Aq!n0n~SWH3FsSmCsH5Ris5sA}m2qw?}an|lp0e7KnIc+d; zLe4@o(0?il;9%hhpW^y7kfHY{L)3TEeKE`=Xc>F{*f4BJ(=_4c_`M0;=kbMr#o_vRs9ck(*OWR(>j5#SraZJ@C1W?NnDCQ0>lYX!}TqTf+ zA6jRr@5O*&L-&1>(B_EJ;e|JeCkC#1AHb3HBkeLMrBQN2QNs+o_=rHSYEsXofg) zxD$<`@R^Fd=sObX&EHDFRn1d%Dc8w>WYlmvFGMCknQwGwx~L{!qJ zn?Y2@*Fg}Vl_EQ2v>dKifX4bU{R>jNNwQF4HPnx2v z5aTGrkKlYU-nDF?x~}_9%YBO0WcW6qjUgc`;7B*Wats$OB~;jU<&5p!<}Fgis|&#! z3;Lwc8eN?XoXCSWEQ>4zm_PbaCxSDaUfQdjazw?I0FCmibXDq-E7at*#5UnxERTB{ zz>~mFLqu55$@mgjjx!Z+hcHSA3b4t24C*SIg#d3hx9FHzC<@D8L)q|o>zTG27JcG? zqXYjr*QE)@fN&o$7Sai0YA{2%Ql@iQr_Y@6JpwQw2fCBp90e+tUuuY+o_>^v2EUsT z`ue%Y%ZxOWDn)IJ-K|cerQISR=HI4O z%Lc!!GLyN{P5bx~WW%efjj(NPa~5L-@+s?X_LOD7HMPuEH~Ss=>Gu17%*;|9ZR&XH zM?Gc=py%Z^6zU_mO?*A!{a14%Jiv1ozypd)3?40%XFY0^nX9Zvs;DQBB}m_mRF-bU zwB9;-hk6bs-@odWON{REBAy(+F>8AslCCgy=*P+vo!~=!}5qn|x?@VL9F868=pH&VXyCPkBV>Mv{7& zfh@Bnx#t^#EFn+pD$CDu6f?YK?W?GU!2zHm-*pwJ0)JKup}{C)RpYhWgKfD-!*0rF zG+I&=gu6g#6RvN=1$N@l>~r(XZSIEetClN=eUv0Xo#mq?heK-&D)D#fXN=v1PAKl7wq10Kci!We3u#UjbcIA=ASwjzeI|_}mio#&lN(ZGFQlpSX z*KmzF^8mz$@vJ088AYyRop)67{&AIYWN1&coJi!y=+d>>ia53qZ`-|p-PT1~n}|L? zQeklB17A1Ssbbbfc@%WdoE%i)Z`w3l4=Z|&JOl{1OjvM_Huj5&V;2z3vnUPfFqmRG zxSVrCUmy4OKdS@NuAqoJvxXMRoBpGdr-HqdzjSTyj|`0rzI)U_PdUle1UE*@cHyV> zQ-{}dj8Yl~P|DjaC{siT3v-Sy#q7SJ26P0o=^TTRw2Y|xP-a%Y>?`=x@VbG!Zn839 zK)a^7m%+w{GGE|OAw*yE;a{QWGcsEAeJ;Qn8Va1DZsOP=gMy~nWffo9=Hn%PB#QB> zUN~~lLi=;iNfwl2UCBNR2sAkEuCqyZmR2+Puwxe#E~|b&y9`LmD2P1HC^(WNWa?jZ zIEuw@ITa%gV-QH{4kQ}6b%V56pk|tgr_$bRoTRoV-gTRy&gOE7G+#3dDBl{0sbn;! z)OGkSel}ua85Ztyv6r3SjvukGvX_p(Bnna4B35A`>!yr4t)vuIl@ph|d8HCFxD(Q~ zAq|Pn>{xK+llVa*zv0R|0WCkE3bRWkVBjg&ZF#of-UQjXUL(Ehw^0On ziV9nxyjq+i5jlb~e}3MmY3t=Vu$bHVE_N5f%Pje3H`yJQ1*FKX@x{S}zRbI$55)G=wrYT;%H?WlV5XF>wdwX@Og(rh2# zLI`;E7}s!M6!GJou{;_Pmr)sS#d*`LRdk`~68;a1Zzoa3EG*CBDtxgJu0QqKY2j4% z&OLmeM$P@%g$I$pA&<)Wj#k)Ye1H8)bN@rn`S6vzE$gl^UlLIkp&1VCdS(vF7echI z`<(Z`)#L|6*@?8k5x9O~n0WCVjtl5%h27>_+eMDEt#%@&+0!+f*pkirl!`ZgiE#RR zdv1Up3w~z`9?6LCIEcUTwiXxS>x%F2Y6=-AuxluCZp_MePo$ok0tT5RvU>K(SpEnl zZ)`DUNp1KjeqALb8_8s!fAhvq{yi2QmrcFY7o(0AT99Xk)+DXY4V%AeQK#8Hu~qo% zue}_xY}_G%H1&dEm-QJWE{tQHoDD_e~S!OjXOqY0T&vYy>-6rvza&FIH{t-p8NVoGyhYV<2g_VW>>pB z`SrR3Fb7@UF+wwvP6KhKK3s6h9yI zxU(rp;|`X~*MLe%+dH7a89_C66>s+NkG`3Ba}gVcXCyebIaUnnb&^&C0|Jd#t%FU3 zfkeq5@O{1|$(s7GN(9dYgv5X%-3)li`H~w@w;)HqH5-zMF34xdSG87k-mbPtcBs!V zYP0M21GJ8~t55RzHWJwBqyyslC+_xzm0B5ITSt`ioYhC5G{^R}+X*d;28wIrqz!sA z?g4p2*ie1sUw^$|(XUqIf}}g{$>*eZaR0wp9ssNIi;r8hnZ?Bl>FTBscogdyr?@x@ za`_sAq(#nqD0k!xJ6q<`Ds&dLs5LNhuk+}ed@wSDA&^VLRj=X)((%uV zI1M<5`lDw>Rxiu$UYoi@{|yYNtHRKaOLc`8FgY!8o)RcBT1~jm4ZewRmriBC&KsZT zc~Q^SA&ut=WnLc8HP@abx?)ydX>><&@S)crDNdpFr9eI(8@#W**{`Yx@iVA`qYqM? zyuUoP26^bO{Z8vP?`Qt>MFm_q2cq)1b9jtUXt8rZUg9D*nG})CQPnH z@+ri2!L2tA>Xu7v;g#5DAF}UG$|9V{NzB^*c!9&e5rJlf0Vi7&R-vY3$pn86Ti|O- zv$*9%i-pmuxN9(OHjnb&4Ou%h;OTq<5%xgm()K;n=-LF# zDFcRTNaM=1`|!lUtkkkVM8~+Q$?3Ylmk&Dhap2Nu3xCjN`*OsglnLKgX%J@@B^%!L zf6l*`lEW8`KgU&i&7;j;Vf@Cpu+UFa-9zd`(-6#-0A7Po$H|mapBWPBmbAi{j z3*DH3nad=;ykHjP;yj`r9aG#sGqaBftKJuLe!u9Gv5ISzIA5d5IC2gMto&|C>kMw= zVJ9ViAjo8tY!teoWTv)Q6{Smfm+?6Jz&0=(BekFpClR{Za*y7ZqGNmn^F!rZfi~_e zPS)=*n7Z~RvSRF_LwX&h+seUpM%srLl|9t#6Ob4HTs>L$%mjbiwau3EIO#FzVHs}R zw^tv-G%$c7DFCG2eS0v1V?j5tH9=nuw>BF1z0e;>1u>v8Z+8T|#5#nKnFu~N(^5C~ zrUT~k4YHg^HP~jQevKeya|s~6|3RJ^Khb)-X~Ly8*!jv^*i}pF%KRjqaclbRZpw$! zbu*W2PH68{Y#)vOaRthHE`cqh9ViHyiCkZ$Q=W?)M$NdD91bDDCA&ZCL`u7o z_}0-0xgT=u{^TFUiH8^gVu|YFvzAj4xx6Flq>&|K{uiE2+6H`bN~Boe8kaFwW+CoI z<6-=aB&e+zRh-0CQeR zU>ZX%?sdKEEW*d@gO%SmD?vaO7;bliQV&6Be~%2yfY5v!oggVZ_9{HEaPHL3%yR!d z?;utI)YL9PUr0B-1{^d$rGGzYB`H$dko+t}3L_+eBXxBrL*TEGs70V`We#&?+#Ta* zTHU8)yA`*)lt0!!-YEQbscPB^acMvyNz1x23*rPAkYJ8ZRLrJeSOW0p)n^ZS z%$S7$Q{Gi7WeoGjAtFd}!`4V?T9Yu^4rd^mo ztJ8d1jnp;J%+@r4b!1jo1eB*AU{_QSn;m(n%TO}a&E6S3MM=N()z^>@p3jC`7Rl_a zb|+%1D!5jPdU{go9!}^=Z8zgy_1ro5G~2^H%TUy)`psGHRG%k`HXf*!cb#j@+wBN;G^uS z`Chl}nhLaxXZB{mQ}A7(fp!;rJw^Gs&-ytq(D+WkkKu;;P5E6q+YwdlwM1$;3AvUn z#ip}XxWH|M^uoR_$&xrp3>{KJbE$lcNM0P}Jz*g#ZY}&BZP%m$;HPC}d_6f$f*?*- z1z~vCX9W4^wu5YbY|>IpzUD?E+Q5QgC%|Ew_@&p-4|Ao#~#% z+33FFA?guafiA8IurK%*DvBEm&akX96cSgO)`c^xtJAiB8@kNymdy8r{vYo%UI?+H zFZF*4P72hMwEfzk2;nBEXWsvOov4w)_~&pTFUPrr&{L6Dr!puW+FEB)O?ZcLzk#yQ zjioclxZ6hsysaE5oTPHVT!ZhW<_xvczx1I1Fm1I&;{#v%DGFI(+0PjUF(I=>f%k7F>x zBJ>NvmKaQUd{e`)LU|+05n!c;;L3ovND;}$=qh9$1RMn>0{#C;qRjzZG)4pzR`Wp4 zWQ%t#b{vwfi@15M)>|2al+QsdTbGBoG;d7@f?fX&zF+qz(5WMKx={aKFB?=bVrpEk z1JZ75S(W}-23c%Fkw`dQc&9DTUv!ikyyPkY|6ajg_6KsugCGN)nowrK=`dYm`L811 z>@!BrG*);=)}$v^H%=S;t+U(_t5f-HdvO_B!UEc66vZ;*0s;$x4IhO-`kZlu*lfSg zs5K1~vP(%ie_izEif;!gJW0cMv6V_4Yll+R9m+@&5^bLNbrQ;=&siAvG2fARC$Y$N z1@S$QO!lq*ytsKx&!+JRJQLj9;ZiEDm))r-ndxhcinvPN(5AlZ#utj!!j{$#u1;!3fXpj=G@3%I^<&z( zeav?ou6v%y=*RthO^G*^6NO)EaaUrT)V{XGXLI53T`^|Qrkg?%YVYB+JkeN?{T{Ty zPL9B}!kQd^Io2tKhs^q>3~!m&D4~Pc<|xT3z?Rl7Yt*9bb7qlW7qgzh7@|Av@@i#3 z5I|htC@V7H*(4QfRg2P+6u{H#3LFR^)Z*xCm})av0k5syhSJ#sNiQ~(uw?cD%a-cC zXHp4GCtYVRwz^5v1r5vEsWE$ZWBJ1qvQGEiU$dhPg`5#Ho>k*<2_#k;?VCX;{|kCF z9E#FI-FYMRGNQ1s~lorFhc_6i@G%Lr;TG9(*M02s5&f#&!s4hy|`g{Z5M&o~Cdc$U!(6`TyOrMt9#9g|Zvif=u} zxT1nK`ux1tYHxk?rG`(5htw_oOd{}aTx{$~NIfn$=oel>u2`ZN_~Tha-Y(K4PsK#f zk9o+wh}X>MFX?|2ZL)`GI+O!{H{zp$SN$i}p0dU>joJK(P-4?6V}HH=NK(G66#{)v z9plGyZ|_-u#;ov1CZh6T#*d!+ss26=s0dMJ!6LjQy7B-Bk6_OC=*z2uaO(wJ2G1+_ z2W=VZ4e~5FCXQiDVtF@SaZ58D&)8vALe05K7P=CQMDZ@Fj@bIeL=xy(#BbB<-&Bf3Ikv@QTEPS@JC z)x0&iSX|6<55x-q33Ho0h3u+rH(+mD!arPM`hD|h-2)ij*8pnGsnD_?~lHY7yDAEK-@b*;6Cnkd8~C|wQT_irqh+J^M7 zqNO~tvIK`9RV!bbMVq+K4HMvVh_9D#*a(-g8yN~@gVHe+kgR9E@_Sy3e>8n z9wSpBs(LkQHG;)o(i-Lo6WhwzJf4RL7fegA=bf})BJhd~OggSJ&S_hd%Wx@dvr7ki zpZ<7OUu{TMdCWHd9@+}RPyRXx@}8~OD>`V(5rk0W>%J$#EJuWnEyP9uWCv7bV8T}_ zf3*k9oSm$X7obQKjitSxv5t$0&;LY6`(K(Weeu%4i2OOPzPw*+vvoPKG|b&Ioap~1 z=#F;Y>#Lmk$7>F}n+I;o&>f z>cp4@rQz#&)xFY;(8PtF{%3+gt9OH+FRbdD5N5ooTYn!e5_AazW4IQUXgbBgwmSl* zC_B(kqx`SM==r9TyAn%FeL0mkzVNU|EU+zcJUpv|ttD38qrLBs-%u6C7QI6*D)@ZK zVzSnf92c2Ou}_Epas&~v1n(IKEYoy~L;$(s-p0CizRAcrMyVN`J0BT7%Y3&@=5QN( zs?`=W4A_YiqF^W`7s^P1sONL~%Q{`{+y_G)B?#>vot3VW<*;6ARmPeQG#^u-GOQ3V zL$m0<_O<|Xruiru*df6zgc5D8>HX&eu5M_*MUlNy2w$FlwF6=`v4p%2Kmr+0G^D9b zCp56Q$vZmmGeK{e)cs-woVFLFkP2}ZURH?1YP6Tho50DgDrj=8Eu6xjc2STc)80xK z;pX7tHu-yWSaTQGl~v1@NP@JChyE3&S^wz2k*3~pWw3GC;gtC>4gHc$M{Z^zwFaj7 zxh-2~yu*Cp=>^=kT6WR^|LL}@`xKy-GoumFeU*4s>=)=H9G$50oK_#1%oX+ia}eaX d_tf;3s5Yb76y7A5lcrzT{8S2~que*8LIA~+MgRZ+ diff --git a/docs/gallery/index.html b/docs/gallery/index.html index fe829c3..da86670 100644 --- a/docs/gallery/index.html +++ b/docs/gallery/index.html @@ -892,7 +892,7 @@

gn-socket-rename

shipping-crate

A procedural shipping crate through UVs, bake, LOD, collider, and Unity glTF, asserting recomputed budgets rather than an API contract.

-

witnesses Recomputed: 552 tris, two materials, UVs in 0..1 with zero AABB overlap, outer AABB 1.256×0.856×0.748 m, LOD ratios in band (5.2 COLLAPSE more aggressive), convex collider 20 tris, non-empty glTF. --skip-decimate exits 9 on the LOD1 ratio budget.

+

witnesses Recomputed: 624 tris, two materials with 132 metal faces, UVs in 0..1 with zero AABB overlap, outer AABB 1.352×0.856×0.748 m, LOD ratios in band (5.2 COLLAPSE more aggressive), convex collider 36 tris, non-empty glTF. --skip-decimate exits 9 on the LOD1 ratio budget.

View example
@@ -1035,7 +1035,7 @@

wheelbarrow

anvil

A procedural blacksmith anvil on a timber stump through UVs, bake, LOD, collider, and Unity glTF, asserting recomputed budgets rather than an API contract.

-

witnesses Recomputed: 1696 tris, two materials with 274 metal faces, UVs in 0..1 with zero AABB overlap, outer AABB 0.746×0.410×0.682 m, LOD ratios in band (5.2 COLLAPSE more aggressive on LOD2), convex collider 162 tris, non-empty glTF. --skip-decimate exits 9 on the LOD1 ratio budget.

+

witnesses Recomputed: 6616 tris, two materials with 2616 metal faces, UVs in 0..1 with zero AABB overlap, outer AABB 0.772×0.419×0.662 m, LOD ratios in band, convex collider 190 tris, non-empty glTF. --skip-decimate exits 9 on the LOD1 ratio budget.

View example
@@ -1118,12 +1118,12 @@

wooden-bucket

- wall-torch — A procedural wall-mounted torch sconce with a coursed stone plaque, iron bracket, wooden haft, and emissive flame through UVs, bake, LOD, collider, and Unity… + wall-torch — A procedural wall-mounted torch sconce with a dressed stone plaque, iron bracket, wooden haft, and emissive flame through UVs, bake, LOD, collider, and Unity…

wall-torch

-

A procedural wall-mounted torch sconce with a coursed stone plaque, iron bracket, wooden haft, and emissive flame through UVs, bake, LOD, collider, and Unity glTF, asserting recomputed budgets rather than an API contract.

-

witnesses Recomputed: 1520 tris, four materials with 540 stone, 130 metal, and 28 flame faces, UVs in 0..1 with zero AABB overlap, outer AABB 0.440×0.343×0.740 m, LOD ratios in band (5.2 COLLAPSE 4 tris leaner on LOD2), convex collider 94 tris, non-empty glTF. --skip-decimate exits 9 on the LOD1 ratio budget.

+

A procedural wall-mounted torch sconce with a dressed stone plaque, iron bracket, wooden haft, and emissive flame through UVs, bake, LOD, collider, and Unity glTF, asserting recomputed budgets rather than an API contract.

+

witnesses Recomputed: 848 tris, four materials with 162 stone, 134 metal, and 44 flame faces, UVs in 0..1 with zero AABB overlap, outer AABB 0.384×0.360×0.670 m, LOD ratios in band (5.2 COLLAPSE 8 tris leaner on LOD2), convex collider 92 tris, non-empty glTF. --skip-decimate exits 9 on the LOD1 ratio budget.

View example
@@ -1145,7 +1145,7 @@

tavern-stool

iron-cauldron

A procedural hanging iron cauldron with a bulged open pot, bail, and timber tripod through UVs, bake, LOD, collider, and Unity glTF, asserting recomputed budgets rather than an API contract.

-

witnesses Recomputed: 7012 tris, two materials with 2754 wood and 706 metal faces, UVs in 0..1 with zero AABB overlap, outer AABB 0.572×0.558×0.786 m, LOD ratios in band, convex collider 130 tris, non-empty glTF. --skip-decimate exits 9 on the LOD1 ratio budget.

+

witnesses Recomputed: 3388 tris, two materials with 450 wood and 1198 metal faces, UVs in 0..1 with zero AABB overlap, outer AABB 0.606×0.591×0.826 m, LOD ratios in band (5.2 COLLAPSE 4 tris leaner on LOD2), convex collider 180 tris, non-empty glTF. --skip-decimate exits 9 on the LOD1 ratio budget.

View example
diff --git a/docs/gallery/iron-cauldron/index.html b/docs/gallery/iron-cauldron/index.html index 66fe0b0..e7fb5c5 100644 --- a/docs/gallery/iron-cauldron/index.html +++ b/docs/gallery/iron-cauldron/index.html @@ -253,7 +253,7 @@

iron-cauldron

iron-cauldron render

Rendered headless by the example itself — click to zoom.

-
witnesses Recomputed: 7012 tris, two materials with 2754 wood and 706 metal faces, UVs in 0..1 with zero AABB overlap, outer AABB 0.572×0.558×0.786 m, LOD ratios in band, convex collider 130 tris, non-empty glTF. --skip-decimate exits 9 on the LOD1 ratio budget.
+
witnesses Recomputed: 3388 tris, two materials with 450 wood and 1198 metal faces, UVs in 0..1 with zero AABB overlap, outer AABB 0.606×0.591×0.826 m, LOD ratios in band (5.2 COLLAPSE 4 tris leaner on LOD2), convex collider 180 tris, non-empty glTF. --skip-decimate exits 9 on the LOD1 ratio budget.
blender --background --python showcase/iron-cauldron/iron_cauldron.py --
@@ -264,8 +264,8 @@

iron-cauldron

Composes skills mesh-editing-and-bmesh, bake-high-to-low, depsgraph-and-evaluated-data, engine-export-presets, and snippets bake_normal_high_to_low.py, setup_bake_target_image.py, lod_chain.py / decimate_to_budget.py, convex_hull_collider.py, export_preset_unity.py (helpers copied, not imported as a package).

Budgets

Declared as named constants; every gate recomputes from the mesh, materials, UVs, evaluated LOD, collider, or export file.

-

| Axis | Declared | Measured (4.5.11 / 5.1.2 / 5.2.1) | | --- | --- | --- | | Base triangles | 6850–7200 | 7012 / 7012 / 7012 | | LOD1 ratio | 0.32–0.62 of base | 0.5000 / 0.5000 / 0.5000 | | LOD2 ratio | 0.10–0.35 of base | 0.2199 / 0.2199 / 0.2199 | | Materials | exactly 2 distinct, ≥12 wood, ≥24 metal | 2 slots, 2754 wood, 706 metal | | UVs | in 0..1, AABB overlap ≤ 1e-5 | in range, overlap 0 | | Outer AABB | (0.572, 0.558, 0.786) m ± 0.01 | (0.5723, 0.5582, 0.7855), zmin 0.002 | | Collider tris | ≤ 180 | 130 | | Export | written, size > 0 | 501796 / 501796 / 501780 bytes |

-

DECIMATE COLLAPSE triangle counts are not identical across series in general — the gate is a ratio band, not an exact count. On this mesh LOD2 matched across 4.5.11 / 5.1.2 / 5.2.1. Bake pixels are stochastic; the gate is has_data plus operator FINISHED, not byte-identity. Construction uses no RNG. Export byte counts differ by 16 B on 5.2.1 (glTF serializer), not a gated axis.

+

| Axis | Declared | Measured (4.5.11 / 5.1.2 / 5.2.1) | | --- | --- | --- | | Base triangles | 3280–3520 | 3388 / 3388 / 3388 | | LOD1 ratio | 0.32–0.62 of base | 0.5000 / 0.5000 / 0.5000 | | LOD2 ratio | 0.10–0.35 of base | 0.2196 / 0.2196 / 0.2184 | | Materials | exactly 2 distinct, ≥12 wood, ≥24 metal | 2 slots, 450 wood, 1198 metal | | UVs | in 0..1, AABB overlap ≤ 1e-5 | in range, overlap 0 | | Outer AABB | (0.606, 0.591, 0.826) m ± 0.01 | (0.6061, 0.5911, 0.8255), zmin 0.002 | | Collider tris | ≤ 200 | 180 | | Export | written, size > 0 | 250748 / 250748 / 250736 bytes |

+

DECIMATE COLLAPSE triangle counts are not identical across series — 5.2.1 is 4 tris leaner on LOD2. The gate is a ratio band, not an exact count. Bake pixels are stochastic; the gate is has_data plus operator FINISHED, not byte-identity. Construction uses no RNG. Export byte counts differ by 12 B on 5.2.1 (glTF serializer), not a gated axis.

--skip-decimate skips the LOD DECIMATE stage so LOD1 ratio is 1.0 and exit 9 fires. That is the named budget the falsifier violates.

Run

blender --background --python iron_cauldron.py --
@@ -321,24 +321,24 @@ 

Source

sys.dont_write_bytecode = True import gallery_framing # noqa: E402 -POT_H = 0.26 -POT_Z0 = 0.15 -POT_THICK = 0.016 -N_AROUND = 16 -N_RINGS = 5 -R_BOT = 0.065 -R_MID = 0.175 -R_TOP = 0.135 -APEX_Z = 0.78 -TRIPOD_R = 0.30 -BAIL_SEGS = 10 -BAIL_R = 0.010 +POT_H = 0.32 +POT_Z0 = 0.14 +POT_THICK = 0.014 +N_AROUND = 32 +N_RINGS = 12 +R_BOT = 0.050 +R_MID = 0.205 +R_TOP = 0.148 +APEX_Z = 0.82 +TRIPOD_R = 0.32 +BAIL_SEGS = 12 +BAIL_R = 0.009 BBOX_TOL = 0.01 # Fitted after locking geometry. Recomputed from bound_box. -OUTER_SIZE = (0.572, 0.558, 0.786) +OUTER_SIZE = (0.606, 0.591, 0.826) -BASE_TRIS_MIN = 6850 -BASE_TRIS_MAX = 7200 +BASE_TRIS_MIN = 3280 +BASE_TRIS_MAX = 3520 LOD1_RATIO_MIN = 0.32 LOD1_RATIO_MAX = 0.62 LOD2_RATIO_MIN = 0.10 @@ -348,7 +348,7 @@

Source

MATERIAL_COUNT = 2 UV_EPS = 1e-4 UV_OVERLAP_MAX = 1e-5 -COLLIDER_TRIS_MAX = 180 +COLLIDER_TRIS_MAX = 200 BAKE_RES = 256 CAGE_EXTRUSION = 0.08 METAL_FACES_MIN = 24 @@ -540,46 +540,47 @@

Source

metal_faces = set() pot_verts = [] try: + # Shared-vertex lathe: one continuous iron shell, not overlapping + # stave panels (those read as a gold grid under studio lighting). zs = [POT_H * i / (N_RINGS - 1) for i in range(N_RINGS)] - gap = -0.06 - for i in range(N_AROUND): - a0 = 2.0 * math.pi * i / N_AROUND - a1 = 2.0 * math.pi * (i + 1.0 - gap) / N_AROUND - outer = [] - inner = [] - for z_local in zs: - z = POT_Z0 + z_local - r = pot_radius(z_local) - ov = ( - bm.verts.new((r * math.cos(a0), r * math.sin(a0), z)), - bm.verts.new((r * math.cos(a1), r * math.sin(a1), z)), + outers = [] + inners = [] + for z_local in zs: + z = POT_Z0 + z_local + r = pot_radius(z_local) + ri = max(r - POT_THICK, 0.018) + oring = [] + iring = [] + for i in range(N_AROUND): + a = 2.0 * math.pi * i / N_AROUND + ov = bm.verts.new((r * math.cos(a), r * math.sin(a), z)) + iv = bm.verts.new((ri * math.cos(a), ri * math.sin(a), z)) + oring.append(ov) + iring.append(iv) + pot_verts.extend((ov, iv)) + outers.append(oring) + inners.append(iring) + for k in range(N_RINGS - 1): + for i in range(N_AROUND): + j = (i + 1) % N_AROUND + fo = bm.faces.new( + (outers[k][i], outers[k + 1][i], outers[k + 1][j], outers[k][j]) ) - ri = max(r - POT_THICK, 0.02) - iv = ( - bm.verts.new((ri * math.cos(a0), ri * math.sin(a0), z)), - bm.verts.new((ri * math.cos(a1), ri * math.sin(a1), z)), + fo.material_index = METAL_IDX + fi = bm.faces.new( + (inners[k][j], inners[k + 1][j], inners[k + 1][i], inners[k][i]) ) - outer.append(ov) - inner.append(iv) - pot_verts.extend(ov) - pot_verts.extend(iv) - for k in range(N_RINGS - 1): - o0a, o0b = outer[k] - o1a, o1b = outer[k + 1] - i0a, i0b = inner[k] - i1a, i1b = inner[k + 1] - for vs in ( - (o0a, o1a, o1b, o0b), - (i0b, i1b, i1a, i0a), - (o0a, i0a, i1a, o1a), - (o0b, o1b, i1b, i0b), - ): - face = bm.faces.new(vs) - face.material_index = METAL_IDX - rim = bm.faces.new((outer[-1][0], outer[-1][1], inner[-1][1], inner[-1][0])) - rim.material_index = METAL_IDX - bot = bm.faces.new((outer[0][1], outer[0][0], inner[0][0], inner[0][1])) + fi.material_index = METAL_IDX + for i in range(N_AROUND): + j = (i + 1) % N_AROUND + bot = bm.faces.new( + (outers[0][j], outers[0][i], inners[0][i], inners[0][j]) + ) bot.material_index = METAL_IDX + rim = bm.faces.new( + (outers[-1][i], outers[-1][j], inners[-1][j], inners[-1][i]) + ) + rim.material_index = METAL_IDX before = set(bm.faces) add_cylinder( @@ -661,7 +662,7 @@

Source

metal_faces.update(set(bm.faces) - before) if bevel_offset > 0.0: - edges = list({e for v in pot_verts + wood_verts for e in v.link_edges if v.is_valid}) + edges = list({e for v in wood_verts for e in v.link_edges if v.is_valid}) if edges: bmesh.ops.bevel( bm, @@ -680,7 +681,7 @@

Source

for edge in bm.edges: edge.smooth = True if edge.is_manifold and len(edge.link_faces) == 2: - if edge.calc_face_angle() > math.radians(35.0): + if edge.calc_face_angle() > math.radians(70.0): edge.smooth = False for f in metal_faces: if f.is_valid: @@ -847,7 +848,7 @@

Source

low = build_cauldron_mesh("CauldronLow", bevel_offset=0.003, bevel_segments=2) high = build_cauldron_mesh("CauldronHigh", bevel_offset=0.003, bevel_segments=4) wood = principled("TripodWood", (0.38, 0.22, 0.09, 1.0), 0.0, 0.58) - metal = principled("CauldronIron", (0.22, 0.23, 0.24, 1.0), 1.0, 0.42) + metal = principled("CauldronIron", (0.10, 0.095, 0.09, 1.0), 0.92, 0.40) assign_slots(low, wood, metal) assign_slots(high, wood, metal) @@ -1045,10 +1046,10 @@

Source

cam_data = bpy.data.cameras.new("Cam") cam_data.lens = 50.0 cam = bpy.data.objects.new("Cam", cam_data) - cam.location = (1.55, -2.05, 1.35) + cam.location = (1.58, -2.18, 1.22) scene.collection.objects.link(cam) aim = bpy.data.objects.new("Aim", None) - aim.location = (0.0, 0.0, 0.38) + aim.location = (0.0, 0.0, 0.46) scene.collection.objects.link(aim) con = cam.constraints.new("TRACK_TO") con.target = aim diff --git a/docs/gallery/shipping-crate/index.html b/docs/gallery/shipping-crate/index.html index 41ae7b1..5bb0ce7 100644 --- a/docs/gallery/shipping-crate/index.html +++ b/docs/gallery/shipping-crate/index.html @@ -253,18 +253,18 @@

shipping-crate

shipping-crate render

Rendered headless by the example itself — click to zoom.

-
witnesses Recomputed: 552 tris, two materials, UVs in 0..1 with zero AABB overlap, outer AABB 1.256×0.856×0.748 m, LOD ratios in band (5.2 COLLAPSE more aggressive), convex collider 20 tris, non-empty glTF. --skip-decimate exits 9 on the LOD1 ratio budget.
+
witnesses Recomputed: 624 tris, two materials with 132 metal faces, UVs in 0..1 with zero AABB overlap, outer AABB 1.352×0.856×0.748 m, LOD ratios in band (5.2 COLLAPSE more aggressive), convex collider 36 tris, non-empty glTF. --skip-decimate exits 9 on the LOD1 ratio budget.
blender --background --python showcase/shipping-crate/shipping_crate.py --
-

A showcase piece, not an example. Procedural crate (beveled body, arrayed slats, metal corner brackets, two materials) then the shipped pipeline: unique-cell UVs, Cycles high-to-low normal bake, LOD chain, convex collider, Unity glTF export.

+

A showcase piece, not an example. Procedural crate (beveled body, arrayed slats, iron corner brackets and end handles, two materials) then the shipped pipeline: unique-cell UVs, Cycles high-to-low normal bake, LOD chain, convex collider, Unity glTF export.

It asserts budget conformance of the generated result. It does not witness an API contract. "It rendered without error" is not a check.

Composes skills mesh-editing-and-bmesh, bake-high-to-low, depsgraph-and-evaluated-data, engine-export-presets, and snippets bake_normal_high_to_low.py, setup_bake_target_image.py, lod_chain.py / decimate_to_budget.py, convex_hull_collider.py, export_preset_unity.py (helpers copied, not imported as a package).

Budgets

Declared as named constants; every gate recomputes from the mesh, materials, UVs, evaluated LOD, collider, or export file.

-

| Axis | Declared | Measured (4.5.11 / 5.1.2 / 5.2.1) | | --- | --- | --- | | Base triangles | 500–620 | 552 / 552 / 552 | | LOD1 ratio | 0.32–0.62 of base | 0.5000 / 0.5000 / 0.4239 | | LOD2 ratio | 0.10–0.35 of base | 0.2174 / 0.2174 / 0.1558 | | Materials | exactly 2 distinct | 2 | | UVs | in 0..1, AABB overlap ≤ 1e-5 | in range, overlap 0 | | Outer AABB | (1.256, 0.856, 0.748) m ± 0.01 | (1.2560, 0.8560, 0.7480), zmin 0 | | Collider tris | ≤ 48 | 20 | | Export | written, size > 0 | 42092 / 42092 / 42088 bytes |

+

| Axis | Declared | Measured (4.5.11 / 5.1.2 / 5.2.1) | | --- | --- | --- | | Base triangles | 580–680 | 624 / 624 / 624 | | LOD1 ratio | 0.32–0.62 of base | 0.5000 / 0.5000 / 0.4455 | | LOD2 ratio | 0.10–0.35 of base | 0.2179 / 0.2179 / 0.1571 | | Materials | exactly 2 distinct, ≥24 metal faces | 2 slots, 180 wood, 132 metal | | UVs | in 0..1, AABB overlap ≤ 1e-5 | in range, overlap 0 | | Outer AABB | (1.352, 0.856, 0.748) m ± 0.01 | (1.3520, 0.8560, 0.7480), zmin 0 | | Collider tris | ≤ 48 | 36 | | Export | written, size > 0 | 50148 / 50148 / 50140 bytes |

DECIMATE COLLAPSE triangle counts are not identical across series — 5.2.1 is more aggressive. The gate is a ratio band, not an exact count. Bake pixels are stochastic; the gate is has_data plus operator FINISHED, not byte-identity. Construction uses no RNG.

--skip-decimate skips the LOD DECIMATE stage so LOD1 ratio is 1.0 and exit 9 fires. That is the named budget the falsifier violates.

Run

@@ -274,7 +274,7 @@

Run

Smoke does not pass --output or --skip-decimate.

Exit codes

File-local. 9 is a valid check code. 10 is reserved for gallery_framing.check_framing on the --output path.

-

| Code | Meaning | | --- | --- | | 0 | Success | | 1 | Uncaught exception (FATAL wrapper) | | 2 | argparse / usage | | 3 | Mesh did not build / no UV layer | | 4 | Base triangle count outside range | | 5 | Material count ≠ 2 distinct slots | | 6 | UVs outside 0..1 | | 7 | UV AABB overlap above tolerance | | 8 | World AABB off declared outer size | | 9 | LOD ratio band (--skip-decimate lands here) | | 10 | Framing gate (render path only) | | 11 | Collider triangle count above ceiling | | 12 | Bake did not finish or image has no data | | 13 | Export file missing or empty | | 14 | --output produced no file |

+

| Code | Meaning | | --- | --- | | 0 | Success | | 1 | Uncaught exception (FATAL wrapper) | | 2 | argparse / usage | | 3 | Mesh did not build / no UV layer | | 4 | Base triangle count outside range | | 5 | Material count ≠ 2 distinct slots, or metal faces missing | | 6 | UVs outside 0..1 | | 7 | UV AABB overlap above tolerance | | 8 | World AABB off declared outer size | | 9 | LOD ratio band (--skip-decimate lands here) | | 10 | Framing gate (render path only) | | 11 | Collider triangle count above ceiling | | 12 | Bake did not finish or image has no data | | 13 | Export file missing or empty | | 14 | --output produced no file |

Source

@@ -322,22 +322,17 @@

Source

import gallery_framing # noqa: E402 # Body size (meters), sitting on z=0. Side slats sit proud on ±Y; lid -# slats sit proud on +Z. OUTER_SIZE is the closed-form AABB of that -# construction, compared against the measured world bbox — not assigned -# onto the mesh. +# slats sit proud on +Z. Iron handles sit proud on ±X. OUTER_SIZE is +# fitted after locking geometry against the measured world bbox. BODY_SIZE = (1.20, 0.80, 0.72) SLAT_THICK = 0.028 -OUTER_SIZE = ( - round(BODY_SIZE[0] + 2.0 * SLAT_THICK, 3), - round(BODY_SIZE[1] + 2.0 * SLAT_THICK, 3), - round(BODY_SIZE[2] + SLAT_THICK, 3), -) +OUTER_SIZE = (1.352, 0.856, 0.748) BBOX_TOL = 0.01 -# Measured 4.5.11 / 5.1.2 / 5.2.1 after locking geometry. DECIMATE -# COLLAPSE ratios diverge across series — bands, not exact counts. -BASE_TRIS_MIN = 500 -BASE_TRIS_MAX = 620 +# Measured after locking geometry. DECIMATE COLLAPSE ratios diverge +# across series — bands, not exact counts. +BASE_TRIS_MIN = 580 +BASE_TRIS_MAX = 680 LOD1_RATIO_MIN = 0.32 LOD1_RATIO_MAX = 0.62 LOD2_RATIO_MIN = 0.10 @@ -350,6 +345,7 @@

Source

COLLIDER_TRIS_MAX = 48 BAKE_RES = 256 CAGE_EXTRUSION = 0.08 +METAL_FACES_MIN = 24 WOOD_IDX = 0 METAL_IDX = 1 @@ -490,8 +486,8 @@

Source

WOOD_IDX, ) - plate = 0.13 - thick = 0.024 + plate = 0.18 + thick = 0.028 hx = sx / 2.0 + slat_h hy = sy / 2.0 + slat_h hz = sz @@ -519,6 +515,28 @@

Source

METAL_IDX, ) + handle_out = 0.038 + for sxn in (-1.0, 1.0): + hx_bar = sxn * (hx + handle_out) + add_cube( + bm, + (hx_bar, -0.12, sz * 0.48), + (0.020, 0.020, 0.12), + METAL_IDX, + ) + add_cube( + bm, + (hx_bar, 0.12, sz * 0.48), + (0.020, 0.020, 0.12), + METAL_IDX, + ) + add_cube( + bm, + (hx_bar, 0.0, sz * 0.54), + (0.020, 0.26, 0.020), + METAL_IDX, + ) + pack_uvs(bm) bmesh.ops.recalc_face_normals(bm, faces=list(bm.faces)) for face in bm.faces: @@ -549,9 +567,18 @@

Source

def assign_slots(obj, wood, metal): - obj.data.materials.clear() - obj.data.materials.append(wood) - obj.data.materials.append(metal) + # Do not materials.clear() — that resets every polygon's material_index + # to 0 and the iron brackets vanish into wood. + mats = obj.data.materials + if len(mats) == 0: + mats.append(wood) + mats.append(metal) + return + mats[0] = wood + if len(mats) == 1: + mats.append(metal) + else: + mats[1] = metal def world_bbox(obj): @@ -684,7 +711,7 @@

Source

low = build_crate_mesh("CrateLow", bevel_offset=0.028, bevel_segments=2) high = build_crate_mesh("CrateHigh", bevel_offset=0.028, bevel_segments=4) wood = principled("CrateWood", (0.48, 0.22, 0.07, 1.0), 0.0, 0.50) - metal = principled("CrateMetal", (0.58, 0.60, 0.64, 1.0), 1.0, 0.22) + metal = principled("CrateMetal", (0.14, 0.13, 0.12, 1.0), 0.86, 0.36) assign_slots(low, wood, metal) assign_slots(high, wood, metal) @@ -695,6 +722,10 @@

Source

mats = [s for s in low.data.materials if s is not None] nmat = len(mats) distinct_mats = len({id(s) for s in mats}) + idx_counts = {} + for poly in low.data.polygons: + idx_counts[poly.material_index] = idx_counts.get(poly.material_index, 0) + 1 + print(f"measured mat_index_counts={idx_counts}") u0, v0, u1, v1, overlap, nfaces = uv_stats(low.data) bb = world_bbox(low) size_x = bb[3] - bb[0] @@ -756,6 +787,11 @@

Source

f"material slots {nmat} distinct {distinct_mats} != {MATERIAL_COUNT}", 5, ), None, None, None, None, None + if idx_counts.get(METAL_IDX, 0) < METAL_FACES_MIN: + return fail( + f"metal faces {idx_counts.get(METAL_IDX, 0)} < {METAL_FACES_MIN}", + 5, + ), None, None, None, None, None if u0 < -UV_EPS or v0 < -UV_EPS or u1 > 1.0 + UV_EPS or v1 > 1.0 + UV_EPS: return fail( f"UVs outside 0..1: ({u0:.4f},{v0:.4f})-({u1:.4f},{v1:.4f})", @@ -819,8 +855,8 @@

Source

ob.hide_render = True ob.hide_viewport = True - low.rotation_euler.z = math.radians(-28.0) - low.rotation_euler.x = math.radians(2.0) + low.rotation_euler.z = math.radians(-48.0) + low.rotation_euler.x = math.radians(4.0) floor_me = bpy.data.meshes.new("Floor") bm = bmesh.new() @@ -866,10 +902,10 @@

Source

cam_data = bpy.data.cameras.new("Cam") cam_data.lens = 50.0 cam = bpy.data.objects.new("Cam", cam_data) - cam.location = (2.30, -3.20, 1.92) + cam.location = (2.25, -2.75, 1.38) scene.collection.objects.link(cam) aim = bpy.data.objects.new("Aim", None) - aim.location = (0.0, 0.0, OUTER_SIZE[2] / 2.0 + 0.06) + aim.location = (0.0, 0.0, 0.40) scene.collection.objects.link(aim) con = cam.constraints.new("TRACK_TO") con.target = aim diff --git a/docs/gallery/wall-torch/index.html b/docs/gallery/wall-torch/index.html index 489dfc7..8e07e51 100644 --- a/docs/gallery/wall-torch/index.html +++ b/docs/gallery/wall-torch/index.html @@ -4,18 +4,18 @@ wall-torch — Examples — Blender Developer Tools - + - + - +