component
GJM1555C1HR30WB01D - Murata
Public Unreviewedby John Lauer
MLCC 0.3 pF +/-0.05 pF, 50 V, C0G (high Q, GJM series), 0402 (1005 metric)
← Commit history
Add symbol, footprint, package STEP/GLB, LODs, models, verification, provenance and README
22 files changed
+2395−2
README.md+67−2component.kicad_mod+112component.kicad_sym+28lod/high.glblod/high.pnglod/low.glblod/low.pnglod/manifest.json+178lod/medium.glblod/medium.pnglod/super-low.glblod/super-low.pngmodels.json+125package-reference.glbpackage-reference.step+1123package.json+76provenance.json+61provenance/tools/gjm1555c1hr30wb01d-overlay-spec.json+39provenance/tools/lod.py+170provenance/tools/ortho.py+123provenance/tools/overlay_chip.py+146verification.json+147README.md+67−2@@ -1,3 +1,68 @@-# GJM1555C1HR30WB01D - Murata+# GJM1555C1HR30WB01D -MLCC 0.3 pF +/-0.05 pF, 50 V, C0G (high Q, GJM series), 0402 (1005 metric)+Murata GJM1555C1HR30WB01D: MLCC 0.3 pF +/-0.05 pF, 50 V, C0G (high Q, GJM series), 0402 (1005 metric).++[Manufacturer reference](https://www.murata.com/en-us/products/productdetail?partno=GJM1555C1HR30WB01%23)++| Field | Value |+|---|---|+| Manufacturer | Murata |+| Manufacturer part number | GJM1555C1HR30WB01D |+| Reference | https://www.murata.com/en-us/products/productdetail?partno=GJM1555C1HR30WB01%23 |+| Link check | HTTP 200 (2026-10-20) |+| Mouser | [81-GJM1555C1HR30WB1D](https://www.mouser.com/c/?q=GJM1555C1HR30WB01D) (69,425 in stock, factory lead time 70 days, on 2026-10-20) |+| DigiKey | [490-11248-2-ND](https://www.digikey.com/en/products/detail/murata-electronics/GJM1555C1HR30WB01D/2593245) (139,842 in stock on 2026-10-20) |+| LCSC / JLCPCB | [C76909](https://www.lcsc.com/product-detail/C76909.html) (176,529 in stock on 2026-10-20, JLCPCB extended part) |++## Pin functions++| Pin | Function |+|---|---|+| 1 | ~ |+| 2 | ~ |++Consult the manufacturer datasheet for ratings, operating conditions and assembly limits.++## Assets++The symbol is an original KiCad symbol made from the manufacturer pin list. The footprint (Capacitor_SMD:C_0402_1005Metric) and the STEP are KiCad standard-library package geometry (CC-BY-SA 4.0 with the KiCad library exception), not manufacturer-issued exact CAD; check them against the manufacturer land pattern. The GLB and the hero come from that STEP through the Adom STEP service.++This is a development catalog record, not manufacturing approval.++## 3D model++This page has one 3D model and it carries no marking: `package-reference.step` (board CAD) and+`package-reference.glb` (page viewer), plus four clean board-use levels of detail in `lod/`.+The Murata reference sheet specifies no marking for this part: none of its 29 pages has a marking section or mentions a part marking, and the p.2 dimension sketch shows a plain body (GJM1555C1HR30WB01-01A, all 29 pages searched; p.2), so the model shows a plain body, as the real part looks.+Adom's rule is that a 3D chip shows only the manufacturer's real part marking, so no part number is etched on the model.++::adom-models{src="/john/gjm1555c1hr30wb01d/render/models.json"}++## Model checked against the datasheet++The datasheet gives a dimension table with an unscaled sketch, so the model was rendered in+orthographic top, bottom, side and end views at a true 300 px/mm and laid over a drawing made at the+same scale from the printed table (nominal outline, tolerance limits, allowed terminal band). Every+dimension is inside the printed range: L 1.000 mm (datasheet 0.95 to 1.05); W 0.500 mm (datasheet 0.45 to 0.55); T/H 0.500 mm (datasheet 0.45 to 0.55); e (terminal band), top 0.200 mm (datasheet 0.15 to 0.35); e (terminal band), bottom 0.200 mm (datasheet 0.15 to 0.35). The model is Z-up, seated on z = 0, centred on the+footprint origin, long axis on X.++++Source: Murata reference sheet GJM1555C1HR30WB01-01A, p.2 'Type & Dimension', size code 1005M(0402): L 1.0 +/-0.05, W 0.5 +/-0.05, T 0.5 +/-0.05, e 0.15 to 0.35, g 0.3 min (mm). [Datasheet PDF](docs/gjm1555c1hr30wb01d-datasheet.pdf)++::adom-verified{src="/john/gjm1555c1hr30wb01d/render/verification.json"}++## Board levels of detail++Clean board-use GLBs (no footprint pads, outlines, labels or silkscreen; no marking) in four levels,+all in the same Z-up, metre, footprint-origin pose as the STEP. Previews are rendered from each GLB.++::adom-component-lod{src="/john/gjm1555c1hr30wb01d/render/lod/manifest.json"}++## Used in++- [Capacitive Encoder](https://wiki.adom.inc/john/capacitive-encoder) (an example application)++## Sources and license++Original symbol and text: MIT. KiCad library footprint and package files keep their upstream license (CC-BY-SA 4.0 with the KiCad library exception). provenance.json records sources and file hashes.
component.kicad_modadded+112@@ -0,0 +1,112 @@+(footprint "C_0402_1005Metric"+ (version 20260206)+ (generator "kicad-footprint-generator")+ (layer "F.Cu")+ (descr "Capacitor SMD 0402 (1005 Metric), square (rectangular) end terminal, IPC-7351 nominal, (Body size source: IPC-SM-782 page 76, https://www.pcb-3d.com/wordpress/wp-content/uploads/ipc-sm-782a_amendment_1_and_2.pdf)")+ (tags "capacitor")+ (property "Reference" "REF**"+ (at 0 -1.16 0)+ (layer "F.SilkS")+ (effects+ (font+ (size 1 1)+ (thickness 0.15)+ )+ )+ )+ (property "Value" "C_0402_1005Metric"+ (at 0 1.16 0)+ (layer "F.Fab")+ (effects+ (font+ (size 1 1)+ (thickness 0.15)+ )+ )+ )+ (property "KiLib_Generator" "SMD_2terminal_chip_molded"+ (at 0 0 0)+ (layer "F.SilkS")+ (hide yes)+ (effects+ (font+ (size 1 1)+ (thickness 0.15)+ )+ )+ )+ (attr smd)+ (duplicate_pad_numbers_are_jumpers no)+ (fp_line+ (start -0.107836 -0.36)+ (end 0.107836 -0.36)+ (stroke+ (width 0.12)+ (type solid)+ )+ (layer "F.SilkS")+ )+ (fp_line+ (start -0.107836 0.36)+ (end 0.107836 0.36)+ (stroke+ (width 0.12)+ (type solid)+ )+ (layer "F.SilkS")+ )+ (fp_rect+ (start -0.91 -0.46)+ (end 0.91 0.46)+ (stroke+ (width 0.05)+ (type solid)+ )+ (fill no)+ (layer "F.CrtYd")+ )+ (fp_rect+ (start -0.5 -0.25)+ (end 0.5 0.25)+ (stroke+ (width 0.1)+ (type solid)+ )+ (fill no)+ (layer "F.Fab")+ )+ (fp_text user "${REFERENCE}"+ (at 0 0 0)+ (layer "F.Fab")+ (effects+ (font+ (size 0.25 0.25)+ (thickness 0.04)+ )+ )+ )+ (pad "1" smd roundrect+ (at -0.48 0)+ (size 0.56 0.62)+ (layers "F.Cu" "F.Mask" "F.Paste")+ (roundrect_rratio 0.25)+ )+ (pad "2" smd roundrect+ (at 0.48 0)+ (size 0.56 0.62)+ (layers "F.Cu" "F.Mask" "F.Paste")+ (roundrect_rratio 0.25)+ )+ (embedded_fonts no)+ (model "${KICAD10_3DMODEL_DIR}/Capacitor_SMD.3dshapes/C_0402_1005Metric.step"+ (offset+ (xyz 0 0 0)+ )+ (scale+ (xyz 1 1 1)+ )+ (rotate+ (xyz 0 0 0)+ )+ )+)
component.kicad_symadded+28@@ -0,0 +1,28 @@+(kicad_symbol_lib+ (version 20241209)+ (generator "capencoder")+ (symbol "GJM1555C1HR30WB01D"+ (exclude_from_sim no)+ (in_bom yes)+ (on_board yes)+ (property "Reference" "C" (at 2.54 2.54 0) (effects (font (size 1.27 1.27))))+ (property "Value" "GJM1555C1HR30WB01D" (at 2.54 -2.54 0) (effects (font (size 1.27 1.27))))+ (property "Footprint" "Capacitor_SMD:C_0402_1005Metric" (at 0 0 0) (effects (font (size 1.27 1.27)) (hide yes)))+ (property "Datasheet" "https://www.murata.com/en-us/products/productdetail?partno=GJM1555C1HR30WB01%23" (at 0 0 0) (effects (font (size 1.27 1.27)) (hide yes)))+ (property "Description" "MLCC 0.3 pF +/-0.05 pF, 50 V, C0G (high Q, GJM series), 0402 (1005 metric)" (at 0 0 0) (effects (font (size 1.27 1.27)) (hide yes)))+ (property "Manufacturer" "Murata" (at 0 0 0) (effects (font (size 1.27 1.27)) (hide yes)))+ (property "MPN" "GJM1555C1HR30WB01D" (at 0 0 0) (effects (font (size 1.27 1.27)) (hide yes)))+ (property "Mouser" "81-GJM1555C1HR30WB1D" (at 0 0 0) (effects (font (size 1.27 1.27)) (hide yes)))+ (property "DigiKey" "490-11248-2-ND" (at 0 0 0) (effects (font (size 1.27 1.27)) (hide yes)))+ (property "LCSC" "C76909" (at 0 0 0) (effects (font (size 1.27 1.27)) (hide yes)))+ (symbol "GJM1555C1HR30WB01D_0_1"+ (polyline (pts (xy -2.032 -0.762) (xy 2.032 -0.762)) (stroke (width 0.508) (type default)) (fill (type none)))+ (polyline (pts (xy -2.032 0.762) (xy 2.032 0.762)) (stroke (width 0.508) (type default)) (fill (type none)))+ )+ (symbol "GJM1555C1HR30WB01D_1_1"+ (pin passive line (at 0 3.81 270) (length 3.048) (name "~" (effects (font (size 1.27 1.27)))) (number "1" (effects (font (size 1.27 1.27)))))+ (pin passive line (at 0 -3.81 90) (length 3.048) (name "~" (effects (font (size 1.27 1.27)))) (number "2" (effects (font (size 1.27 1.27)))))+ )+ (embedded_fonts no)+ )+)
lod/high.glbadded⋯ 1 unchanged line ⋯
lod/high.pngadded⋯ 1 unchanged line ⋯
lod/low.glbadded⋯ 1 unchanged line ⋯
lod/low.pngadded⋯ 1 unchanged line ⋯
lod/manifest.jsonadded+178@@ -0,0 +1,178 @@+{+ "schema": "adom/component-lod@1",+ "mpn": "GJM1555C1HR30WB01D",+ "upAxis": "Z",+ "units": "metres",+ "status": "candidate (AI-checked, not human-reviewed)",+ "purpose": "clean board-use component models: no footprint pads, outlines, labels or silkscreen; no marking (none per datasheet)",+ "source": {+ "path": "package-reference.step",+ "sha256": "03e44c4b2b727b8d4b6b1fd598cbd12dd5e614f1dfeefa96a92a07e3a3b312a2"+ },+ "sourceToDisplay": "uniform scale 0.001 (mm to m); no rotation, no translation; origin = footprint origin, seat z = 0",+ "generator": "lod.py (capencoder passives, OCCT via cadquery-ocp)",+ "removedHelpers": [],+ "levels": [+ {+ "level": "high",+ "path": "lod/high.glb",+ "sha256": "cfc12dcf071cac74d8f0d48f18c83e9f5e3fe9e354e08b007ddaff1c8667aefe",+ "sizeBytes": 68412,+ "decodedBufferBytes": 66504,+ "triangles": 1580,+ "primitives": 2,+ "bounds": {+ "min": [+ -0.0005,+ -0.00025,+ 0.0+ ],+ "max": [+ 0.0005,+ 0.00025,+ 0.0005+ ]+ },+ "approximation": {+ "method": "OCCT BRepMesh_IncrementalMesh",+ "linearDeflectionMm": 0.0005,+ "angularDeflectionRad": 0.1+ },+ "detailVisibility": {+ "virtualMpn": false,+ "note": "no marking: the datasheet specifies none"+ },+ "review": "Candidate: rendered preview checked by AI (silhouette, terminals, seat z=0); not human-reviewed",+ "preview": {+ "path": "lod/high.png",+ "sha256": "5a82b4e7293806d37477e6ded56b7c038ead8ba9bcd20e913707190ed7e52a81",+ "sizeBytes": 8646,+ "width": 400,+ "height": 300,+ "view": "iso",+ "sourceLevelSha256": "cfc12dcf071cac74d8f0d48f18c83e9f5e3fe9e354e08b007ddaff1c8667aefe"+ }+ },+ {+ "level": "medium",+ "path": "lod/medium.glb",+ "sha256": "8337dbe09269205e8498af23307843d61807e4efb6ad0a4540bf23aacb10066c",+ "sizeBytes": 22040,+ "decodedBufferBytes": 20136,+ "triangles": 476,+ "primitives": 2,+ "bounds": {+ "min": [+ -0.0005,+ -0.00025,+ 0.0+ ],+ "max": [+ 0.0005,+ 0.00025,+ 0.0005+ ]+ },+ "approximation": {+ "method": "OCCT BRepMesh_IncrementalMesh",+ "linearDeflectionMm": 0.004,+ "angularDeflectionRad": 0.35+ },+ "detailVisibility": {+ "virtualMpn": false,+ "note": "no marking: the datasheet specifies none"+ },+ "review": "Candidate: rendered preview checked by AI (silhouette, terminals, seat z=0); not human-reviewed",+ "preview": {+ "path": "lod/medium.png",+ "sha256": "94fb3d11951575a3e400b4c374cc637fb360a053e5f31ac8e9256923bc9417ef",+ "sizeBytes": 8520,+ "width": 400,+ "height": 300,+ "view": "iso",+ "sourceLevelSha256": "8337dbe09269205e8498af23307843d61807e4efb6ad0a4540bf23aacb10066c"+ }+ },+ {+ "level": "low",+ "path": "lod/low.glb",+ "sha256": "5e8247c15089582368690f8669cb8e0c38de23701263144123932984269d3ab4",+ "sizeBytes": 11952,+ "decodedBufferBytes": 10056,+ "triangles": 236,+ "primitives": 2,+ "bounds": {+ "min": [+ -0.0005,+ -0.00025,+ 0.0+ ],+ "max": [+ 0.0005,+ 0.00025,+ 0.0005+ ]+ },+ "approximation": {+ "method": "OCCT BRepMesh_IncrementalMesh",+ "linearDeflectionMm": 0.02,+ "angularDeflectionRad": 0.9+ },+ "detailVisibility": {+ "virtualMpn": false,+ "note": "no marking: the datasheet specifies none"+ },+ "review": "Candidate: rendered preview checked by AI (silhouette, terminals, seat z=0); not human-reviewed",+ "preview": {+ "path": "lod/low.png",+ "sha256": "f6faafada8e41927fd1d00c97d5037be6faf3aec88bb750339014e5ef6c87492",+ "sizeBytes": 8597,+ "width": 400,+ "height": 300,+ "view": "iso",+ "sourceLevelSha256": "5e8247c15089582368690f8669cb8e0c38de23701263144123932984269d3ab4"+ }+ },+ {+ "level": "super-low",+ "path": "lod/super-low.glb",+ "sha256": "c14ddac634f713bdfde9686afc1dc943f76d64a7d9ff21199a51d9d769055e70",+ "sizeBytes": 3828,+ "decodedBufferBytes": 1944,+ "triangles": 36,+ "primitives": 2,+ "bounds": {+ "min": [+ -0.0005,+ -0.00025,+ 0.0+ ],+ "max": [+ 0.0005,+ 0.00025,+ 0.0005+ ]+ },+ "approximation": {+ "method": "per-material bounding boxes split at the part centre (terminals, body, overcoat)"+ },+ "detailVisibility": {+ "virtualMpn": false,+ "note": "no marking: the datasheet specifies none"+ },+ "review": "Candidate: rendered preview checked by AI (silhouette, terminals, seat z=0); not human-reviewed",+ "preview": {+ "path": "lod/super-low.png",+ "sha256": "e9c1f448878cdfb09bb08dd62222cb224dab0177841ff7f459af55a1eca73eb3",+ "sizeBytes": 7245,+ "width": 400,+ "height": 300,+ "view": "iso",+ "sourceLevelSha256": "c14ddac634f713bdfde9686afc1dc943f76d64a7d9ff21199a51d9d769055e70"+ }+ }+ ],+ "hints": [+ "All four levels share pose and units; super-low is boxes per material group, chosen for board overviews."+ ]+}
lod/medium.glbadded⋯ 1 unchanged line ⋯
lod/medium.pngadded⋯ 1 unchanged line ⋯
lod/super-low.glbadded⋯ 1 unchanged line ⋯
lod/super-low.pngadded⋯ 1 unchanged line ⋯
models.jsonadded+125@@ -0,0 +1,125 @@+{+ "schema": "adom/models@1",+ "part": "GJM1555C1HR30WB01D",+ "models": [+ {+ "path": "package-reference.step",+ "format": "step",+ "title": "Package model (STEP)",+ "status": "current",+ "slot": "step",+ "variant": "plain",+ "role": "derived",+ "use": [+ "board-cad"+ ],+ "marking": null,+ "unique": "The board CAD model: KiCad library package geometry, checked against the datasheet table, no marking (the part has none)",+ "source": "KiCad packages3D Capacitor_SMD.3dshapes/C_0402_1005Metric.step (CC-BY-SA 4.0 with exception)",+ "sha256": "03e44c4b2b727b8d4b6b1fd598cbd12dd5e614f1dfeefa96a92a07e3a3b312a2",+ "git_blob": "a5725e143e2db0a0a1e499bd95c9c9da94a4f82b",+ "bytes": 43502,+ "thumb": "docs/models/package-reference-step.png"+ },+ {+ "path": "package-reference.glb",+ "format": "glb",+ "title": "Package model (GLB)",+ "status": "current",+ "slot": "model_3d",+ "variant": "plain",+ "role": "derived",+ "use": [+ "render"+ ],+ "marking": null,+ "derived_from": "package-reference.step",+ "unique": "The same model for the page viewer (step2glb)",+ "source": "KiCad packages3D Capacitor_SMD.3dshapes/C_0402_1005Metric.step (CC-BY-SA 4.0 with exception)",+ "sha256": "100935c5c0d6f20a6c9bdfb6386f874dc8a4457bf0e4f3ace69f1ab090100773",+ "git_blob": "be1969cc5b4bde9fe0ba1de99674dbb12e76fd76",+ "bytes": 15944+ },+ {+ "path": "lod/high.glb",+ "format": "glb",+ "title": "Board LOD, high",+ "status": "current",+ "variant": "lod",+ "role": "derived",+ "use": [+ "board-insertion",+ "render"+ ],+ "marking": null,+ "derived_from": "package-reference.step",+ "unique": "high detail for board and scaffold viewers: 1580 triangles, 2 primitives",+ "thumb": "lod/high.png",+ "source": "KiCad packages3D Capacitor_SMD.3dshapes/C_0402_1005Metric.step (CC-BY-SA 4.0 with exception)",+ "sha256": "cfc12dcf071cac74d8f0d48f18c83e9f5e3fe9e354e08b007ddaff1c8667aefe",+ "git_blob": "b181e0c9b444c20d8eee1634609feafd51968652",+ "bytes": 68412+ },+ {+ "path": "lod/medium.glb",+ "format": "glb",+ "title": "Board LOD, medium",+ "status": "current",+ "variant": "lod",+ "role": "derived",+ "use": [+ "board-insertion",+ "render"+ ],+ "marking": null,+ "derived_from": "package-reference.step",+ "unique": "medium detail for board and scaffold viewers: 476 triangles, 2 primitives",+ "thumb": "lod/medium.png",+ "source": "KiCad packages3D Capacitor_SMD.3dshapes/C_0402_1005Metric.step (CC-BY-SA 4.0 with exception)",+ "sha256": "8337dbe09269205e8498af23307843d61807e4efb6ad0a4540bf23aacb10066c",+ "git_blob": "5a6752134f5e07bb7b4d0096533e04341b8cd34f",+ "bytes": 22040+ },+ {+ "path": "lod/low.glb",+ "format": "glb",+ "title": "Board LOD, low",+ "status": "current",+ "variant": "lod",+ "role": "derived",+ "use": [+ "board-insertion",+ "render"+ ],+ "marking": null,+ "derived_from": "package-reference.step",+ "unique": "low detail for board and scaffold viewers: 236 triangles, 2 primitives",+ "thumb": "lod/low.png",+ "source": "KiCad packages3D Capacitor_SMD.3dshapes/C_0402_1005Metric.step (CC-BY-SA 4.0 with exception)",+ "sha256": "5e8247c15089582368690f8669cb8e0c38de23701263144123932984269d3ab4",+ "git_blob": "34073ae4014a32aac87e6c8dce18a91c78c2cb29",+ "bytes": 11952+ },+ {+ "path": "lod/super-low.glb",+ "format": "glb",+ "title": "Board LOD, super-low",+ "status": "current",+ "variant": "lod",+ "role": "derived",+ "use": [+ "board-insertion",+ "render"+ ],+ "marking": null,+ "derived_from": "package-reference.step",+ "unique": "super-low detail for board and scaffold viewers: 36 triangles, 2 primitives",+ "thumb": "lod/super-low.png",+ "source": "KiCad packages3D Capacitor_SMD.3dshapes/C_0402_1005Metric.step (CC-BY-SA 4.0 with exception)",+ "sha256": "c14ddac634f713bdfde9686afc1dc943f76d64a7d9ff21199a51d9d769055e70",+ "git_blob": "229c4143b2dcb252a05f0f7977d79866f610c5a7",+ "bytes": 3828+ }+ ],+ "updated": "2026-10-20"+}
package-reference.glbadded⋯ 1 unchanged line ⋯
package-reference.stepadded+1123@@ -0,0 +1,1123 @@+ISO-10303-21;+HEADER;+/* C_0402_1005Metric.step 3D STEP model for use in ECAD systems+ * Copyright (C) 2017, kicad StepUp+ * + * This work is licensed under the [Creative Commons CC-BY-SA 4.0 License](https://creativecommons.org/licenses/by-sa/4.0/legalcode), + * with the following exception:+ * To the extent that the creation of electronic designs that use 'Licensed Material' can be considered to be 'Adapted Material', + * then the copyright holder waives article 3 of the license with respect to these designs and any generated files which use data provided + * as part of the 'Licensed Material'.+ * You are free to use the library data in your own projects without the obligation to share your project files under this or any other license agreement.+ * However, if you wish to redistribute these libraries, or parts thereof (including in modified form) as a collection then the exception above does not apply. + * Please refer to https://github.com/KiCad/kicad-packages3D/blob/master/LICENSE.md for further clarification of the exception.+ * Disclaimer of Warranties and Limitation of Liability.+ * These libraries are provided in the hope that they will be useful, but are provided without warranty of any kind, express or implied.+ * *USE 3D CAD DATA AT YOUR OWN RISK*+ * *DO NOT RELY UPON ANY INFORMATION FOUND HERE WITHOUT INDEPENDENT VERIFICATION.*+ * + */++FILE_DESCRIPTION(+/* description */ ('model of C_0402_1005Metric'),+/* implementation_level */ '2;1');++FILE_NAME(+/* name */ 'C_0402_1005Metric.step',+/* time_stamp */ '2017-12-10T01:08:42',+/* author */ ('kicad StepUp','ksu'),+/* organization */ ('FreeCAD'),+/* preprocessor_version */ 'OCC',+/* originating_system */ 'kicad StepUp',+/* authorisation */ '');++FILE_SCHEMA(('AUTOMOTIVE_DESIGN { 1 0 10303 214 1 1 1 1 }'));+ENDSEC;++DATA;+#1 = APPLICATION_PROTOCOL_DEFINITION('international standard',+'automotive_design',2000,#2);+#2 = APPLICATION_CONTEXT(+'core data for automotive mechanical design processes');+#3 = SHAPE_DEFINITION_REPRESENTATION(#4,#10);+#4 = PRODUCT_DEFINITION_SHAPE('','',#5);+#5 = PRODUCT_DEFINITION('design','',#6,#9);+#6 = PRODUCT_DEFINITION_FORMATION('','',#7);+#7 = PRODUCT('C_0402_1005Metric','C_0402_1005Metric','',(#8));+#8 = PRODUCT_CONTEXT('',#2,'mechanical');+#9 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design');+#10 = ADVANCED_BREP_SHAPE_REPRESENTATION('',(#11,#15),#869);+#11 = AXIS2_PLACEMENT_3D('',#12,#13,#14);+#12 = CARTESIAN_POINT('',(0.,0.,0.));+#13 = DIRECTION('',(0.,0.,1.));+#14 = DIRECTION('',(1.,0.,-0.));+#15 = MANIFOLD_SOLID_BREP('',#16);+#16 = CLOSED_SHELL('',(#17,#93,#124,#149,#174,#198,#222,#247,#272,#289,+#375,#407,#431,#456,#480,#505,#529,#554,#571,#657,#688,#713,#738,+#762,#786,#811,#836,#853));+#17 = ADVANCED_FACE('',(#18),#88,.F.);+#18 = FACE_BOUND('',#19,.F.);+#19 = EDGE_LOOP('',(#20,#30,#39,#47,#56,#64,#73,#81));+#20 = ORIENTED_EDGE('',*,*,#21,.F.);+#21 = EDGE_CURVE('',#22,#24,#26,.T.);+#22 = VERTEX_POINT('',#23);+#23 = CARTESIAN_POINT('',(-0.5,-0.25,2.E-02));+#24 = VERTEX_POINT('',#25);+#25 = CARTESIAN_POINT('',(-0.5,-0.25,0.48));+#26 = LINE('',#27,#28);+#27 = CARTESIAN_POINT('',(-0.5,-0.25,0.));+#28 = VECTOR('',#29,1.);+#29 = DIRECTION('',(0.,0.,1.));+#30 = ORIENTED_EDGE('',*,*,#31,.T.);+#31 = EDGE_CURVE('',#22,#32,#34,.T.);+#32 = VERTEX_POINT('',#33);+#33 = CARTESIAN_POINT('',(-0.5,-0.23,0.));+#34 = CIRCLE('',#35,2.E-02);+#35 = AXIS2_PLACEMENT_3D('',#36,#37,#38);+#36 = CARTESIAN_POINT('',(-0.5,-0.23,2.E-02));+#37 = DIRECTION('',(1.,0.,-0.));+#38 = DIRECTION('',(0.,0.,1.));+#39 = ORIENTED_EDGE('',*,*,#40,.T.);+#40 = EDGE_CURVE('',#32,#41,#43,.T.);+#41 = VERTEX_POINT('',#42);+#42 = CARTESIAN_POINT('',(-0.5,0.23,0.));+#43 = LINE('',#44,#45);+#44 = CARTESIAN_POINT('',(-0.5,-0.25,0.));+#45 = VECTOR('',#46,1.);+#46 = DIRECTION('',(0.,1.,0.));+#47 = ORIENTED_EDGE('',*,*,#48,.F.);+#48 = EDGE_CURVE('',#49,#41,#51,.T.);+#49 = VERTEX_POINT('',#50);+#50 = CARTESIAN_POINT('',(-0.5,0.25,2.E-02));+#51 = CIRCLE('',#52,2.E-02);+#52 = AXIS2_PLACEMENT_3D('',#53,#54,#55);+#53 = CARTESIAN_POINT('',(-0.5,0.23,2.E-02));+#54 = DIRECTION('',(-1.,0.,0.));+#55 = DIRECTION('',(0.,0.,1.));+#56 = ORIENTED_EDGE('',*,*,#57,.T.);+#57 = EDGE_CURVE('',#49,#58,#60,.T.);+#58 = VERTEX_POINT('',#59);+#59 = CARTESIAN_POINT('',(-0.5,0.25,0.48));+#60 = LINE('',#61,#62);+#61 = CARTESIAN_POINT('',(-0.5,0.25,0.));+#62 = VECTOR('',#63,1.);+#63 = DIRECTION('',(0.,0.,1.));+#64 = ORIENTED_EDGE('',*,*,#65,.T.);+#65 = EDGE_CURVE('',#58,#66,#68,.T.);+#66 = VERTEX_POINT('',#67);+#67 = CARTESIAN_POINT('',(-0.5,0.23,0.5));+#68 = CIRCLE('',#69,2.E-02);+#69 = AXIS2_PLACEMENT_3D('',#70,#71,#72);+#70 = CARTESIAN_POINT('',(-0.5,0.23,0.48));+#71 = DIRECTION('',(1.,0.,-0.));+#72 = DIRECTION('',(0.,0.,1.));+#73 = ORIENTED_EDGE('',*,*,#74,.F.);+#74 = EDGE_CURVE('',#75,#66,#77,.T.);+#75 = VERTEX_POINT('',#76);+#76 = CARTESIAN_POINT('',(-0.5,-0.23,0.5));+#77 = LINE('',#78,#79);+#78 = CARTESIAN_POINT('',(-0.5,-0.25,0.5));+#79 = VECTOR('',#80,1.);+#80 = DIRECTION('',(0.,1.,0.));+#81 = ORIENTED_EDGE('',*,*,#82,.F.);+#82 = EDGE_CURVE('',#24,#75,#83,.T.);+#83 = CIRCLE('',#84,2.E-02);+#84 = AXIS2_PLACEMENT_3D('',#85,#86,#87);+#85 = CARTESIAN_POINT('',(-0.5,-0.23,0.48));+#86 = DIRECTION('',(-1.,0.,0.));+#87 = DIRECTION('',(0.,0.,1.));+#88 = PLANE('',#89);+#89 = AXIS2_PLACEMENT_3D('',#90,#91,#92);+#90 = CARTESIAN_POINT('',(-0.5,-0.25,0.));+#91 = DIRECTION('',(1.,0.,0.));+#92 = DIRECTION('',(0.,0.,1.));+#93 = ADVANCED_FACE('',(#94),#119,.F.);+#94 = FACE_BOUND('',#95,.F.);+#95 = EDGE_LOOP('',(#96,#106,#112,#113));+#96 = ORIENTED_EDGE('',*,*,#97,.F.);+#97 = EDGE_CURVE('',#98,#100,#102,.T.);+#98 = VERTEX_POINT('',#99);+#99 = CARTESIAN_POINT('',(-0.3,-0.25,2.E-02));+#100 = VERTEX_POINT('',#101);+#101 = CARTESIAN_POINT('',(-0.3,-0.25,0.48));+#102 = LINE('',#103,#104);+#103 = CARTESIAN_POINT('',(-0.3,-0.25,0.));+#104 = VECTOR('',#105,1.);+#105 = DIRECTION('',(0.,0.,1.));+#106 = ORIENTED_EDGE('',*,*,#107,.F.);+#107 = EDGE_CURVE('',#22,#98,#108,.T.);+#108 = LINE('',#109,#110);+#109 = CARTESIAN_POINT('',(-0.5,-0.25,2.E-02));+#110 = VECTOR('',#111,1.);+#111 = DIRECTION('',(1.,0.,0.));+#112 = ORIENTED_EDGE('',*,*,#21,.T.);+#113 = ORIENTED_EDGE('',*,*,#114,.T.);+#114 = EDGE_CURVE('',#24,#100,#115,.T.);+#115 = LINE('',#116,#117);+#116 = CARTESIAN_POINT('',(-0.5,-0.25,0.48));+#117 = VECTOR('',#118,1.);+#118 = DIRECTION('',(1.,0.,0.));+#119 = PLANE('',#120);+#120 = AXIS2_PLACEMENT_3D('',#121,#122,#123);+#121 = CARTESIAN_POINT('',(-0.5,-0.25,0.));+#122 = DIRECTION('',(0.,1.,0.));+#123 = DIRECTION('',(0.,0.,1.));+#124 = ADVANCED_FACE('',(#125),#144,.T.);+#125 = FACE_BOUND('',#126,.T.);+#126 = EDGE_LOOP('',(#127,#128,#136,#143));+#127 = ORIENTED_EDGE('',*,*,#31,.T.);+#128 = ORIENTED_EDGE('',*,*,#129,.T.);+#129 = EDGE_CURVE('',#32,#130,#132,.T.);+#130 = VERTEX_POINT('',#131);+#131 = CARTESIAN_POINT('',(-0.3,-0.23,0.));+#132 = LINE('',#133,#134);+#133 = CARTESIAN_POINT('',(-0.5,-0.23,0.));+#134 = VECTOR('',#135,1.);+#135 = DIRECTION('',(1.,0.,0.));+#136 = ORIENTED_EDGE('',*,*,#137,.F.);+#137 = EDGE_CURVE('',#98,#130,#138,.T.);+#138 = CIRCLE('',#139,2.E-02);+#139 = AXIS2_PLACEMENT_3D('',#140,#141,#142);+#140 = CARTESIAN_POINT('',(-0.3,-0.23,2.E-02));+#141 = DIRECTION('',(1.,0.,-0.));+#142 = DIRECTION('',(0.,0.,1.));+#143 = ORIENTED_EDGE('',*,*,#107,.F.);+#144 = CYLINDRICAL_SURFACE('',#145,2.E-02);+#145 = AXIS2_PLACEMENT_3D('',#146,#147,#148);+#146 = CARTESIAN_POINT('',(-0.5,-0.23,2.E-02));+#147 = DIRECTION('',(1.,0.,0.));+#148 = DIRECTION('',(0.,-1.,0.));+#149 = ADVANCED_FACE('',(#150),#169,.T.);+#150 = FACE_BOUND('',#151,.F.);+#151 = EDGE_LOOP('',(#152,#153,#161,#168));+#152 = ORIENTED_EDGE('',*,*,#82,.T.);+#153 = ORIENTED_EDGE('',*,*,#154,.T.);+#154 = EDGE_CURVE('',#75,#155,#157,.T.);+#155 = VERTEX_POINT('',#156);+#156 = CARTESIAN_POINT('',(-0.3,-0.23,0.5));+#157 = LINE('',#158,#159);+#158 = CARTESIAN_POINT('',(-0.5,-0.23,0.5));+#159 = VECTOR('',#160,1.);+#160 = DIRECTION('',(1.,0.,0.));+#161 = ORIENTED_EDGE('',*,*,#162,.F.);+#162 = EDGE_CURVE('',#100,#155,#163,.T.);+#163 = CIRCLE('',#164,2.E-02);+#164 = AXIS2_PLACEMENT_3D('',#165,#166,#167);+#165 = CARTESIAN_POINT('',(-0.3,-0.23,0.48));+#166 = DIRECTION('',(-1.,0.,0.));+#167 = DIRECTION('',(0.,0.,1.));+#168 = ORIENTED_EDGE('',*,*,#114,.F.);+#169 = CYLINDRICAL_SURFACE('',#170,2.E-02);+#170 = AXIS2_PLACEMENT_3D('',#171,#172,#173);+#171 = CARTESIAN_POINT('',(-0.5,-0.23,0.48));+#172 = DIRECTION('',(1.,0.,0.));+#173 = DIRECTION('',(0.,-1.,0.));+#174 = ADVANCED_FACE('',(#175),#193,.F.);+#175 = FACE_BOUND('',#176,.F.);+#176 = EDGE_LOOP('',(#177,#178,#179,#187));+#177 = ORIENTED_EDGE('',*,*,#40,.F.);+#178 = ORIENTED_EDGE('',*,*,#129,.T.);+#179 = ORIENTED_EDGE('',*,*,#180,.T.);+#180 = EDGE_CURVE('',#130,#181,#183,.T.);+#181 = VERTEX_POINT('',#182);+#182 = CARTESIAN_POINT('',(-0.3,0.23,0.));+#183 = LINE('',#184,#185);+#184 = CARTESIAN_POINT('',(-0.3,-0.25,0.));+#185 = VECTOR('',#186,1.);+#186 = DIRECTION('',(0.,1.,0.));+#187 = ORIENTED_EDGE('',*,*,#188,.F.);+#188 = EDGE_CURVE('',#41,#181,#189,.T.);+#189 = LINE('',#190,#191);+#190 = CARTESIAN_POINT('',(-0.5,0.23,0.));+#191 = VECTOR('',#192,1.);+#192 = DIRECTION('',(1.,0.,0.));+#193 = PLANE('',#194);+#194 = AXIS2_PLACEMENT_3D('',#195,#196,#197);+#195 = CARTESIAN_POINT('',(-0.5,-0.25,0.));+#196 = DIRECTION('',(0.,0.,1.));+#197 = DIRECTION('',(1.,0.,0.));+#198 = ADVANCED_FACE('',(#199),#217,.T.);+#199 = FACE_BOUND('',#200,.T.);+#200 = EDGE_LOOP('',(#201,#202,#203,#211));+#201 = ORIENTED_EDGE('',*,*,#74,.F.);+#202 = ORIENTED_EDGE('',*,*,#154,.T.);+#203 = ORIENTED_EDGE('',*,*,#204,.T.);+#204 = EDGE_CURVE('',#155,#205,#207,.T.);+#205 = VERTEX_POINT('',#206);+#206 = CARTESIAN_POINT('',(-0.3,0.23,0.5));+#207 = LINE('',#208,#209);+#208 = CARTESIAN_POINT('',(-0.3,-0.25,0.5));+#209 = VECTOR('',#210,1.);+#210 = DIRECTION('',(0.,1.,0.));+#211 = ORIENTED_EDGE('',*,*,#212,.F.);+#212 = EDGE_CURVE('',#66,#205,#213,.T.);+#213 = LINE('',#214,#215);+#214 = CARTESIAN_POINT('',(-0.5,0.23,0.5));+#215 = VECTOR('',#216,1.);+#216 = DIRECTION('',(1.,0.,0.));+#217 = PLANE('',#218);+#218 = AXIS2_PLACEMENT_3D('',#219,#220,#221);+#219 = CARTESIAN_POINT('',(-0.5,-0.25,0.5));+#220 = DIRECTION('',(0.,0.,1.));+#221 = DIRECTION('',(1.,0.,0.));+#222 = ADVANCED_FACE('',(#223),#242,.T.);+#223 = FACE_BOUND('',#224,.F.);+#224 = EDGE_LOOP('',(#225,#226,#227,#236));+#225 = ORIENTED_EDGE('',*,*,#48,.T.);+#226 = ORIENTED_EDGE('',*,*,#188,.T.);+#227 = ORIENTED_EDGE('',*,*,#228,.F.);+#228 = EDGE_CURVE('',#229,#181,#231,.T.);+#229 = VERTEX_POINT('',#230);+#230 = CARTESIAN_POINT('',(-0.3,0.25,2.E-02));+#231 = CIRCLE('',#232,2.E-02);+#232 = AXIS2_PLACEMENT_3D('',#233,#234,#235);+#233 = CARTESIAN_POINT('',(-0.3,0.23,2.E-02));+#234 = DIRECTION('',(-1.,0.,0.));+#235 = DIRECTION('',(0.,0.,1.));+#236 = ORIENTED_EDGE('',*,*,#237,.F.);+#237 = EDGE_CURVE('',#49,#229,#238,.T.);+#238 = LINE('',#239,#240);+#239 = CARTESIAN_POINT('',(-0.5,0.25,2.E-02));+#240 = VECTOR('',#241,1.);+#241 = DIRECTION('',(1.,0.,0.));+#242 = CYLINDRICAL_SURFACE('',#243,2.E-02);+#243 = AXIS2_PLACEMENT_3D('',#244,#245,#246);+#244 = CARTESIAN_POINT('',(-0.5,0.23,2.E-02));+#245 = DIRECTION('',(1.,0.,0.));+#246 = DIRECTION('',(0.,1.,0.));+#247 = ADVANCED_FACE('',(#248),#267,.T.);+#248 = FACE_BOUND('',#249,.T.);+#249 = EDGE_LOOP('',(#250,#251,#252,#261));+#250 = ORIENTED_EDGE('',*,*,#65,.T.);+#251 = ORIENTED_EDGE('',*,*,#212,.T.);+#252 = ORIENTED_EDGE('',*,*,#253,.F.);+#253 = EDGE_CURVE('',#254,#205,#256,.T.);+#254 = VERTEX_POINT('',#255);+#255 = CARTESIAN_POINT('',(-0.3,0.25,0.48));+#256 = CIRCLE('',#257,2.E-02);+#257 = AXIS2_PLACEMENT_3D('',#258,#259,#260);+#258 = CARTESIAN_POINT('',(-0.3,0.23,0.48));+#259 = DIRECTION('',(1.,0.,-0.));+#260 = DIRECTION('',(0.,0.,1.));+#261 = ORIENTED_EDGE('',*,*,#262,.F.);+#262 = EDGE_CURVE('',#58,#254,#263,.T.);+#263 = LINE('',#264,#265);+#264 = CARTESIAN_POINT('',(-0.5,0.25,0.48));+#265 = VECTOR('',#266,1.);+#266 = DIRECTION('',(1.,0.,0.));+#267 = CYLINDRICAL_SURFACE('',#268,2.E-02);+#268 = AXIS2_PLACEMENT_3D('',#269,#270,#271);+#269 = CARTESIAN_POINT('',(-0.5,0.23,0.48));+#270 = DIRECTION('',(1.,0.,0.));+#271 = DIRECTION('',(0.,1.,0.));+#272 = ADVANCED_FACE('',(#273),#284,.T.);+#273 = FACE_BOUND('',#274,.T.);+#274 = EDGE_LOOP('',(#275,#281,#282,#283));+#275 = ORIENTED_EDGE('',*,*,#276,.F.);+#276 = EDGE_CURVE('',#229,#254,#277,.T.);+#277 = LINE('',#278,#279);+#278 = CARTESIAN_POINT('',(-0.3,0.25,0.));+#279 = VECTOR('',#280,1.);+#280 = DIRECTION('',(0.,0.,1.));+#281 = ORIENTED_EDGE('',*,*,#237,.F.);+#282 = ORIENTED_EDGE('',*,*,#57,.T.);+#283 = ORIENTED_EDGE('',*,*,#262,.T.);+#284 = PLANE('',#285);+#285 = AXIS2_PLACEMENT_3D('',#286,#287,#288);+#286 = CARTESIAN_POINT('',(-0.5,0.25,0.));+#287 = DIRECTION('',(0.,1.,0.));+#288 = DIRECTION('',(0.,0.,1.));+#289 = ADVANCED_FACE('',(#290,#300),#370,.T.);+#290 = FACE_BOUND('',#291,.T.);+#291 = EDGE_LOOP('',(#292,#293,#294,#295,#296,#297,#298,#299));+#292 = ORIENTED_EDGE('',*,*,#97,.F.);+#293 = ORIENTED_EDGE('',*,*,#137,.T.);+#294 = ORIENTED_EDGE('',*,*,#180,.T.);+#295 = ORIENTED_EDGE('',*,*,#228,.F.);+#296 = ORIENTED_EDGE('',*,*,#276,.T.);+#297 = ORIENTED_EDGE('',*,*,#253,.T.);+#298 = ORIENTED_EDGE('',*,*,#204,.F.);+#299 = ORIENTED_EDGE('',*,*,#162,.F.);+#300 = FACE_BOUND('',#301,.T.);+#301 = EDGE_LOOP('',(#302,#313,#321,#330,#338,#347,#355,#364));+#302 = ORIENTED_EDGE('',*,*,#303,.F.);+#303 = EDGE_CURVE('',#304,#306,#308,.T.);+#304 = VERTEX_POINT('',#305);+#305 = CARTESIAN_POINT('',(-0.3,-0.23,4.E-02));+#306 = VERTEX_POINT('',#307);+#307 = CARTESIAN_POINT('',(-0.3,-0.21,2.E-02));+#308 = CIRCLE('',#309,2.E-02);+#309 = AXIS2_PLACEMENT_3D('',#310,#311,#312);+#310 = CARTESIAN_POINT('',(-0.3,-0.21,4.E-02));+#311 = DIRECTION('',(1.,0.,-0.));+#312 = DIRECTION('',(0.,0.,1.));+#313 = ORIENTED_EDGE('',*,*,#314,.T.);+#314 = EDGE_CURVE('',#304,#315,#317,.T.);+#315 = VERTEX_POINT('',#316);+#316 = CARTESIAN_POINT('',(-0.3,-0.23,0.46));+#317 = LINE('',#318,#319);+#318 = CARTESIAN_POINT('',(-0.3,-0.23,2.E-02));+#319 = VECTOR('',#320,1.);+#320 = DIRECTION('',(0.,0.,1.));+#321 = ORIENTED_EDGE('',*,*,#322,.T.);+#322 = EDGE_CURVE('',#315,#323,#325,.T.);+#323 = VERTEX_POINT('',#324);+#324 = CARTESIAN_POINT('',(-0.3,-0.21,0.48));+#325 = CIRCLE('',#326,2.E-02);+#326 = AXIS2_PLACEMENT_3D('',#327,#328,#329);+#327 = CARTESIAN_POINT('',(-0.3,-0.21,0.46));+#328 = DIRECTION('',(-1.,0.,0.));+#329 = DIRECTION('',(0.,0.,1.));+#330 = ORIENTED_EDGE('',*,*,#331,.T.);+#331 = EDGE_CURVE('',#323,#332,#334,.T.);+#332 = VERTEX_POINT('',#333);+#333 = CARTESIAN_POINT('',(-0.3,0.21,0.48));+#334 = LINE('',#335,#336);+#335 = CARTESIAN_POINT('',(-0.3,-0.23,0.48));+#336 = VECTOR('',#337,1.);+#337 = DIRECTION('',(0.,1.,0.));+#338 = ORIENTED_EDGE('',*,*,#339,.F.);+#339 = EDGE_CURVE('',#340,#332,#342,.T.);+#340 = VERTEX_POINT('',#341);+#341 = CARTESIAN_POINT('',(-0.3,0.23,0.46));+#342 = CIRCLE('',#343,2.E-02);+#343 = AXIS2_PLACEMENT_3D('',#344,#345,#346);+#344 = CARTESIAN_POINT('',(-0.3,0.21,0.46));+#345 = DIRECTION('',(1.,0.,-0.));+#346 = DIRECTION('',(0.,0.,1.));+#347 = ORIENTED_EDGE('',*,*,#348,.F.);+#348 = EDGE_CURVE('',#349,#340,#351,.T.);+#349 = VERTEX_POINT('',#350);+#350 = CARTESIAN_POINT('',(-0.3,0.23,4.E-02));+#351 = LINE('',#352,#353);+#352 = CARTESIAN_POINT('',(-0.3,0.23,2.E-02));+#353 = VECTOR('',#354,1.);+#354 = DIRECTION('',(0.,0.,1.));+#355 = ORIENTED_EDGE('',*,*,#356,.T.);+#356 = EDGE_CURVE('',#349,#357,#359,.T.);+#357 = VERTEX_POINT('',#358);+#358 = CARTESIAN_POINT('',(-0.3,0.21,2.E-02));+#359 = CIRCLE('',#360,2.E-02);+#360 = AXIS2_PLACEMENT_3D('',#361,#362,#363);+#361 = CARTESIAN_POINT('',(-0.3,0.21,4.E-02));+#362 = DIRECTION('',(-1.,0.,0.));+#363 = DIRECTION('',(0.,0.,1.));+#364 = ORIENTED_EDGE('',*,*,#365,.F.);+#365 = EDGE_CURVE('',#306,#357,#366,.T.);+#366 = LINE('',#367,#368);+#367 = CARTESIAN_POINT('',(-0.3,-0.23,2.E-02));+#368 = VECTOR('',#369,1.);+#369 = DIRECTION('',(0.,1.,0.));+#370 = PLANE('',#371);+#371 = AXIS2_PLACEMENT_3D('',#372,#373,#374);+#372 = CARTESIAN_POINT('',(-0.3,-0.25,0.));+#373 = DIRECTION('',(1.,0.,0.));+#374 = DIRECTION('',(0.,0.,1.));+#375 = ADVANCED_FACE('',(#376),#402,.T.);+#376 = FACE_BOUND('',#377,.T.);+#377 = EDGE_LOOP('',(#378,#379,#387,#396));+#378 = ORIENTED_EDGE('',*,*,#303,.T.);+#379 = ORIENTED_EDGE('',*,*,#380,.T.);+#380 = EDGE_CURVE('',#306,#381,#383,.T.);+#381 = VERTEX_POINT('',#382);+#382 = CARTESIAN_POINT('',(0.3,-0.21,2.E-02));+#383 = LINE('',#384,#385);+#384 = CARTESIAN_POINT('',(-0.3,-0.21,2.E-02));+#385 = VECTOR('',#386,1.);+#386 = DIRECTION('',(1.,0.,0.));+#387 = ORIENTED_EDGE('',*,*,#388,.F.);+#388 = EDGE_CURVE('',#389,#381,#391,.T.);+#389 = VERTEX_POINT('',#390);+#390 = CARTESIAN_POINT('',(0.3,-0.23,4.E-02));+#391 = CIRCLE('',#392,2.E-02);+#392 = AXIS2_PLACEMENT_3D('',#393,#394,#395);+#393 = CARTESIAN_POINT('',(0.3,-0.21,4.E-02));+#394 = DIRECTION('',(1.,0.,-0.));+#395 = DIRECTION('',(0.,0.,1.));+#396 = ORIENTED_EDGE('',*,*,#397,.F.);+#397 = EDGE_CURVE('',#304,#389,#398,.T.);+#398 = LINE('',#399,#400);+#399 = CARTESIAN_POINT('',(-0.3,-0.23,4.E-02));+#400 = VECTOR('',#401,1.);+#401 = DIRECTION('',(1.,0.,0.));+#402 = CYLINDRICAL_SURFACE('',#403,2.E-02);+#403 = AXIS2_PLACEMENT_3D('',#404,#405,#406);+#404 = CARTESIAN_POINT('',(-0.3,-0.21,4.E-02));+#405 = DIRECTION('',(1.,0.,0.));+#406 = DIRECTION('',(0.,-1.,0.));+#407 = ADVANCED_FACE('',(#408),#426,.F.);+#408 = FACE_BOUND('',#409,.F.);+#409 = EDGE_LOOP('',(#410,#411,#412,#420));+#410 = ORIENTED_EDGE('',*,*,#365,.F.);+#411 = ORIENTED_EDGE('',*,*,#380,.T.);+#412 = ORIENTED_EDGE('',*,*,#413,.T.);+#413 = EDGE_CURVE('',#381,#414,#416,.T.);+#414 = VERTEX_POINT('',#415);+#415 = CARTESIAN_POINT('',(0.3,0.21,2.E-02));+#416 = LINE('',#417,#418);+#417 = CARTESIAN_POINT('',(0.3,-0.23,2.E-02));+#418 = VECTOR('',#419,1.);+#419 = DIRECTION('',(0.,1.,0.));+#420 = ORIENTED_EDGE('',*,*,#421,.F.);+#421 = EDGE_CURVE('',#357,#414,#422,.T.);+#422 = LINE('',#423,#424);+#423 = CARTESIAN_POINT('',(-0.3,0.21,2.E-02));+#424 = VECTOR('',#425,1.);+#425 = DIRECTION('',(1.,0.,0.));+#426 = PLANE('',#427);+#427 = AXIS2_PLACEMENT_3D('',#428,#429,#430);+#428 = CARTESIAN_POINT('',(-0.3,-0.23,2.E-02));+#429 = DIRECTION('',(0.,0.,1.));+#430 = DIRECTION('',(1.,0.,0.));+#431 = ADVANCED_FACE('',(#432),#451,.T.);+#432 = FACE_BOUND('',#433,.F.);+#433 = EDGE_LOOP('',(#434,#435,#436,#445));+#434 = ORIENTED_EDGE('',*,*,#356,.T.);+#435 = ORIENTED_EDGE('',*,*,#421,.T.);+#436 = ORIENTED_EDGE('',*,*,#437,.F.);+#437 = EDGE_CURVE('',#438,#414,#440,.T.);+#438 = VERTEX_POINT('',#439);+#439 = CARTESIAN_POINT('',(0.3,0.23,4.E-02));+#440 = CIRCLE('',#441,2.E-02);+#441 = AXIS2_PLACEMENT_3D('',#442,#443,#444);+#442 = CARTESIAN_POINT('',(0.3,0.21,4.E-02));+#443 = DIRECTION('',(-1.,0.,0.));+#444 = DIRECTION('',(0.,0.,1.));+#445 = ORIENTED_EDGE('',*,*,#446,.F.);+#446 = EDGE_CURVE('',#349,#438,#447,.T.);+#447 = LINE('',#448,#449);+#448 = CARTESIAN_POINT('',(-0.3,0.23,4.E-02));+#449 = VECTOR('',#450,1.);+#450 = DIRECTION('',(1.,0.,0.));+#451 = CYLINDRICAL_SURFACE('',#452,2.E-02);+#452 = AXIS2_PLACEMENT_3D('',#453,#454,#455);+#453 = CARTESIAN_POINT('',(-0.3,0.21,4.E-02));+#454 = DIRECTION('',(1.,0.,0.));+#455 = DIRECTION('',(0.,1.,0.));+#456 = ADVANCED_FACE('',(#457),#475,.T.);+#457 = FACE_BOUND('',#458,.T.);+#458 = EDGE_LOOP('',(#459,#467,#468,#469));+#459 = ORIENTED_EDGE('',*,*,#460,.F.);+#460 = EDGE_CURVE('',#438,#461,#463,.T.);+#461 = VERTEX_POINT('',#462);+#462 = CARTESIAN_POINT('',(0.3,0.23,0.46));+#463 = LINE('',#464,#465);+#464 = CARTESIAN_POINT('',(0.3,0.23,2.E-02));+#465 = VECTOR('',#466,1.);+#466 = DIRECTION('',(0.,0.,1.));+#467 = ORIENTED_EDGE('',*,*,#446,.F.);+#468 = ORIENTED_EDGE('',*,*,#348,.T.);+#469 = ORIENTED_EDGE('',*,*,#470,.T.);+#470 = EDGE_CURVE('',#340,#461,#471,.T.);+#471 = LINE('',#472,#473);+#472 = CARTESIAN_POINT('',(-0.3,0.23,0.46));+#473 = VECTOR('',#474,1.);+#474 = DIRECTION('',(1.,0.,0.));+#475 = PLANE('',#476);+#476 = AXIS2_PLACEMENT_3D('',#477,#478,#479);+#477 = CARTESIAN_POINT('',(-0.3,0.23,2.E-02));+#478 = DIRECTION('',(0.,1.,0.));+#479 = DIRECTION('',(0.,0.,1.));+#480 = ADVANCED_FACE('',(#481),#500,.T.);+#481 = FACE_BOUND('',#482,.T.);+#482 = EDGE_LOOP('',(#483,#484,#492,#499));+#483 = ORIENTED_EDGE('',*,*,#339,.T.);+#484 = ORIENTED_EDGE('',*,*,#485,.T.);+#485 = EDGE_CURVE('',#332,#486,#488,.T.);+#486 = VERTEX_POINT('',#487);+#487 = CARTESIAN_POINT('',(0.3,0.21,0.48));+#488 = LINE('',#489,#490);+#489 = CARTESIAN_POINT('',(-0.3,0.21,0.48));+#490 = VECTOR('',#491,1.);+#491 = DIRECTION('',(1.,0.,0.));+#492 = ORIENTED_EDGE('',*,*,#493,.F.);+#493 = EDGE_CURVE('',#461,#486,#494,.T.);+#494 = CIRCLE('',#495,2.E-02);+#495 = AXIS2_PLACEMENT_3D('',#496,#497,#498);+#496 = CARTESIAN_POINT('',(0.3,0.21,0.46));+#497 = DIRECTION('',(1.,0.,-0.));+#498 = DIRECTION('',(0.,0.,1.));+#499 = ORIENTED_EDGE('',*,*,#470,.F.);+#500 = CYLINDRICAL_SURFACE('',#501,2.E-02);+#501 = AXIS2_PLACEMENT_3D('',#502,#503,#504);+#502 = CARTESIAN_POINT('',(-0.3,0.21,0.46));+#503 = DIRECTION('',(1.,0.,0.));+#504 = DIRECTION('',(0.,1.,0.));+#505 = ADVANCED_FACE('',(#506),#524,.T.);+#506 = FACE_BOUND('',#507,.T.);+#507 = EDGE_LOOP('',(#508,#509,#517,#523));+#508 = ORIENTED_EDGE('',*,*,#331,.F.);+#509 = ORIENTED_EDGE('',*,*,#510,.T.);+#510 = EDGE_CURVE('',#323,#511,#513,.T.);+#511 = VERTEX_POINT('',#512);+#512 = CARTESIAN_POINT('',(0.3,-0.21,0.48));+#513 = LINE('',#514,#515);+#514 = CARTESIAN_POINT('',(-0.3,-0.21,0.48));+#515 = VECTOR('',#516,1.);+#516 = DIRECTION('',(1.,0.,0.));+#517 = ORIENTED_EDGE('',*,*,#518,.T.);+#518 = EDGE_CURVE('',#511,#486,#519,.T.);+#519 = LINE('',#520,#521);+#520 = CARTESIAN_POINT('',(0.3,-0.23,0.48));+#521 = VECTOR('',#522,1.);+#522 = DIRECTION('',(0.,1.,0.));+#523 = ORIENTED_EDGE('',*,*,#485,.F.);+#524 = PLANE('',#525);+#525 = AXIS2_PLACEMENT_3D('',#526,#527,#528);+#526 = CARTESIAN_POINT('',(-0.3,-0.23,0.48));+#527 = DIRECTION('',(0.,0.,1.));+#528 = DIRECTION('',(1.,0.,0.));+#529 = ADVANCED_FACE('',(#530),#549,.T.);+#530 = FACE_BOUND('',#531,.F.);+#531 = EDGE_LOOP('',(#532,#533,#534,#543));+#532 = ORIENTED_EDGE('',*,*,#322,.T.);+#533 = ORIENTED_EDGE('',*,*,#510,.T.);+#534 = ORIENTED_EDGE('',*,*,#535,.F.);+#535 = EDGE_CURVE('',#536,#511,#538,.T.);+#536 = VERTEX_POINT('',#537);+#537 = CARTESIAN_POINT('',(0.3,-0.23,0.46));+#538 = CIRCLE('',#539,2.E-02);+#539 = AXIS2_PLACEMENT_3D('',#540,#541,#542);+#540 = CARTESIAN_POINT('',(0.3,-0.21,0.46));+#541 = DIRECTION('',(-1.,0.,0.));+#542 = DIRECTION('',(0.,0.,1.));+#543 = ORIENTED_EDGE('',*,*,#544,.F.);+#544 = EDGE_CURVE('',#315,#536,#545,.T.);+#545 = LINE('',#546,#547);+#546 = CARTESIAN_POINT('',(-0.3,-0.23,0.46));+#547 = VECTOR('',#548,1.);+#548 = DIRECTION('',(1.,0.,0.));+#549 = CYLINDRICAL_SURFACE('',#550,2.E-02);+#550 = AXIS2_PLACEMENT_3D('',#551,#552,#553);+#551 = CARTESIAN_POINT('',(-0.3,-0.21,0.46));+#552 = DIRECTION('',(1.,0.,0.));+#553 = DIRECTION('',(0.,-1.,0.));+#554 = ADVANCED_FACE('',(#555),#566,.F.);+#555 = FACE_BOUND('',#556,.F.);+#556 = EDGE_LOOP('',(#557,#563,#564,#565));+#557 = ORIENTED_EDGE('',*,*,#558,.F.);+#558 = EDGE_CURVE('',#389,#536,#559,.T.);+#559 = LINE('',#560,#561);+#560 = CARTESIAN_POINT('',(0.3,-0.23,2.E-02));+#561 = VECTOR('',#562,1.);+#562 = DIRECTION('',(0.,0.,1.));+#563 = ORIENTED_EDGE('',*,*,#397,.F.);+#564 = ORIENTED_EDGE('',*,*,#314,.T.);+#565 = ORIENTED_EDGE('',*,*,#544,.T.);+#566 = PLANE('',#567);+#567 = AXIS2_PLACEMENT_3D('',#568,#569,#570);+#568 = CARTESIAN_POINT('',(-0.3,-0.23,2.E-02));+#569 = DIRECTION('',(0.,1.,0.));+#570 = DIRECTION('',(0.,0.,1.));+#571 = ADVANCED_FACE('',(#572,#642),#652,.F.);+#572 = FACE_BOUND('',#573,.F.);+#573 = EDGE_LOOP('',(#574,#584,#593,#601,#610,#618,#627,#635));+#574 = ORIENTED_EDGE('',*,*,#575,.F.);+#575 = EDGE_CURVE('',#576,#578,#580,.T.);+#576 = VERTEX_POINT('',#577);+#577 = CARTESIAN_POINT('',(0.3,-0.25,2.E-02));+#578 = VERTEX_POINT('',#579);+#579 = CARTESIAN_POINT('',(0.3,-0.25,0.48));+#580 = LINE('',#581,#582);+#581 = CARTESIAN_POINT('',(0.3,-0.25,0.));+#582 = VECTOR('',#583,1.);+#583 = DIRECTION('',(0.,0.,1.));+#584 = ORIENTED_EDGE('',*,*,#585,.T.);+#585 = EDGE_CURVE('',#576,#586,#588,.T.);+#586 = VERTEX_POINT('',#587);+#587 = CARTESIAN_POINT('',(0.3,-0.23,0.));+#588 = CIRCLE('',#589,2.E-02);+#589 = AXIS2_PLACEMENT_3D('',#590,#591,#592);+#590 = CARTESIAN_POINT('',(0.3,-0.23,2.E-02));+#591 = DIRECTION('',(1.,0.,-0.));+#592 = DIRECTION('',(0.,0.,1.));+#593 = ORIENTED_EDGE('',*,*,#594,.T.);+#594 = EDGE_CURVE('',#586,#595,#597,.T.);+#595 = VERTEX_POINT('',#596);+#596 = CARTESIAN_POINT('',(0.3,0.23,0.));+#597 = LINE('',#598,#599);+#598 = CARTESIAN_POINT('',(0.3,-0.25,0.));+#599 = VECTOR('',#600,1.);+#600 = DIRECTION('',(0.,1.,0.));+#601 = ORIENTED_EDGE('',*,*,#602,.F.);+#602 = EDGE_CURVE('',#603,#595,#605,.T.);+#603 = VERTEX_POINT('',#604);+#604 = CARTESIAN_POINT('',(0.3,0.25,2.E-02));+#605 = CIRCLE('',#606,2.E-02);+#606 = AXIS2_PLACEMENT_3D('',#607,#608,#609);+#607 = CARTESIAN_POINT('',(0.3,0.23,2.E-02));+#608 = DIRECTION('',(-1.,0.,0.));+#609 = DIRECTION('',(0.,0.,1.));+#610 = ORIENTED_EDGE('',*,*,#611,.T.);+#611 = EDGE_CURVE('',#603,#612,#614,.T.);+#612 = VERTEX_POINT('',#613);+#613 = CARTESIAN_POINT('',(0.3,0.25,0.48));+#614 = LINE('',#615,#616);+#615 = CARTESIAN_POINT('',(0.3,0.25,0.));+#616 = VECTOR('',#617,1.);+#617 = DIRECTION('',(0.,0.,1.));+#618 = ORIENTED_EDGE('',*,*,#619,.T.);+#619 = EDGE_CURVE('',#612,#620,#622,.T.);+#620 = VERTEX_POINT('',#621);+#621 = CARTESIAN_POINT('',(0.3,0.23,0.5));+#622 = CIRCLE('',#623,2.E-02);+#623 = AXIS2_PLACEMENT_3D('',#624,#625,#626);+#624 = CARTESIAN_POINT('',(0.3,0.23,0.48));+#625 = DIRECTION('',(1.,0.,-0.));+#626 = DIRECTION('',(0.,0.,1.));+#627 = ORIENTED_EDGE('',*,*,#628,.F.);+#628 = EDGE_CURVE('',#629,#620,#631,.T.);+#629 = VERTEX_POINT('',#630);+#630 = CARTESIAN_POINT('',(0.3,-0.23,0.5));+#631 = LINE('',#632,#633);+#632 = CARTESIAN_POINT('',(0.3,-0.25,0.5));+#633 = VECTOR('',#634,1.);+#634 = DIRECTION('',(0.,1.,0.));+#635 = ORIENTED_EDGE('',*,*,#636,.F.);+#636 = EDGE_CURVE('',#578,#629,#637,.T.);+#637 = CIRCLE('',#638,2.E-02);+#638 = AXIS2_PLACEMENT_3D('',#639,#640,#641);+#639 = CARTESIAN_POINT('',(0.3,-0.23,0.48));+#640 = DIRECTION('',(-1.,0.,0.));+#641 = DIRECTION('',(0.,0.,1.));+#642 = FACE_BOUND('',#643,.F.);+#643 = EDGE_LOOP('',(#644,#645,#646,#647,#648,#649,#650,#651));+#644 = ORIENTED_EDGE('',*,*,#388,.F.);+#645 = ORIENTED_EDGE('',*,*,#558,.T.);+#646 = ORIENTED_EDGE('',*,*,#535,.T.);+#647 = ORIENTED_EDGE('',*,*,#518,.T.);+#648 = ORIENTED_EDGE('',*,*,#493,.F.);+#649 = ORIENTED_EDGE('',*,*,#460,.F.);+#650 = ORIENTED_EDGE('',*,*,#437,.T.);+#651 = ORIENTED_EDGE('',*,*,#413,.F.);+#652 = PLANE('',#653);+#653 = AXIS2_PLACEMENT_3D('',#654,#655,#656);+#654 = CARTESIAN_POINT('',(0.3,-0.25,0.));+#655 = DIRECTION('',(1.,0.,0.));+#656 = DIRECTION('',(0.,0.,1.));+#657 = ADVANCED_FACE('',(#658),#683,.F.);+#658 = FACE_BOUND('',#659,.F.);+#659 = EDGE_LOOP('',(#660,#670,#676,#677));+#660 = ORIENTED_EDGE('',*,*,#661,.F.);+#661 = EDGE_CURVE('',#662,#664,#666,.T.);+#662 = VERTEX_POINT('',#663);+#663 = CARTESIAN_POINT('',(0.5,-0.25,2.E-02));+#664 = VERTEX_POINT('',#665);+#665 = CARTESIAN_POINT('',(0.5,-0.25,0.48));+#666 = LINE('',#667,#668);+#667 = CARTESIAN_POINT('',(0.5,-0.25,0.));+#668 = VECTOR('',#669,1.);+#669 = DIRECTION('',(0.,0.,1.));+#670 = ORIENTED_EDGE('',*,*,#671,.F.);+#671 = EDGE_CURVE('',#576,#662,#672,.T.);+#672 = LINE('',#673,#674);+#673 = CARTESIAN_POINT('',(0.3,-0.25,2.E-02));+#674 = VECTOR('',#675,1.);+#675 = DIRECTION('',(1.,0.,0.));+#676 = ORIENTED_EDGE('',*,*,#575,.T.);+#677 = ORIENTED_EDGE('',*,*,#678,.T.);+#678 = EDGE_CURVE('',#578,#664,#679,.T.);+#679 = LINE('',#680,#681);+#680 = CARTESIAN_POINT('',(0.3,-0.25,0.48));+#681 = VECTOR('',#682,1.);+#682 = DIRECTION('',(1.,0.,0.));+#683 = PLANE('',#684);+#684 = AXIS2_PLACEMENT_3D('',#685,#686,#687);+#685 = CARTESIAN_POINT('',(0.3,-0.25,0.));+#686 = DIRECTION('',(0.,1.,0.));+#687 = DIRECTION('',(0.,0.,1.));+#688 = ADVANCED_FACE('',(#689),#708,.T.);+#689 = FACE_BOUND('',#690,.T.);+#690 = EDGE_LOOP('',(#691,#692,#700,#707));+#691 = ORIENTED_EDGE('',*,*,#585,.T.);+#692 = ORIENTED_EDGE('',*,*,#693,.T.);+#693 = EDGE_CURVE('',#586,#694,#696,.T.);+#694 = VERTEX_POINT('',#695);+#695 = CARTESIAN_POINT('',(0.5,-0.23,0.));+#696 = LINE('',#697,#698);+#697 = CARTESIAN_POINT('',(0.3,-0.23,0.));+#698 = VECTOR('',#699,1.);+#699 = DIRECTION('',(1.,0.,0.));+#700 = ORIENTED_EDGE('',*,*,#701,.F.);+#701 = EDGE_CURVE('',#662,#694,#702,.T.);+#702 = CIRCLE('',#703,2.E-02);+#703 = AXIS2_PLACEMENT_3D('',#704,#705,#706);+#704 = CARTESIAN_POINT('',(0.5,-0.23,2.E-02));+#705 = DIRECTION('',(1.,0.,-0.));+#706 = DIRECTION('',(0.,0.,1.));+#707 = ORIENTED_EDGE('',*,*,#671,.F.);+#708 = CYLINDRICAL_SURFACE('',#709,2.E-02);+#709 = AXIS2_PLACEMENT_3D('',#710,#711,#712);+#710 = CARTESIAN_POINT('',(0.3,-0.23,2.E-02));+#711 = DIRECTION('',(1.,0.,0.));+#712 = DIRECTION('',(0.,-1.,0.));+#713 = ADVANCED_FACE('',(#714),#733,.T.);+#714 = FACE_BOUND('',#715,.F.);+#715 = EDGE_LOOP('',(#716,#717,#725,#732));+#716 = ORIENTED_EDGE('',*,*,#636,.T.);+#717 = ORIENTED_EDGE('',*,*,#718,.T.);+#718 = EDGE_CURVE('',#629,#719,#721,.T.);+#719 = VERTEX_POINT('',#720);+#720 = CARTESIAN_POINT('',(0.5,-0.23,0.5));+#721 = LINE('',#722,#723);+#722 = CARTESIAN_POINT('',(0.3,-0.23,0.5));+#723 = VECTOR('',#724,1.);+#724 = DIRECTION('',(1.,0.,0.));+#725 = ORIENTED_EDGE('',*,*,#726,.F.);+#726 = EDGE_CURVE('',#664,#719,#727,.T.);+#727 = CIRCLE('',#728,2.E-02);+#728 = AXIS2_PLACEMENT_3D('',#729,#730,#731);+#729 = CARTESIAN_POINT('',(0.5,-0.23,0.48));+#730 = DIRECTION('',(-1.,0.,0.));+#731 = DIRECTION('',(0.,0.,1.));+#732 = ORIENTED_EDGE('',*,*,#678,.F.);+#733 = CYLINDRICAL_SURFACE('',#734,2.E-02);+#734 = AXIS2_PLACEMENT_3D('',#735,#736,#737);+#735 = CARTESIAN_POINT('',(0.3,-0.23,0.48));+#736 = DIRECTION('',(1.,0.,0.));+#737 = DIRECTION('',(0.,-1.,0.));+#738 = ADVANCED_FACE('',(#739),#757,.F.);+#739 = FACE_BOUND('',#740,.F.);+#740 = EDGE_LOOP('',(#741,#742,#743,#751));+#741 = ORIENTED_EDGE('',*,*,#594,.F.);+#742 = ORIENTED_EDGE('',*,*,#693,.T.);+#743 = ORIENTED_EDGE('',*,*,#744,.T.);+#744 = EDGE_CURVE('',#694,#745,#747,.T.);+#745 = VERTEX_POINT('',#746);+#746 = CARTESIAN_POINT('',(0.5,0.23,0.));+#747 = LINE('',#748,#749);+#748 = CARTESIAN_POINT('',(0.5,-0.25,0.));+#749 = VECTOR('',#750,1.);+#750 = DIRECTION('',(0.,1.,0.));+#751 = ORIENTED_EDGE('',*,*,#752,.F.);+#752 = EDGE_CURVE('',#595,#745,#753,.T.);+#753 = LINE('',#754,#755);+#754 = CARTESIAN_POINT('',(0.3,0.23,0.));+#755 = VECTOR('',#756,1.);+#756 = DIRECTION('',(1.,0.,0.));+#757 = PLANE('',#758);+#758 = AXIS2_PLACEMENT_3D('',#759,#760,#761);+#759 = CARTESIAN_POINT('',(0.3,-0.25,0.));+#760 = DIRECTION('',(0.,0.,1.));+#761 = DIRECTION('',(1.,0.,0.));+#762 = ADVANCED_FACE('',(#763),#781,.T.);+#763 = FACE_BOUND('',#764,.T.);+#764 = EDGE_LOOP('',(#765,#766,#767,#775));+#765 = ORIENTED_EDGE('',*,*,#628,.F.);+#766 = ORIENTED_EDGE('',*,*,#718,.T.);+#767 = ORIENTED_EDGE('',*,*,#768,.T.);+#768 = EDGE_CURVE('',#719,#769,#771,.T.);+#769 = VERTEX_POINT('',#770);+#770 = CARTESIAN_POINT('',(0.5,0.23,0.5));+#771 = LINE('',#772,#773);+#772 = CARTESIAN_POINT('',(0.5,-0.25,0.5));+#773 = VECTOR('',#774,1.);+#774 = DIRECTION('',(0.,1.,0.));+#775 = ORIENTED_EDGE('',*,*,#776,.F.);+#776 = EDGE_CURVE('',#620,#769,#777,.T.);+#777 = LINE('',#778,#779);+#778 = CARTESIAN_POINT('',(0.3,0.23,0.5));+#779 = VECTOR('',#780,1.);+#780 = DIRECTION('',(1.,0.,0.));+#781 = PLANE('',#782);+#782 = AXIS2_PLACEMENT_3D('',#783,#784,#785);+#783 = CARTESIAN_POINT('',(0.3,-0.25,0.5));+#784 = DIRECTION('',(0.,0.,1.));+#785 = DIRECTION('',(1.,0.,0.));+#786 = ADVANCED_FACE('',(#787),#806,.T.);+#787 = FACE_BOUND('',#788,.F.);+#788 = EDGE_LOOP('',(#789,#790,#791,#800));+#789 = ORIENTED_EDGE('',*,*,#602,.T.);+#790 = ORIENTED_EDGE('',*,*,#752,.T.);+#791 = ORIENTED_EDGE('',*,*,#792,.F.);+#792 = EDGE_CURVE('',#793,#745,#795,.T.);+#793 = VERTEX_POINT('',#794);+#794 = CARTESIAN_POINT('',(0.5,0.25,2.E-02));+#795 = CIRCLE('',#796,2.E-02);+#796 = AXIS2_PLACEMENT_3D('',#797,#798,#799);+#797 = CARTESIAN_POINT('',(0.5,0.23,2.E-02));+#798 = DIRECTION('',(-1.,0.,0.));+#799 = DIRECTION('',(0.,0.,1.));+#800 = ORIENTED_EDGE('',*,*,#801,.F.);+#801 = EDGE_CURVE('',#603,#793,#802,.T.);+#802 = LINE('',#803,#804);+#803 = CARTESIAN_POINT('',(0.3,0.25,2.E-02));+#804 = VECTOR('',#805,1.);+#805 = DIRECTION('',(1.,0.,0.));+#806 = CYLINDRICAL_SURFACE('',#807,2.E-02);+#807 = AXIS2_PLACEMENT_3D('',#808,#809,#810);+#808 = CARTESIAN_POINT('',(0.3,0.23,2.E-02));+#809 = DIRECTION('',(1.,0.,0.));+#810 = DIRECTION('',(0.,1.,0.));+#811 = ADVANCED_FACE('',(#812),#831,.T.);+#812 = FACE_BOUND('',#813,.T.);+#813 = EDGE_LOOP('',(#814,#815,#816,#825));+#814 = ORIENTED_EDGE('',*,*,#619,.T.);+#815 = ORIENTED_EDGE('',*,*,#776,.T.);+#816 = ORIENTED_EDGE('',*,*,#817,.F.);+#817 = EDGE_CURVE('',#818,#769,#820,.T.);+#818 = VERTEX_POINT('',#819);+#819 = CARTESIAN_POINT('',(0.5,0.25,0.48));+#820 = CIRCLE('',#821,2.E-02);+#821 = AXIS2_PLACEMENT_3D('',#822,#823,#824);+#822 = CARTESIAN_POINT('',(0.5,0.23,0.48));+#823 = DIRECTION('',(1.,0.,-0.));+#824 = DIRECTION('',(0.,0.,1.));+#825 = ORIENTED_EDGE('',*,*,#826,.F.);+#826 = EDGE_CURVE('',#612,#818,#827,.T.);+#827 = LINE('',#828,#829);+#828 = CARTESIAN_POINT('',(0.3,0.25,0.48));+#829 = VECTOR('',#830,1.);+#830 = DIRECTION('',(1.,0.,0.));+#831 = CYLINDRICAL_SURFACE('',#832,2.E-02);+#832 = AXIS2_PLACEMENT_3D('',#833,#834,#835);+#833 = CARTESIAN_POINT('',(0.3,0.23,0.48));+#834 = DIRECTION('',(1.,0.,0.));+#835 = DIRECTION('',(0.,1.,0.));+#836 = ADVANCED_FACE('',(#837),#848,.T.);+#837 = FACE_BOUND('',#838,.T.);+#838 = EDGE_LOOP('',(#839,#845,#846,#847));+#839 = ORIENTED_EDGE('',*,*,#840,.F.);+#840 = EDGE_CURVE('',#793,#818,#841,.T.);+#841 = LINE('',#842,#843);+#842 = CARTESIAN_POINT('',(0.5,0.25,0.));+#843 = VECTOR('',#844,1.);+#844 = DIRECTION('',(0.,0.,1.));+#845 = ORIENTED_EDGE('',*,*,#801,.F.);+#846 = ORIENTED_EDGE('',*,*,#611,.T.);+#847 = ORIENTED_EDGE('',*,*,#826,.T.);+#848 = PLANE('',#849);+#849 = AXIS2_PLACEMENT_3D('',#850,#851,#852);+#850 = CARTESIAN_POINT('',(0.3,0.25,0.));+#851 = DIRECTION('',(0.,1.,0.));+#852 = DIRECTION('',(0.,0.,1.));+#853 = ADVANCED_FACE('',(#854),#864,.T.);+#854 = FACE_BOUND('',#855,.T.);+#855 = EDGE_LOOP('',(#856,#857,#858,#859,#860,#861,#862,#863));+#856 = ORIENTED_EDGE('',*,*,#661,.F.);+#857 = ORIENTED_EDGE('',*,*,#701,.T.);+#858 = ORIENTED_EDGE('',*,*,#744,.T.);+#859 = ORIENTED_EDGE('',*,*,#792,.F.);+#860 = ORIENTED_EDGE('',*,*,#840,.T.);+#861 = ORIENTED_EDGE('',*,*,#817,.T.);+#862 = ORIENTED_EDGE('',*,*,#768,.F.);+#863 = ORIENTED_EDGE('',*,*,#726,.F.);+#864 = PLANE('',#865);+#865 = AXIS2_PLACEMENT_3D('',#866,#867,#868);+#866 = CARTESIAN_POINT('',(0.5,-0.25,0.));+#867 = DIRECTION('',(1.,0.,0.));+#868 = DIRECTION('',(0.,0.,1.));+#869 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3)+GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#873)) GLOBAL_UNIT_ASSIGNED_CONTEXT+((#870,#871,#872)) REPRESENTATION_CONTEXT('Context #1',+'3D Context with UNIT and UNCERTAINTY') );+#870 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) );+#871 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) );+#872 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() );+#873 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#870,+'distance_accuracy_value','confusion accuracy');+#874 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#7));+#875 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION('',(#876,+#884,#891,#898,#905,#912,#919,#926,#933,#940,#947,#955,#962,#969,+#976,#983,#990,#997,#1004,#1011,#1018,#1025,#1032,#1039,#1046,#1053,+#1060,#1067),#869);+#876 = STYLED_ITEM('color',(#877),#17);+#877 = PRESENTATION_STYLE_ASSIGNMENT((#878));+#878 = SURFACE_STYLE_USAGE(.BOTH.,#879);+#879 = SURFACE_SIDE_STYLE('',(#880));+#880 = SURFACE_STYLE_FILL_AREA(#881);+#881 = FILL_AREA_STYLE('',(#882));+#882 = FILL_AREA_STYLE_COLOUR('',#883);+#883 = COLOUR_RGB('',0.824000000954,0.819999992847,0.78100001812);+#884 = STYLED_ITEM('color',(#885),#93);+#885 = PRESENTATION_STYLE_ASSIGNMENT((#886));+#886 = SURFACE_STYLE_USAGE(.BOTH.,#887);+#887 = SURFACE_SIDE_STYLE('',(#888));+#888 = SURFACE_STYLE_FILL_AREA(#889);+#889 = FILL_AREA_STYLE('',(#890));+#890 = FILL_AREA_STYLE_COLOUR('',#883);+#891 = STYLED_ITEM('color',(#892),#124);+#892 = PRESENTATION_STYLE_ASSIGNMENT((#893));+#893 = SURFACE_STYLE_USAGE(.BOTH.,#894);+#894 = SURFACE_SIDE_STYLE('',(#895));+#895 = SURFACE_STYLE_FILL_AREA(#896);+#896 = FILL_AREA_STYLE('',(#897));+#897 = FILL_AREA_STYLE_COLOUR('',#883);+#898 = STYLED_ITEM('color',(#899),#149);+#899 = PRESENTATION_STYLE_ASSIGNMENT((#900));+#900 = SURFACE_STYLE_USAGE(.BOTH.,#901);+#901 = SURFACE_SIDE_STYLE('',(#902));+#902 = SURFACE_STYLE_FILL_AREA(#903);+#903 = FILL_AREA_STYLE('',(#904));+#904 = FILL_AREA_STYLE_COLOUR('',#883);+#905 = STYLED_ITEM('color',(#906),#174);+#906 = PRESENTATION_STYLE_ASSIGNMENT((#907));+#907 = SURFACE_STYLE_USAGE(.BOTH.,#908);+#908 = SURFACE_SIDE_STYLE('',(#909));+#909 = SURFACE_STYLE_FILL_AREA(#910);+#910 = FILL_AREA_STYLE('',(#911));+#911 = FILL_AREA_STYLE_COLOUR('',#883);+#912 = STYLED_ITEM('color',(#913),#198);+#913 = PRESENTATION_STYLE_ASSIGNMENT((#914));+#914 = SURFACE_STYLE_USAGE(.BOTH.,#915);+#915 = SURFACE_SIDE_STYLE('',(#916));+#916 = SURFACE_STYLE_FILL_AREA(#917);+#917 = FILL_AREA_STYLE('',(#918));+#918 = FILL_AREA_STYLE_COLOUR('',#883);+#919 = STYLED_ITEM('color',(#920),#222);+#920 = PRESENTATION_STYLE_ASSIGNMENT((#921));+#921 = SURFACE_STYLE_USAGE(.BOTH.,#922);+#922 = SURFACE_SIDE_STYLE('',(#923));+#923 = SURFACE_STYLE_FILL_AREA(#924);+#924 = FILL_AREA_STYLE('',(#925));+#925 = FILL_AREA_STYLE_COLOUR('',#883);+#926 = STYLED_ITEM('color',(#927),#247);+#927 = PRESENTATION_STYLE_ASSIGNMENT((#928));+#928 = SURFACE_STYLE_USAGE(.BOTH.,#929);+#929 = SURFACE_SIDE_STYLE('',(#930));+#930 = SURFACE_STYLE_FILL_AREA(#931);+#931 = FILL_AREA_STYLE('',(#932));+#932 = FILL_AREA_STYLE_COLOUR('',#883);+#933 = STYLED_ITEM('color',(#934),#272);+#934 = PRESENTATION_STYLE_ASSIGNMENT((#935));+#935 = SURFACE_STYLE_USAGE(.BOTH.,#936);+#936 = SURFACE_SIDE_STYLE('',(#937));+#937 = SURFACE_STYLE_FILL_AREA(#938);+#938 = FILL_AREA_STYLE('',(#939));+#939 = FILL_AREA_STYLE_COLOUR('',#883);+#940 = STYLED_ITEM('color',(#941),#289);+#941 = PRESENTATION_STYLE_ASSIGNMENT((#942));+#942 = SURFACE_STYLE_USAGE(.BOTH.,#943);+#943 = SURFACE_SIDE_STYLE('',(#944));+#944 = SURFACE_STYLE_FILL_AREA(#945);+#945 = FILL_AREA_STYLE('',(#946));+#946 = FILL_AREA_STYLE_COLOUR('',#883);+#947 = STYLED_ITEM('color',(#948),#375);+#948 = PRESENTATION_STYLE_ASSIGNMENT((#949));+#949 = SURFACE_STYLE_USAGE(.BOTH.,#950);+#950 = SURFACE_SIDE_STYLE('',(#951));+#951 = SURFACE_STYLE_FILL_AREA(#952);+#952 = FILL_AREA_STYLE('',(#953));+#953 = FILL_AREA_STYLE_COLOUR('',#954);+#954 = COLOUR_RGB('',0.379000008106,0.270000010729,0.215000003576);+#955 = STYLED_ITEM('color',(#956),#407);+#956 = PRESENTATION_STYLE_ASSIGNMENT((#957));+#957 = SURFACE_STYLE_USAGE(.BOTH.,#958);+#958 = SURFACE_SIDE_STYLE('',(#959));+#959 = SURFACE_STYLE_FILL_AREA(#960);+#960 = FILL_AREA_STYLE('',(#961));+#961 = FILL_AREA_STYLE_COLOUR('',#954);+#962 = STYLED_ITEM('color',(#963),#431);+#963 = PRESENTATION_STYLE_ASSIGNMENT((#964));+#964 = SURFACE_STYLE_USAGE(.BOTH.,#965);+#965 = SURFACE_SIDE_STYLE('',(#966));+#966 = SURFACE_STYLE_FILL_AREA(#967);+#967 = FILL_AREA_STYLE('',(#968));+#968 = FILL_AREA_STYLE_COLOUR('',#954);+#969 = STYLED_ITEM('color',(#970),#456);+#970 = PRESENTATION_STYLE_ASSIGNMENT((#971));+#971 = SURFACE_STYLE_USAGE(.BOTH.,#972);+#972 = SURFACE_SIDE_STYLE('',(#973));+#973 = SURFACE_STYLE_FILL_AREA(#974);+#974 = FILL_AREA_STYLE('',(#975));+#975 = FILL_AREA_STYLE_COLOUR('',#954);+#976 = STYLED_ITEM('color',(#977),#480);+#977 = PRESENTATION_STYLE_ASSIGNMENT((#978));+#978 = SURFACE_STYLE_USAGE(.BOTH.,#979);+#979 = SURFACE_SIDE_STYLE('',(#980));+#980 = SURFACE_STYLE_FILL_AREA(#981);+#981 = FILL_AREA_STYLE('',(#982));+#982 = FILL_AREA_STYLE_COLOUR('',#954);+#983 = STYLED_ITEM('color',(#984),#505);+#984 = PRESENTATION_STYLE_ASSIGNMENT((#985));+#985 = SURFACE_STYLE_USAGE(.BOTH.,#986);+#986 = SURFACE_SIDE_STYLE('',(#987));+#987 = SURFACE_STYLE_FILL_AREA(#988);+#988 = FILL_AREA_STYLE('',(#989));+#989 = FILL_AREA_STYLE_COLOUR('',#954);+#990 = STYLED_ITEM('color',(#991),#529);+#991 = PRESENTATION_STYLE_ASSIGNMENT((#992));+#992 = SURFACE_STYLE_USAGE(.BOTH.,#993);+#993 = SURFACE_SIDE_STYLE('',(#994));+#994 = SURFACE_STYLE_FILL_AREA(#995);+#995 = FILL_AREA_STYLE('',(#996));+#996 = FILL_AREA_STYLE_COLOUR('',#954);+#997 = STYLED_ITEM('color',(#998),#554);+#998 = PRESENTATION_STYLE_ASSIGNMENT((#999));+#999 = SURFACE_STYLE_USAGE(.BOTH.,#1000);+#1000 = SURFACE_SIDE_STYLE('',(#1001));+#1001 = SURFACE_STYLE_FILL_AREA(#1002);+#1002 = FILL_AREA_STYLE('',(#1003));+#1003 = FILL_AREA_STYLE_COLOUR('',#954);+#1004 = STYLED_ITEM('color',(#1005),#571);+#1005 = PRESENTATION_STYLE_ASSIGNMENT((#1006));+#1006 = SURFACE_STYLE_USAGE(.BOTH.,#1007);+#1007 = SURFACE_SIDE_STYLE('',(#1008));+#1008 = SURFACE_STYLE_FILL_AREA(#1009);+#1009 = FILL_AREA_STYLE('',(#1010));+#1010 = FILL_AREA_STYLE_COLOUR('',#883);+#1011 = STYLED_ITEM('color',(#1012),#657);+#1012 = PRESENTATION_STYLE_ASSIGNMENT((#1013));+#1013 = SURFACE_STYLE_USAGE(.BOTH.,#1014);+#1014 = SURFACE_SIDE_STYLE('',(#1015));+#1015 = SURFACE_STYLE_FILL_AREA(#1016);+#1016 = FILL_AREA_STYLE('',(#1017));+#1017 = FILL_AREA_STYLE_COLOUR('',#883);+#1018 = STYLED_ITEM('color',(#1019),#688);+#1019 = PRESENTATION_STYLE_ASSIGNMENT((#1020));+#1020 = SURFACE_STYLE_USAGE(.BOTH.,#1021);+#1021 = SURFACE_SIDE_STYLE('',(#1022));+#1022 = SURFACE_STYLE_FILL_AREA(#1023);+#1023 = FILL_AREA_STYLE('',(#1024));+#1024 = FILL_AREA_STYLE_COLOUR('',#883);+#1025 = STYLED_ITEM('color',(#1026),#713);+#1026 = PRESENTATION_STYLE_ASSIGNMENT((#1027));+#1027 = SURFACE_STYLE_USAGE(.BOTH.,#1028);+#1028 = SURFACE_SIDE_STYLE('',(#1029));+#1029 = SURFACE_STYLE_FILL_AREA(#1030);+#1030 = FILL_AREA_STYLE('',(#1031));+#1031 = FILL_AREA_STYLE_COLOUR('',#883);+#1032 = STYLED_ITEM('color',(#1033),#738);+#1033 = PRESENTATION_STYLE_ASSIGNMENT((#1034));+#1034 = SURFACE_STYLE_USAGE(.BOTH.,#1035);+#1035 = SURFACE_SIDE_STYLE('',(#1036));+#1036 = SURFACE_STYLE_FILL_AREA(#1037);+#1037 = FILL_AREA_STYLE('',(#1038));+#1038 = FILL_AREA_STYLE_COLOUR('',#883);+#1039 = STYLED_ITEM('color',(#1040),#762);+#1040 = PRESENTATION_STYLE_ASSIGNMENT((#1041));+#1041 = SURFACE_STYLE_USAGE(.BOTH.,#1042);+#1042 = SURFACE_SIDE_STYLE('',(#1043));+#1043 = SURFACE_STYLE_FILL_AREA(#1044);+#1044 = FILL_AREA_STYLE('',(#1045));+#1045 = FILL_AREA_STYLE_COLOUR('',#883);+#1046 = STYLED_ITEM('color',(#1047),#786);+#1047 = PRESENTATION_STYLE_ASSIGNMENT((#1048));+#1048 = SURFACE_STYLE_USAGE(.BOTH.,#1049);+#1049 = SURFACE_SIDE_STYLE('',(#1050));+#1050 = SURFACE_STYLE_FILL_AREA(#1051);+#1051 = FILL_AREA_STYLE('',(#1052));+#1052 = FILL_AREA_STYLE_COLOUR('',#883);+#1053 = STYLED_ITEM('color',(#1054),#811);+#1054 = PRESENTATION_STYLE_ASSIGNMENT((#1055));+#1055 = SURFACE_STYLE_USAGE(.BOTH.,#1056);+#1056 = SURFACE_SIDE_STYLE('',(#1057));+#1057 = SURFACE_STYLE_FILL_AREA(#1058);+#1058 = FILL_AREA_STYLE('',(#1059));+#1059 = FILL_AREA_STYLE_COLOUR('',#883);+#1060 = STYLED_ITEM('color',(#1061),#836);+#1061 = PRESENTATION_STYLE_ASSIGNMENT((#1062));+#1062 = SURFACE_STYLE_USAGE(.BOTH.,#1063);+#1063 = SURFACE_SIDE_STYLE('',(#1064));+#1064 = SURFACE_STYLE_FILL_AREA(#1065);+#1065 = FILL_AREA_STYLE('',(#1066));+#1066 = FILL_AREA_STYLE_COLOUR('',#883);+#1067 = STYLED_ITEM('color',(#1068),#853);+#1068 = PRESENTATION_STYLE_ASSIGNMENT((#1069));+#1069 = SURFACE_STYLE_USAGE(.BOTH.,#1070);+#1070 = SURFACE_SIDE_STYLE('',(#1071));+#1071 = SURFACE_STYLE_FILL_AREA(#1072);+#1072 = FILL_AREA_STYLE('',(#1073));+#1073 = FILL_AREA_STYLE_COLOUR('',#883);+ENDSEC;+END-ISO-10303-21;
package.jsonadded+76@@ -0,0 +1,76 @@+{+ "slug": "gjm1555c1hr30wb01d",+ "title": "GJM1555C1HR30WB01D - Murata",+ "type": "hardware",+ "kind": "component",+ "version": "0.1.0",+ "description": "MLCC 0.3 pF +/-0.05 pF, 50 V, C0G (high Q, GJM series), 0402 (1005 metric)",+ "tags": [+ "hardware",+ "component"+ ],+ "dependencies": {},+ "license": "MIT; third-party CAD retains its upstream license",+ "hero": {+ "type": "image",+ "path": "docs/hero.png",+ "chrome": false+ },+ "component": {+ "mpn": "GJM1555C1HR30WB01D",+ "manufacturer": "Murata",+ "package": "C_0402_1005Metric",+ "manufacturer_links": {+ "datasheet": "https://www.murata.com/en-us/products/productdetail?partno=GJM1555C1HR30WB01%23",+ "datasheet_pdf": "https://search.murata.co.jp/Ceramy/image/img/A01X/G101/ENG/GJM1555C1HR30WB01-01A.pdf"+ },+ "pins": [+ {+ "number": "1",+ "name": "~"+ },+ {+ "number": "2",+ "name": "~"+ }+ ],+ "pin_count": 2,+ "parts": {+ "symbol": "component.kicad_sym",+ "footprint": "component.kicad_mod",+ "step": "package-reference.step",+ "model_3d": "package-reference.glb",+ "datasheet": "docs/gjm1555c1hr30wb01d-datasheet.pdf"+ },+ "provenance": {+ "omitted": []+ },+ "distributor_links": {+ "mouser": {+ "part": "81-GJM1555C1HR30WB1D",+ "url": "https://www.mouser.com/ProductDetail/Murata-Electronics/GJM1555C1HR30WB01D?qs=YLLXL5qGyDtvy%252BEvPojIWg%3D%3D",+ "stock": 69425,+ "lead_time": "70 days",+ "checked": "2026-10-20"+ },+ "digikey": {+ "part": "490-11248-2-ND",+ "url": "https://www.digikey.com/en/products/detail/murata-electronics/GJM1555C1HR30WB01D/2593245",+ "stock": 139842,+ "checked": "2026-10-20"+ },+ "lcsc": {+ "part": "C76909",+ "url": "https://www.lcsc.com/product-detail/C76909.html",+ "stock": 176529,+ "jlcpcb_class": "extended",+ "checked": "2026-10-20"+ }+ },+ "marking": {+ "text": null,+ "statement": "The Murata reference sheet specifies no marking for this part: none of its 29 pages has a marking section or mentions a part marking, and the p.2 dimension sketch shows a plain body",+ "source": "GJM1555C1HR30WB01-01A, all 29 pages searched; p.2"+ }+ }+}
provenance.jsonadded+61@@ -0,0 +1,61 @@+{+ "manufacturer_reference": "https://www.murata.com/en-us/products/productdetail?partno=GJM1555C1HR30WB01%23",+ "datasheet_link_check": "HTTP 200 (2026-10-20)",+ "symbol_source": "Original, written from the pin list. MIT.",+ "footprint_source": "KiCad standard library Capacitor_SMD:C_0402_1005Metric (CC-BY-SA 4.0 with the KiCad library exception)",+ "package_source": "KiCad packages3D Capacitor_SMD.3dshapes/C_0402_1005Metric.step (CC-BY-SA 4.0 with exception)",+ "geometry_status": "Generic KiCad package geometry; not manufacturer-issued exact-ordering-code CAD. Verify against the manufacturer land pattern before use.",+ "stock_check": "Mouser 81-GJM1555C1HR30WB1D: 69,425 in stock, lead time 70 days; DigiKey 490-11248-2-ND: 139,842 in stock; LCSC/JLCPCB C76909: 176,529 in stock, JLCPCB extended part (2026-10-20, adom-parts-search search GJM1555C1HR30WB01D)",+ "glb": {+ "tool": "step2glb convert",+ "exit": 0+ },+ "files": {+ "README.md": "c49ce32561cf7b637819a650c4a07af70af4e8e7c5b0fcad7b47552a673cb2ba",+ "component.kicad_mod": "0403382fc4583ed510b461b1fa4a36dfaec6f4c0d9b1a67e6b0027837a54e1b5",+ "component.kicad_sym": "206d1547be6be3f0cb10a4b1e81b89173d4bfab4d6676aa04280724b869bc48c",+ "docs/gjm1555c1hr30wb01d-datasheet.pdf": "4f6504686f18119362856097b46520d1159e9e603eeefe3bfeba0bb45fc67719",+ "docs/verify/gjm1555c1hr30wb01d-overlay.png": "137a2c1cde6c230731bbde02888aa2d8b60a5dbd550f256fec9940466c766499",+ "docs/verify/gjm1555c1hr30wb01d-check.json": "9b3ef31157fc4430c83683d17c9f0b211f13749e8e80c79f0407ca9791cf57f0",+ "lod/high.glb": "cfc12dcf071cac74d8f0d48f18c83e9f5e3fe9e354e08b007ddaff1c8667aefe",+ "lod/low.glb": "5e8247c15089582368690f8669cb8e0c38de23701263144123932984269d3ab4",+ "lod/medium.glb": "8337dbe09269205e8498af23307843d61807e4efb6ad0a4540bf23aacb10066c",+ "lod/super-low.glb": "c14ddac634f713bdfde9686afc1dc943f76d64a7d9ff21199a51d9d769055e70",+ "lod/manifest.json": "441413c02e95ce757598b3a70b9883d043f92781ad6a64908016e211658d4d58",+ "models.json": "08975437592e843995419db7b371937efd0537b5ef5ee83d15c47e0823889a34",+ "package-reference.glb": "100935c5c0d6f20a6c9bdfb6386f874dc8a4457bf0e4f3ace69f1ab090100773",+ "package-reference.step": "03e44c4b2b727b8d4b6b1fd598cbd12dd5e614f1dfeefa96a92a07e3a3b312a2",+ "package.json": "215f57dfc08e989a368bd34eb8daaf0b4263c4cbd8319fe8e92964d79fd5e6e0",+ "page.json": "c9f125b3f2d2e01c826808076887683de0b511acc4049408154cc5736eae8ec8",+ "verification.json": "6f1bef856263e32e7a9aceb47e8e69b258fa918d7bb58488b66d087e7f96f7d6",+ "docs/models/package-reference-step.png": "b741926c58cc5d0929ee89e95981c90e12ff9aadc55ff27ea22ba45cea40e88e",+ "docs/hero.png": "ec4522032e274b9e839f1d432f1df10e455babb47a31a448114a5c1fe04081b5"+ },+ "page_created": "2026-10-20 by Claude (AI) for John Lauer, modelled on john/gjm1555c1hr20wb01d and john/gjm1555c1h1r0wb01d (same 0402 package, footprint and package STEP, byte-identical; symbol fields changed to this MPN; overlay and LOD GLBs regenerated for this MPN)",+ "hero_note": "docs/hero.png is the step2glb thumbnail of package-reference.step, byte-identical to the one on john/gjm1555c1h1r0wb01d because the package model is the same file",+ "marking": {+ "real_marking": null,+ "statement": "The Murata reference sheet specifies no marking for this part: none of its 29 pages has a marking section or mentions a part marking, and the p.2 dimension sketch shows a plain body",+ "source": "GJM1555C1HR30WB01-01A, all 29 pages searched; p.2"+ },+ "datasheet": {+ "file": "docs/gjm1555c1hr30wb01d-datasheet.pdf",+ "sha256": "4f6504686f18119362856097b46520d1159e9e603eeefe3bfeba0bb45fc67719",+ "url": "https://search.murata.co.jp/Ceramy/image/img/A01X/G101/ENG/GJM1555C1HR30WB01-01A.pdf",+ "title": "Murata reference sheet GJM1555C1HR30WB01-01A, specifications as of Apr. 15, 2026",+ "retrieved": "2026-10-20"+ },+ "datasheet_check": {+ "overlay": "docs/verify/gjm1555c1hr30wb01d-overlay.png",+ "numbers": "docs/verify/gjm1555c1hr30wb01d-check.json",+ "tools": "provenance/tools/ (ortho.py, overlay_chip.py, spec json)",+ "result": "PASS",+ "crop": "page 2 of the PDF rendered with pdftoppm -r 200, crop [111,462,1030,895] (the Type & Dimension block)"+ },+ "lod": {+ "manifest": "lod/manifest.json",+ "generator": "provenance/tools/lod.py",+ "source_sha256": "03e44c4b2b727b8d4b6b1fd598cbd12dd5e614f1dfeefa96a92a07e3a3b312a2"+ },+ "files_note": "page.json, package.json and README.md hashes are as written before this provenance file; provenance.json itself is not listed."+}
provenance/tools/gjm1555c1hr30wb01d-overlay-spec.jsonadded+39@@ -0,0 +1,39 @@+{+ "label": "GJM1555C1HR30WB01D",+ "mpn": "GJM1555C1HR30WB01D",+ "source": "Murata GJM1555C1HR30WB01-01A reference sheet p.2 'Type & Dimension' (1005M/0402)",+ "L": [+ 1.0,+ 0.05+ ],+ "W": [+ 0.5,+ 0.05+ ],+ "T": [+ 0.5,+ 0.05+ ],+ "band_top": [+ 0.15,+ 0.35+ ],+ "band_bot": [+ 0.15,+ 0.35+ ],+ "band_top_name": "e (terminal band), top",+ "band_bot_name": "e (terminal band), bottom",+ "crops": [+ [+ "p-02.png",+ [+ 111,+ 462,+ 1030,+ 895+ ]+ ]+ ],+ "marking": "none specified anywhere in the 29-page sheet (no marking section)"+}
provenance/tools/lod.pyadded+170@@ -0,0 +1,170 @@+"""Board-use LOD GLBs (high, medium, low, super-low) for a small two-terminal chip.++Input: the page's board-use STEP (Z-up, mm, seated on z=0, centred).+Output (in <outdir>/lod/): high.glb medium.glb low.glb super-low.glb, a 400x300+PNG preview of each rendered from that GLB's own triangles, manifest.json+(schema adom/component-lod@1).++Every level: Z-up, metres, the same origin and pose as the STEP (no recentring,+no rotation), primitives batched by material (one per material), the STEP's own+colours. No footprint, pad outline, label or silkscreen helpers exist in the+source, so nothing is removed. high/medium/low are OCCT tessellations of the+exact B-rep at decreasing deflection; super-low replaces each material group by+its bounding box per side of the part (terminals, body, overcoat), which keeps+the silhouette, the terminal bands and the seating plane.++usage: lod.py part.step MPN outdir [source_label]+"""+import sys, os, json, struct, hashlib+import numpy as np+from PIL import Image, ImageDraw+sys.path.insert(0, os.path.dirname(os.path.abspath(__file__)))+import ortho+from OCP.BRepMesh import BRepMesh_IncrementalMesh+from OCP.BRepTools import BRepTools++step, mpn, outdir = sys.argv[1], sys.argv[2], sys.argv[3]+src_label = sys.argv[4] if len(sys.argv) > 4 else os.path.basename(step)+lod_dir = os.path.join(outdir, "lod"); os.makedirs(lod_dir, exist_ok=True)++LEVELS = [("high", 0.0005, 0.1), ("medium", 0.004, 0.35), ("low", 0.02, 0.9)]++def tris_at(lin, ang):+ # ortho.load_tris meshes with fixed params; clean and remesh by patching BRepMesh call+ orig = ortho.BRepMesh_IncrementalMesh+ def mesh(shp, _l, rel, _a, par):+ BRepTools.Clean_s(shp)+ return orig(shp, lin, False, ang, True)+ ortho.BRepMesh_IncrementalMesh = mesh+ try:+ return ortho.load_tris(step)+ finally:+ ortho.BRepMesh_IncrementalMesh = orig++def boxes_from(tris):+ groups = {}+ for p, c in tris:+ groups.setdefault(c, []).append(p)+ allp = np.concatenate([p for p, _ in tris]); xmax = allp[:, 0].max()+ endc = {}+ for p, c in tris:+ if np.allclose(p[:, 0], xmax, atol=1e-4): endc[c] = endc.get(c, 0) + 1+ tcol = max(endc, key=endc.get)+ boxes = []+ for c, ps in groups.items():+ T = np.stack(ps)+ crosses = ((T[:, :, 0].min(1) < -1e-6) & (T[:, :, 0].max(1) > 1e-6)).any()+ P = T.reshape(-1, 3)+ parts = [P] if crosses else [P[P[:, 0] < 0], P[P[:, 0] > 0]]+ for Q in parts:+ if len(Q):+ boxes.append([Q.min(0), Q.max(0), c])+ tin = min(min(abs(lo[0]), abs(hi[0])) for lo, hi, c in boxes if c == tcol)+ out = []+ for lo, hi, c in boxes:+ if c != tcol:+ lo = lo.copy(); hi = hi.copy(); lo[0] = max(lo[0], -tin); hi[0] = min(hi[0], tin)+ v = np.array([[x, y, z] for x in (lo[0], hi[0]) for y in (lo[1], hi[1]) for z in (lo[2], hi[2])])+ for a_, b_, cc, d in [(0, 1, 3, 2), (4, 6, 7, 5), (0, 4, 5, 1), (2, 3, 7, 6), (0, 2, 6, 4), (1, 5, 7, 3)]:+ out.append((v[[a_, b_, cc]], c)); out.append((v[[a_, cc, d]], c))+ return out++def write_glb(tris, path, name):+ mats = []; groups = {}+ for p, c in tris:+ if c not in groups:+ groups[c] = []; mats.append(c)+ groups[c].append(p)+ bin_ = b""; views = []; accs = []; prims = []+ def add_view(data, target):+ nonlocal bin_+ off = len(bin_); bin_ += data+ while len(bin_) % 4: bin_ += b"\0"+ views.append({"buffer": 0, "byteOffset": off, "byteLength": len(data), "target": target})+ return len(views) - 1+ decoded = 0; ntri = 0+ for mi, c in enumerate(mats):+ P = np.concatenate(groups[c]).reshape(-1, 3, 3)+ n = np.cross(P[:, 1] - P[:, 0], P[:, 2] - P[:, 0]); n /= np.linalg.norm(n, axis=1, keepdims=True) + 1e-30+ pos = (P.reshape(-1, 3) / 1000.0).astype(np.float32) # mm -> metres+ nor = np.repeat(n, 3, axis=0).astype(np.float32)+ # weld identical (position, normal) vertices+ key = np.concatenate([np.round(pos, 9), np.round(nor, 5)], 1)+ uniq, inv = np.unique(key, axis=0, return_inverse=True)+ upos = uniq[:, :3].astype(np.float32); unor = uniq[:, 3:].astype(np.float32)+ idx = inv.astype(np.uint16 if len(uniq) < 65535 else np.uint32).ravel()+ vp = add_view(upos.tobytes(), 34962); vn = add_view(unor.tobytes(), 34962); vi = add_view(idx.tobytes(), 34963)+ accs.append({"bufferView": vp, "componentType": 5126, "count": len(upos), "type": "VEC3",+ "min": upos.min(0).tolist(), "max": upos.max(0).tolist()})+ accs.append({"bufferView": vn, "componentType": 5126, "count": len(unor), "type": "VEC3"})+ accs.append({"bufferView": vi, "componentType": 5123 if idx.dtype == np.uint16 else 5125, "count": len(idx), "type": "SCALAR"})+ prims.append({"attributes": {"POSITION": len(accs) - 3, "NORMAL": len(accs) - 2}, "indices": len(accs) - 1, "material": mi})+ decoded += upos.nbytes + unor.nbytes + idx.nbytes; ntri += len(idx) // 3+ gl = {"asset": {"version": "2.0", "generator": "capencoder passives lod.py (OCCT tessellation)"},+ "scene": 0, "scenes": [{"nodes": [0]}],+ "nodes": [{"name": name, "mesh": 0, "extras": {"adomUpAxis": "Z", "units": "metres"}}],+ "meshes": [{"name": name, "primitives": prims}],+ "materials": [{"name": f"mat_{i}", "pbrMetallicRoughness": {"baseColorFactor": [*c, 1.0], "metallicFactor": 0.0, "roughnessFactor": 0.6}} for i, c in enumerate(mats)],+ "accessors": accs, "bufferViews": views, "buffers": [{"byteLength": len(bin_)}]}+ js = json.dumps(gl, separators=(",", ":")).encode()+ while len(js) % 4: js += b" "+ glb = struct.pack("<III", 0x46546C67, 2, 12 + 8 + len(js) + 8 + len(bin_)) + struct.pack("<II", len(js), 0x4E4F534A) + js + struct.pack("<II", len(bin_), 0x004E4942) + bin_+ open(path, "wb").write(glb)+ return {"decodedBufferBytes": decoded, "triangles": ntri, "primitives": len(prims)}++def read_glb_tris(path):+ b = open(path, "rb").read(); n = struct.unpack("<I", b[12:16])[0]+ j = json.loads(b[20:20 + n]); binc = b[20 + n + 8:]+ def acc(i, dt, w):+ a = j["accessors"][i]; v = j["bufferViews"][a["bufferView"]]+ return np.frombuffer(binc, dt, a["count"] * w, v["byteOffset"]).reshape(-1, w) if w > 1 else np.frombuffer(binc, dt, a["count"], v["byteOffset"])+ out = []+ for p in j["meshes"][0]["primitives"]:+ pos = acc(p["attributes"]["POSITION"], np.float32, 3) * 1000.0+ ia = j["accessors"][p["indices"]]+ idx = acc(p["indices"], np.uint16 if ia["componentType"] == 5123 else np.uint32, 1)+ col = tuple(j["materials"][p["material"]]["pbrMetallicRoughness"]["baseColorFactor"][:3])+ for t in idx.reshape(-1, 3):+ out.append((pos[t].astype(float), col))+ return out++ortho.VIEWS["iso"] = (tuple(np.array([0.7071, -0.7071, 0])), tuple(np.array([-0.4082, -0.4082, 0.8165])), tuple(np.array([0.5774, 0.5774, 0.5774])))+def preview(path, png):+ tris = read_glb_tris(path)+ allp = np.concatenate([t[0] for t in tris]); ext = np.abs(allp).max()+ img = ortho.render(tris, "iso", 300 / (3.3 * ext), size=(400, 300))+ bg = Image.new("RGBA", img.size, (48, 57, 68, 255)); bg.alpha_composite(img); bg.convert("RGB").save(png)++sha = lambda f: hashlib.sha256(open(f, "rb").read()).hexdigest()+levels = []+src_tris = None+for name, lin, ang in LEVELS + [("super-low", None, None)]:+ if name == "super-low":+ tris = boxes_from(src_tris)+ else:+ tris = tris_at(lin, ang)+ if name == "high":+ src_tris = tris+ path = os.path.join(lod_dir, f"{name}.glb")+ st = write_glb(tris, path, mpn)+ back = read_glb_tris(path); P = np.concatenate([t[0] for t in back])+ png = os.path.join(lod_dir, f"{name}.png"); preview(path, png)+ rec = {"level": name, "path": f"lod/{name}.glb", "sha256": sha(path), "sizeBytes": os.path.getsize(path), **st,+ "bounds": {"min": (P.min(0) / 1000).round(7).tolist(), "max": (P.max(0) / 1000).round(7).tolist()},+ "approximation": ({"method": "OCCT BRepMesh_IncrementalMesh", "linearDeflectionMm": lin, "angularDeflectionRad": ang}+ if lin else {"method": "per-material bounding boxes split at the part centre (terminals, body, overcoat)"}),+ "detailVisibility": {"virtualMpn": False, "note": "no marking: the datasheet specifies none"},+ "review": "Candidate: rendered preview checked by AI (silhouette, terminals, seat z=0); not human-reviewed",+ "preview": {"path": f"lod/{name}.png", "sha256": sha(png), "sizeBytes": os.path.getsize(png), "width": 400, "height": 300,+ "view": "iso", "sourceLevelSha256": sha(path)}}+ levels.append(rec)+ print(name, st, rec["bounds"])+manifest = {"schema": "adom/component-lod@1", "mpn": mpn, "upAxis": "Z", "units": "metres",+ "status": "candidate (AI-checked, not human-reviewed)",+ "purpose": "clean board-use component models: no footprint pads, outlines, labels or silkscreen; no marking (none per datasheet)",+ "source": {"path": src_label, "sha256": sha(step)},+ "sourceToDisplay": "uniform scale 0.001 (mm to m); no rotation, no translation; origin = footprint origin, seat z = 0",+ "generator": "lod.py (capencoder passives, OCCT via cadquery-ocp)",+ "removedHelpers": [], "levels": levels,+ "hints": ["All four levels share pose and units; super-low is boxes per material group, chosen for board overviews."]}+json.dump(manifest, open(os.path.join(lod_dir, "manifest.json"), "w"), indent=1)
provenance/tools/ortho.pyadded+123@@ -0,0 +1,123 @@+"""Orthographic renderer for small component STEPs (face colours kept).++render(step, view, ppmm) -> PIL RGBA image, model origin at the image centre.+views: top (look down -Z, +X right, +Y up), bottom (look up +Z, +X right, +Y down,+i.e. the part flipped about X), front (look +Y, +X right, +Z up),+end (look -X, +Y right... from +X end: -Y right, +Z up).+"""+import sys+import numpy as np+from PIL import Image, ImageDraw+from OCP.STEPCAFControl import STEPCAFControl_Reader+from OCP.TDocStd import TDocStd_Document+from OCP.TCollection import TCollection_ExtendedString+from OCP.XCAFDoc import XCAFDoc_DocumentTool, XCAFDoc_ColorType+from OCP.TDF import TDF_LabelSequence+from OCP.TopExp import TopExp_Explorer+from OCP.TopAbs import TopAbs_FACE, TopAbs_REVERSED+from OCP.TopoDS import TopoDS+from OCP.Quantity import Quantity_Color+from OCP.BRepMesh import BRepMesh_IncrementalMesh+from OCP.BRep import BRep_Tool+from OCP.TopLoc import TopLoc_Location+++def load_tris(path):+ doc = TDocStd_Document(TCollection_ExtendedString("x"))+ r = STEPCAFControl_Reader(); r.SetColorMode(True); r.SetNameMode(True)+ r.ReadFile(path); r.Transfer(doc)+ st = XCAFDoc_DocumentTool.ShapeTool_s(doc.Main())+ ct = XCAFDoc_DocumentTool.ColorTool_s(doc.Main())+ labs = TDF_LabelSequence(); st.GetFreeShapes(labs)+ out = []+ leaves = []+ def walk(lab, loc, pcol):+ c = Quantity_Color(); col = pcol+ for t in (XCAFDoc_ColorType.XCAFDoc_ColorSurf, XCAFDoc_ColorType.XCAFDoc_ColorGen):+ if ct.GetColor_s(lab, t, c):+ col = (c.Red(), c.Green(), c.Blue()); break+ if st.IsReference_s(lab):+ ref = type(lab)(); st.GetReferredShape_s(lab, ref)+ walk(ref, loc.Multiplied(st.GetLocation_s(lab)), col); return+ kids = TDF_LabelSequence(); st.GetComponents_s(lab, kids)+ if kids.Length() > 0:+ for i in range(1, kids.Length() + 1): walk(kids.Value(i), loc, col)+ return+ leaves.append((st.GetShape_s(lab).Moved(loc), col))+ for li in range(1, labs.Length() + 1):+ walk(labs.Value(li), TopLoc_Location(), None)+ for shp, pcol in leaves:+ BRepMesh_IncrementalMesh(shp, 0.002, False, 0.2, True)+ e = TopExp_Explorer(shp, TopAbs_FACE)+ while e.More():+ f = TopoDS.Face_s(e.Current())+ c = Quantity_Color(); col = None+ for t in (XCAFDoc_ColorType.XCAFDoc_ColorSurf, XCAFDoc_ColorType.XCAFDoc_ColorGen):+ if ct.GetColor(f, t, c):+ col = (c.Red(), c.Green(), c.Blue()); break+ if col is None:+ col = pcol or (0.6, 0.6, 0.6)+ loc = TopLoc_Location()+ tri = BRep_Tool.Triangulation_s(f, loc)+ if tri is not None:+ trsf = loc.Transformation()+ pts = np.array([(lambda p: (p.X(), p.Y(), p.Z()))(tri.Node(i).Transformed(trsf)) for i in range(1, tri.NbNodes() + 1)])+ rev = f.Orientation() == TopAbs_REVERSED+ for i in range(1, tri.NbTriangles() + 1):+ a, b, cc = tri.Triangle(i).Get()+ if rev:+ b, cc = cc, b+ out.append((pts[[a - 1, b - 1, cc - 1]], col))+ e.Next()+ return out+++VIEWS = {+ # (right axis vector, up axis vector, toward-viewer vector)+ "top": ((1, 0, 0), (0, 1, 0), (0, 0, 1)),+ "bottom": ((1, 0, 0), (0, -1, 0), (0, 0, -1)),+ "front": ((1, 0, 0), (0, 0, 1), (0, -1, 0)),+ "end": ((0, -1, 0), (0, 0, 1), (1, 0, 0)),+}+++def render(tris, view, ppmm, size=None, shade=True, ss=3):+ R, U, V = [np.array(v, float) for v in VIEWS[view]]+ allp = np.concatenate([t[0] for t in tris])+ ext = max(np.abs(allp @ R).max(), np.abs(allp @ U).max())+ if size is None:+ size = (int(2 * ext * ppmm + 40), int(2 * ext * ppmm + 40))+ W, H = size[0] * ss, size[1] * ss+ img = Image.new("RGBA", (W, H), (0, 0, 0, 0))+ d = ImageDraw.Draw(img)+ items = []+ light = np.array([0.3, 0.4, 0.85]); light /= np.linalg.norm(light)+ for p, col in tris:+ n = np.cross(p[1] - p[0], p[2] - p[0])+ nn = np.linalg.norm(n)+ if nn == 0:+ continue+ n /= nn+ if n @ V <= 1e-6:+ continue # back face+ depth = (p @ V).mean()+ lv = 0.55 + 0.45 * abs(n @ (R * light[0] + U * light[1] + V * light[2])) if shade else 1.0+ rgb = tuple(int(255 * min(1, c * lv)) for c in col)+ xy = [(W / 2 + (q @ R) * ppmm * ss, H / 2 - (q @ U) * ppmm * ss) for q in p]+ items.append((depth, xy, rgb))+ items.sort(key=lambda x: x[0])+ for _, xy, rgb in items:+ d.polygon(xy, fill=rgb + (255,), outline=rgb + (255,))+ return img.resize(size, Image.LANCZOS)+++if __name__ == "__main__":+ tris = load_tris(sys.argv[1])+ out = sys.argv[2]+ ppmm = float(sys.argv[3]) if len(sys.argv) > 3 else 300+ imgs = [render(tris, v, ppmm) for v in ("top", "bottom", "front", "end")]+ w = sum(i.width for i in imgs); h = max(i.height for i in imgs)+ sheet = Image.new("RGBA", (w, h), (255, 255, 255, 255)); x = 0+ for i in imgs:+ sheet.alpha_composite(i, (x, 0)); x += i.width+ sheet.save(out)
provenance/tools/overlay_chip.pyadded+146@@ -0,0 +1,146 @@+"""Prove a two-terminal chip model (MLCC / chip resistor) against its datasheet table.++The maker prints a dimension table with an unscaled sketch, so the overlay is made+against a true-scale drawing generated from the printed table (300 px/mm):+nominal outline solid black, tolerance limits dashed blue, the allowed range of+the terminal inner edge shaded amber. The model is rendered at the same scale+(50 % fill, red outline) on top. The numeric check measures the STEP itself.++usage: overlay_chip.py spec.json model.step out.png+spec: {"label","mpn","source","L":[nom,tol],"W":[nom,tol],"T":[nom,tol],+ "band_top":[min,max],"band_bot":[min,max],"crops":[[png,[x0,y0,x1,y1]],...],+ "marking": "..."}+"""+import sys, json+import numpy as np+from PIL import Image, ImageDraw, ImageFont, ImageFilter+sys.path.insert(0, __file__.rsplit("/", 1)[0])+from ortho import load_tris, render+from OCP.STEPControl import STEPControl_Reader+from OCP.TopExp import TopExp_Explorer+from OCP.TopAbs import TopAbs_FACE+from OCP.TopoDS import TopoDS+from OCP.Bnd import Bnd_Box+from OCP.BRepBndLib import BRepBndLib+from OCP.BRepAdaptor import BRepAdaptor_Surface+from OCP.GeomAbs import GeomAbs_Plane++PP = 300.0+spec = json.load(open(sys.argv[1])); step = sys.argv[2]; out = sys.argv[3]+F = "/usr/share/fonts/truetype/dejavu/DejaVuSans.ttf"+font = ImageFont.truetype(F, 22); fsm = ImageFont.truetype(F, 18); fbig = ImageFont.truetype(F, 26)++# ---------- numeric measurement of the STEP ----------+tris = load_tris(step)+allp = np.concatenate([t[0] for t in tris])+x0, y0, z0 = allp.min(0); x1, y1, z1 = allp.max(0)+Lm, Wm, Tm = x1 - x0, y1 - y0, z1 - z0+# terminal colour = colour of triangles lying on the +X end face+endcols = {}+for p, c in tris:+ if np.allclose(p[:, 0], x1, atol=1e-4):+ endcols[c] = endcols.get(c, 0) + 1+tcol = max(endcols, key=endcols.get)+def band(zlev):+ xs = [p[:, 0] for p, c in tris if c == tcol and np.allclose(p[:, 2], zlev, atol=1e-4)]+ if not xs:+ return None+ xs = np.concatenate(xs)+ pos = xs[xs > 0]; neg = xs[xs < 0]+ return round(min(x1 - pos.min(), -x0 + neg.max() if len(neg) else 9), 3)+bt, bb = band(z1), band(z0)++def rng(v):+ return (v[0] - v[1], v[0] + v[1]) if len(v) == 2 and v[1] < v[0] else tuple(v)+checks = []+def chk(name, val, lo, hi):+ ok = val is not None and lo - 1e-6 <= val <= hi + 1e-6+ checks.append((name, val, lo, hi, ok))+chk("L", round(Lm, 3), *rng(spec["L"]))+chk("W", round(Wm, 3), *rng(spec["W"]))+chk("T/H", round(Tm, 3), *rng(spec["T"]))+chk(spec.get("band_top_name", "terminal band, top"), bt, *spec["band_top"])+chk(spec.get("band_bot_name", "terminal band, bottom"), bb, *spec["band_bot"])+centred = bool(abs(x0 + x1) < 1e-3 and abs(y0 + y1) < 1e-3 and abs(z0) < 1e-3)+longx = bool(Lm > Wm)++# ---------- true-scale drawing + model per view ----------+def view_panel(view, a_len, a_tol, b_len, b_tol, bands, title):+ im = render(tris, view, PP, size=(560, 420))+ W_, H_ = im.size; cx = W_ / 2+ panel = Image.new("RGBA", (W_, H_), (255, 255, 255, 255))+ d = ImageDraw.Draw(panel)+ seat = view in ("front", "end")+ def rect(a, b, **kw):+ # a along horizontal, b along vertical; for side views the box sits on the seat line+ if seat:+ return [cx - a * PP / 2, H_ / 2 - b * PP, cx + a * PP / 2, H_ / 2]+ return [cx - a * PP / 2, H_ / 2 - b * PP / 2, cx + a * PP / 2, H_ / 2 + b * PP / 2]+ # allowed inner-edge range for the terminals (relative to nominal length)+ for (lo, hi, where) in bands:+ for s in (-1, 1):+ xa = cx + s * (a_len / 2 - hi) * PP; xb = cx + s * (a_len / 2 - lo) * PP+ if where == "full":+ ya, yb = rect(a_len, b_len)[1], rect(a_len, b_len)[3]+ elif where == "top":+ r_ = rect(a_len, b_len); ya, yb = r_[1] - 12, r_[1] + 12+ else:+ r_ = rect(a_len, b_len); ya, yb = r_[3] - 12, r_[3] + 12+ d.rectangle([min(xa, xb), ya, max(xa, xb), yb], fill=(255, 196, 80, 255))+ def dashed(box, col):+ xa, ya, xb, yb = box+ for (p, q) in (((xa, ya), (xb, ya)), ((xb, ya), (xb, yb)), ((xb, yb), (xa, yb)), ((xa, yb), (xa, ya))):+ n = int(max(abs(q[0] - p[0]), abs(q[1] - p[1])) / 8) or 1+ for i in range(0, n, 2):+ t0, t1 = i / n, min(1, (i + 1) / n)+ d.line([(p[0] + (q[0] - p[0]) * t0, p[1] + (q[1] - p[1]) * t0),+ (p[0] + (q[0] - p[0]) * t1, p[1] + (q[1] - p[1]) * t1)], fill=col, width=2)+ dashed(rect(a_len - a_tol, b_len - b_tol), (30, 90, 220))+ dashed(rect(a_len + a_tol, b_len + b_tol), (30, 90, 220))+ d.rectangle(rect(a_len, b_len), outline=(0, 0, 0), width=2)+ arr = np.asarray(im).copy(); alpha = arr[:, :, 3].copy(); arr[:, :, 3] = (alpha * 0.5).astype(np.uint8)+ panel.alpha_composite(Image.fromarray(arr))+ m = Image.fromarray(((alpha > 128) * 255).astype(np.uint8))+ edge = (np.asarray(m, int) - np.asarray(m.filter(ImageFilter.MinFilter(3)), int)) > 0+ red = np.zeros((H_, W_, 4), np.uint8); red[edge] = (220, 30, 30, 255)+ panel.alpha_composite(Image.fromarray(red))+ d = ImageDraw.Draw(panel); d.text((10, 8), title, fill=(0, 0, 0), font=fsm)+ return panel++L, W, T = spec["L"], spec["W"], spec["T"]+bt_r, bb_r = spec["band_top"], spec["band_bot"]+panels = [+ view_panel("top", L[0], L[1], W[0], W[1], [(bt_r[0], bt_r[1], "full")], "TOP (looking down, X right)"),+ view_panel("bottom", L[0], L[1], W[0], W[1], [(bb_r[0], bb_r[1], "full")], "BOTTOM (flipped about X)"),+ view_panel("front", L[0], L[1], T[0], T[1], [(bt_r[0], bt_r[1], "top"), (bb_r[0], bb_r[1], "bot")], "SIDE (looking +Y)"),+ view_panel("end", W[0], W[1], T[0], T[1], [], "END (looking -X)"),+]+pw, ph = panels[0].size+sheet_w = pw * 4 + 50+crops = [Image.open(p).convert("RGB").crop(tuple(b)) for p, b in spec["crops"]]+crop_h = 0; scaled = []+for c in crops:+ s = min(1.0, (sheet_w - 40) / c.width, 420 / c.height)+ c2 = c.resize((int(c.width * s), int(c.height * s)), Image.LANCZOS); scaled.append(c2); crop_h += c2.height + 20+text_h = 120 + 30 * len(checks) + 90+sheet = Image.new("RGB", (sheet_w, 80 + ph + text_h + crop_h), (255, 255, 255))+d = ImageDraw.Draw(sheet)+d.text((20, 15), f"{spec['label']}: model vs datasheet table, true scale {int(PP)} px/mm", fill=(0, 0, 0), font=fbig)+d.text((20, 50), f"Model: {step.rsplit('/', 1)[-1]} Datasheet: {spec['source']}", fill=(70, 70, 70), font=fsm)+for i, p in enumerate(panels):+ sheet.paste(p.convert("RGB"), (10 + i * (pw + 10), 80))+y = 90 + ph+d.text((20, y), "Legend: black = printed nominal, blue dashed = printed tolerance limits, amber = allowed position of the terminal inner edge, red outline + 50% fill = the 3D model.", fill=(0, 0, 0), font=fsm); y += 34+d.text((20, y), "Measured on the STEP value datasheet range result", fill=(0, 0, 0), font=font); y += 32+for name, val, lo, hi, ok in checks:+ d.text((20, y), f"{name:<34}{'-' if val is None else f'{val:.3f}':>8} {lo:.2f} to {hi:.2f} {'PASS' if ok else 'FAIL'}",+ fill=(0, 120, 40) if ok else (200, 0, 0), font=font); y += 30+d.text((20, y + 4), f"Frame: Z-up, seated z=0, centred: {'yes' if centred else 'NO'}; long axis on X: {'yes' if longx else 'NO'}. Marking: {spec['marking']}", fill=(0, 0, 0), font=fsm)+y += 50+for c in scaled:+ sheet.paste(c, (20, y)); d.rectangle([20, y, 20 + c.width, y + c.height], outline=(150, 150, 150)); y += c.height + 20+sheet.save(out)+res = {"step": step, "bbox_mm": [round(float(v), 4) for v in (x0, x1, y0, y1, z0, z1)],+ "checks": [{"dim": n, "model_mm": v, "datasheet_min": lo, "datasheet_max": hi, "pass": bool(ok)} for n, v, lo, hi, ok in checks],+ "z_up_seated_centred": bool(centred), "long_axis_x": bool(longx), "all_pass": bool(all(c[4] for c in checks) and centred and longx)}+print(json.dumps(res))
verification.jsonadded+147@@ -0,0 +1,147 @@+{+ "schema": "adom/verification@1",+ "part": "GJM1555C1HR30WB01D",+ "variants": [],+ "entries": [+ {+ "date": "2026-10-20",+ "by": {+ "name": "Claude (AI agent) for John Lauer",+ "handle": "john"+ },+ "status": "verified",+ "title": "3D model matches the datasheet package dimensions",+ "scope": [+ "3d-model"+ ],+ "variants": [+ "*"+ ],+ "checks": [+ {+ "text": "L: model 1.000 mm, datasheet 0.95 to 1.05 mm",+ "result": "pass"+ },+ {+ "text": "W: model 0.500 mm, datasheet 0.45 to 0.55 mm",+ "result": "pass"+ },+ {+ "text": "T/H: model 0.500 mm, datasheet 0.45 to 0.55 mm",+ "result": "pass"+ },+ {+ "text": "e (terminal band), top: model 0.200 mm, datasheet 0.15 to 0.35 mm",+ "result": "pass"+ },+ {+ "text": "e (terminal band), bottom: model 0.200 mm, datasheet 0.15 to 0.35 mm",+ "result": "pass"+ },+ {+ "text": "datasheet for this exact part number (GJM1555C1HR30WB01-01A, 0.3 pF) gives the same 1005M(0402) table as its 0.2 pF and 1.0 pF siblings: L 1.0 +/-0.05, W 0.5 +/-0.05, T 0.5 +/-0.05, e 0.15 to 0.35, g 0.3 min",+ "result": "pass"+ },+ {+ "text": "Z-up, seated on z = 0, centred on the footprint origin, long axis on X",+ "result": "pass"+ },+ {+ "text": "the maker's sketch is not to scale; the overlay is against a true-scale drawing of the printed table",+ "result": "note"+ }+ ],+ "evidence": [+ {+ "label": "overlay (top, bottom, side, end at 300 px/mm)",+ "href": "docs/verify/gjm1555c1hr30wb01d-overlay.png"+ },+ {+ "label": "numbers",+ "href": "docs/verify/gjm1555c1hr30wb01d-check.json"+ },+ {+ "label": "datasheet (Murata reference sheet GJM1555C1HR30WB01-01A, specifications as of Apr. 15, 2026)",+ "href": "docs/gjm1555c1hr30wb01d-datasheet.pdf"+ }+ ],+ "files": {+ "package-reference.step": "03e44c4b2b727b8d4b6b1fd598cbd12dd5e614f1dfeefa96a92a07e3a3b312a2",+ "package-reference.glb": "100935c5c0d6f20a6c9bdfb6386f874dc8a4457bf0e4f3ace69f1ab090100773",+ "docs/gjm1555c1hr30wb01d-datasheet.pdf": "4f6504686f18119362856097b46520d1159e9e603eeefe3bfeba0bb45fc67719"+ }+ },+ {+ "date": "2026-10-20",+ "by": {+ "name": "Claude (AI agent) for John Lauer",+ "handle": "john"+ },+ "status": "verified",+ "title": "Marking: the model shows the real part, which is unmarked",+ "scope": [+ "3d-model",+ "marking"+ ],+ "variants": [+ "*"+ ],+ "checks": [+ {+ "text": "The Murata reference sheet specifies no marking for this part: none of its 29 pages has a marking section or mentions a part marking, and the p.2 dimension sketch shows a plain body (GJM1555C1HR30WB01-01A, all 29 pages searched; p.2)",+ "result": "pass"+ }+ ],+ "evidence": [+ {+ "label": "datasheet",+ "href": "docs/gjm1555c1hr30wb01d-datasheet.pdf"+ }+ ],+ "files": {+ "package-reference.step": "03e44c4b2b727b8d4b6b1fd598cbd12dd5e614f1dfeefa96a92a07e3a3b312a2"+ }+ },+ {+ "date": "2026-10-20",+ "by": {+ "name": "Claude (AI agent) for John Lauer",+ "handle": "john"+ },+ "status": "verified",+ "title": "Board-use LOD GLBs are clean and share the STEP pose",+ "scope": [+ "lod"+ ],+ "variants": [+ "*"+ ],+ "checks": [+ {+ "text": "four levels written, read back, bounds equal the STEP (Z-up, metres, seat z = 0)",+ "result": "pass"+ },+ {+ "text": "no footprint, pad outline, label or silkscreen helpers; terminals present at every level",+ "result": "pass"+ },+ {+ "text": "previews looked at by the AI agent, not yet by a person",+ "result": "note"+ }+ ],+ "evidence": [+ {+ "label": "manifest",+ "href": "lod/manifest.json"+ }+ ],+ "files": {+ "lod/high.glb": "cfc12dcf071cac74d8f0d48f18c83e9f5e3fe9e354e08b007ddaff1c8667aefe",+ "lod/medium.glb": "8337dbe09269205e8498af23307843d61807e4efb6ad0a4540bf23aacb10066c",+ "lod/low.glb": "5e8247c15089582368690f8669cb8e0c38de23701263144123932984269d3ab4",+ "lod/super-low.glb": "c14ddac634f713bdfde9686afc1dc943f76d64a7d9ff21199a51d9d769055e70"+ }+ }+ ]+}